这篇文章主要来介绍下 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,其实就是所谓的