jvm小点之控件分配担保
什么叫空间分配担保?
通俗说,老年代中很可能内存不够了,但是这个时候新生代马上要MinorGc了,但是还没开始,如果gc了这可能会导致有些对象会进入老年代,所以要会判断一下老年内存够不,他是分两步判断的
-
第一步判断(这个判断虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象总空间,如果这个条件成立,那么Minor GC可以确保是安全的。),可是即使不成立,我们也不能认为这次Minor GC 产生的对象他就放不进老年代吧。毕竟这个判断的范围有点大。
-
第二步判断,这次是个概率判断,如果不成立,则虚拟机会查看HandlePromotionFailure设置值是否允许担保失败。如果允许,那么才会第二步,继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于,将尝试着进行一次Minor GC,尽管这次Minor GC是有风险的(风险是说,由初次判断,老年代最大可用的连续空间此时小于新生代所有对象总空间,如果minor GC后有部分对象是要被放入老年代的,万一老年代不够则风险发生。)如果担保失败则会进行一次Full GC;如果小于,或者HandlePromotionFailure设置不允许冒险,那这时也要改为进行一次Full GC。
-
注意:HotSpot默认是开启空间分配担保的。
这样做的好处,就是减少一些不必要的FUll GC
如果看官觉得有点用,点赞一下 鼓励一下我吧!
欢迎添加公众号与您分享更多记录