まさとです.

> 木山さんにCVSアカウントをあげて枝を作ってもらうのが良いのか
> なあ。

もうすこしデバッグなどをして,自分の中でOKがでたときに
アカウントをいただけると,うれしいです.
そのときは,よろしくお願い致します.

> 私もこれが一番悩んだところなんですが、どこにhookを付けました?

オブジェクトの中に,他のオブジェクトのアドレスが入る場所と
オブジェクトのデータに,他のオブジェクトのアドレスが入る場所
全てです.
僕のパッチをあててもらえば,rb_gc_check_refという関数が
呼ばれているところが参照を調べている場所です.
70ヶ所ぐらいで調べてます.

> Dataが他のオブジェクトを参照する可能性についてはどうしました?

実は,後回しにしています.
今のところは,拡張ライブラリを作るひとが
rb_gc_check_refを入れなければなりません.

> # 私はT_DATAなオブジェクトはすべてremembered setに入れるしか
> # ないかと考えたんですが。

うーん.
少し考えてみます.

> ところで、オブジェクト数が十分多い場合には現在のGCをキックす
> る閾値を変えるだけでもそこそこ高速化しそうですが、この件につ
> いて考えてみたい人はいらっしゃいませんか?

考えてみたいです.
でも,キックする閾値ってなんでしょうか?
GC_NEWOBJ_LIMITでしょうか?
それとも,FREE_MINでしょうか?

一応,HEAP_SLOTSを変化させた評価は取ってます.
あるプログラムでは,世代別GCとほぼ変わらない性能を出すものもあります.
しかし,これはアプリケーションによって最適なHEAP_SLOTSが違うため
適応させるのは難しいと思います.
さらに,1回のGC時間が長くなってしまうという問題点もあります.

ちょっと考えてみますね.

では