Skip to content

Serial GC

Serial GC 是最简单的垃圾回收器:单个 GC 线程执行回收,回收期间应用线程暂停。它不适合大多数服务端大堆场景,但在小堆、工具进程、资源受限环境中仍有价值。

定位

维度说明
核心目标简单、低额外开销
执行方式单线程 STW
适合场景小堆、命令行工具、客户端、小型服务
不适合场景多核大吞吐服务、低延迟服务

工作方式

Serial 年轻代通常使用复制算法,老年代使用标记-整理思路。应用线程会在回收期间暂停。

text
应用线程暂停 -> 单个 GC 线程扫描和回收 -> 应用线程恢复

它的优势是没有复杂并发协调,缺点是停顿时间随堆和存活对象增长而明显变长。

启用

bash
-XX:+UseSerialGC

小工具进程可以配合较小堆:

bash
-Xms128m -Xmx128m -XX:+UseSerialGC

适用判断

适合:

  • 堆很小,GC 停顿可接受。
  • 容器 CPU 很少。
  • 程序运行时间短,追求启动和简单性。

不适合:

  • Web 服务请求延迟敏感。
  • 堆较大且对象存活率高。
  • 希望充分利用多核 CPU 做 GC。

排查

如果使用 Serial 后停顿过长:

  1. 看 GC 日志确认暂停时长。
  2. 判断堆是否过大或对象存活率过高。
  3. 服务端应用考虑迁移到 G1 或低延迟回收器。

观测:

bash
jstat -gcutil <pid> 1000
jcmd <pid> GC.heap_info
别急,先让缓存热一下。