码迷,mamicode.com
首页 > 编程语言 > 详细

代际垃圾回收器的一种快速Write Barrier算法

时间:2014-12-09 17:52:02      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:gc   垃圾回收   jvm   

论文: 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算法

标签:gc   垃圾回收   jvm   

原文地址:http://blog.csdn.net/jollyjumper/article/details/41824729

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!