在 JVM 中,常见的七种垃圾回收器包括:
1、Serial
垃圾回收器(串行回收器)
- 单线程执行垃圾回收,在进行垃圾回收时,会暂停所有用户线程。
- 适用于小型应用和单核 CPU 环境。
2、ParNew
垃圾回收器
- 是
Serial
回收器的多线程版本。 - 常用于与
CMS
回收器配合使用。
3、Parallel Scavenge
回收器
- 关注的是吞吐量(运行用户代码的时间 / 总运行时间)。
- 可以通过参数来调整垃圾回收的时间和频率。
4、Serial Old
回收器
- 是
Serial
回收器的老年代版本。
5、Parallel Old
回收器
- 是
Parallel Scavenge
回收器的老年代版本。
6、CMS
(Concurrent Mark Sweep)回收器
- 以获取最短回收停顿时间为目标,是一种并发的垃圾回收器。
- 分为初始标记、并发标记、重新标记、并发清除四个阶段。
7、G1
(Garbage-First)回收器
- 面向服务端应用,将堆内存划分为多个大小相等的区域。
- 可以预测停顿时间,并优先回收价值最大的区域。
例如,在一个对响应时间要求较高的 Web 应用中,可能会选择 CMS
或 G1
回收器;而对于后台批量处理任务,更注重吞吐量,可能会选择 Parallel Scavenge
搭配 Parallel Old
回收器。