GCの高速化?

 「実時間記号処理システムTAO/SILENTの並行GC」という論文を読んだ。本筋である実時間という部分はハードウェアの助けを借り、インクリメンタルなGCを注意深くpreemptiveに実装することで実現されている。(と私は理解している。)
 興味深く思ったのは、sweeperはデータタイプごとに異なっているというところ。特にcellは連続した領域が一気に解放されることが多いため、cell sweeperは特別の扱いとなっている。つまり、連続した領域を解放している最中はfreelistをいちいちこまめにリンクせずに、一ヶ所にのみポインタを張る。たぶん、リストの先頭にリンクを貼って、そこにここからここまでfreeですよ、という情報を書き込むのだろう。これでcell sweeperの性能が倍になるらしい。
 これ、cellに限らなくても、連続した領域を返す確率が十分に高いなら、全てのsweeperでfreelistをこまめにリンクしないようにした方が性能が良くなるように思える。そうなっていないという事は、連続した領域が一気に解放されるのは、ほとんどがcellの場合である、という事なのかしら。よくわからないけれど。