JVM中串行、并行、并发、低延迟四大垃圾收集器家族在HotSpot中的演进路线

冬瑶姑娘_3009

冬瑶姑娘_3009

2026-06-07

624人浏览

原创

hotspot jvm垃圾收集器按“串行→并行→并发→低延迟”代际演进,分别聚焦小内存、高吞吐、低延迟和确定性停顿,每代解决前代瓶颈:串行(serial/serial old)单线程stw,适合客户端;并行(parnew/parallel scavenge等)多线程stw提升吞吐;并发(cms)部分阶段与用户线程并发,降低延迟但有碎片和浮动垃圾问题;低延迟(g1/zgc/shenandoah)通过region化、读屏障等实现毫秒级可控停顿。

jvm中串行、并行、并发、低延迟四大垃圾收集器家族在hotspot中的演进路线

HotSpot JVM 的垃圾收集器不是凭空出现的,而是围绕“停顿时间(Latency)”和“吞吐量(Throughput)”两大核心目标,分阶段演进出来的四类技术路线:串行 → 并行 → 并发 → 低延迟。它们不是并列关系,而是代际递进——每一代都在解决前一代的关键瓶颈。

串行家族:单线程、极简可靠,面向小内存场景

代表收集器:Serial(新生代)、Serial Old(老年代)

这是 JVM 最原始的 GC 实现,诞生于 JDK 1.3 之前。它用一条线程完成全部 GC 工作,全程 STW(Stop-The-World),但正因为“单”,所以没有线程调度、同步、通信开销,内存占用最小、启动最快。

适用场景非常明确:客户端模式、嵌入式环境、几十 MB 级堆内存应用(如 Swing 桌面工具、小型 IoT 终端)。在这些场景里,GC 停顿常在毫秒级,用户几乎无感,而省下的资源比多线程更实在。

  • 默认启用条件:JVM 自动识别为 Client 模式时(如 -client 参数,或早期 JDK 默认行为)
  • 手动启用:-XX:+UseSerialGC
  • 关键价值:不是“落后”,而是“精准克制”——在资源受限时,拒绝过度设计

并行家族:多线程加速吞吐,面向后台计算密集型负载

代表收集器:ParNew、Parallel Scavenge(新生代),Parallel Old(老年代)

随着服务器硬件升级(多核 CPU 普及),单线程 GC 成为瓶颈。并行收集器应运而生——它仍要求 STW,但把 GC 任务拆给多个线程并行执行,显著缩短单次回收耗时,从而提升整体吞吐量。

这里要注意区分两个“并行”分支:

Vidu Claw
Vidu Claw

一款AI视频创作工具,主要用于Vidu AI打造的多模态AI视频创作智能体,内置Vidu Skills,支持OpenClaw调用,适合需要提升相关任务效率的用户。

下载
  • ParNew:Serial 的多线程翻版,设计初衷是配合 CMS(因 CMS 需要一个能快速完成新生代回收的搭档),强调与 CMS 的兼容性
  • Parallel Scavenge + Parallel Old:专为吞吐量优化,支持 -XX:MaxGCPauseMillis 和 -XX:GCTimeRatio 等量化调控,并自带自适应策略(-XX:+UseAdaptiveSizePolicy),适合批处理、科学计算等对响应不敏感、但要求长时间高效率运行的系统

并发家族:突破 STW 边界,首次实现用户线程与 GC 线程“共存”

代表收集器:CMS(Concurrent Mark-Sweep)

当 Web 应用、实时交易系统等对延迟极度敏感时,并行 GC 的“全暂停”模型已不可接受。CMS 在 JDK 5 引入,首次将 GC 拆分为“初始标记(STW)、并发标记、重新标记(短暂停)、并发清除”四阶段,其中两段核心工作(标记、清除)与用户线程并发执行。

但它不是银弹:

  • 对 CPU 资源争抢明显,可能拖慢业务吞吐
  • 采用“标记-清除”算法,易产生内存碎片,触发 Full GC
  • 无法处理“浮动垃圾”,并发期间新分配对象若在清除后才死亡,只能等下次回收

CMS 的意义不在于完美,而在于证明了“可预测低延迟 GC”可行——它直接催生了后续 G1 和 ZGC 的设计哲学。

低延迟家族:以确定性停顿为目标,面向现代云原生与实时系统

代表收集器:G1(JDK 7u4)、ZGC(JDK 11)、Shenandoah(JDK 12)

这一代不再满足于“减少停顿”,而是追求“停顿可控且与堆大小无关”。G1 将堆划分为固定大小 Region,优先回收垃圾最多的区域(Garbage-First),配合增量式并发标记与混合回收,把 STW 控制在 10~200ms;ZGC 和 Shenandoah 更进一步,通过读屏障(Load Barrier)和染色指针等技术,将 STW 压缩到 10ms 以内,甚至亚毫秒级,且停顿时间不随堆增长而上升。

  • G1 是过渡主力:平衡性好,JDK 9 后成为默认 GC,适合中大型服务(几 GB 到数十 GB 堆)
  • ZGC/Shenandoah 是前沿选择:适用于超大堆(TB 级)、金融风控、游戏服务器等毫秒级响应刚需场景
  • 共同特征:不再严格区分新生代/老年代,Region 化 + 并发标记 + 增量转移,彻底重构 GC 工作模型

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

80

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

180

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

140

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

80

12

热门下载

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

精品课程

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

共6课时 | 54.6万人学习

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

共89课时 | 133.4万人学习