ZGC颜色指针转移过程
2024-01-03 13:46:28   0  举报             
     
         
 ZGC颜色指针转移过程
    作者其他创作
 大纲/内容
 D
  初始阶段
  转发表(forward Table)
  E
  C
  ZGC① - 并发标记
    并发转移会清除掉页面A,但是指针还在
  M1                绿色
  小页面 B <2M>(地址 10- 18)
  业务线程
  对象
  指针颜色
  地址
  A
  蓝色
  10
  B
  绿色
  2
  3
  4
  ZGC① - 初始标记
  STW对转移并发标记的存活对象做转移
  GC Roots
  STW主要是处理三色标记法漏标的问题 写屏障 + STAB
  remnaped    蓝色
  指针
  旧地址
  新地址
  13
  M0                绿色
  1
  小页面 A <2M>(地址 1- 9)
  没有STW主要是分析最有回收价值的GC分页,并且在这个过程中如果发现某个GC页全是垃圾则直接进行清除
  红色
  ZGC① - 初始转移
  没有STW,扫描剩余的所有对象,这个处理时间比较长,所以走并发,业务线程与GC线程同时运行。但是这个阶段会产生漏标问题。
  ZGC② - 并发标记
  11
  12
  ZGC① - 并发转移准备
  ZGC① - 并发转移
  ZGC② - 再标记
  M1                绿色
  ZGC① - 在标记
  没有STW,扫描剩余的所有对象,这个处理时间比较长,所以走并发,业务线程与GC线程同时运行。但是这个阶段会产生漏标问题。这里还会将上次并发转移的对象进行重定位1. 首先根据根可达算法标记 E 为`红色`(因为 E 是`蓝色`,则说明E是新创建出来的对象,没有做对象的重定位)  2.  如果遇到`绿色`的指针颜色,说明做了指针重定位,且指针没有进行纠正(指向的是老地址),则需要将绿色的指针改为 `红色` ,根据转发表更正为新的地址,并把指针记录清除掉(**原子操作**)
  remnaped    蓝色
  ZGC② - 初始标记
  STW主要是处理三色标记法漏标的问题 写屏障 + STAB
  ZGC② - 并发转移准备
  这个阶段需要暂停(STW),初始标记只需要扫描所有GC Roots,其处理时间和GC Roots的数量成正比,停顿时间不会随着堆的大小或者活跃对象的大小而增加。
  STW转移初始标记的存活对象同时做对象重定位
  ZGC② - 初始转移
  ZGC② - 并发转移
  在ZGC初始化之后,此时地址视图为Remapped,程序正常运行,在内存中分配对象,满足一定条件后垃圾回收启动
  ZGC 的两次流程
  在第一次垃圾回收中,在并发转移中是与用户线程一同执行的,在这个期间中可能会生成新的对象,比如对象A引用了对象E
  M0                绿色
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 