编程语言
首页 > 编程语言> > java-垃圾收集器与2 WeakHashMaps一起使用

java-垃圾收集器与2 WeakHashMaps一起使用

作者:互联网

我有用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”?

解决方法:

拿一张纸,画一个图,以对象为顶点,参考为边.

如果您找不到从GC根(例如堆栈上的静态字段或局部变量)到对象中的对象的强边缘路径,则该路径不可强行到达,因此有资格使用GC.

标签:caching,weakhashmap,java,garbage-collection
来源: https://codeday.me/bug/20191026/1939986.html