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 条评论
下一页
为你推荐
查看更多