2007年03月17日

Copying Garbage Collector

copying GCでウェブを検索すると真っ先に東大のコンパイラ演習の資料*が出てくるが、恥ずかしながらこれを読んでもいまひとつはっきりしたイメージが湧かず、うまくいくという確信がなかった。 最近ようやく腑に落ちたのでまとめてみようと思う。

copying GCではヒープを2つの部分空間に分け、 プログラムはその片方だけを利用して動作する。そこに空きがなくなるとGCが起動する。 GCは使われている部分空間(from-space)の中の到達可能なオブジェクトを全てもう一方の部分空間(to-space)にコピーする。GCが終了するとプログラムは今度はto-spaceを使って動作を継続する。2つの部分空間の役割はGCのたびに入れ替わる。

GC前
Copying GC (前)
GC後
Copying GC (後)

まずはmark and sweep方式をおさらい。その後、 copying GCの説明に先立ちmark-compact方式を説明する。

続きを読む