新生代和老年代垃圾回收的细节 (2)

躲过多少次Minor GC而没有被回收掉,我们就认为这个对象的年龄有几岁了,默认情况下,当一个对象10多岁的时候,就认为他是一个老人了。需要被转移到老年代去。

想想也正常,新生代的竞争压力这么大,老年对象还是早点去老年代比较好不与年轻人竞争资源。

特别大的超大对象直接不经过新生代就进入老年代

年轻代的的竞争本来就很大,你还要占用那么多资源,不行不行,你还是去老年代吧。

动态年龄判断机制

这一部分需要结合垃圾回收器的算法来讲,就是复制算法。我们在后面的章节会讲到,这里大概介绍一下。

我们一般会将新生代分为三个区域,一个Eden,两个Survivor。比例8:1:1.

生成的对象默认在eden区域。当发生一次Minor GC后,会将存活的对象复制到其中一个Survivor区域。当下一次GC后又会将存活的对象复制到另一块Survivor。这么做的好处是减少内存碎片。

当我们发生一次GC后,将存活对象放到其中一块survivor区域。发现其中的1岁,2岁,3岁的对象年龄加起来内存超过survivor区域的一半,就会把4岁以及4岁以上的对想转移到老年代。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfgdy.html