在原文基础上重新绘制了一下进行Young GC 、Full GC 的条件及处理过程(原文链接 https://blog.csdn.net/dingshuo168/article/details/98790647)
为了方便记忆,我把图逐步简化为,下列三幅图:
看着图3,我来写出过程:
1、左5型,绕过了空间担保(绕过紫色框),直接进行了Young GC。不用空间担保,意味着Young GC后,即使新生代所有的对象都存活,也都可以放入老年代,所以只会进行Young GC
2、锚型,空间担保成功(跨越紫色框),先Young GC,后Old GC(也可能不进行)。空间担保成功,意味着Young GC后,大概率老年代空间够晋升对象用,不需要进行Old GC,那么先进行Young GC吧,Young GC过程中会有一部分对象晋升到老年代,这时候有两种情况:
(情况1)、发现老年代空间不够,只能转而进行 Old GC ,然后接着YoungGC。
(情况2)、老年代空间够,不用Old GC
3、中5少横型,空间担保失败(分叉于紫色框),先Old GC ,后Young GC。空间担保失败,意味着Young GC后,大概率老年代空间不够晋升对象用,需要进行Old GC。那么先进行Old GC吧,Old GC完成后进行Young GC(大家别忘记为什么要进行Old GC,是为了更好的进行Young GC,免得先进行Young GC到一半才发现空间不够用,再来Old GC)
好了,我看着图3,把大概的流程写完了。大家仔细看最上面的详细流程图,相信最后也能想着图3 ,写出整个流程
本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明
如果购买,成功后加QQ群找群主返现10元