java - 在 Java 中清除嵌套 map 的好方法

标签 java memory-leaks jvm maps

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 内存消耗方面是否存在差异?

最佳答案

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

关于java - 在 Java 中清除嵌套 map 的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16231387/

相关文章:

Kotlin elvis 运算符不适用于 map.get()

java - JVM 版本管理器

Java-Applet 将不会在 Firefox 中释放焦点

java - Jersey 客户端日志响应和 getEntity

java - 了解最大 JVM 堆大小 - 32 位与 64 位

ios - 重新加载对象时 NSMutableArray 内存泄漏

c++ - 将 std::vector 与类元素一起使用时发生内存泄漏

java - 我想根据我得到的毫秒时间来获取今天或昨天的日期

javafx - 在 JavaFX 3D 中删除对象时出现内存泄漏

java - 运行在 1.6 JVM 上的 Jetty 无法运行在 Java 1.6 上编译的 webapp