这篇文章主要来介绍下 JVM 中的各种 GC,让大家来搞清楚这几个概念。

大家可能见到过很多的 GC 名词,比如:Minor GC、Young GC、Full GC、Old GC、Major GC、Mixed GC。

这么多概念,想想都头疼,到底各种乱七八糟的 GC 指的是什么?

下面先引用 R 大在知乎上的回答:

针对 HotSpot VM 的实现,它里面的 GC 其实准确分类有两种:

  • Partial GC(局部 GC): 并不收集整个 GC 堆的模式
    • Young GC: 只收集 Young Gen 的 GC,Young GC 还有种说法就叫做 Minor GC
    • Old GC: 只收集 old gen 的 GC,只有垃圾收集器 CMS 的 concurrent collection 是这个模式
    • Mixed GC: 收集整个 Young Gen 以及部分 old gen 的 GC,只有垃圾收集器 G1 有这个模式
  • Full GC: 收集整个堆,包括新生代,老年代,永久代(在 JDK 1.8 及以后,永久代被移除,换为 metaspace 元空间)等所有部分的模式

接下来让我们再来了解下各个 GC:

(1)Minor GC / Young GC

首先我们先来看下 Minor GC / Young GC,大家都知道,新生代(Young Gen)也可以称之为年轻代,这两个名词是等价的。那么在年轻代中的 Eden 内存区域被占满之后,实际上就需要触发年轻代的 GC,或者是新生代的 GC。

此时这个新生代 GC,其实就是所谓的