午前中、長女の自転車を取りに行く。ついでに妻と昼食。
とりあえず動くようになった。これで測定できる。
ただまだバグバグで、ちょっと凝ったプログラムを使うとすぐに動かなくなる。 アルゴリズムの原理的な有用性を示すのには十分だが、実用にはまだ遠そうだ。
基本的な考えは1ビットリファレンスカウントとZCTを組み合わせることで、 寿命の短いオブジェクトを再帰的にスキャンすることなく回収するというものだ。 このことにより、世代別GCと同等の効果をあげることができる。
ただし、ライトバリア(というかリファレンスカウントの管理)のコストと、 より頻繁に発生するconservative stack scanのコストは増えるので、 通常GCの削減とのトレードオフになる。
ざっと動かした範囲内では、「生きているオブジェクト」が多いケースではそれなりに有効、 「生きているオブジェクト」があまり多くないケースではすこしだけ遅くなる、 といったところか。
ただ、1ビットリファレンスカウントだけを使ったマイナースキャンはスレッド独立にできるはずなので、 native threadを使う処理系では同期の回数が減ってもっと嬉しいかも。
しかし、本当に論文〆切に間に会うのかちょっと不安。