ほとんどの場合、Java での明示的なメモリ管理について心配する必要はありません。リストから削除された後にそれらを参照している他のオブジェクトがない限り、ガベージ コレクターは (最終的に) それらを削除します。
リスト内のオブジェクトが、enemies
明示的に破棄する必要のあるシステム リソースまたはその他のもの (ファイル ハンドルなど) を保持している場合は、参照を失う前にこれをクリーンアップする必要があります。
Enemy enemy = enemies.remove();
enemy.dispose(); // this is your method to clean up the internals - name it what you want
// continue your loop here
サンプル コードに関連するメモとして、現在のインデックスとリスト サイズに関する問題に遭遇することなく適切に実行Iterator
できるように、インデックスを反復処理する for ループだけでなく、を使用することをお勧めします。remove
別の実装を検討することもできList
ます (たとえばLinkedList
、 の途中からの挿入/削除は、サイズがArrayList
大きい場合に高価になる可能性があるためです。
あなたの他の質問について:
オブジェクトがガベージ コレクターによって削除されているかどうかを確認する方法はありますか?
クラスのメソッドをオーバーライドfinalize
できますが、これを行うときは注意してください。また、オブジェクトがガベージ コレクションされる時期が保証されないことにも注意してください。JVM が異なれば、メモリの管理方法が若干異なることが多く、より多くのメモリが必要な場合にのみガベージ コレクションを実行することがよくあります。