Appearance
Serial GC
Serial GC 是最简单的垃圾回收器:单个 GC 线程执行回收,回收期间应用线程暂停。它不适合大多数服务端大堆场景,但在小堆、工具进程、资源受限环境中仍有价值。
定位
| 维度 | 说明 |
|---|---|
| 核心目标 | 简单、低额外开销 |
| 执行方式 | 单线程 STW |
| 适合场景 | 小堆、命令行工具、客户端、小型服务 |
| 不适合场景 | 多核大吞吐服务、低延迟服务 |
工作方式
Serial 年轻代通常使用复制算法,老年代使用标记-整理思路。应用线程会在回收期间暂停。
text
应用线程暂停 -> 单个 GC 线程扫描和回收 -> 应用线程恢复它的优势是没有复杂并发协调,缺点是停顿时间随堆和存活对象增长而明显变长。
启用
bash
-XX:+UseSerialGC小工具进程可以配合较小堆:
bash
-Xms128m -Xmx128m -XX:+UseSerialGC适用判断
适合:
- 堆很小,GC 停顿可接受。
- 容器 CPU 很少。
- 程序运行时间短,追求启动和简单性。
不适合:
- Web 服务请求延迟敏感。
- 堆较大且对象存活率高。
- 希望充分利用多核 CPU 做 GC。
排查
如果使用 Serial 后停顿过长:
- 看 GC 日志确认暂停时长。
- 判断堆是否过大或对象存活率过高。
- 服务端应用考虑迁移到 G1 或低延迟回收器。
观测:
bash
jstat -gcutil <pid> 1000
jcmd <pid> GC.heap_info