2

HashMap<Integer, ArrayList<Integer>>Javaでは、コードのある時点で、巨大なオブジェクトが使用するメモリを解放したいと思います。null以下のようにそれを指すのに十分ですか?

Map<Integer, ArrayList<Integer>> complexObject = new HashMap<Integer, ArrayList<Integer>>(1000000);
...
complexObject = null;

4

4 に答える 4

2

Javaオブジェクトの割り当てを明示的に解除することはできません。ただし、次のことができます。

  1. 不要になったアイテムへの参照をすべて削除します。これを行うには、オブジェクトへの唯一の参照をに設定しますnull
  2. JVMを「提案」してガベージコレクターを実行しますSystem.gc()。これにより、使用されなくなったオブジェクトの割り当てが解除されますが、このメソッドを呼び出すと実際にガベージコレクターが実行される保証はありません。
于 2013-02-21T21:54:56.477 に答える
1

参照をnullに設定すると、ガベージコレクターが次に実行を決定したときに、そのオブジェクトへの参照が実際にどこにも存在しない場合に、ガベージコレクターが使用できるようになります。ただし、GCが実行を決定したときは、確定されていません。

これは、JavaがCと異なる大きなポイントですが、心配する必要はありません。あなたがGCを信頼できる時間の99.9%はあなたの背中を持っています。

于 2013-02-21T21:54:46.180 に答える
0

この記事を読んだところですが、メモリの解放についても書かれています。確認してください。ヌル化が常に役立つとは限りません。

于 2013-02-21T22:05:52.673 に答える
0

メモリが解放される保証はありません。GC が実行されて null が取得されるので、できることはそれだけです。

于 2013-02-21T21:55:21.283 に答える