Parallel收集器是吞吐量优先场景下最成熟选择,通过多线程并行执行STW阶段的标记、复制和整理任务,在多核CPU上压缩单次GC耗时以提升吞吐量;年轻代用Parallel Scavenge(复制算法),老年代用Parallel Old(标记-整理算法),适用于批处理、报表生成、离线计算等后台任务。

Java 吞吐量优先场景下,Parallel 收集器(即 Parallel Scavenge + Parallel Old 组合)是最直接、最成熟的选择。它不追求单次停顿短,而是通过高效并行回收,把 GC 总耗时压到最低,从而提升整体吞吐量——适合批处理、报表生成、离线计算等后台任务。
确认使用 Parallel 收集器
在 JDK 8 及之后的 Server 模式中,Parallel GC 是默认配置;但显式指定更稳妥:
- -XX:+UseParallelGC:启用 Parallel Scavenge(新生代)
- -XX:+UseParallelOldGC:启用 Parallel Old(老年代),JDK 8 起自动联动,但建议明确写出
运行时可通过 jinfo -flag UseParallelGC <pid> 或启动加 -XX:+PrintCommandLineFlags 验证是否生效。
控制吞吐量目标
Parallel 的核心调优参数是吞吐量比例,而非停顿时间:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
-XX:GCTimeRatio=n:表示 GC 时间占总时间的比例为
1/(n+1)。例如设为19,即允许最多 5% 时间用于 GC(吞吐量 ≥95%) - 该值比
-XX:MaxGCPauseMillis更契合吞吐优先目标;后者会强制压缩堆、频繁回收,反而损害吞吐量,一般不推荐设
稳定堆与线程资源
避免运行期抖动,让 Parallel 发挥并行优势:
-
-Xms = -Xmx:例如
-Xms4g -Xmx4g,禁用动态扩容,尤其在容器环境中必须固定 -
-XX:ParallelGCThreads=N:设为 CPU 核心数(≤8 核)或按公式
(5×CPU核数)/8 + 3(>8 核),避免线程过多导致上下文切换开销 - 新生代大小通常无需手动调,因 自适应策略(-XX:+UseAdaptiveSizePolicy)默认开启,会动态调整 Eden/Survivor 比例和晋升阈值以逼近吞吐目标
配套基础参数
防止元空间或类加载引发意外 Full GC:
- -XX:MaxMetaspaceSize=256m(或 512m):限制元空间上限,避免动态类加载(如 Spring Boot DevTools)撑爆内存
- 若应用无热部署/字节码生成,可进一步设
-XX:-UseCompressedClassPointers省略压缩类指针(小幅度减内存占用)

















