3
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();
    }
}

是需要遍历根map的值,先清除所有嵌套在根中的map,还是清除最外层的map就够了?我的主要问题是,这两种方法之间的 JVM 内存消耗是否有任何差异?

4

1 回答 1

5

这两种方法是相同的。假设没有对象(除了映射本身)持有对嵌套映射的引用,一旦第一个映射被清除,它包含的所有映射都有资格被垃圾收集,因此,这些映射所引用的所有对象也是如此。

于 2013-04-26T08:01:34.593 回答