JVM 元空间
元空间
原空间(Meta Space)
用于存放类信息、常量、静态变量、JIT即时编译器百年以后的机器代码等数据等。例如:java.lang.Object类的元信息、Integer.MAX_VALUE等常量。
JDK1.6
HotSpot JVM 使用Method Area方法区存储,也叫永久代(Permanent Generation)。
- 方法区和“永久代(Permanent Generation)”的区别:方法区是JVM的规范,而永久代(Permanent Generation)是JVM规范的一种实现,并且只有HotSpot JVM才有永久代“Permanent Generation”,而对于其他类型的虚拟机。如JRockit(Oracle)、J9(IBM)并没有。
- 方法区是一片连续的堆空间,当JVM加载的类的信息容量超过了最大可分配空间,虚拟机会抛出OutOfMemoryError : PermGenspace 的Error 。
- 永久代的GC是和老年代( old generation )捆绑在一起的,无论谁满了,都会触发永久代和老年代的垃圾收集。
- 可以通过-XX:PermSize=N设置方法区(永久代)初始空间,-XX:MaxPermSize=N设置方法区(永久代)最大空间,超过这个值将会抛出错误:java.lang.outOfMemoryError: PermGen
JDK1.7
将字符串常量池、静态变量转移到了堆区。
JDK1.8:正式移除永久代,采用Meta Space元空间代替
元空间的本质和永久代类似,都是对JVM规范中方法区的一种具体实现。不过元空间与永久代之

本文介绍了Java JVM中元空间的相关知识。元空间用于存放类信息等数据。JDK 1.6使用永久代存储,方法区是规范,永久代是实现;JDK 1.7将字符串常量池等移到堆区;JDK 1.8正式移除永久代,采用元空间代替,其使用本地内存。还通过示例展示不同JDK版本运行结果差异。
822

被折叠的 条评论
为什么被折叠?



