串行回收器(Serial Garbage Collector):
采用单线程进行垃圾回收,适合堆内存较小的场景。 有Serial回收器和SerialOld回收器,前者采用复制算法对新生代进行垃圾回收,后者采用标记整理算法对老年代进行回收。 在执行垃圾回收过程中会造成用户线程阻塞,也就是STW(Stop-The-World)问题。
并行回收器(Parallel Garbage Collector):
也称为吞吐量优先回收器(Throughput Collector)。 与串行回收器不同,它使用多线程进行垃圾回收,以加快垃圾回收的速度。 有Paralle回收器和ParalleOld回收器,前者采用复制算法对新生代进行垃圾回收,后者采用标记整理算法对老年代进行回收。
并发标记扫描回收器(CMS Garbage Collector):
主要目标是减少STW时间,使得垃圾回收时应用程序的响应速度更快。 它使用标记-清除算法进行垃圾回收,并且会与用户线程并发执行。
G1回收器(G1 Garbage Collector):
适用于堆内存很大的情况。 它将堆内存分割成不同的区域,并且并发地对其进行垃圾回收。 G1也可以在回收内存之后对剩余的堆内存空间进行压缩。
Shenandoah GC
这是Java中引入的一种新的GC,旨在解决CMS和G1中的一些问题。它试图在降低暂停时间的同时,保持高吞吐量。
ZGC
这是Java 11中引入的一种低延迟垃圾收集器,它主要关注减少或消除STW(Stop-The-World)暂停时间。ZGC是并发的,并且可以与应用程序的线程同时运行。