引言
如果说收集算法是垃圾回收的方法论,那么垃圾收集器就是内存回收的具体实现。基于我们平时使用的jvm都是HotSpot的实现,因此,本篇讨论的垃圾收集器也是基于HotSpot的jvm。
垃圾收集器分类
**串行收集器**:只有一条GC线程,运行时需要停止用户程序。

并行收集器:有多条GC线程,运行时也需要停止用户程序。

**并发收集器**:有一条或多条GC线程,每个收集周期都要经历:**初始标记、并发标记、重新标记、并发清除**。

Garbage First(G1):有一条或多条GC线程,收集动作类似并发:初始标记、并发标记、重新标记、清除、转移回收。

HotSpot中的垃圾收集器
上面我们已经知道了垃圾收集器的分类,下面我们看下每种类型下对应的垃圾收集器:
串行收集器的实现: serial(用于新生代,采用复制算法)、serial old(用于年老代,采用标记/整理算法)。
并行收集器的实现: ParNew(用于新生代,采用复制算法)、Parallel Scavenge(用于新生代,采用复制算法)、Parallel old(用于年老代,采用标记/整理算法)。
并发收集器的实现: concurrent mark sweep[CMS](用于年老代,采用标记/清除算法)。
**Garbage First(G1):** 用于新生代和老年代,新生代采用复制算法、老年代采用标记-整理 **。**
可以看到,上面每一种垃圾搜集器都是针对不同内存区域所设计的,因为它们采用的算法不同,凡是用于新生代的都是使用的复制算法,而用于年老代的都是使用的标记/清除或者标记/整理算法。
下面我们来一起看下jdk垃圾回收的大家庭以及它们之间的相互组合关系:

针对上面简单说明下,上面三个是新生代收集器,下面三个是老年代收集器,两者之间的连线表示两者可以配合使用,中间的G1收集器。
结束语
本章大致介绍了7种垃圾收集器,关于它们的运行方式和特点我们下一章再一起讨论。
本文转载自: 掘金