Can Collections.unmodifiablemap保留原始地图



我有一个代码:

class Util {
    private static final Map<String, String> MY_MAP;
    static {
        Map<String, String> tmpMap = new TreeMap<String, String>();
        tmpMap.put("key1", "val1");
        tmpMap.put("key2", "val2");
        tmpMap.put("key3", "val3");
        MY_MAP = Collections.unmodifiableMap(tmpMap);
    }
    public static String getVal(String key) {
        return MY_MAP.get(key);
    }
}

my_map可以保留tmpmap吗?换句话说,GC可能会回收TMPMAP,这使MY_MAP无法访问?

返回的映射只是一个"视图",围绕地图传递。

是的,只要MY_MAP还活着,tmpMap就会保留。由于MY_MAPstatic final字段,因此tmpMap基本上将保留 forever

unmodifiableMap

返回指定地图的不可修复的视图。[...]在返回的地图上查询操作"读取"到指定的地图[...]。

或换句话说,GC是否有可能回收TMPMAP,这使MY_MAP无法访问?

不,永远不会。MY_MAPtmpMap有(强)引用,因此无法收集。

通常,GC永远不会做这样的事情。除非在特殊情况下(WeakHashMap和类似)。

,您将永远不会看到它。

最新更新