ガベージコレクションのアルゴリズムと実装 3,4章
ustの進みに合わせて毎週読みます。
http://www.ustream.tv/recorded/5849980
Shinichi Tokunaga
@deepneko
従来は*ptr = obj にしてたところを全部update_ptrにしなきゃいけないから、呼び出し箇所の多さがぱねぇ
2010-04-03 09:48:16
Shinichi Tokunaga
@deepneko
さて参照カウントには、update_ptrしまくるのでカウンタの増減処理が重いというデメリットがありました。
2010-04-04 20:30:34
Shinichi Tokunaga
@deepneko
update_ptrにおけるデクリメント時にカウンタの値が0になったオブジェクトを記録しておくテーブルです。
2010-04-04 21:51:37
Shinichi Tokunaga
@deepneko
デクリメント処理でカウンタが0になった場合は、ZCTにpush。あ、ZCTはグローバル変数($zct)です。
2010-04-04 21:54:21
Shinichi Tokunaga
@deepneko
アロケーションの処理もちょっと変わる。チャンクが確保できなくてNULLが帰ってきた場合に、scan_zctを実行する処理を追加する。
2010-04-04 21:56:37
Shinichi Tokunaga
@deepneko
つまり、アロケーション処理によりチャンク確保→確保できず→$zctをscanしてチャンク確保→それでも無理だったらallocation_fail
2010-04-04 21:57:50
Shinichi Tokunaga
@deepneko
②$zctに登録されてるオブジェクトで、カウンタが0のものは回収される。その際、子オブジェクトのカウンタも全部デクリメントされるよ。
2010-04-04 22:00:23