【面试专栏|JVM虚拟机】从Serial到ZGC,JVM垃圾收集器进化史
予枫个人主页 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》《Java 面试刷题指南》 Debug 这个世界Return 更好的自己引言垃圾收集器GC是JVM的核心组件之一直接决定了Java程序的性能、吞吐量和延迟。从最基础的Serial收集器到高性能的ZGC不同收集器的设计理念和适用场景天差地别。本文将全面对比Serial、ParNew、CMS、G1、ZGC 5大经典垃圾收集器拆解核心特点、工作原理、优缺点及适用场景补充面试高频追问帮你吃透GC选型与优化关键收藏备用文章目录引言一、GC收集器核心前提必懂基础二、5大经典垃圾收集器逐一解析核心章节1. Serial 收集器串行GC—— 最简单的GC收集器核心特点优缺点适用场景核心参数JVM配置2. ParNew 收集器并行新生代GC—— Serial的并行升级版核心特点优缺点适用场景核心参数JVM配置3. CMS 收集器并发标记清除GC—— 低延迟优先核心特点优缺点适用场景核心参数JVM配置4. G1 收集器区域化分代式GC—— 平衡吞吐量与延迟核心特点优缺点适用场景核心参数JVM配置5. ZGC 收集器低延迟高并发GC—— 极致延迟优化核心特点优缺点适用场景核心参数JVM配置三、5大垃圾收集器核心对比表一目了然四、面试官追问环节实战必备五、总结一、GC收集器核心前提必懂基础在对比5大收集器之前先明确2个核心前提避免理解偏差所有GC收集器的核心目标一致回收堆内存中“无用对象”释放内存空间避免内存泄漏和OOM收集器的性能衡量指标吞吐量CPU用于业务代码的时间占比、延迟GC停顿时间、内存占用、并发能力不同收集器侧重不同无绝对“最优”只有“最适配”。提示点赞收藏本文后续面试、调优时直接查阅省去反复查资料的时间二、5大经典垃圾收集器逐一解析核心章节1. Serial 收集器串行GC—— 最简单的GC收集器Serial收集器是最基础、最古老的垃圾收集器采用“串行回收”机制即单线程执行垃圾收集收集期间会暂停所有用户线程STWStop The World。核心特点回收线程单线程唯一工作线程执行GC无线程切换开销回收算法新生代采用“复制算法”老年代采用“标记-整理算法”STW特性收集期间全程STW停顿时间与堆内存大小正相关堆越大停顿越久内存占用极低无额外线程开销实现简单。优缺点✅ 优点实现简单、内存占用小、单线程无切换开销在小堆内存几十MB~几百MB场景下停顿时间可接受❌ 缺点STW时间长无法应对大堆内存GB级不适合高并发、低延迟场景。适用场景小型应用、嵌入式设备堆内存较小开发、测试环境追求简单、无额外配置。核心参数JVM配置// 新生代使用Serial收集器-XX:UseSerialGC2. ParNew 收集器并行新生代GC—— Serial的并行升级版ParNew是Serial收集器的“并行版本”核心改进是将新生代的单线程回收改为多线程回收本质上是“并行收集STW”的组合老年代仍依赖Serial收集器。核心特点回收线程多线程默认线程数等于CPU核心数可通过参数调整回收算法新生代复制算法老年代标记-整理算法复用Serial老年代逻辑STW特性收集期间仍会STW但多线程并行回收停顿时间比Serial短堆越大优势越明显兼容性唯一能与CMS收集器配合使用的新生代收集器。优缺点✅ 优点并行回收STW时间比Serial短适配中大型堆内存兼容CMS❌ 缺点仍有明显STW多线程存在线程切换开销老年代回收性能一般。适用场景中大型应用堆内存1~10GB追求吞吐量对延迟有一定要求但不极致配合CMS使用。核心参数JVM配置// 新生代使用ParNew收集器-XX:UseParNewGC// 设置GC线程数默认等于CPU核心数-XX:ParallelGCThreads43. CMS 收集器并发标记清除GC—— 低延迟优先CMSConcurrent Mark Sweep是第一款追求“低延迟”的垃圾收集器核心设计是“并发收集”尽量减少STW时间适合对延迟敏感的场景如Web应用。核心特点回收线程多线程并发回收与用户线程并行执行回收算法老年代采用“标记-清除算法”新生代仍依赖ParNew或Serial核心流程4步初始标记STW快速标记根对象→ 并发标记与用户线程并行标记所有可达对象→ 重新标记STW修正并发标记的遗漏→ 并发清除与用户线程并行清除无用对象STW特性仅在初始标记和重新标记阶段STW停顿时间极短毫秒级。优缺点✅ 优点并发收集STW时间短延迟低适合高并发、低延迟场景如Web、接口服务❌ 缺点1. 标记-清除算法会产生内存碎片可能导致大对象无法分配内存触发Full GC2. 并发收集占用CPU资源会降低吞吐量3. 无法处理“浮动垃圾”并发清除阶段产生的新垃圾。适用场景高并发Web应用、接口服务对延迟敏感允许轻微吞吐量下降堆内存较大10~20GB且用户线程对延迟要求高。核心参数JVM配置// 老年代使用CMS收集器新生代默认ParNew-XX:UseConcMarkSweepGC// 开启CMS并发标记阶段的中断机制减少CPU占用-XX:CMSParallelRemarkEnabled// 设置CMS触发GC的阈值默认92%老年代使用率达到该值触发GC-XX:CMSInitiatingOccupancyFraction804. G1 收集器区域化分代式GC—— 平衡吞吐量与延迟G1Garbage-First是JDK1.7引入的收集器设计目标是“平衡吞吐量和延迟”兼顾两者优势替代CMS成为中大型应用的首选。核心特点内存布局打破“新生代老年代”的固定分区将堆内存划分为多个大小相等的独立区域Region每个Region可动态切换为新生代或老年代回收算法结合“复制算法”和“标记-整理算法”优先回收垃圾最多的RegionGarbage-FirstSTW特性支持“可预测的停顿时间”通过参数设置最大STW时间避免长时间停顿并发能力部分阶段与用户线程并行兼顾吞吐量和延迟。优缺点✅ 优点1. 平衡吞吐量和延迟可预测停顿时间2. 无内存碎片标记-整理算法3. 适配大堆内存10GB~100GB4. 支持动态调整Region角色灵活应对不同内存场景❌ 缺点1. 内存占用比CMS高需要额外内存维护Region信息2. 小堆内存场景下性能不如Serial/ParNew3. 并发收集阶段仍会占用一定CPU资源。适用场景中大型应用堆内存10GB~100GB既追求吞吐量又要求低延迟如电商、金融服务替代CMS解决CMS内存碎片问题。核心参数JVM配置// 使用G1收集器-XX:UseG1GC// 设置最大STW停顿时间毫秒-XX:MaxGCPauseMillis200// 设置Region大小默认根据堆内存自动计算可手动指定-XX:G1HeapRegionSize16m5. ZGC 收集器低延迟高并发GC—— 极致延迟优化ZGC是JDK11引入的新一代垃圾收集器核心目标是“极致低延迟”支持TB级堆内存STW时间控制在10毫秒以内适合超大型、高并发应用。核心特点内存布局采用“区域化”布局分为小、中、大三类Region适配不同大小的对象回收算法基于“标记-整理算法”无内存碎片核心技术采用“着色指针”和“读屏障”技术实现并发标记、并发整理几乎全程与用户线程并行STW特性仅在初始标记和最终标记阶段有极短STW通常小于1毫秒不受堆内存大小影响即使TB级堆STW也能控制在10毫秒内。优缺点✅ 优点1. 极致低延迟STW时间极短2. 支持TB级堆内存适配超大型应用3. 无内存碎片无需担心大对象分配问题4. 并发收集吞吐量影响小❌ 缺点1. JDK版本要求高需JDK11及以上2. 内存占用较高需要额外内存维护着色指针等信息3. 目前在国内生产环境的应用不如G1广泛生态相对较新。适用场景超大型应用堆内存100GB~TB级对延迟要求极高的场景如高频交易、实时数据分析JDK11及以上版本追求极致性能。核心参数JVM配置// 使用ZGC收集器-XX:UseZGC// 设置堆内存大小-Xmx100g// 设置ZGC的并发线程数-XX:ZGCThreads8三、5大垃圾收集器核心对比表一目了然收集器回收方式核心算法STW特性内存占用适用堆大小核心优势核心劣势Serial串行单线程新生代复制老年代标记-整理全程STW时间长极低几十MB~几百MB简单、无线程开销停顿久不适合大堆ParNew并行多线程新生代复制老年代标记-整理全程STW时间较短较低1~10GB停顿比Serial短兼容CMS仍有STW线程切换开销CMS并发多线程老年代标记-清除新生代复制仅初始/重新标记STW时间极短中等10~20GB低延迟适配高并发内存碎片占用CPU有浮动垃圾G1并发并行复制标记-整理可预测停顿时间可控较高10GB~100GB平衡吞吐量与延迟无内存碎片小堆性能差内存占用高ZGC并发多线程标记-整理极短STW10ms不受堆大小影响高100GB~TB级极致低延迟支持超大型堆JDK版本要求高生态较新四、面试官追问环节实战必备这部分是面试高频考点比纯八股文更实用帮你提前准备应答思路追问1CMS收集器的“浮动垃圾”是什么如何解决答浮动垃圾是CMS并发清除阶段用户线程产生的新垃圾这些垃圾无法被当前GC回收只能等到下一次GC。解决方式降低CMS触发阈值如设置-XX:CMSInitiatingOccupancyFraction80提前触发GC预留足够内存容纳浮动垃圾或升级为G1/ZGC收集器。追问2G1收集器的“可预测停顿时间”是如何实现的答G1通过“Region分区”和“优先级回收”实现首先将堆划分为多个小Region每次GC只回收部分垃圾最多的Region而非整个堆其次通过参数-XX:MaxGCPauseMillis设置最大停顿时间G1会根据历史回收数据动态调整本次回收的Region数量确保停顿时间不超过设定值。追问3ZGC的“着色指针”技术核心作用是什么答着色指针是ZGC的核心技术本质是在指针中嵌入“标记位”用于标记对象的回收状态如可达、不可达。无需像传统GC那样扫描整个堆标记对象而是通过指针的标记位直接判断对象状态实现并发标记和整理大幅减少STW时间。追问4生产环境中如何选择合适的垃圾收集器答核心看3个维度堆内存大小、延迟要求、吞吐量要求。① 小堆1GB选Serial② 中堆1~10GB追求吞吐量选ParNew追求延迟选CMS③ 中大型堆10~100GB选G1平衡吞吐和延迟④ 超大型堆100GB、极致低延迟选ZGCJDK11。五、总结本文全面解析了Serial、ParNew、CMS、G1、ZGC 5大经典垃圾收集器的核心特点、工作原理、优缺点及适用场景通过对比表快速区分差异补充面试高频追问帮你吃透GC选型与优化关键。核心结论无最优收集器只有最适配的收集器——小型应用选Serial中大型应用优先G1高并发低延迟选CMS/ZGC超大型堆选ZGC。最后觉得本文对你有帮助的话点赞收藏关注后续持续更新JVM核心知识点和面试干货

