垃圾收集器可以分为回收新生代和回收老年代两种类型收集器。其中回收新生代收集器有Serial、PraNew、Parallel Scavenge,回收老年代的收集器有Serial Old、Parallel Old、CMS,还有用于回收整个Java堆的G1收集器。
Serial收集器(复制算法):新生代单线程收集器,在进行垃圾回收时需要停止其他的所有工作线程。
Serial Old收集器(标记-整理):老年代单线程收集器,Serial的老年代版本。
ParNew收集器:新生代并行收集器,实际是Serial收集器的多线程版本,在多核CPU环境下有着比Serial更好的表现。默认情况下线程个数和CPU数量相等。
Parallel Scavenge收集器:新生代并行收集器,追求高吞吐量。CMS, Parnew, Serial的设计目标是为了缩短用户线程的停顿时间,但是Parallel Scanvenge的设计目标是实现一个可控的吞吐量(用户线程时间/(用户线程时间+GC线程时间),高吞吐量可以高效率地利用CPU时间,尽快完成程序的运算任务。
CMS收集器:老年代里面的唯一一个基于标记-清除算法,它是老年代并行收集器,以获取最短回收停顿时间为目标的收集器,具有高并发,低停顿的特点,追求最短GC回收停顿时间。
G1收集器:唯一一个可以同时用于年轻代和老年代的垃圾收集器。G1收集器采用标记-整理的算法,避免碎片。