1993 年 10 巻 5 号 p. 5_399-5_412
近年,ガーベッジコレクション機能を持ち,高可搬性を持たせるために中間言語としてC言語を採用した言語が多く開発されている.中間言語のコンパイラの最適化の利点を失わず,しかも,中間言語との相互呼び出しを容易に行うためには,中間言語のスタックやレジスタ上のポインタの管理方法に依存しないガーベッジコレクション手法を必要とする.すなわち,スタックやレジスタ上の値の中からポインタとおぼしきものを見つけ出し,それらをあいまいなルートとして領域の回収を行う必要がある. 本論文では,あいまいなルートを持つジェネレーションスキャベンジング手法について述べる.本手法は,オブジェクトテーブルを導入し,スタックやレジスタ上のポインタの管理方法に依存せず,ジェネレーションスキャベンジングを行うものである.実行効率がよく中断時間が短いというジェネレーションスキャベンジングの特徴を受け継いでいる.オブジェクトテーブルを導入することにより,(1)領域のコンパクションが可能である,(2)ポインタをオブジェクト単位で高速に見つけ出すことができる,という利点を持つ.逆に,(1)オブジェクトテーブルを回収する必要がある,(2)実行時に間接参照のオーバヘッドがある,という欠点を持つ.本手法では,オブジェクトテーブルを2つの世代に分けることにより,前者の欠点を解消している. 我々は,SPiCEと呼ぶSmalltalkコードをCコードに変換するシステムに本手法を組み込み,その性能を計測した.間接参照のオーバヘッドを含む本手法のオーバヘッドは9%以内であった.