新一代垃圾回收器ZGC设计与实现
70.31元
(需用券)
去购买 >
混合回收可以总结为两个阶段:
并发标记:
目的是识别老生代分区中的活跃对象,并计算分区中的垃圾对象占空间的多少,用于垃圾回收过程中判断是否回收分区。
垃圾回收:
和新生代回收步骤一致,重用了新生代回收的代码,最大的不同就是回收的时候不仅仅回收新生代分区,同时回收并发标记中识别的垃圾多的老生代分区。
并发标记算法详解
并发标记算法是混合回收中最重要的算法。并发标记指的是标记线程和mutator线程并发运行。
并发标记算法设计了4个指针
Bottom:底部位置
Prev:指向上次并发处理后的地址
Next:指向并发标记开始之前内存已经分配成功的地址
Top:在并发标记开始后,如果有新的对象分配,可以移动top指针,使top指针指向当前内存分配成功的地址。
Next和Top之间就是Mutator线程新增的对象使用的地址。
假设Prev之前的对象已经标记成功,在并发标记的时候从根出发,不仅仅标记Prev和Next之间的对象,还标记Prev之前的活跃对象。当并发标记结束之后,只需将- Prev指针设置为Next指针即可开始新一轮的标记处理。
并发标记引入两个位图:
PrevBitMap:记录Prev指针之前的内存标记状况
NextBitMap:表示整个内存到next指针之前的标记状态
并发标记开始之前:
TAMS指的是Top-at-Mark-Start,并发标记结束后,NextBitMap标记了分区对象的存活情况。假定位图中黑色区域表示堆分区中对应的对象还活着,在并发标记的同时Mutator继续运行,所以Top会继续增长。
第二次标记开始,将NextBitMap值赋给PrevBitMap,将Next指针位置设置为Prev,将Top指针位置设置为Next指针。
并发