0

一部のデータが配列リストに追加される Java プログラムを作成しています。

一部の処理はループ内にあり、ループ内のリストに新しいノードを追加し、そのノードを使用して操作を実行し、ループの反復の終了直前に arraylist.remove() を使用してそのノードを削除しています。System.gc(); も実行しています。ループ反復の終了直前。

しかし、メモリ ダンプを取得すると、さまざまなループの反復で使用したすべての値が arraylist に保持されていることがわかりました。これらの値をすべてメモリから消去するにはどうすればよいでしょうか。そして、配列リストのサイズが大きくならないように、ループの反復が終了する直前にこれを行いたいですか?

4

3 に答える 3

1

以前に ArrayList に格納されていたオブジェクトを解放するのではなく、ArrayList によって占有されていたメモリの一部を解放するつもりですか? その場合は、 - を呼び出してこれを行うことができます。これによりArrayList.trimToSize()、ArrayList 内のすべての値が新しい (内部) 配列にコピーされ、古い (内部) 配列をガベージ コレクションできるようになります。(これには配列内のすべての値をコピーする必要があるため、当然、大きな違いが生じる場合にのみ実行する必要があります。)

于 2012-05-27T11:50:17.337 に答える
1

「ライブ」オブジェクトのメモリ ダンプを取得すると、削除されます。

オブジェクトを削除するコストは比較的高いため、通常、Java でのパフォーマンスを向上させるには、必要なとき (JVM が実行するとき) にのみオブジェクトを削除するのが最適です。

于 2012-05-27T11:20:59.610 に答える
0

Java には何らかの理由でガベージ コレクターがあり、その理由は、プログラマーがメモリからオブジェクトを削除することを考える必要がないからです。あなたができる唯一のこと(私はお勧めしません)は、System.gc()メソッドによってガベージコレクターを強制的に開始することです。ただし、1回目はメソッドを呼び出して削除するオブジェクトを準備するだけなので、2回行うことを忘れないでくださいfinalize()

于 2012-05-27T11:27:39.313 に答える