这里整合了hotspot虚拟机的7种垃圾收集器:
一、Serial收集器
特点:单线程收集器,它不仅仅只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的线程工作,直到它收集完成。
Serial收集是虚拟机运行在Client模式下的默认新生代收集器。优点是简单而高效,对于限定单个CPU的环境来说,Serial没有线程开销,专心做垃圾收集自然可以获得最高的单线程收集效率。
二、ParNew收集器
ParNew收集器其实就是Serial收集器的多线程版本。它是许多运行在Server模式下的虚拟机中首选的新生代收集器,目前只有它能与CMS收集器配合工作。(CMS收集器是hotspot虚拟机中第一款正真意义上的并发收集器,实现了让垃圾收集线程与用户线程(基本)同时工作)。ParNew收集器开启的线程数与CPU的数量相同,在CPU非常多的环境下,可以使用-XX:ParallelGCThreads参数来限制垃圾收集的线程数。
三、Parallel Scavenger收集器
又称为“吞吐量优先”收集器,采用的复制算法的收集器。CMS等收集器的关注点是尽可能的缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenger收集器的目标则是达到一个可控制的吞吐量(Throughput)。
说明:吞吐量=运行用户代码的时间/(运行用户代码的时间+垃圾收集的时间)
Parallel Scavenger收集器提供两个参数来精确控制吞吐量:
1)控制最大垃圾收集停顿时间的:-XX:MaxGCPauseMillis参数;
2)直接设置吞吐量大小的:-XX:GCTimeRatio参数。
另外,Parallel Scavenger收集器还有CC自适应的调节策略。
四、Serial Old收集器
单线程收集器,使用的是“标记-整理”算法。该收集器的主要意义是在Client用户下使用,如果在Server模式下使用,则主要用途是:在JKD1.5以及以前的版本中与Parallel Scavenger收集器配合使用。另一种用途是作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用。
五、Parallel Old收集器
是Parallel Scavenger收集器的老年代版本,使用多线程和“标记-整理”算法。
六、CMS收集器
CMS(ConcurrentMark Sweep)并发标记清除收集器是一种以获取最短停顿时间为目标的收集器。包含四个步骤:
1)初试标记;
2)并发标记;
3)重新标记;
4)并发清除。
包含三个缺点:
1)CMS收集器对CPU资源非常敏感;
2)无法处理浮动垃圾(FloatingGarbage),可能出现Concurrent Mode Failure失败而导致另一次Full GC的产生。
3)收集结束时会产生大量空间碎片。
七、G1收集器(GarbageFirst)
G1收集器是面向服务端应用的垃圾收集器。具有的特点是:
1)并行与并发;
2)分代收集;
3)空间整合;
4)可预测停顿。