ZGC algorithm
ZGC是一个由Azul System
公司研发的商用 #分区收集器, 可以使用在 #NUMA 架构上
#STW 时间基本稳定,和堆大小无关
适合TB级别堆
处理流程
- 标记启动
超短 #STW
标记 #gcroot 指向的对象 - #并发 标记
与G1相同,遍历对象做可达性分析
ZGC的标记实在指针上而不再对象上,将指针更新Marked 0, Marked 1标志位 - 标记结束
超短 #STW - #并发 准备
根据查询条件得出本次收集过程要清理哪些区,将这些区组成重分配集合
每次回收都会查看所有区域 - 重分配开始
超短 #STW - #并发 重分配
为重分配集合中的每个区更新维护Forward Table, 记录就对象到新对象的方向关系
若用户线程访问了重分配集合中的对象,该访问会触发 load barrier,并根据所在区上的Forward table讲此次访问重定向到复制好的对象上去,同时修正更新该引用的值,使其指向新对象
这种指针在ZGC中叫做自纠指针 - #并发 重映射
修正整个堆中重分配集合里旧对象的所有引用
所有指针都修正完后,原来记录新旧对象关系的Forward table就可以清空了
ZGC algorithm
https://rug.al/2021/2021-09-26-zgc/