什么是空间担保?

简单解释

内存分配的一种机制,Young区空间容纳不了对象时会把对象放到Old区,所以称之为Old区给Young区的空间做担保。继续联想。。。。java堆内存会使用谁来做空间担保呢?

官方解释

在发生Minor GC之前,虚拟机必须先检查老年代最大可用的连续空间是否大于新生代所有对象总 空间,如果这个条件成立,那这一次Minor GC可以确保是安全的。如果不成立,则虚拟机会先查看- XX:HandlePromotionFailure参数的设置值是否允许担保失败(Handle Promotion Failure);如果允 许,那会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大 于,将尝试进行一次Minor GC,尽管这次Minor GC是有风险的;如果小于,或者-XX: HandlePromotionFailure设置不允许冒险,那这时就要改为进行一次Full GC

—- 《深入理解java虚拟机》

代码

if(老年代最大可用的连续空间 < 新生代所有对象的总空间) {
      if(HandlePromotionFailure == true) {
            if(老年代最大可用连续空间 > 历次晋升到老年代的对象的平均大小) {
                  YGC(); // 尝试进行一次 YGC,但这次 YGC 依然是有风险的
            } else {
                  FGC();
            }
      } else {
            FGC();
      }
} else {
      YGC(); // 此次 YGC 安全
}

原文 

https://www.maiyewang.com/archives/102166

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 什么是空间担保?

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址