[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 メーリングリストの案内