华企号 软件设计 java对象晋升的四种情况

java对象晋升的四种情况

java晋升(进入老年代)的四种方法

  1.   担保机制
  2.   大对象直接进入老年代
  3.   长期存活的对象
  4.   动态年龄判断

1. 担保机制

  什么是担保机制?

就是你的新生代内存不足的时候,通过担保分配的方式让大对象直接分配到老年代;

谁来担保?当然是老年代,为什么叫“担保”?就像贷款需要担保一样,年轻代存放不下的时候(自己信用不够的时候),需要让老年代来存放(需要相应的担保人来进行担保),老年代就是这个担保人,担保人需要保证老年代一定能存放的下;

2.大对象直接进入老年代

通过参数-XX:PretenureSizeThreshold来定义大对象,单位byte,默认为0;

这个参数的默认值为0,也就是说,所有的对象创建出来之后默认都是分配到新生代的,当我们指定了大小之后,只要创建出来的对象超过设定值,那么这个对像就会直接晋升到老年代;

需要注意的是:PretenureSizeThreshold参数只对Serial和ParNew两款收集器有效;

3.长期存活的对象

长期存活的对象进入老年代。在堆中分配内存的对象,其内存布局的Header中包含了 GC 分代年龄标记信息。如果对象在 eden 区出生,那么它的 GC 分代年龄会初始值为 1,每熬过一次 Minor GC 而不被回收,这个值就会增加 1 岁。当它的年龄到达一定的数值时(默认是 15 岁),就会晋升到老年代中。

4.动态年龄判断

当 Survivor 空间中相同年龄所有对象的大小总和大于 Survivor 空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,而不需要达到默认的分代年龄。

 

上一篇
下一篇

发表回复

联系我们

联系我们

028-84868647

在线咨询: QQ交谈

邮箱: tech@68v8.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部