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

ZGC 垃圾收集器

ZGC (Z Garbage Collector) 是 Java 垃圾收集器发展史上的革命性突破。它由 Oracle 开发,旨在解决大内存堆下的延迟问题。

JDK 15 开始成为正式特性,到 JDK 21/25 已经极度成熟,ZGC 已成为超低延迟应用超大堆内存应用的首选方案。


🚀 核心目标:停顿时间与堆大小解耦

ZGC 的核心承诺只有一句话:

无论堆内存是 100MB 还是 10TB,GC 的停顿时间(Pause Time)都能控制在 1 毫秒以内(通常 < 0.5ms)。

这与 G1 或 CMS 完全不同:

  • G1/CMS:堆越大,需要扫描和整理的对象越多,停顿时间越长(线性增长)。
  • ZGC:停顿时间是恒定的,与堆大小无关。

🧠 底层核心技术原理

ZGC 之所以能实现“并发整理”且停顿极短,主要依赖于两项黑科技:染色指针 (Colored Pointers)读屏障 (Load Barriers)

1. 染色指针 (Colored Pointers)

  • 传统方式:对象的状态(如是否被标记、属于哪一代、是否被移动)通常存储在对象头(Object Header)中。GC 修改状态需要访问对象本身,这在并发环境下很难处理。
  • ZGC 方式
    • ZGC 将对象的状态信息(4 个标志位:Marked0, Marked1, Remapped, Finalizable)直接存储在对象引用的指针高位上(64 位指针中,高几位 unused bit)。
    • 优势
      • 无需访问对象:GC 线程只需查看指针的高位就能知道对象状态,无需读取对象头,极大减少了缓存一致性开销。
      • 节省空间:对象头不需要存储 GC 状态位,对象更紧凑。
    • 限制:由于占用了指针高位,ZGC 目前仅支持 64 位平台,且最大堆内存受限(早期版本 4TB,JDK 21+ 已支持更大,理论上可达 PB 级)。

2. 读屏障 (Load Barriers)

  • 问题:在 GC 并发移动对象时,如果应用程序线程(Mutator)正在读取一个即将被移动的对象的引用,该怎么办?
  • 解决方案:ZGC 在应用程序线程读取对象引用的指令处,插入了一段极短的代码(读屏障)。
  • 工作流程
    1. 应用线程读取指针 P
    2. 触发读屏障:检查 P 的染色位。
    3. 如果需要修正
      • 如果对象已被移动到新地址,读屏障会自动更新指针 P 为新地址,并清除染色位。
      • 如果对象正在被标记,读屏障会协助 GC 完成标记。
    4. 返回正确的对象引用给应用线程。
  • 结果:应用线程永远拿到的是最新、正确的对象地址。GC 可以随意移动对象,而应用线程无感知(除了极微小的屏障开销)。这使得并发整理成为可能。

3. 多重映射视图 (Multi-Mapping Views)

  • ZGC 使用虚拟内存映射技术,让同一块物理内存可以通过不同的虚拟地址访问。
  • 当对象从 Region A 移动到 Region B 时,ZGC 暂时保留 Region A 的映射指向新位置。读屏障负责将访问 Region A 的请求重定向到 Region B。一旦所有旧引用都被修正,旧的映射被移除。

⚙️ ZGC 的运行阶段

ZGC 的所有关键阶段几乎都是并发执行的,只有极短的 STW(主要用于根扫描和栈扫描)。

阶段 名称 是否 STW 动作描述
1 暂停 (Pause) (<1ms) 1. 标记 GC Roots。2. 扫描栈(找出本地变量中的引用)。3. 设置 Marked0 位。
2 并发标记 (Concurrent Mark) 后台线程遍历对象图,设置 Marked1 位。应用线程通过读屏障协助标记。
3 暂停 (Pause) (<1ms) 1. 再次扫描栈(处理标记期间变化的引用)。2. 转移存活对象到新的 Region(并发开始)。
4 并发转移 (Concurrent Transfer) 后台线程将存活对象复制到新 Region。应用线程通过读屏障自动修正引用指向新地址(自愈)。
5 暂停 (Pause) (<1ms) 清理旧 Region,重置指针染色位,完成回收。

