ZGC algorithm

ZGC是一个由Azul System公司研发的商用 #分区收集器, 可以使用在 #NUMA 架构上
#STW 时间基本稳定,和堆大小无关
适合TB级别堆

source code

处理流程

  1. 标记启动
    超短 #STW
    标记 #gcroot 指向的对象
  2. #并发 标记
    与G1相同,遍历对象做可达性分析
    ZGC的标记实在指针上而不再对象上,将指针更新Marked 0, Marked 1标志位
  3. 标记结束
    超短 #STW
  4. #并发 准备
    根据查询条件得出本次收集过程要清理哪些区,将这些区组成重分配集合
    每次回收都会查看所有区域
  5. 重分配开始
    超短 #STW
  6. #并发 重分配
    为重分配集合中的每个区更新维护Forward Table, 记录就对象到新对象的方向关系
    若用户线程访问了重分配集合中的对象,该访问会触发 load barrier,并根据所在区上的Forward table讲此次访问重定向到复制好的对象上去,同时修正更新该引用的值,使其指向新对象
    这种指针在ZGC中叫做自纠指针
  7. #并发 重映射
    修正整个堆中重分配集合里旧对象的所有引用
    所有指针都修正完后,原来记录新旧对象关系的Forward table就可以清空了

ZGC algorithm
https://rug.al/2021/2021-09-26-zgc/
Author
Rugal Bernstein
Posted on
September 26, 2021
Licensed under