-1

この問題は奇妙です、多分私は完全に間違って考えているだけです。

クラスについて説明します。

フィールドに抽象基本クラス (モード) を保持するゲーム クラスがあるため、その基本クラスのサブクラスであるすべてのクラスをそのフィールド (すべてのモード) に含めることができます。次に、次のようにします。ゲーム クラスがモードを変更する場合があるため、フィールドを別のクラスに変更する必要があります。これは機能し、参照が残っていないため、古いクラスが削除されます(ガベージコレクター)

BUT:まれに、モードクラス自体がゲームクラスのメソッドを呼び出してモードを変更しますが、デバッガーは、メソッドの完了後、古いモードオブジェクトにジャンプして完了するため、オブジェクトがまだそこにある必要があることを示していますコード(ある時点では問題ありませんが、それ以外の場合は行き場がありませんでした)。

では、古いモード オブジェクトを削除してメモリ リークを回避するにはどうすればよいでしょうか。ガベージ コレクターは、スクリプトが完了するとすぐにこれを自動的に行いますか (この場合、return を呼び出すだけですか?)。

4

2 に答える 2

1

ガベージコレクションを誤解していると思います。ガベージ コレクションは、即時ではなく、将来のある時点で発生します。そのため、モード クラスは、ゲーム クラスの参照が参照しなくなった後でも、おそらくあなたが思っているよりも長く存在します。

将来のある時点で、ガベージ コレクタが起動し、「古い」モード クラスに参照がなくなったことを確認して収集します。それは 300 ミリ秒後、5 分後、またはプロセスの終了時です。

于 2012-11-14T21:28:05.250 に答える
0

メモリ リークは発生しません。コードが終了すると、その Mode インスタンスへの参照はなくなるため、最終的には GC されます。

あ、はい。GC は時々参照のみをチェックします。それらの参照がどのように設定されたかは気にしません。

于 2012-11-14T21:28:20.273 に答える