JVM空间分配担保流程
- 在进行Minor GC之前,JVM首先会检查【老年代最大连续空闲空间】是否大于【当前新生代所有对象占用的总空间】
- 如果是,那么说明此次的Minor GC是安全的,可以放心的进行Minor GC
- 如果不是,则JVM会去查看
HandlePromotionFailure
参数的值是否为true(表示是否允许担保失败) - 如果不允许担保失败,则此时就会进行一次Full GC 以腾出老年代更多的空间
- 如果允许担保失败,则此时JVM会去检查【老年代最大连续空闲空间】是否大于【历次晋升到老年代的对象的平均大小】
- 如果小于,则JVM此时会进行一次Full GC以便于腾出更多的老年代空间
- 如果大于,则JVM会冒险进行一次
Minor GC
(为什么说是冒险呢? 因为有可能Minor GC
后新生代所有的对象都还存活,并且survivor
区无法容纳下这些对象,那么这些对象就会被晋升到老年代,导致老年代空间被填满)