首页 > 其他 > 详细

JVM的内存模型

时间:2020-03-03 14:27:55      阅读:88      评论:0      收藏:0      [点我收藏+]

1.JDK1.7的堆内存模型

  技术分享图片

 

  Yong年轻代

    Yong区划分为三个部分,Eden区和两个大小严格相同的survivor区,其中,Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候,GC就会将存活的对象移到空闲的survivor区间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于survivor的对象将被移动到Tenured区间;

  Tenured老年代

    Tenured区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Yong复制移动一定的次数以后,对象就会被转移到Tenured区,一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间;

  Perm永久区

    Perm主要保存class,method,field对象,这部分的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及到热部署的应用服务器的时候,有时候会遇到java.lang.OutOfMeemoryError:PermGen space的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉,这样就造成了大量的class对象保存在Perm中,这种情况下,一般重新启动应用服务器可以解决问题;

2.JDK1.8的堆内存模型

  技术分享图片

 

  JDK1.8的内存模型是由2部分组成,年轻代+年老代

    年轻代:Eden+2*survivor

    年老代:OldGen

  JDK1.8中变化最大的Perm区,用Metaspace(元数据空间)进行替换了;

  注意:Metaspace所占用的内存空间不是在虚拟机内部,而是在本地内存空间中,这也是1.7永久代最大的区别所在;

    技术分享图片

 

3.为什么要废弃1.7中的永久代

  

 

JVM的内存模型

原文:https://www.cnblogs.com/wnwn/p/12401832.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!