×
新网 > 虚机资讯 > 正文

虚拟机堆内存结构

  • 作者:
  • 来源:
  • 2018-05-21 13:21:12

虚拟机中堆空间可以分成三个大区年轻代、老年代、永久代(方法区)所有新生成的对象首先都是放在年轻代的。年轻代的目标就是:尽可能快速的收集掉那些生命周期短的对象。

 虚拟机中堆空间可以分成三个大区年轻代、老年代、永久代(方法区)所有新生成的对象首先都是放在年轻代的。年轻代的目标就是:尽可能快速的收集掉那些生命周期短的对象。

20160201161415_8290.jpg

年轻代分为三个区域:EDEN、Survivor0(简称S0,也通常称为from区)、Survivor1(简称S1,也通常称为to区)。其中S0与S1的大小是相同等大的三者所占年轻代的比例大致为8:1:1,S0与S1就像"孪生兄弟"一样我们大家不必去纠结此比例的大小只需谨记三点就好:
S0与S1相同大小
EDEN区远比S(S0+S1)区大EDEN占了整个年轻代的大致70%至80%左右
年轻代分为2个区(EDEN区、Survivor区)、3个板块(EDEN、S0、S1)
在年轻代中经历了N次垃圾回收后仍然存活的对象就会被放到年老代中。因此可以认为年老代中存放的都是一些生命周期较长的对象。那一个对象到底要经过多少次垃圾回收才能从年轻代进入老年代呢?
我们通常认为在新生代中的对象每经历过一次GC如果它没有被回收,它的年龄就会被加1虚拟机提供了一个参数来可控制新生代对象的最大年龄:MaxTenuringThreshold。默认情况下这个参数是15 也就是说在新生代的对象最多经历15次GC就可以进入老年代。
假如存在一种这样的情况一个新生代对象占用新生代空间特别大。在GC时若不回收新生代空间将不足。但是若要回收程序还没有使用完此时就不会依据这个对象的 MaxTenuringThreshold 参数。而是直接晋升到老年代。所以说MaxTenuringThreshold 参数是晋升老年代的充分非必要条件。
最后永久代也通常被叫做方法区是一块所有线程共享的内存区域:用于保存系统的类信息比如类的字段、方法、常量池。

  • 相关专题

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:operations@xinnet.com进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

免费咨询获取折扣

Loading