1

私は2番目に最初に継承する2つのクラスを持っています。

それから私はこれを持っています:

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

そして私の質問は:私がこれを作るなら:

tab[1] = new Second();

初めてtab[1]を呼び出すために使用するホイッチメモリはどうなりましたか?ガベージコレクションに移動し、メモリは無料ですか?

そうでない場合、私はそれを解放するために何ができますか?

どんな助けでもいただければ幸いです。

4

4 に答える 4

3

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

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

于 2012-05-02T18:36:06.217 に答える
2

実行すると

tab[1] = new Second();

First以前は存在していたのインスタンスはtab[1]参照されなくなり、ガベージ コレクションの対象としてマークされます。

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

もちろん、それはそのインスタンスを他に参照していないことを前提としています。

.NET ガベージ コレクターとその正確な動作については、Google で調べればすばらしい記事がたくさんあります。

于 2012-05-02T18:38:17.600 に答える
1

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

于 2012-05-02T18:36:37.397 に答える
0

さらに、次の方法で即時のガベージコレクションを強制できます。System.GC.Collect()

于 2012-05-02T18:44:11.497 に答える