Appearance
Parallel GC
Parallel GC 是吞吐量优先的垃圾回收器。它使用多个 GC 线程并行回收,但回收期间应用线程通常暂停。它适合批处理、离线计算、后台任务等“总处理时间优先”的场景。
定位
| 维度 | 说明 |
|---|---|
| 核心目标 | 提高吞吐量 |
| 执行方式 | 多线程并行 STW |
| 适合场景 | 批处理、报表、离线任务 |
| 不适合场景 | 强交互、低延迟接口服务 |
吞吐量优先意味着:允许单次停顿相对更长,但希望应用总体花在业务计算上的时间更多。
工作方式
text
应用线程暂停 -> 多个 GC 线程并行复制 / 整理 -> 应用线程恢复它能利用多核 CPU 缩短 GC 工作时间,但不能消除 STW。
启用
bash
-XX:+UseParallelGC常见参数:
bash
-XX:ParallelGCThreads=8
-XX:MaxGCPauseMillis=500
-XX:GCTimeRatio=99这些参数是目标和约束,不是绝对保证。设置停顿目标过低,可能牺牲吞吐或导致更频繁 GC。
适用判断
适合:
- 离线批处理,用户不直接等待每个请求。
- 更关心单位时间完成多少任务。
- GC 停顿可被任务模型接受。
不适合:
- API 延迟有严格 P99/P999 要求。
- 暂停数百毫秒会明显影响用户体验。
排查
关注:
- GC 时间占比。
- Full GC 频率。
- 单次暂停是否超过任务 SLA。
- CPU 是否被 GC 线程打满。
命令:
bash
jstat -gcutil <pid> 1000
jcmd <pid> VM.flags如果吞吐足够但停顿不可接受,考虑 G1、ZGC 或 Shenandoah。
