我有缓存,用 WeakHashMap 实现,如下所示:
private static WeakHashMap<Object, WeakReference<Object>> objects = new WeakHashMap<>();
我有一个 City 类的实例:
City c = new City();
我现在将此实例添加到我的地图中,如下所示:
objects.put(c, new WeakReference<Object>(c));
根据 WeakHashMap jvm 实现,如果 key 没有对其的强引用,则将其从地图中删除(在其空闲时间)。
因此,如果程序中不再使用我的对象“c”,它将从“对象”映射中删除。
到目前为止,一切都很好。
但是如果我有两张地图会怎样?
private static WeakHashMap<Object, WeakReference<Object>> objects1 = new WeakHashMap<>();
private static WeakHashMap<Object, WeakReference<Object>> objects2 = new WeakHashMap<>();
City c = new City();
objects1.put(c, new WeakReference<Object>(c));
objects2.put(c, new WeakReference<Object>(c));
在这种情况下,GC 会收集对象“c”吗?