Java 垃圾回收器 Parallel Scavenge 和 Parallel Old 怎么提升吞吐量

夜雪君_3771

夜雪君_3771

2026-10-20

932人浏览

原创

parallel scavenge与parallel old是吞吐量优先的并行回收组合,采用多线程stw机制,通过接受较少但稍长的停顿来最大化用户代码执行时间;需正确搭配、显式启用、设定吞吐目标并匹配cpu密集型后台场景。

java 垃圾回收器 parallel scavenge 和 parallel old 怎么提升吞吐量

Parallel Scavenge 和 Parallel Old 是一套以吞吐量优先为目标的垃圾回收组合,提升吞吐量的关键不在于“减少 GC 次数”或“消除停顿”,而在于让 JVM 在单位总时间中,尽可能多地运行用户代码。它的设计逻辑是:接受稍长但更少的 STW 停顿,换取更高的整体执行效率。

用对组合,确保老年代不拖后腿

Parallel Scavenge 只负责新生代,必须搭配 Parallel Old 才能形成完整的并行吞吐方案。如果错误搭配 Serial Old(尤其在 JDK 8 之后),老年代回收会退化为单线程,成为瓶颈,大幅拉低吞吐量。

  • 显式启用组合:添加 -XX:+UseParallelGC -XX:+UseParallelOldGC(JDK 8 默认已启用,但显式声明可避免环境差异干扰)
  • 禁用不兼容组合:确保未启用 -XX:+UseSerialGC 或残留 CMS 相关参数
  • 验证实际生效:启动时加 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps,日志中应出现 PSYoungGen(Parallel Scavenge)和 ParOldGen(Parallel Old)字样

设定明确的吞吐目标,交给自适应策略优化

Parallel 系列的核心优势是自适应调节(-XX:+UseAdaptiveSizePolicy),它会动态调整 Eden/Survivor 比例、晋升阈值、堆各区域大小等,无需手动微调。你只需告诉 JVM 你最在意什么:

JavaStoryDevelop
JavaStoryDevelop

你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在

下载
  • 更看重吞吐量百分比?用 -XX:GCTimeRatio=19(默认值,表示 GC 时间占总时间 ≤ 1/20,即吞吐量 ≥ 95%);数值越大,越倾向压缩 GC 时间,提高吞吐
  • 更关注单次停顿上限?用 -XX:MaxGCPauseMillis=200(例如设为 200ms),但注意:设得太小会导致 GC 更频繁、年轻代变小、对象过早晋升,反而降低吞吐——这不是低延迟收集器,强行压停顿会适得其反
  • 两项不要同时设置:它们目标冲突,JVM 会优先满足 MaxGCPauseMillis,可能牺牲吞吐目标

合理分配硬件资源,让并行真正并起来

Parallel 收集器依赖多线程并行工作,线程数不足或过剩都会影响效率:

  • 默认 GC 线程数 ≈ CPU 核心数;若应用本身已密集占用 CPU,可略减:如 16 核机器上设 -XX:ParallelGCThreads=12
  • 避免过度分配:线程数远超物理核心,反而引发上下文切换开销,降低有效吞吐
  • 确保堆内存足够:吞吐量高意味着对象生命周期可能拉长,-Xmx 和 -Xms 设为相同值可避免扩容抖动,稳定吞吐表现

匹配适用场景,不硬套在错的地方

这套组合不是万能的。它在以下情况才能真正发挥吞吐优势:

  • 任务是 CPU 密集型、后台批处理类(如报表生成、批量订单结算、科学计算)
  • 应用无强交互需求,能容忍几百毫秒级的 STW(比如非实时交易系统)
  • 部署在多核服务器环境(至少 4 核以上),且未被其他高负载进程严重争抢 CPU
  • 对象创建快、死亡也快(符合分代假说),这样 Parallel Scavenge 的复制算法效率最高

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10817

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7942

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6892

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1164

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

948

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1416

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2849

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20131

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1255

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习