2013-04-26 33 views
2
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的内存消耗有任何区别?清除嵌套在Java中的地图的好方法

+2

使用'AbstractMap'的任何具体原因,为什么不直接使用'Map''interface'? – harsh 2013-04-26 07:58:13

+0

不,这只是因为我的IDE总是建议从java.util以外的其他包映射实现,如果我使用“Map”而不是“AbstractMap”。 – 2013-04-26 08:02:07

回答

3

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

+0

好的,我认为我在记忆问题上有点残疾,因为我作为C/C++程序员的时代:) – 2013-04-26 08:05:10