老年代空间分配担保规则
首先,在执行任何一次Minor GC之前,JVM会检查一下老年代可用的内存空间,是否大于新生代所有对象的总大小(极端情况下,可能新生代Minor GC后,所有对象都存活下来,这时所有新生代对象全部要进入老年代)
(1)
检查后,如果老年代的可用内存大小是大于新生代的所有对象的总大小的,此时就可以放心大胆地对新生代发起一次Minor GC了。因为即使Minor GC之后所有对象都存活,即使Survivor区放不下,也可以转移到老年代去。
(2)
检查后,如果老年代的可用内存大小是小
于新生代的所有对象的总大小的,看是否设置了参数
"-XX:-HandlePromotionFailure"(
设置空间担保)
[1]有这个参数,就会继续尝试下一步判断,就是看看老年代的可用内存是否大于之前每一次Minor GC后进入老年代的对象总和的平均大小
<1>当老年代的可用内存大于之前每一次Minor GC后进入老年代的对象总和的平均大小
<