1、Serial
新生代收集器,单线程,使用复制算法,标记和清理都是单线程,优点是简单高效,劣势是垃圾收集时会出现Stop The World,对于实时性要求高的应用不可接受;
2、ParNew
新生代收集器,并行收集,使用复制算法,可以看做是Serial的多线程版本,在多核CPU的场景下性能表现更好;
3、Parallel Scavenge:
新生代收集器,基于标记 -复制算法实现,能够并行收集,多线程,主要关注“吞吐量”,目标则是达到一个可控制的吞吐量(Throughput),所谓吞吐量 = 用户线程时间/(用户线程时间+GC线程时间),适合一些对交互响应要求不高的一些后端应用场景;
4、Serial Old
老年代单线程收集器,可以看做Serial的老年代版本。
5、Parallel Old
老年代并行收集器,使用标记-整理算法,吞吐量优先,可以看做是Parallel Scavenge收集器的老年代版本
6、CMS
Concurrent Mark Sweep,使用标记-清除算法,老年代并行收集器,以获取最短回收停顿时间为目标的收集器,具有高并发、低停顿的特点,追求最短GC回收停顿时间。
7、G1
Garbage First,采用标记-整理算法,G1的特点是回收整个Java堆,包括了包括新生代和老年代,G1在回收期间,可以有多个GC线程同时工作,有效利用多核计算能力,拥有与应用程序交替执行的能力,部分工作可以和应用程序同时执行,因此,一般来说,不会在整个回收阶段发生完全阻塞应用程序的情况。
8、Shenandoah
类似于G1,但是相比G1有一些不同,例如G1分代,而Shenandoah默认不分代,Shenandoah在垃圾回收阶段并发,G1在垃圾回收阶段并行。Shenandoah的强项在于低延迟,不过相应的,由于高运行负担,吞吐量成为了Shenandoah的弱项。
9、ZGC
基于动态Region内存布局,以低延迟为首要目标,不设年龄分代,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法,回收TB级内存,停顿时间不超过10ms。