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
|