本主要研究一下Garbage Collector的SATB
CMS、G1、Shenandoah在进行concurrent marking的都采用了SATB的技术
Shenandoah面向low-pause-time的垃圾收集器,它的GC cycle主要有
包括Init Mark(Pause)、Concurrent Mark、Final Mark(Pause)
这个阶段用到了Brooks Pointers(
object version change with additional atomically changed indirection)进行copy
)包括Init update Refs(Pause)、Concurrent update Refs、Final update Refs(Pause)
Shenandoah在进行concurrent marking的时候采用了SATB的技术
SATB全称为Snapshot At The Beginning,其要点如下:
表示还未访问到
)、gray(访问到但是它用到的引用还没有完全扫描
)、black(访问到而且其用到的引用已经完全扫描完
),整个三色标记算法就是从GC roots出发遍历heap,针对可达对象先标记white为gray,然后再标记gray为black;遍历完成之后所有可达对象都是black的,所有white都是可以回收的marked all reachable at mark start
),但是concurrent的时候并发修改可能造成对象漏标记,比如
表示还未访问到
)、gray(访问到但是它用到的引用还没有完全扫描
)、black(访问到而且其用到的引用已经完全扫描完
),整个三色标记算法就是从GC roots出发遍历heap,针对可达对象先标记white为gray,然后再标记gray为black;遍历完成之后所有可达对象都是black的,所有white都是可以回收的marked all reachable at mark start
);在marking阶段中,对于从gray对象移除的目标引用对象标记为gray,对于black引用的新产生的对象标记为black;由于是在开始的时候进行snapshot,因而可能存在Floating Garbage原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。