启用parallel gc需设置-xx:+useparallelgc(jdk 8+自动启用老年代并行回收),配合-xx:gctimeratio=19~39设定吞吐量目标,-xms与-xmx设为相等值,并指定-xmn以稳定新生代大小。

要让 JVM 使用吞吐量优先的垃圾回收策略,核心是启用 Parallel GC(并行收集器),它专为最大化应用运行时间占比而设计,适合批处理、后台任务、非交互式服务等对响应延迟不敏感但追求高 CPU 利用率的场景。
启用 Parallel GC 的基础参数
只需设置以下任一参数,JVM 会自动启用配套的新生代与老年代并行回收器:
- -XX:+UseParallelGC:启用并行新生代回收(使用复制算法)
- -XX:+UseParallelOldGC:启用并行老年代回收(使用标记-整理算法)
二者通常成对出现;在 JDK 8 及之后版本中,单独启用 -XX:+UseParallelGC 就会默认连带启用老年代并行回收,无需额外指定。
控制吞吐量目标(关键调优项)
通过 -XX:GCTimeRatio 设置 GC 时间占总运行时间的比例上限,JVM 会据此动态调整堆大小以满足目标:
- 例如:-XX:GCTimeRatio=19 表示允许 GC 时间 ≤ 总时间的 1/20(即 5%),对应吞吐量 ≥ 95%
- 默认值为 99(即吞吐量目标 ≥ 99%),但实际中常设为 19~39,兼顾稳定性与资源效率
- 该参数触发 JVM 自适应扩容:若达不到目标,会增大堆(减少 GC 频次),但可能拉长单次 STW 时间
配合堆内存配置,避免自适应失衡
Parallel GC 的自适应策略依赖合理的堆初始与最大值设定,否则频繁调整反而影响稳定:
- -Xms4g -Xmx4g:建议初始堆与最大堆设为相同值,禁用动态伸缩,消除扩容开销
- -Xmn2g:显式指定新生代大小(如占堆 1/2),避免因自适应导致新生代过小引发频繁 Minor GC
- 可选:-XX:ParallelGCThreads=8 手动设定并行 GC 线程数(默认为 CPU 核心数),多核服务器下可略高于物理核数提升吞吐
辅助优化与可观测性
确保调优效果可验证、问题可追溯:
- -Xlog:gc*:file=gc.log:time:filecount=5,filesize=10M(JDK 9+)或 -XX:+PrintGCDetails -XX:+PrintGCDateStamps(JDK 8)记录详细 GC 日志
- -XX:+UseAdaptiveSizePolicy 默认开启,允许 JVM 自动调优 Eden/Survivor 比例;如需固定比例,可加 -XX:SurvivorRatio=8
- 避免混用冲突目标:不要同时设置 -XX:MaxGCPauseMillis(暂停时间目标),它与吞吐量优先策略存在根本矛盾