注:随着 JDK 版本升级(特别是 JDK 21+),部分原本需要短暂 STW 的步骤(如栈扫描)也逐步实现了并发化,停顿时间进一步缩短。


⚖️ ZGC vs. G1 vs. CMS

特性 CMS (已死) G1 (默认) ZGC (高性能)
最大停顿时间 低,但不可控 (Full GC 长) 可预测 (随堆增大而增加) 极低 (<1ms)与堆大小无关
堆内存支持 < 4GB 4GB - 32GB+ 任意大小 (TB/PB 级)
算法核心 标记 - 清除 分区 + 复制整理 染色指针 + 读屏障
吞吐量 中高 (JDK 21+ 已达 G1 的 90%+)
CPU 开销 略高 (读屏障有微小开销,但在现代 CPU 上可忽略)
碎片问题 严重
适用场景 历史遗留 通用服务端 超低延迟、超大堆

🛠️ 如何使用与调优

JDK 15+ 中,启用 ZGC 非常简单。

1. 启用命令

java -XX:+UseZGC -jar your-app.jar

(在 JDK 21+ 中,ZGC 甚至可以作为某些场景下的默认选项,或者通过 -XX:+UseZGC 显式开启)

2. 核心调优参数

  • 堆大小设置 (强烈推荐固定)

    -Xms16g -Xmx16g
    

    ZGC 在固定堆大小下表现最佳,避免动态扩容带来的开销。

  • 软上限 (Soft Max Heap Size) - JDK 21+ 新特性

    -XX:SoftMaxHeapSize=8g
    

    允许堆在空闲时收缩到 8GB,但在需要时可扩展到 -Xmx 设定的最大值。这解决了 ZGC 早期版本“吃了内存就不吐”的问题,非常适合云原生环境。

  • 分页视图 (Large Pages)

    -XX:+UseLargePages
    

    使用操作系统的超大页(Huge Pages),减少 TLB Miss,显著提升 ZGC 性能(尤其是大堆场景)。需在 OS 层面配置支持。

  • 并发线程数

    -XX:ConcGCThreads=4
    

    通常 JVM 会自动根据 CPU 核数计算,无需手动调整,除非在容器受限环境中。

  • 着色指针模式 (JDK 21+ 优化)
    在 JDK 21 中,ZGC 引入了无指针染色模式(在某些架构上),进一步降低开销,通常自动选择。


💡 适用场景与最佳实践

✅ 强烈推荐场景

  1. 超低延迟要求:金融高频交易、实时竞价广告、在线游戏服务器、电信核心网。任何不能容忍 >10ms 卡顿的场景。
  2. 超大堆内存:堆内存 > 32GB,甚至达到 TB 级别。G1 在这种规模下停顿时间可能达到秒级,而 ZGC 依然保持毫秒级。
  3. 内存波动大:利用 JDK 21 的 SoftMaxHeapSize,在云环境中节省成本。

⚠️ 注意事项

  1. CPU 开销:读屏障意味着每条读取引用的指令都要多执行几行代码。在极度 CPU 敏感内存很小(< 2GB)的场景下,Parallel GC 或 Serial GC 的吞吐量可能略高于 ZGC。但在现代多核 CPU 上,这种差异通常小于 5%,几乎可忽略。
  2. JDK 版本
    • JDK 11/15:ZGC 可用,但功能有限(如不支持压缩指针,最大堆受限)。
    • JDK 17:性能大幅提升,支持更多架构。
    • JDK 21/25生产环境首选。性能已完全媲美 G1,且增加了弹性堆大小等高级特性。
  3. 监控:使用 -Xlog:gc* 查看日志。关注 Pause Total,应该始终维持在 1ms 以下。

📊 总结

