美文网首页
JVM&GC(2)对象提升规则

JVM&GC(2)对象提升规则

作者: 一觉睡到丶小时候 | 来源:发表于2020-07-18 10:29 被阅读0次

    前言

    虚拟机给每个对象定义了一个对象年龄(Age)计数器。如果对象在Eden区出生并经过第一次Minor GC后仍然存活,并且能被Survivor容纳的话,将被移动到Survivor空间中,并将对象年龄设为1.对象在Survivor中每熬过一次Minor GC,年龄就将增加1岁,当他的年龄增加到一定程度(默认为15岁)时,就会被晋升到老年代中。

    分配原则

    • 对象优先分配在Eden区,如果Eden区,如果Eden区没有足够的空间,虚拟机执行一次Minor GC。
    • 大对象直接进入老年代,这样做的目的是为了避免在Eden区和两个Survivor区之间发生大量的内存拷贝。
    • 长期存活的对象进入老年代。虚拟机给每个对象定义了一个对象年龄(Age)计数器。如果对象在Eden区出生并经过第一次Minor GC后仍然存活,并且能被Survivor容纳的话,将被移动到Survivor空间中,并将对象年龄设为1.对象在Survivor中每熬过一次Minor GC,年龄就将增加1岁,当他的年龄增加到一定程度(默认为15岁)时,就会被晋升到老年代中。
    • 动态判断对象的年龄。如果Survivor区中相同年龄的所有对象大小总和大于Survivor空间的一半,年龄大于或等于该年龄的对象可直接进入老年代。
    • 空间分配担保。每次进行Minor GC时,JVM会计算Survivor区移至老年去的对象的平均大小,如果这个值大于老年去的剩余值大小则进行一次Full GC,如果小于则进入检查HandlePromotionFailure逻辑。判断这个逻辑,如果是True则只进行Minor GC,如果是False则进行Full GC。


      图片.png

    相关文章

      网友评论

          本文标题:JVM&GC(2)对象提升规则

          本文链接:https://www.haomeiwen.com/subject/dblxkktx.html