我下面有一段代码:

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

最佳答案

返回的Map只是一个“视图”,它环绕传入的Map。

因此,只要tmpMap仍然存在,就将保留MY_MAP。由于MY_MAPstatic final字段,因此tmpMap将保留basically forever

unmodifiableMap


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

09-11 22:20