首页 > 代码库 > 代际垃圾回收器的一种快速Write Barrier算法
代际垃圾回收器的一种快速Write Barrier算法
论文: A Fast Write Barrier for Generational Garbage Collectors
http://hoelzle.org/publications/write-barrier.pdf
老年代需要记录对新生代的对象引用,以便于新生代GC之后更改老年代相应位置的引用,不然就要扫描整个老年代了。这些标记称为Remembered Set。确保代际的引用位置被标记的机制称为Write Barrier或Store Check。
一般使用Card Marking算法,堆被分为很多card,每个card2^k个word(k=5,6,7),在32位上一般是128,256,或1024字节,每个card一个标记,每个store操作时如果对应card上的对象引用被更改,就把这个card标记,在回收阶段扫描这个card把引用改到最新。开始一个card的标记是一个bit,但性能不佳,改位1个byte,即便如此,内存的额外开销也不大。
初始时的marking需要三个SPARC命令:
st [%obj + offset], %ptr
add %obj, offset, %temp
sll %temp, k, %temp
st %g0, [%byte_map + %temp]
为了性能干脆搞成找到修改位置所在对象所在的card,这样只需要两个指令,但回收时候需要多扫描:
st [%obj + offset], %ptr
sll %obj, k, %temp
st %g0, [%byte_map + %temp]
marking占总的write barrier时间(还包括清除阶段扫描card)40%-100%,占总的GC开销的40%。
代际垃圾回收器的一种快速Write Barrier算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。