038、JVM实战总结:200小时积累,6小时烹制,史上最强图,图解:大厂面试题,Young GC和Full GC分别在什么情况下会发生?

 

 

   今天学习本讲,按照艾宾浩斯遗忘曲线应该复习:37 35 31 24 9。建议大家按照遗忘曲线来复习学过的内容。

  这是本人花了6个小时,精心绘制的“垃圾回收”活动图,同时进行了文字总结,大家用心看一定能收获很多

1、前文回顾 

  Young GC指代年轻代gc,用Old GC指代老年代GC,用Full GC指代年轻代、老年代、永久代共同的gc。

2、Young GC的触发时机 

  新生代的Eden区域满了之后就会触发,用复制算法来回收 。

3、Old GC和Full GC的触发时机

  看图说话(为了显示效果,把图分成了两幅):

  绿色线表示正常进行垃圾回收;

  粉色表示需要进行判断是否需要OldGC

  红色线表示确定要进行OldGC;

  棕色线表示需要进行判断,是YoungGC还是OldGC

3.1、先看图中蓝框圆圈

  蓝框圆圈表示一个新起点,中间的数字表示第几步。

    蓝框2圆圈:准备进行垃圾回收。走到这步说明必须要进行垃圾回收了,但怎么回收还不确定

    蓝框3-X圆圈:马上进行Old GC

    蓝框3-Y圆圈:马上进行Young GC

    蓝框5圆圈:马上进行Old GC,之前已经进行过了Young GC

 

图1:

 

 

 

图2:

 

 

 

 

3.2、再从指向蓝框圆圈的箭头,向上分析各个箭头的路径来源

  我们主要分析产生GC的条件,那么指向就分析指向YoungGC和OldGC的箭头路径,即指向(3-X)、(3-Y)、(5)的箭头路径

  分析产生YoungGC的条件,就是分析指向(3-X)的实线箭头,实线箭头有2条,即产生YoungGC的条件有2个:

  新生代空间不足时

    1、不需要空间担保,直接Young GC 

    2、空间担保成功

  分析产生OldGC的条件,就是分析指向(3-Y)、(4)的实现箭头,实线箭头有3条,即产生OldGC的条件有3个:

  新生代空间不足时

    1、未设置空间担保

    2、空间担保失败

    3、Young GC后,晋升到老年代,老年代剩余空间不足

    (注意:老年代剩余在CMS默认值是:老年代总空间 * 92%, 参数设置:-XX:CMSInitiatingOccupancyFaction)

 

  总结:

  细心的朋友已经发现,产生YoungGC和Old GC的前置条件都有“新生代空间不足时”,所以当“新生代空间不足时”Young GC一定会发生,只是发生的时机不同,从图中可以看到有三种情况:  

  1、仅 Young GC 。

  查看 (3-Y)到(4)路径

  2、Young GC + Old GC

  查看 (3-Y)到(5)路径

  3、Old GC + Young GC

  查看 (3-X)到(4)路径和 看(3-X)到(OOM)路径

  所以这就是为什么每次Old GC都会伴随着一次Young GC。Old GC从来不会单独出现

4、永久代满了之后怎么办? 

  永久代满了会触发一次Full GC,顺带收了永久代垃圾

 

谢谢大家耐心看完,这些都是学习《从 0 开始带你成为JVM实战高手》的内容总结,相信大家学习了老师的专栏后也能画出比我更好的流程。加油!!!

 

本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明。想学习老师专栏的同学可以扫描二维码:

 

 

 

 

购买成功后找我返现10元

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java硕哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值