0


私はいくつかの HashMap < String, XYZ > を作成しました。キーの型は String で、値の型は XYZ Class です。いくつかの条件チェックのために、保持している XYZ 型の個々のオブジェクトとともに HashMap 全体を解放/ガベージ コレクションしたいと考えています。 . ハッシュマップを反復して各オブジェクトを null に設定せずにそれを行うことは可能ですか? HashMap のみを null に設定しても機能しないと思います。オブジェクトのコレクションがガベージ コレクションされていることを後で確認するにはどうすればよいですか?

私が次のようなことをした場合:

XYZ obj = new XYZ();
hm.put("<unique-id>",obj);

XYZ obj2 = new XYZ();
hm.put("<unique-id>",obj2);

.
.
.<more operations>
.
.
hm = null;

私のコードは、 hm=null ステートメントの後に obj または obj2 を参照しなくなりました。


それで、jvmがobjとobj2もすぐにガベージコレクションすることを十分に確信できますか?


さらに、ハッシュマップが巨大なコレクションである場合、HashMap に対して Iterator を使用して、すべてのオブジェクトを取得および反復処理し、それを null に設定したくありません。

hm=null だけで、上記の GCing オブジェクトのコレクション全体 + マップを実行できますか?

4

1 に答える 1

3

オブジェクトが参照されなくなった場合、そのオブジェクトが適切にガベージ コレクションされていることを確認できます。つまり、ハッシュ マップを に設定しnull、マップ内のすべてのアイテムが他のオブジェクトから参照されていないことがわかっている場合、それらはガベージ コレクションされます。gcc を手動で呼び出したい場合は、gcc プロセスを実行するかどうかの決定は最終的に JVM によって行われることに注意してください。

于 2013-08-17T23:39:15.183 に答える