マークに用いるカラーをローテートすることで、 マークフェーズとスイープフェーズを並行に行うことができるので、 これで効率化だ、と思ったのだが、 考えてみれば、カラーを変えようがなにしようが、 これではマークフェーズとミューテーターが同時に動けない。 やはりライトバリアは必要なのであった。
スイープが並行にできるのは嬉しいことも多いだろうけどね。
自分の間抜けさ加減が悔しいので(だから研究者にはなれないんだ)、 もうちょっと考察してみることにする。
あるプロセスで割り当てられるオブジェクト数をn、 参照されなくなるオブジェクト数をmとする時(だから当然n>m)、
となる。実際問題としてRubyが救済しなければならないケースはどれなのだろう。
スイープのインクリメンタル化は簡単な割に効果がありそう。 コストもあまりかからないしね。
マークのインクリメンタル化にしても、 世代別GCにしても、いずれもライトバリアが必要なので、 実行効率に影響を与える可能性がある。
インクリメンタルGCのアルゴリズムの紹介。 ちゃんとスレッドを意識している。