6-10视频元空间问题
来源:6-8 Java内存模型之线程独占部分-1

qq_灬Mamba磊_0
2019-02-20
视频开头说Jdk8以后开始把类的元数据放在本地堆内存中,这一块区域叫做MetaSpace,这是有问题的吧 元空间没有使用堆内存,而是与堆不相连的本地内存区域,之前从线程分析java内存模型那张图上,元空间和堆空间也是分开的
写回答
1回答
-
翔仔
2019-02-20
没太明白同学的意思,视频里这样说的,"jdk8以后,确实把类的元数据放到本地堆内存*(native heap)中,这一块区域就叫做metaSpace. 前面咱们提及过方法区,实际上元空间便是方法区的实现,而方法区只是一种JVM的规范,在java7之后,方法区里的里的字符串常量池已被移动到了java堆中,并且在java8中使用元空间替代了永久代,这一替代并非仅仅是名字上的替代,两者最大的区别是元空间使用本地内存,而永久代使用的是jvm的内存,使用本地内存有什么好处呢,最直接的表现就是老版本的java中见到java.lang.OutOfMemoryError: PermGen space这个异常的将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上metaspace就可以有多大,这解决了空间不足的问题,不过也不可能放任其无限壮大,JVM默认在运行时候会根据需要动态地设置其大小"。堆内存并不是指对象存储的堆。
022019-02-21
相似问题