JVM中常见的垃圾回收器(Garbage Collectors)的分类和描述:
一、新生代收集器(Young Generation Collectors)
新生代收集器主要负责收集新创建的对象,这些对象通常存活时间较短。
Serial GC
• 单线程收集器,适用于小型应用或单核处理器。
• 进行垃圾回收时会暂停所有应用线程(Stop-The-World,STW)。
ParNew
• 多线程收集器,是Serial GC的多线程版本。
• 同样在垃圾回收时暂停所有应用线程。
ParallelGC
• 多线程收集器,使用多个线程进行垃圾回收,减少停顿时间。
• 同样在垃圾回收时暂停所有应用线程。
二、老年代收集器(Old Generation Collectors)
老年代收集器主要负责收集长期存活的对象。
CMS(Concurrent Mark-Sweep)
• 以并发方式进行垃圾回收,减少停顿时间。
• 可能产生较多的内存碎片。
Serial Old
• Serial GC的老年代版本,单线程收集器。
• 进行垃圾回收时会暂停所有应用线程。
Parallel Old
• ParallelGC的老年代版本,多线程收集器。
• 进行垃圾回收时会暂停所有应用线程。
三、整堆收集器(Full GC)
整堆收集器负责收集整个Java堆,包括新生代和老年代。
G1 GC
• 目标是减少停顿时间,使用标记-整理(Mark-Compact)算法。
• 进行垃圾回收时会暂停所有应用线程。
ZGC(Z Garbage Collector)
• 低延迟垃圾回收器,使用标记-整理算法。
• 进行垃圾回收时会暂停所有应用线程。
四、其他
Shenandoah GC
• Java 15中引入的实验性GC,目标是在非常短的停顿时间内回收大量垃圾。
• 使用增量式标记-清除算法,尽可能减少停顿时间。
Epsilon GC
• Java 14中引入的实验性GC,目标是在非常短的停顿时间内回收大量垃圾。
• 同样使用增量式标记-清除算法。
选择垃圾回收器时,需要考虑应用的响应时间要求、吞吐量、内存占用等因素。不同的垃圾回收器适用于不同的应用场景和需求。