【问题标题】:Good way to clear nested Maps in Java在 Java 中清除嵌套地图的好方法
【发布时间】:2013-04-26 07:54:51
【问题描述】:
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 的内存消耗上是否有区别?

【问题讨论】:

  • 有什么具体原因使用AbstractMap,为什么不直接使用Mapinterface
  • 不,这只是因为如果我使用“Map”而不是“AbstractMap”,我的 IDE 总是建议来自 java.util 以外的其他包的 Map 实现。

标签: java memory-leaks jvm maps


【解决方案1】:

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

【讨论】:

  • 好吧,由于我是一名 C/C++ 程序员,我认为我在记忆问题上有点障碍 :)
猜你喜欢
  • 1970-01-01
  • 2015-07-30
  • 2020-04-22
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
相关资源
最近更新 更多