gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:36 25 4
gpt4 key购买 nike

我有缓存,用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com