首页 > 其他分享 >什么是空间分配担保机制?

什么是空间分配担保机制?

时间:2025-01-19 08:59:41浏览次数:3  
标签:Survivor 担保 源码 GC JVM 机制 解析 分配 Minor

 作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题


代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等


联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等

回答

空间担保是 JVM 的一种保护机制,它主要确保新生代经过 Minor GC ,老年代有足够的空间来存放所存活的对象。

我们知道,新生代内存区域分为三个区:Eden区、Survivor 0区和Survivor 1区。新建的对象直接在 Eden 区分配,当 Eden 区满了后,JVM 会触发一次 Minor GCMinor GC 后,JVM 会将 Eden 区和一个 Survivor 区中存活的对象复制到另外一个 Survivor 区去,如果该 Survivor 区的内存不足以容纳全部的存活对象,则 JVM 会将一部分对象存放到老年代,那如果老年代也不够呢,怎么办?

JVM 提供了空间分配担保机制,在进行 Minor GC 之前,JVM 会先检查老年代的最大可用连续空间是否大于新生代所有对象的总和。

如果大于,则表明此次 Minor GC 是绝对安全的,因为就算新生代所有的对象全部进老年代,老年代也足够。

如果小于,则 JVM 会先检查参数-X:HandlePromotionFailure设置的值。如果为 true,则 JVM 会判断老年代的最大可用连续空间是否大于之前每一次 Minor GC 后晋升老年代的对象的平均大小,如果大于,则可以尝试进行一次 Minor GC 。如果小于或者 -X:HandlePromotionFailure,则改为进行一次Full GC。

标签:Survivor,担保,源码,GC,JVM,机制,解析,分配,Minor
From: https://blog.csdn.net/smart_an/article/details/145185107

相关文章