首页 > 解决方案 > 我们应该总是释放 Java 中的 Map 或 List 吗?

问题描述

假设我有一张地图。我添加了几个元素,处理了这些元素,现在我不再需要这些元素了。我应该调用Map#clear();方法还是让垃圾收集器完成它的工作?清洁地图会降低 GC 压力吗?

这是一个示例代码:

    public void process() {
        Map<String, Object> myMap = new LinkedHashMap<>();
        myMap.put("CatA", "Meow1");
        myMap.put("CatB", "Meow2");

        doSomeProcessing(myMap);

        myMap.clear();
    }

PS-此操作每秒将执行大约 10K 次。

标签: javagarbage-collection

解决方案


您不需要在clear这里调用,因为 GC 不会将其视为垃圾收集的特殊信号myMap

相反,您应该确保在完成执行myMap时没有剩余的引用。process具体来说,确保doSomethingElse不会泄露myMap.

myMap一旦没有剩余的引用,GC 将进行垃圾收集。


推荐阅读