2

ばかげた質問かもしれませんが、ガベージ コレクションのプロセスについてはわかりません。

次のコードを検討してください。

private HashMap<String, Parameter> configuration = new HashMap<String, Parameter>();

...
//add some items to configuration
...

//now get another configuration
HashMap<String, Parameter> parameters = new HashMap<String, Parameter>();
for (String parameterName : configurationParameterNameList) {
    parameters.put(parameterName, reader.readParameter(parameterName));
}

//and reassign the variable
this.configuration.clear();
this.configuration = parameters;

再割り当てする前に電話する必要がありconfiguration.clear()ますか? Parameterクラスには、内部に数個の String 変数しか含まれていません。

4

3 に答える 3

11

いいえ、電話する必要はありませんclear()

他に何も参照していない限り、別の値HashMapに変更するとすぐに、それ (およびそのすべてのエントリ) がガベージ コレクションの対象になります。this.configuration

于 2013-06-10T15:53:29.277 に答える
2

必要がない。いずれにせよ、元の HashMap インスタンスは失われます。構成の初期化も意味がありません。

private HashMap<String, Parameter> configuration;   
...
configuration = new HashMap<String, Parameter>();
for (String parameterName : configurationParameterNameList) {
    configuration.put(parameterName, reader.readParameter(parameterName));
}
于 2013-06-10T15:57:20.590 に答える
2

いいえ、Java のガベージ コレクションは自動です。これは、オブジェクトへの参照がない場合、そのオブジェクトは削除されることを意味します。したがって、上記の回答が言ったように、 からすべての参照を取り除くとすぐに、Mapガベージ コレクションの対象になります。

于 2013-06-10T15:55:56.127 に答える