什么是垃圾回收器,可以这样理解,垃圾回收算法是概念理论,对应JAVA中的接口,垃圾回收器就是具体的实现,JVM有很多垃圾回收器,它们实现了不同的垃圾回收算法,可以用在不同jdk版本,也适配不同的区域,比如青年代老年代都有各自专属的垃圾回收器。
在年轻代(Young Generation)中使用的垃圾回收器:
Serial Garbage Collector (SerialGC):适用于单线程应用程序或小型应用程序。它使用标记-复制算法进行垃圾收集,停止应用程序线程以执行垃圾回收操作。
Parallel Garbage Collector (ParallelGC):也称为吞吐量收集器,适用于多核处理器的应用程序。它使用标记-复制算法,但允许多个线程并行执行垃圾回收操作,以提高吞吐量。
G1 Garbage Collector (G1GC):适用于大型内存应用程序。它使用分代收集,但将年轻代和老年代划分为不同的区域,使用标记-整理算法,以更好地控制垃圾回收的停顿时间和内存利用率。
在老年代(Old Generation)中使用的垃圾回收器:
CMS Garbage Collector (CMsGC):也称为Concurrent Mark-Sweep收集器,适用于需要低停顿时间的应用程序。它使用标记-清除算法,但在标记和清除阶段允许与应用程序线程并发执行,以减少停顿时间。
Parallel old Garbage Collector (ParalleloldGC): 与ParallelGC类似,但专门用于老年代。它使用标记-复制算法。
其他特殊用途的垃圾回收器:
Z Garbage Collector(ZGC):适用于需要低延迟和大内存的应用程序。它使用分代收集,但在标记和整理阶段允许与应用程序线程并发执行,以减少停顿时间。
G1 Garbage Collector (G1GC):在G1GC中,老年代的垃圾回收也使用标记-整理算法,与年轻代的处理方式相似。适用于大内存和低延迟要求的应用,具有高度可预测的停顿时间
Serial和Serial Old 是串行的,jdk早期。Serial:标记复制算法,Serial Old:标记整理算法。都要stw,都只有一个gc线程。
Parallel Scavenge、Parallel Old是java8默认的。Parallel Scavenge:标记复制算法,Parallel Old:标记整理算法。有多个gc线程。