在Java中清除嵌套映射的好方法

时间:2013-04-26 07:54:51

标签: java memory-leaks jvm maps clear

public class MyCache {

    AbstractMap<String, AbstractMap<String, Element>> cache = new TreeMap<String, AbstractMap<String,
            Element>>();

    public Boolean putElement(String targetNamespace, Element element) {
        ...
    }

    public void clear() {
        cache.clear();
    }

    // is it better this way?

    public void deepClear() {
        for(AbstractMap<String, Element> innerMap : cache.values()) {
            innerMap.clear();
        }
        cache.clear();
    }
}

是否有必要迭代根映射的值并清除嵌套在根中的所有映射,或者是否足以清除最外层的映射? 我的主要问题是,如果这两种方法之间JVM的内存消耗有任何差异吗?

1 个答案:

答案 0 :(得分:3)

这两种方法是相同的。假设没有对象(在地图本身旁边)保持对嵌套地图的引用,一旦第一个地图被清除,它所包含的所有地图都有资格被垃圾收集,因此,这些地图所持有的所有对象都被引用。 / p>