1、Serial收集器
Seral收集器是最基本、历史最悠久的收集器,曾经(在JDK1.3.1之前)是虚拟机新生代收集的唯一选择。它是单线程收集器,它在进行垃圾收集时,必须停止所有的工作线程,直到它收集结束。“Stop The World”把用户正常工作的线程全部停掉,多少会令用户无法接受。Serial收集器依然是虚拟机运行在Client模式下的默认新生代收集器,简单而高效(与其他收集器的单线程比),对于运行在Client模式下的虚拟机来说是一个很好的选择。
2、ParNew收集器
ParNew收集器是Serial收集器的多线程版本,它是许多运行在Server模式下的虚拟机中首选的新生代收集器,有一个很重要的原因是除了Serial收集器外,目前只有它能与CMS收集器配合工作。
3、Parallel Scavenge收集器
Parallel Scavenge收集器看起来和ParNew都一样,其更着重关注于达到一个可控制的吞吐量(吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间))。它被称为“吞吐量优先”的收集器。自适应调节策略也是Parallel Scavenge收集器与ParNew收集器的一个重要区别。
4、Serial Old收集器
Serial Old是Serial收集器的老年代版本,它同样是一个单线程收集器,使用“标记-整理”算法。这个收集器的主要意义也是在于给Client模式下的虚拟机使用。如果在Server模式下,那么它主要还有两大用途:一种用途是在JDK1.5以及之前的版本中与Parallel Scavenge收集器搭配使用,另一种用途就是作为CMS收集器的后备预案,在病发收集发生Concurrent Mode Failure时使用。
5、Parallel Old收集器
Parallel Old是Parallel Scavenge收集器的老年版本,使用多线程和“标记-整理”算法。
6、CMS收集器
CMS收集器是一种以获取最短回收停顿时间为目标的收集器。它是基于“标记-清楚”算法实现的,它的运作过程相对于前面几种收集器来说更复杂一些,整个过程分为四个步骤,包括:初始标记、并发标记、重新标记、并发清除。其中,初识标记、重新标记这两个步骤仍然需要“Stop The World”。CMS是一款优秀的收集器,称其为并发低停顿收集器。
7、G1收集器
G1收集器与其他收集器相比,G1具备如下特点:并行与并发、分代收集、空间整合、可预测的停顿。在G1之前的其他收集器进行收集的范围都是整个新生代或者老年代,而G1不再是这样。使用G1收集器时,java堆内存布局就与其他收集器有很大差别,它将整个java堆划分为多个大小相等的独立区域(Region),虽然还保留新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它们是一部分Region(不需要连续)的集合。如果不计算维护Remembered Set的操作,G1收集器的运作大致可分为以下几个步骤:初始标记,并发标记,最终标记,筛选回收。
摘自:《深入理解java虚拟机》