相关新闻

Python模拟DeepSeek

Python模拟DeepSeek

Part1:引入如何用Python来作AI?或者说,如何模拟DeepSeek?Part2:趣味版本今天来教大家,10行代码写DeepSeek。# 导入库 import time# 输出提示语 print(我是DeepSeek,请输入你的问题:)…

2026/7/5 6:53:22 阅读更多 →
青饲料切割机solidworks模型

青饲料切割机solidworks模型

青饲料切割机作为农业机械领域的关键设备,其核心作用在于高效完成青饲料的切割作业,为畜牧业提供标准化、易储存的饲料原料。该设备通过机械结构与动力系统的协同,将茎秆类作物(如玉米秸秆、牧草等)切割成特定长度&…

2026/7/4 12:49:51 阅读更多 →
nodejs基于vue的机动车汽车出险快速理赔平台设计vue

nodejs基于vue的机动车汽车出险快速理赔平台设计vue

目录需求分析与架构设计前端核心功能实现后端服务开发性能与安全优化测试与部署方案项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与架构设计 业务需求梳理 明确机动车出险快速理赔平台的核…

2026/5/17 9:17:04 阅读更多 →

最新新闻

3个痛点,1个方案:Wand-Enhancer如何彻底改变你的游戏修改体验

3个痛点,1个方案:Wand-Enhancer如何彻底改变你的游戏修改体验

