2012-05-02 5 views
1

私は最初に2番目に継承する2つのクラスを持っています。アレイから変更されたアイテムはガベージコレクションに移動しますか?

その後、私はこれがあります。

First[] tab = new First[5]; 
tab[0] = new First(); 
tab[1] = new First(); 
tab[2] = new First(); 

をして、私の質問は:私はこれを行う場合:

tab[1] = new Second(); 

初めてで、[1]私はタブを呼び出すために使用whitchメモリを起こったのでしょうか?それはガベージコレクションに行くとメモリは無料ですか?

私はそれを解放するために何ができますか?

ご協力いただければ幸いです。

答えて

3

オブジェクトを配列から置き換えると、そのオブジェクトはもはや配列によって参照されなくなります。

他のオブジェクトと同様に、他のルートオブジェクトがそれを参照していない場合、最終的にガベージコレクションされます。

+0

で即時ガベージコレクションを強制することができ、オブジェクトはGCの対象となります。何百もの参照(サイクルを含む)を持つことができます。それらの参照はアプリケーションによって使用できないので、それはガベージです。もちろん、たとえそれらが使用されていても弱い参照がGCを妨げることはありません。 – delnan

+0

あなたはもちろんそうです。明らかにした。 – SLaks

1

tab [1]の "First"そのメモリへの他の変数を指していないので、(最終的に)ガベージコレクションに移動する必要があります。あなたは

tab[1] = new Second(); 

を実行すると

2

tab[1]にあったFirstのインスタンスは、もは​​や参照されず、ガベージコレクションのためにマークされています。

メモリ自体は、ガベージコレクタが実行されるまで実際には再び利用可能にはなりません。これは即時ではありません。

もちろん、そのインスタンスを参照しているものは何もないものとします。

ロットがあります.Googleでは、それは.NETガベージコレクタと正確にはどのように機能しているのですか。彼らは* *到達できないとき

0

はまた、あなたがそれはそれへの参照がある場合はうまくGC'dすることができSystem.GC.Collect()

+1

'GC.Collect'は、非常に特殊な状況でのみ使用されるべき高度な機能です。ガベージコレクションのコンセプトに着目している人には、その存在の知識を与えるべきではありません。 – Tergiver

関連する問題