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类里面只包含几个字符串变量。

4

3 回答 3

11

不,你不需要打电话clear()

只要没有其他东西引用HashMap它(及其所有条目),只要您更改this.configuration为另一个值,它就会有资格进行垃圾收集。

于 2013-06-10T15:53:29.277 回答
2

不,Java 中的垃圾收集是自动的。这意味着如果一个对象没有对它的引用,它将被删除。因此,就像上面的答案所说,一旦您将所有引用从 中删除Map,它将有资格进行垃圾收集。

于 2013-06-10T15:55:56.127 回答
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 回答