美文网首页
图解GC流程

图解GC流程

作者: Java元宇宙 | 来源:发表于2020-04-09 10:27 被阅读0次
GC流程图

GC流程是每一个Java开发人员都应该掌握的内容。你知道什么时候触发Minor GC?什么时候触发
Minor GC ?Old GC 的过程又是怎么样的?

看图,看图,看图。跟着我画的流程图走一遍,就清楚了!

挤满新生代的最后一个对象

我们应当知道,新创建的对象一般会被分配在新生代中。常用的新生代的垃圾回收器是 ParNew 垃圾回收器,它按照 8:1:1 将新生代分成 Eden 区,以及两个 Survivor 区。

某一时刻,我们创建的对象将 Eden 区全部挤满,这个对象就是「挤满新生代的最后一个对象」。此时,Minor GC 就触发了。

正式 Minor GC 前的检查

在正式 Minor GC 前,JVM 会先检查新生代中对象,是比老年代中剩余空间大还是小。为什么要做这样的检查呢?原因很简单,假如 Minor GC 之后 Survivor 区放不下剩余对象,这些对象就要进入到老年代,所以要提前检查老年代是不是够用。这样就有两种情况:

  1. 老年代剩余空间大于新生代中的对象大小,那就直接 Minor GC,GC 完 survivor 不够放,老年代也绝对够放
  2. 老年代剩余空间小于新生代中的对象大小,这个时候就要查看是否启用了「老年代空间分配担保规则」,具体来说就是看-XX:-HandlePromotionFailure参数是否设置了(一般都会设置)

老年代空间分配担保规则是这样的。如果老年代中剩余空间大小,大于历次 Minor GC 之后剩余对象的大小,那就允许进行 Minor GC。因为从概率上来说,以前的放的下,这次的也应该放的下。那就有两种情况:

  1. 老年代中剩余空间大小,大于历次 Minor GC 之后剩余对象的大小,进行 Minor GC
  2. 老年代中剩余空间大小,小于历次 Minor GC 之后剩余对象的大小,进行 Full GC,把老年代空出来再检查

Minor GC 后的处境

前面说了,开启老年代空间分配担保规则只能说是大概率上来说,Minor GC 剩余后的对象够放到老年代,所以当然也会有万一,Minor GC 后会有这样三种情况:

  1. Minor GC 之后的对象足够放到 Survivor 区,皆大欢喜,GC 结束
  2. Minor GC 之后的对象不够放到 Survivor 区,接着进入到老年代,老年代能放下,那也可以,GC 结束
  3. Minor GC 之后的对象不够放到 Survivor 区,老年代也放不下,那就只能 Full GC

实在不行只能 OOM

前面都是成功 GC 的例子,还有 3 中情况,会导致 GC 失败,报 OOM:

  1. 紧接上一节 Full GC 之后,老年代任然放不下剩余对象,就只能 OOM
  2. 未开启老年代分配担保机制,且一次 Full GC 后,老年代任然放不下剩余对象,也只能 OOM
  3. 开启老年代分配担保机制,但是担保不通过,一次 Full GC 后,老年代任然放不下剩余对象,也是能 OOM

相关文章

  • 图解GC流程

    GC流程是每一个Java开发人员都应该掌握的内容。你知道什么时候触发Minor GC?什么时候触发Minor GC...

  • 图解GC流程

    GC流程是每一个Java开发人员都应该掌握的内容。你知道什么时候触发Minor GC?什么时候触发Minor GC...

  • GC 流程

    GC的大致流程:

  • GC流程

    问题1 JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代1 判断对象是否可以回收的算法引用计数法、可达性分...

  • Golang之GC

    参考 图解Golang的GC算法 搞懂Go垃圾回收 Golang垃圾回收 屏障技术

  • 深入Golang Runtime之Golang GC的过去,当前

    对于学习Java的开发来说, GC并不陌生, 实际上Go的GC流程与Java的CMS实现上不尽相同, 但是流程基本...

  • JVM GC算法与GC执行流程

    JVM GC算法 可达分析算法 GC执行流程 https://www.jianshu.com/p/314272e6...

  • 图解JVM GC过程

    1. Minor GC (1) Minor GC过程 假设现在Heap内存大小为20M,其中年轻代为10M,老年代...

  • go-内存机制(4)

    go的GC机制 GO的GC是并行GC,也就是说GC的大部分清理和普通的go代码是同时运行的,这让GO的GC流程比较...

  • HotSpot note(part-5)

    part 5 本comment希望能系统的探索一下GC发生的时机,以及各个GC的具体工作内容(流程),GC包括Mi...

网友评论

      本文标题:图解GC流程

      本文链接:https://www.haomeiwen.com/subject/swuqmhtx.html