[Yarv-devel] GC Tech. on Script Lang.
Yukihiro Matsumoto
matz @ ruby-lang.org
2004年 2月 7日 (土) 17:36:52 EST
まつもと ゆきひろです
In message "Re: [Yarv-devel] GC Tech. on Script Lang."
on 04/02/07, "K.Sasada" <ko1 at namikilab.tuat.ac.jp> writes:
| オブジェクトを生成した時点で全て登録されるるんだと思ってま
|した。で、登録したやつだけ(minor?) GC の対象になる。で、リフ
|ァレンスされたら count は1増やすけど、表から削除しない。
|(minor?) GCが起こったら、その表は全部初期化、とか。で、現状の
|mark&sweep は時々起こす、と。
ささださんの推測で当たりです。
* あるスレッドで生成したオブジェクトは全部スレッドごとのテー
ブル(registry)に登録
* ヒープから参照されたオブジェクトにはwrite barrierでマー
クをつける
* テーブルがいっぱいになるかフリーリストが空になるとminor GC
+ ローカル変数とCスタックから参照されているオブジェクト
に(上記とは別の)マークをつける
+ テーブルをスキャンして、ヒープからの参照マークも、ロー
カルからの参照マークも付いてないものはゴミ。回収。
* minor GCで回収したオブジェクトが十分になかったりすると、
major GC。たぶん全スレッドを止めてmark and sweep。あるい
はdirty bitを使ったconcurrentなものにする余地もありま
すが、そこまですることはないかなと。
というイメージです。あ、せっかく引っ張ってたのに書いちゃった (苦笑)
まつもと ゆきひろ /:|)
Yarv-devel メーリングリストの案内