gpt4 book ai didi

Java WeakHashMap 清理

转载 作者:行者123 更新时间:2023-11-30 05:43:49 28 4
gpt4 key购买 nike

我试图弄清楚 WeakHashMap 在垃圾收集后如何清理。正如你们中许多人可能知道的那样,当 WeakHashMap 条目的键被垃圾回收时,它会自动删除。但是,例如,如果我做这样的事情:

List<WeakReference<Main>> list = new ArrayList<>();
list.add(new WeakReference<>(new Main()));
System.gc();
Thread.sleep(1000);
list.get(0).get(); //null - WeakReference referent has been removed
list.get(0); //empty WeakReference object is still present in the List

ArrayList不会清理空的WeakReference对象,但为什么WeakHashMap会清理呢?哪个组件负责此自动条目删除。我在 WeakHashMap 源代码中没有看到任何可以做到这一点的代码。

最佳答案

WeakHashMap 会自行清理。调用 getTable()(本身由 getput 等调用)、size()resize(int) 全部首先调用 expungeStaleEntries ,它迭代 GC 条目的 ReferenceQueue 并将它们从表中删除。垃圾收集器负责将无法访问的 WeakReference 对象放入队列中。

关于Java WeakHashMap 清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55186552/

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