当前位置: 首页 > news >正文

CMS / G1 / ZGC:收集器怎么选?它们分别怎么工作?

你问“收集器怎么选”,其实是在问两件事:

  • 吞吐量优先还是延迟优先
  • 你的堆有多大、停顿目标(RT)有多苛刻

这篇先把主线讲清楚:

  • CMS 为什么曾经流行
  • G1 为什么成为很多项目的默认选择
  • ZGC 解决的是什么问题

1. 你需要先会分清:吞吐量 vs 延迟

  • 吞吐量优先:单位时间处理更多请求(允许更长停顿)
  • 延迟优先:单次停顿必须短且可控(RT 稳定)

大多数在线服务更关心:

  • 延迟稳定性(尤其是 P99/P999)

2. CMS:低停顿的老年代并发收集器(历史重点)

CMS 的核心特点:

  • 老年代并发标记/清理,尽量减少 STW

你只要记住它的经典问题:

  • 碎片问题:标记清除容易产生碎片
  • 并发失败:回收赶不上分配,可能退化成 Full GC
  • 对 CPU 资源更敏感

工程上 CMS 常见的“感受”:

  • 平时停顿短
  • 但偶尔会出现一次很长的 Full GC

3. G1:Region 化 + 可预测停顿

G1 的核心思路:

  • 把堆切成多个 Region
  • 每次回收按“收益”挑选 Region
  • 目标是满足你设定的停顿时间目标

你只要先记住三个关键词:

  • Region
  • Remembered Set(跨 Region 引用记录)
  • 按收益回收(收益高的先回)

4. ZGC:超低停顿的并发收集器

ZGC 的定位很清晰:

  • 更大的堆
  • 更低的停顿

你可以把它理解成:

  • 把更多工作并发化
  • 尽量把 STW 的时间压缩到极短

但你要注意:

  • 选择 ZGC 往往意味着你对延迟极其敏感
  • 同时要考虑 JDK 版本与生产环境验证

5. 面试/实战都能用的选择逻辑

你可以按这个顺序回答“选哪个”:

  • 堆大小:大堆更倾向选择对大堆友好的收集器
  • 延迟目标:是否要求可预测停顿
  • CPU 预算:并发收集会占用更多 CPU
  • 业务特性:对象生命周期、峰值流量

一个常见的工程表述方式:

  • 大部分在线服务:优先考虑G1
  • 对极低停顿/超大堆:评估ZGC
  • CMS:更多是“理解历史与排老系统”

6. 总结

  • CMS:并发清理、碎片与并发失败是典型问题
  • G1:Region 化 + 可预测停顿,很多项目的主力选择
  • ZGC:更低停顿、更大堆的场景
  • 选型永远回到:延迟目标 + 堆大小 + 资源预算
http://www.jsqmd.com/news/503081/

相关文章:

  • Chord视频分析新手入门:第一次使用如何上传视频并获取分析结果
  • 3分钟掌握GFXReconstruct:图形API捕获与重放实战指南
  • 解锁5大系统调优引擎:AtlasOS性能提升实战指南
  • 效率重构:PaperZZ AI 如何让本科论文从选题到成稿实现高效落地
  • Linux下HYM8563 RTC驱动加载失败的5种排查姿势(附i2c工具实战)
  • 突破视频资源获取瓶颈:VideoDownloadHelper的全场景解析与应用方案
  • Lumerical仿真报错全解析:从No physical modes到diverge的解决方案
  • Agent协同失效?Dify工作流卡顿、消息丢失、循环调用问题全解析,5类高频故障诊断清单速查
  • GitHub加速插件:提升国内开发者访问效率的解决方案
  • 海康SDK在Unity中的正确打开方式:从DllNotFound到完美运行的避坑指南
  • 微信小程序如何优雅引入Animate.css?最新4.0+版本避坑指南
  • GitHub加速插件技术解析:如何彻底解决国内开发者访问GitHub的速度瓶颈
  • 内存池重建技术:三维修复架构解决《恶霸鲁尼》Windows 10崩溃难题
  • 避开这5个坑!UE5 Python远程执行功能调试指南(含Multicast端口冲突解决方案)
  • Qwen2-VL-2B-Instruct辅助LaTeX写作:从图表生成描述文本
  • 高效掌握Ultima Online服务器搭建:从入门到实践
  • 终极指南:3步掌握FunASR开源语音识别系统部署
  • PMSM伺服控制系统仿真:位置环控制及稳定性分析
  • 让你的产品进入DeepSeek的知识库 - 品牌2026
  • RHEL8 企业内网YUM仓库高效搭建指南
  • 从‘过目不忘’到‘去伪存真’:深度神经网络处理标签噪声的底层逻辑与演进史
  • 电价预测翻车现场:当你的LSTM验证损失比训练还低,别慌!这可能是好事
  • Docker化JumpServer:从零到一的容器化堡垒机部署实战
  • 从‘建造者’到‘侦探’:嵌入式工程师的IDA逆向入门心得(以交叉引用分析为例)
  • 内网穿透实战:安全访问本地部署的Qwen3-ForcedAligner-0.6B服务
  • 第八章 贪心算法part05
  • 复旦微FM33LG048芯片开发指南(1)SWD调试与LED控制实战
  • 利用Autofill插件优化JIRA缺陷提交流程
  • 利用闲置电脑与IPv6打造高速私有云盘:从零搭建到外网访问
  • sdut-python-实验三-字符串