Java中常见的垃圾收集器(Garbage Collector, GC
)根据其设计目标和适用场景可分为多种类型。
垃圾收集器(GC):与具体JVM实现紧密相关,不同厂商和版本的JVM提供的垃圾收集器选择不同。Oracle JDK是最主流的实现之一。
1.经典垃圾收集器
1.Serial GC
- 特点:最古老的垃圾收集器,单线程执行,会触发
Stop-The-World(STW)
状态。 - 算法:新生代(
Young Gen
)使用复制算法,老年代(Old Gen
)使用标记-整理算法。 - 适用场景:Client模式下的默认选项,适用于单核CPU和小堆内存。
- JVM参数:
-XX:+UseSerialGC
2.ParNew GC
- 特点:Serial GC的多线程版本,新生代垃圾收集器。
- 适用场景:常与老年代的CMS GC配合使用。
- JVM参数:
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
3.CMS GC(Concurrent Mark Sweep)
- 特点:基于标记-清除算法,目标是减少停顿时间,适合对响应时间敏感的应用。
Old Gen
使用标记-清除算法。 - 缺点:
- 存在内存碎片问题,可能触发Full GC进行压缩。
- Java 9+标记为废弃,Java 14+移除。
- JVM参数:
-XX:+UseConcMarkSweepGC
4.Parallel GC
- 特点:Server模式下的默认垃圾收集器(JDK 8及之前版本),新生代和老年代GC并行进行,吞吐量优先。
- 优点:提供自动适应性调整参数,