在发生Minor GC之前,虚拟机会先检查老年代最大可用连续空间是否大于新生代所有内存空间,如果条件成立,那么Minor GC可以确保是安全的。如果不成立,虚拟机会查看HandlePromotionFailure设置值是否允许担保失败。如果允许那么会继续检查老年代最大可用连续内存空间是否大于历次晋升到老年代对象的平均大小,如果大于,将尝试进行一次Minor GC,但本次Minor GC存在风险;如果小于或者HandlePromotionFailure设置不允许冒险,那这时也要改为进行一次Full GC,让老年代腾出更多的空间。但是在JDK6 Update24之后,HandlePromotionFailure参数将不会影响到虚拟机的空间分配担保策略,观察OpenJDK中的源码可以发现虽然还定义了该参数,但是代码中已不使用它了。JDK6 Update24之后的规则变为只要老年代的连续空间大于新生代对象总大小或者历次晋升的平均大小就会进行Minor GC,否则将进行Full GC。
内存分配与回收策略(4)
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://www.heiqu.com/82452a55031a3598c2dd936ec4576dcc.html