3个痛点,1个方案:Wand-Enhancer如何彻底改变你的游戏修改体验 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 你是否曾经为游戏修…

2026/7/5 6:53:58 阅读更多 →
WarcraftHelper:魔兽争霸III终极性能优化与兼容性解决方案

WarcraftHelper:魔兽争霸III终极性能优化与兼容性解决方案

WarcraftHelper:魔兽争霸III终极性能优化与兼容性解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为《魔兽…

2026/7/5 6:49:57 阅读更多 →
AI安全实战:从红蓝对抗到紫队协同的范式演进与落地实践

AI安全实战:从红蓝对抗到紫队协同的范式演进与落地实践

1. 项目概述:从对抗到协同的范式演进最近几年,AI安全从一个技术话题,迅速演变成了一个关乎业务存续的战略议题。无论是模型被投毒导致推荐系统失灵,还是API被滥用造成巨额算力损失,甚至是生成式AI输出有害内容引发的公…

2026/7/5 6:47:57 阅读更多 →
2025年AI智能体开发实战:从核心概念到零基础搭建指南

2025年AI智能体开发实战:从核心概念到零基础搭建指南

1. 从“大模型”到“智能体”:为什么2025年你必须懂这个?如果你在2025年还只是把AI当成一个聊天机器人或者一个画图工具,那你可能已经落后了。过去两年,整个AI领域最核心的演进方向,已经从“大模型”本身,转…

2026/7/5 6:47:57 阅读更多 →
DiffuMeta:基于代数语言与扩散Transformer的3D超材料生成实践指南

DiffuMeta:基于代数语言与扩散Transformer的3D超材料生成实践指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在实际工程和科研项目中,材料设计正从传统的“试错法”和“经验驱动”向“数据驱动”和“AI生成”范式转变。传统方法设计…

2026/7/5 6:47:57 阅读更多 →
Linux服务器应急响应实战:从异常检测到安全加固的完整流程

Linux服务器应急响应实战:从异常检测到安全加固的完整流程

1. 项目概述:当Linux服务器“不对劲”时,我们该做什么?干了这么多年运维和安全,最怕的就是半夜被电话叫醒,说服务器“卡了”、“慢了”或者“有奇怪的东西”。这种时候,脑子里那根“应急响应”的弦就得立刻…

2026/7/5 6:45:56 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