java - 垃圾收集器使用 2 个 WeakHashMaps

标签 java caching garbage-collection weakhashmap

我有缓存,用 Wea​​kHashMap 实现,像这样:

private static WeakHashMap<Object, WeakReference<Object>> objects = new WeakHashMap<>();

我有一个城市类的实例:

City c = new City();

我现在将此实例添加到我的 map 中,如下所示:

objects.put(c, new WeakReference<Object>(c));

根据 WeakHashMap jvm 实现,如果 key 没有对它的强引用,它就会从映射中删除(在空闲时间)。
因此,如果程序中不再使用我的对象“c”,它将从“对象”映射中删除。
到目前为止,还不错。

但是如果我有两张 map 会怎样呢?

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 的条件。

关于java - 垃圾收集器使用 2 个 WeakHashMaps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38249502/

相关文章:

java - 更新 JList 组件

java - 将操作系统命令的输出写入控制台

java - 为什么不存储对象值?

java - 如何在服务器端创建java级缓存

asp.net-mvc - 如何模拟 ServiceStackController Cache 属性?

javascript - Web Worker 制造垃圾

java - 不使用 java.util.Date 的 Java 中的纳秒级时间

java - Eclipse logcat 调试

javascript - 如何在 Chrome 扩展程序中缓存数据?

garbage-collection - 手动调用 `gc()` 会导致立即执行所有 `finalizers` 吗?