首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java WeakHashMap清理

Java WeakHashMap清理
EN

Stack Overflow用户
提问于 2019-03-16 00:04:56
回答 1查看 282关注 0票数 1

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

代码语言:javascript
复制
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源代码中看不到任何可以做到这一点的代码。

EN

回答 1

Stack Overflow用户

发布于 2019-03-16 00:28:32

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55186552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档