我下面有一段代码:
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_MAP
是static final
字段,因此tmpMap
将保留basically forever。unmodifiableMap
:
返回指定地图的不可修改视图。 [...]对返回的地图“直读”到指定地图的查询操作。[...]