>GCアルゴリズム詳細解説
>http://wiki.livedoor.jp/author_nari/d/GC
素晴らしいサイトのご紹介ありがとうございます
こんなに色々なアルゴリズムが存在するとは思っていませんでした。
正直ビックリです。
基本的には、オブジェクトの参照が切れたら解放されると言う事ですね。
唯、オブジェクトの参照が切れている状態が、曖昧で分り難いと思いました。
例えば以下のような場合。
public void Test()
{
Hoge o = new Hoge ();
}
このような場合は、関数を抜ければHogeクラス(変数o)の参照が切れる事は理解できるのですが
public void Test2()
{
Hoge o = new Hoge();
this.hogeEvent += new EventHandler(o.handler); // イベントに登録
}
上記のような場合はどうなのでしょうか?
Test2関数を抜ければ、Hogeクラス(変数o)自体にはもうアクセスできませんが、
hogeEventからは、handler関数が呼ばれる為、参照は切れていないと言う判定になるのでしょうか?
それとも、参照が切れていると言う判定になり、GCが走った時点でメモリ解放されアクセスバイオレーションとなる危険なコードなのでしょうか?
中々奥が深くて難しいですね。
|