引言
如果说收集算法是垃圾回收的方法论,那么垃圾收集器就是内存回收的具体实现。基于我们平时使用的jvm都是HotSpot的实现,因此,本篇讨论的垃圾收集器也是基于HotSpot的jvm。
垃圾收集器分类
串行收集器:只有一条GC线程,运行时需要停止用户程序。
并行收集器:有多条GC线程,运行时也需要停止用户程序。
并发收集器:有一条或多条GC线程,每个收集周期都要经历:初始标记、并发标记、重新标记、并发清除。
Garbage First(G1):有一条或多条GC线程,收集动作类似并发:初始标记、并发标记、重新标记、清除、转移回收。
![](https://i-blog.csdnimg.cn/blog_migrate/9c08d58deb77ae6f4fd2e260dc48afcb.png)
HotSpot中的垃圾收集器
上面我们已经知道了垃圾收集器的分类,下面我们看下每种类型下对应的垃圾收集器:
串行收集器的实现:serial(用于新生代,采用复制算法)、serial old(用于年老代,采用标记/整理算法)。
并行收集器的实现:ParNew(用于新生代,采用复制算法)、Parallel Scavenge(用于新生代,采用复制算法)、Parallel old(用于年老代,采用标记/整理算法)。
并发收集器的实现:concurrent mark sweep[CMS](用于年老代,采用标记/清除算法)。
Garbage First(G1):用于新生代和老年代,新生代采用复制算法、老年代采用标记-整理。
可以看到,上面每一种垃圾搜集器都是针对不同内存区域所设计的,因为它们采用的算法不同,凡是用于新生代的都是使用的复制算法,而用于年老代的都是使用的标记/清除或者标记/整理算法。
下面我们来一起看下jdk垃圾回收的大家庭以及它们之间的相互组合关系:
针对上面简单说明下,上面三个是新生代收集器,下面三个是老年代收集器,两者之间的连线表示两者可以配合使用,中间的G1收集器。
结束语
本章大致介绍了7种垃圾收集器,关于它们的运行方式和特点我们下一章再一起讨论。