当前位置:网站首页>JVM 从入门到放弃之 ZGC 垃圾收集器精讲
JVM 从入门到放弃之 ZGC 垃圾收集器精讲
2022-04-21 21:23:00 【InfoQ】

- < 1ms 最大暂停时间(jdk < 16 是 10ms,jdk >=16 是 <1ms )。
- 暂停时间不会随着堆、live-set 或 root-set 的大小而增加。
- 使用内存大小从 8MB 到16TB 地堆。
- 并发
- 基于 region
- 压缩
- NUMA 感知
- 使用彩色指针
- 使用负载屏障
ZGC 特征
内存布局
ZGC 没有分代的概念
- 小型 Region (Small Region ): 容量固定为 2M, 存放小于 256K 的对象。
- 中兴 Region (Medium Region): 容量固定为 32M,放置大于等于256K但小于4M的对象。
- 大型 Region (Large Region): 容量不固定,可以动态变化,但必须为2MB 的整数倍,用于放置 4MB或以上的大对象。

NUMA-aware

染色指针(Colored Pointer)

- 18位:预留给以后使用。
- 1位:Finalizable标识,此位与并发引用处理有关,它表示这个对象只能通过finalizer才能访问(finalizer:object基类的一个空方法,如果被重写则会在GC之前调用该方法,该方法会且只会被调用一次)。
- 1位:Remapped 标识,设置此位的值后,对象未指向relocation set中(relocation set表示需要GC的Region集合)。
- 1位:Marked1标识。
- 1位:Marked0标识,和上面的Marked1都是标记对象用于辅助GC。
- 42位:对象的地址(所以它可以支持2^42=4T内存):
为什么会有两个 mark 标记?
ZGC不能做指针压缩?
颜色指针的三大优势 ?
- 在一个Region中的所有存活对象都被移走后(复制走后),这个Region就可以被立即释放掉,因为它还有转发表记录着原始地址和新地址,这样的话,理论上,只要还有一个Region对象空闲,ZGC就能完成垃圾收集。
- 颜色指针有指针的“自愈”(Self-Healing)能力,这样子就减少了写屏障(例如三色标记中的增量更新或原始快照),只需要一个读屏障就可以解决问题,减少了内存屏障的使用数量。
- 颜色指针有着极大的扩展性,因为还有18位未使用,这样更有利于后续功能的扩展。
多重映射寻址

读屏障
Object o = obj.fieldA; // Loading an object reference from heap
<load barrier needed here>
Object p = o; // No barrier, not a load from heap
o.doSomething(); // No barrier, not a load from heap
int i = obj.fieldB; // No barrier, not an object reference
ZGC 工作过程

ZGC 核心参数

ZGC 触发时机
- 定时触发: 默认为不使用,可以通过 ZCollectionInterval 参数配置。GC 日志中的关键字 “Timer”。
- 预热触发: 最多三次,在堆内存空间达到 10%、20%、30% 时机触发、主要是通过 GC 的时间、为其他的 GC 触发准备。GC日志关键字 “Warmup”。
- 分配速率: 基于正态分布统计,计算内存 99% 可能的最大分配速率,以及此速率下内存将要耗尽的时间点,在耗尽之前触发 GC (耗尽时间,一次 GC 最大持续时间-一次 GC 检测周期时间)。GC日志关键字 “Allocation Rate”。
- 主动触发: (默认开启,可以通过 ZProactictive 参数配置)距上一次 GC 堆内存增长 10%,超过 5 分钟时,对比上次 GC的间隔时间限(一次 GC 最大持续时间),超过则触发。GC 日志关键字 “Proactive”。
- 元数据分配触发: 元数据区不足导致,GC 日志关键中是 “Metadata GC Threshold”
- 直接触发: 代码中显示调用 System.gc() 触发,GC 日志关键字是 “System.gc()”。
- 阻塞内存分配请求触发: 垃圾对象来不及挥手,占满整个堆空间,导致部分线程阻塞,GC 日志关键字是 “Allocation Stall”。
ZGC 日志分析
示例代码
/**
* VM Args:-XX:+UseZGC -Xmx8m -Xlog:gc*
*/
public class HeapOOM {
public static void main(String[] args) {
List<byte[]> list = new ArrayList<>();
while (true) {
list.add(new byte[2048]);
}
}
}
GC 日志分析

- Start: 开始GC,并标明的GC触发的原因。上图中触发原因是自适应算法。
- Phase-Pause Mark Start: 初始标记,会STW。
- Phase-Pause Mark End: 再次标记,会STW。
- Phase-Pause Relocate Start: 初始转移,会STW。
ZGC 总结
版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/7407a6b386f9bf1a9a5298453
边栏推荐
- Intelligent target detection 50 - tensorflow2 uses mobilenet series (V1, V2, V3) to build yolov4 target detection platform
- Han Pi's semantic segmentation and remaking 6 -- pytoch builds its own UNET semantic segmentation platform
- Information visualization large screen display board (with download connection)
- 低版本R语言ggplot2安装问题解决【rlang>=1.0.0 is require】
- Bailian4005 拼点游戏【贪心】
- 工作流 流程设置 定制开发
- 通达oa工作流升级 操作说明
- Bailian4004 digit combination [recursion + DP]
- EeasyBI报表系统 数据源选择代码开发手册
- 10.2 concentration
猜你喜欢

读书破万“卷”:国民阅读洞察2022

The annual salary is 170W. Alibaba P8 blind date requires the woman's monthly salary of 10000. Netizen: it's a little high

flutter插件化,来看看这份超全面的《Android面试题及解析》
![[untitled] the test time is divided equally](/img/a0/5fa1e9ddbd395e9db2e0bf59d2f8e2.jpg)
[untitled] the test time is divided equally

Swift 使用AVPlayer 和 AVPlayerItem 做语音播放

其它——分库分表之终极设计方案
![[ZigBee wireless communication module step by step] zigbee3 0 module to establish remote network control method](/img/d5/5102aae908f444e187ebc812e236a9.png)
[ZigBee wireless communication module step by step] zigbee3 0 module to establish remote network control method

奇安信冬奥“零事故”终端安全分享会:成功解决6641次攻击事件

主成分分析R语言实现

Others - interface test by postman
随机推荐
Use fluent to animate a color filter for photos
聪明的人脸识别4——Pytorch 利用Retinaface+Facenet搭建人脸识别平台
Bailian4005 拼点游戏【贪心】
flutter插件化,来看看这份超全面的《Android面试题及解析》
Let's take a look at this super comprehensive Android interview questions and analysis
Yuanxin technology seeks to be listed again: the amount of loss soars, and the R & D expense rate is less than 2%. How to break through?
通达OA系统对接 单点登录平台使用和开发手册
反射111
其它——CGI,FastCGI,WSGI,uWSGI,uwsgi一文搞懂
Bailian4004 数字组合【递归+DP】
MapReduce服务初体验
Back to basics, multi-party security computing should return to the original consideration of "security"
Talking about work -- Talking about data post
圆心科技再求上市:亏损金额飙升,研发费用率低于2%,如何突围?
强化学习基础篇(一):多臂老虎机 Multi-armed Bandit
EeasyBI报表系统 数据源选择代码开发手册
使用Flutter给照片调个颜色滤镜动画
信息可视化大屏展板(附下载连接)
Install MySQL 8 for Ubuntu
AI+大健康, 是超能机器人的正确打开方式?