HashMap和垃圾收集:我需要在变量重新赋值之前调用clear()吗?

也许这是一个愚蠢的问题,但我不确定垃圾收集过程。

考虑以下代码:

private HashMap configuration = new HashMap(); ... //add some items to configuration ... //now get another configuration HashMap parameters = new HashMap(); for (String parameterName : configurationParameterNameList) { parameters.put(parameterName, reader.readParameter(parameterName)); } //and reassign the variable this.configuration.clear(); this.configuration = parameters; 

在重新分配之前,我是否需要调用configuration.clear()Parameter类里面只包含几个String变量。

不,你不需要调用clear()

只要没有其他任何引用该HashMap内容,只要您将this.configuration更改为其他值,它(及其所有条目)就有资格进行垃圾回收。

没有必要。 无论如何,原始的HashMap实例都将丢失。 初始化配置也没有意义。

 private HashMap configuration; ... configuration = new HashMap(); for (String parameterName : configurationParameterNameList) { configuration.put(parameterName, reader.readParameter(parameterName)); } 

不,java中的垃圾收集是自动的。 这意味着如果一个对象没有对它的引用,它就会被删除。 所以,就像上面的回答所说的那样,只要你把所有的参考资料从Map拿走,它就有资格进行垃圾收集。