我有一个代码:
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_MAP
是static final
字段,因此tmpMap
基本上将保留 forever 。
unmodifiableMap
:
返回指定地图的不可修复的视图。[...]在返回的地图上查询操作"读取"到指定的地图[...]。
或换句话说,GC是否有可能回收TMPMAP,这使MY_MAP无法访问?
不,永远不会。MY_MAP
对tmpMap
有(强)引用,因此无法收集。
通常,GC永远不会做这样的事情。除非在特殊情况下(WeakHashMap
和类似)。