JVM中Parallel Scavenge与Parallel Old的多线程吞吐量优先收集器内核

雨丽大大_6395

雨丽大大_6395

2026-06-07

234人浏览

原创

parallel scavenge与parallel old是吞吐量优先的并行gc组合:前者用并行复制清理新生代,后者用并行标记-整理清理老年代;通过gctimeratio、自适应策略等参数调控吞吐,适用于批处理而非低延迟场景。

jvm中parallel scavenge与parallel old的多线程吞吐量优先收集器内核

Parallel Scavenge 与 Parallel Old 是一套专为吞吐量优先设计的多线程垃圾收集组合,内核逻辑围绕“最大化用户代码执行时间占比”展开,不追求单次停顿短,而强调单位时间内 GC 总耗时尽可能少。

核心算法分工明确

Parallel Scavenge 负责新生代,采用并行标记-复制算法:多个线程同时扫描、复制存活对象到 Survivor 或老年代,回收后 Eden 区完全清空,无碎片;Parallel Old 负责老年代,采用并行标记-整理算法:先并发标记,再将存活对象向一端压缩,最后清理边界外空间——既避免内存碎片,又支持大对象连续分配。

吞吐量控制由参数直接驱动

吞吐量不是估算值,而是通过 JVM 内置反馈机制主动调控的目标:

蛙蛙写作——超级AI智能写作助手
蛙蛙写作——超级AI智能写作助手

一款AI视频创作工具,主要用于蛙蛙写作辅助AI写文,帮助获取创意灵感,提供拆书、小说转剧本、视频生成等功能,是一款功能全面的AI智能写作工具,适合需要提升相关任务效率的用户。

下载
  • -XX:GCTimeRatio=n:设定 GC 时间占总运行时间的上限比例为 1/(1+n),例如设为 99,即允许 GC 最多占用 1% 时间,其余 99% 交还给用户代码
  • -XX:+UseAdaptiveSizePolicy(默认开启):JVM 根据 GC 日志中的暂停时长、晋升速率、回收效率等实时数据,自动调整年轻代大小、Survivor 比例、对象晋升年龄等,无需手动干预细节
  • -XX:MaxGCPauseMillis 可设但慎用:它会强制 JVM 缩小年轻代来换取更短单次停顿,反而抬高 GC 频率,拉低整体吞吐——这与吞吐量优先目标相悖

堆结构与线程协同优化

该组合依赖稳定可控的堆行为才能发挥效能:

  • -Xms 与 -Xmx 设为相等:避免运行时扩容触发额外 Full GC 或元空间调整,保障吞吐稳定性
  • 年轻代比例可调但不宜极端:默认 -XX:NewRatio=2(年轻代占堆 1/3),若对象生命周期极短且分配快,可设为 1(占 1/2);过高则易导致老年代过早填满,触发 Parallel Old 频繁介入
  • 所有 GC 阶段均为 Stop-The-World:包括 Minor GC 和 Major/Full GC,但因全程多线程并行执行,STW 时间在中等堆规模(4–8GB)下仍能保持相对可控

适用边界清晰,不可跨场景滥用

这套组合在 JDK 8 是默认,在 JDK 15+ 已被移除,其设计天然排斥低延迟诉求:

  • 适合后台批处理、离线计算、定时报表生成等任务——它们可以接受秒级 Full GC,但不能容忍长期 CPU 空转等待 GC 完成
  • 不适合 Web API、实时风控、消息推送等交互型服务——Parallel Old 的单次 STW 往往远超 200ms,极易引发超时或雪崩
  • 监控确认是否生效只需看 GC 日志开头:出现 Using Parallel GC 或 Parallel GC 字样,且日志中频繁出现 PSYoungGen 与 ParOldGen 标识即可判定启用成功

相关专题

更多
Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

2025.12.24

1049

20

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.21

363

30

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

2026.01.21

519

24

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

2026.02.06

369

20

C++多线程并发控制与线程安全设计实践
C++多线程并发控制与线程安全设计实践

本专题围绕 C++ 在高性能系统开发中的并发控制技术展开,系统讲解多线程编程模型与线程安全设计方法。内容包括互斥锁、读写锁、条件变量、原子操作以及线程池实现机制,同时结合实际案例分析并发竞争、死锁避免与性能优化策略。通过实践讲解,帮助开发者掌握构建稳定高效并发系统的关键技术。

2026.03.16

213

22

Java 多线程与并发编程实战
Java 多线程与并发编程实战

深入讲解 Java 并发编程体系,涵盖 Thread / Runnable / Callable 线程创建方式、线程生命周期与状态转换、synchronized 同步锁与 Lock/ReentrantLock 显式锁、volatile 可见性保证、ThreadPool 线程池配置与调优(核心参数/拒绝策略)、JUC 并发工具类(CountDownLatch/CyclicBarrier/Semaphore/ConcurrentHashMa

2026.04.17

309

31

C++ 多线程使用教程大全
C++ 多线程使用教程大全

系统讲解 C++11 及后续标准引入的多线程编程能力,涵盖 std::thread 线程创建与生命周期管理、std::mutex / shared_mutex 互斥锁与读写锁、std::condition_variable 条件变量同步、std::atomic 原子操作与内存序(memory_order)、std::future / promise / async 异步任务、线程池的设计与实现、死锁检测与避免策略,帮助开发者编写正确高效

2026.04.28

196

17

Python多线程、多进程与并发编程教程大全
Python多线程、多进程与并发编程教程大全

系统讲解 Python 的并发与并行编程体系,涵盖 GIL 全局解释器锁的原理与影响分析、threading 模块的线程创建/锁/事件/信号量、multiprocessing 模块的进程创建/进程间通信(Queue/Pipe/共享内存)、concurrent.futures 线程池与进程池的统一接口、I/O 密集型与 CPU 密集型任务的方案选择、多线程竞态条件排查与线程安全数据结构、subprocess 子进程管理,帮助开发者根据任务

2026.05.08

174

32

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习