0

我在下面有一段代码:

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 无法访问?

4

2 回答 2

3

返回的 Map 只是一个包裹传入的 Map 的“视图”。

所以是的,tmpMap只要MY_MAP还活着就会被保留。既然MY_MAPstatic final场,基本会永远tmpMap保留。

unmodifiableMap

返回指定地图的不可修改视图。[...] 对返回的地图“通读”到指定地图的查询操作 [...]。

于 2015-05-11T01:35:51.173 回答
3

或者换句话说,GC 是否有可能回收 tmpMap 导致 MY_MAP 无法访问?

没有永不。MY_MAP对 有(强)引用tmpMap,因此无法收集。

一般来说,GC 永远不会做这样的事情。你永远不会看到它工作,除非在特殊情况下(WeakHashMap和类似情况)。

于 2015-05-11T01:37:26.507 回答