「コンパイラ・スクリプトエンジン」相談室8at TECH
「コンパイラ・スクリプトエンジン」相談室8 - 暇つぶし2ch173:14
05/11/09 20:27:28
>>162
>1) ファイナライザを持っていてファイナライズされていないオブジェクトはリストへ、
>それ以外の未使用オブジェクトは削除
>2) ファイナライズリストにあるオブジェクトはファイナライズ実行

単純なmark sweep GCを考えると、この1)のフェーズの前にmark phaseがはいってて、
1)はsweepと同時にやるようなイメージなんですが、ここまでの認識は合っているでしょうか?
ファイナライズされるオブジェクトをAとすると、Aは定義からしてマークされていないはずで、
当然、Aが参照しているオブジェクト(Bとします)もマークされていないはずです。
この状態でsweepすると、Bはなくなってしまうわけですが(Bにはファイナライザはついて
ないものとして)、Aが復活したら、Bも一緒に復活しなければなりません。
だから、
>ええと、このスタックから参照張られたオブジェクトについてファイナライザ
>走らせる前に、これらのオブジェクトを起点にしてまたmarkするのでしょうか?
と書いたわけで。

もちろん、mark phaseにて、ファイナライザ持ったオブジェクトは最初から
すべてmark対象にしてもいいわけで、そう考えると.NETの完結キューも
意味があるのかな、とこれは今思った。完結キューもルーツに含めればよいわけで。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch