虚拟机堆内存结构
虚拟机中堆空间可以分成三个大区年轻代、老年代、永久代(方法区)所有新生成的对象首先都是放在年轻代的。年轻代的目标就是:尽可能快速的收集掉那些生命周期短的对象。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网页空间、营销软件、网站建设、顺平网站维护、网站推广。年轻代分为三个区域: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 参数是晋升老年代的充分非必要条件。
最后永久代也通常被叫做方法区是一块所有线程共享的内存区域:用于保存系统的类信息比如类的字段、方法、常量池。
网站名称:虚拟机堆内存结构
标题来源:http://scyanting.com/article/cgejce.html