1、JVM内存模型

2、方法区
方法区 是 JVM 的规范,所有虚拟机 必须遵守的。常见的JVM 虚拟机 Hotspot 、 JRockit(Oracle)、J9(IBM)。
3、永久代
永久代(PermGen)是 JDK7及之前, HotSpot 虚拟机 对 方法区 的一个落地实现。
4、元空间
JDK8 中, Hotspot 已经没有永久代(PermGen),取而代之是元空间(Metaspace)。
元空间并不在虚拟机中,而是使用本地内存。
默认情况下,元空间的大小仅受 本地内存 限制,但可以通过以下参数来指定元空间的大小:
-XX:MetaspaceSize ,初始空间大小:达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize,最大空间:默认是没有限制的。
5、为什么Hotspot要用元空间替代永久代
1)字符串存在永久代中,容易出现性能问题和内存溢出。
2)类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。
3)永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。
4)Oracle 可能会将HotSpot 与 JRockit 合二为一。
原文链接:https://blog.csdn.net/xiaojin21cen/article/details/104267301
最后
以上就是辛勤哈密瓜最近收集整理的关于JVM方法区、永久代与元空间的区别与联系的全部内容,更多相关JVM方法区、永久代与元空间内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复