0

0

什么是ZGC垃圾收集器_Java11引入的超低延迟GC底层魔法

P粉602998670

P粉602998670

发布时间:2026-03-16 16:12:40

|

520人浏览过

|

来源于php中文网

原创

ZGC能将停顿压至10ms以内,但需正确配置、合理堆结构及达标运行环境;其最大停顿与堆大小无关,仅取决于GC Roots数量和系统调度延迟。

什么是zgc垃圾收集器_java11引入的超低延迟gc底层魔法

ZGC到底能不能把停顿压到10ms以内

能,但前提是配置正确、堆结构合理、运行环境达标。ZGC的最大停顿时间与堆大小无关不是宣传话术,而是设计硬约束——它只取决于GC Roots数量和系统调度延迟。实测中,在256GB堆、活跃对象40GB的金融网关服务上,ZGC的STW峰值稳定在1.3ms;但若用错JDK版本或忽略NUMA拓扑,反而可能比G1更抖。

  • JDK 15+ 才是生产可用起点(JDK 11–14为-XX:+UnlockExperimentalVMOptions -XX:+UseZGC实验模式,不建议上线)
  • 必须运行在64位Linux(内核≥4.1),Windows/macOS支持滞后且默认禁用大页,延迟不可控
  • 停顿敏感场景下,-XX:+UseZGC要搭配-XX:+ZUncommitDelay=300(避免内存过早释放引发重分配抖动)

为什么ZGC不用分代却不怕小对象爆炸

它根本不管“年轻代”这回事,而是靠Region粒度+对象尺寸分级硬扛。ZGC把堆切成三类Region:Small(2MB)、Medium(32MB)、Large(≥4MB,单对象独占),小对象全扔进Small Region,回收时直接整页丢弃——没有Minor GC概念,但效果类似。

  • 小对象(Small Region,分配快、回收快,无标记开销
  • 大对象(≥4MB)进Large Region,不参与转移(复制代价太高),靠并发整理+指针染色规避访问失效
  • 别强行用-XX:NewRatio-XX:SurvivorRatio——ZGC会忽略这些参数,设了白设

读屏障和染色指针不是炫技,是并发安全的底线

ZGC能在应用线程跑着的时候移动对象,靠的不是魔法,是每次load操作前插入的读屏障(Load Barrier),以及把标记状态塞进64位指针高4位的染色指针(Colored Pointer)。这意味着:所有对象访问都要过一道检查,有开销,但可控。

  • 开启ZGC后,JIT编译器会自动插入屏障代码,无需改业务逻辑
  • 但若大量使用Unsafe.getXXX或JNI直接读内存,会绕过屏障——对象可能被移走而指针未更新,导致Segmentation fault或静默数据错乱
  • -XX:+ZVerifyReads可开启读屏障校验(仅调试用,性能损30%+)

线上切ZGC最容易翻车的三个地方

不是调参问题,而是环境认知偏差。很多团队在压测时一切正常,上线后突发毛刺,根源往往藏在底层设施里。

Seed-Music
Seed-Music

字节跳动推出的AI音乐生成与编辑工具

下载

立即学习Java免费学习笔记(深入)”;

  • 容器内存限制没对齐:Kubernetes里设limits.memory=32Gi,但ZGC实际需要额外约5%元数据空间,若cgroup硬限死,会触发OutOfMemoryError: Compressed class space
  • NUMA绑定失效:多路CPU服务器上,若Java进程没绑核绑内存(numactl --cpunodebind=0 --membind=0),ZGC的NUMA感知会退化,跨节点访问延迟飙升
  • Linux透明大页(THP)冲突:ZGC自己管理大页映射,若系统开启always模式的THP,会导致mmap失败并回退到普通页,吞吐骤降20%+

ZGC真正的复杂点不在怎么开,而在怎么让它和你的硬件、OS、容器 runtime 真正咬合。少一个numactl,多一行/sys/kernel/mm/transparent_hugepage/enabled的配置,就可能让亚毫秒承诺落空。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

448

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1518

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1172

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

837

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

463

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2362

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

874

2023.08.10

minimax入口地址汇总
minimax入口地址汇总

本专题整合了minimax相关入口合集,阅读专题下面的文章了解更多详细地址。

3

2026.03.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.5万人学习

Java 教程
Java 教程

共578课时 | 83.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号