在原文基础上重新绘制了一下进行Young GC 、Full GC 的条件及处理过程

史上最强图,图解:大厂面试题,Young GC和Full GC分别在什么情况下会发生?_分叉

 

 

为了方便记忆,我把图逐步简化为,下列三幅图:

史上最强图,图解:大厂面试题,Young GC和Full GC分别在什么情况下会发生?_老年代_02

 

 

 看着图3,我来写出过程:

  1、

史上最强图,图解:大厂面试题,Young GC和Full GC分别在什么情况下会发生?_老年代_03

左5型,绕过了空间担保(绕过紫色框),直接进行了Young GC。不用空间担保,意味着Young GC后,即使新生代所有的对象都存活,也都可以放入老年代,所以只会进行Young GC  2、

史上最强图,图解:大厂面试题,Young GC和Full GC分别在什么情况下会发生?_JVM_04

锚型,空间担保成功(跨越紫色框),先Young GC,后Old GC(也可能不进行)。空间担保成功,意味着Young GC后,大概率老年代空间够晋升对象用,不需要进行Old GC,那么先进行Young GC吧,Young GC过程中会有一部分对象晋升到老年代,这时候有两种情况:

  (情况1)、发现老年代空间不够,只能转而进行 Old GC ,然后接着YoungGC。

  (情况2)、老年代空间够,不用Old GC

  3、

史上最强图,图解:大厂面试题,Young GC和Full GC分别在什么情况下会发生?_老年代_05

中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 ,写出整个流程