JVM空间分配担保机制定理定义整理笔记
JVM使用分代收集算法,将堆内存划分为年轻代、年老代
分别采取不同的垃圾回收算法
空间担保指的是老年代进行空间分配担保
空间分配担保概念:
在发生Minor GC之前,虚拟机会检测老年代最大可用的连续空间是否大于新生代的所有对象的总空间。
大于->此次Minor GC (young GC) 是安全的
小于->虚拟机会查看HandlePromotionFailure设置值是否允许担保失败
HandlePromotionFailure=true -> 则继续检查老年代最大可用连续空间是否大于历次晋升到老年代的对象的平均大小
大于 -> 尝试进行一次Minor GC, 但这一次Minor GC依然是有风险的
小于 -> 则改为进行一次Full GC
HandlePromationFailure=false -> 则改为进行一次Full GC
为什么要进行空间担保
因为新生代采取复制收集算法,假设大量对象在Minor GC后仍然存活, 而Survivor空间比较小,这是就需要老年代进行分配担保,
前提是老年代有足够个空间来容纳这些对象,但一共有多少对象在内存回收后存活下来是不可预知的。因此只好去取之前每次垃圾回收后晋升到
年老代的对象大小的平均值作为参考数据。用这个平均值与年老代剩余空间进行比较,来决定是否进行Full GC让老年代腾出更多的空间。