ZGC 是 Java 并发垃圾收集的终极形态之一。

  • 如果你在使用 JDK 21 或更高版本,并且没有极端的吞吐量优先需求(如纯离线批处理),ZGC 应该是你的默认选择
  • 它消除了“堆大小”与“停顿时间”之间的权衡,让开发者可以大胆分配大内存,而不用担心 GC 卡顿。
  • 随着 JDK 25 的发布,ZGC 的性能和稳定性已经达到了前所未有的高度,标志着 Java 进入了“亚毫秒级 GC”的新时代。

一句话建议:新项目直接用 JDK 21/25 + ZGC,享受丝滑的低延迟体验。

http://www.jsqmd.com/news/428451/

相关文章:

  • 2026知房置业选购指南,解读不同区域表现,明确有无服务漏洞 - myqiye
  • simplis仿真电流模式buck(三)
  • 深入解析 KES 数据库运维核心:资源回收与膨胀防治全攻略
  • 2026年小程序公司综合实力排名:北京首选这家定制化开发服务商 - 品牌2026
  • 2026年度北京小程序开发公司推荐!深度测评定制化服务商哪家好 - 品牌2026
  • 如何选择优质百联OK卡回收平台?高折扣回收攻略曝光 - 团团收购物卡回收
  • 2026年知名度高的国际高中推荐:升学率比较高的优质国际高中盘点 - 品牌2026
  • 2026年粒子计数器品牌综合榜单与选购指南:深耕半导体、医药及环保领域的核心设备推荐 - 深度智识库
  • 2026年3月家庭/商用/多功能/折叠健身器材公司选型指南:技术变革拐点,五强格局锁定行业领导者 - 2026年企业推荐榜
  • 2026年企业管理咨询公司推荐榜单:江苏上海6S精益生产/薪酬绩效股权激励/5S现场管理咨询专业服务深度解析 - 品牌企业推荐师(官方)
  • 2026年企业管理培训实力机构推荐榜:覆盖江苏营销、上海管理层、班组长、新员工、AI及人力资源管理培训的深度解析 - 品牌企业推荐师(官方)
  • 2026北京小程序开发公司排名前瞻:定制化服务哪家强? - 品牌2026
  • 杭州做贴面专业吗?2026口腔机构推荐 - 品牌排行榜
  • 从行业巨头到隐形冠军:超声波设备实力供应商全景图 - 品牌推荐大师1
  • 2026年3月商用/家庭/多功能/折叠健身器材厂家竞争格局深度分析报告 - 2026年企业推荐榜
  • 2026年3月上海离婚律师/离婚诉讼律师/离婚房产分割律师/离婚财产分割律师/离婚抚养权律师/起诉离婚律师事务所测评 - 2026年企业推荐榜
  • 关于小宝宝米糕的一切
  • RocketMQ的Rebalance原理:从源码到实战,吃透分布式消费负载均衡
  • ABC325VP 记录
  • 漏洞报告处理平台 - 支持Nuclei/Xray/自定义txt报告导入,AI驱动的安全漏洞管理与分析系统
  • 已经基本能锁定问题了
  • 赛芯微 XB8989AF 4.30V/2.40V/18A 单节锂电池保护IC SOP8-PP 技术解析
  • 2026年广东地坪漆厂家哪家好?靠谱稳定实力强口碑佳 适配多场景且实力出众 - 深度智识库
  • Wireshark八个使用技巧
  • 数据采集网关的测评与推荐
  • ahk v2 脚本
  • 腾讯应用宝为用户提供超越移动设备使用体验的PC端应用
  • 赛芯微 XB6042M2 4.475V/2.8V/0.4A 单节锂电池保护IC DFN1X1x0.37-4 技术解析
  • ​​​​​​​无网也无忧:4G摄像头如何以“硬核”连接重塑智慧安防新生态
  • 2026年3月呼和浩特婚姻纠纷/民事纠纷/交通事故/律师哪家好?行业权威选型指南与TOP5解析 - 2026年企业推荐榜