java - Java:当 WeakHashMap 的条目被驱逐时,谁改变了大小?
问题描述
最近,我试图弄清楚如何WeakHashMap
工作。如代码所示,强引用map.isEmpty()
后会返回true ,那么谁来改变大小呢?System.gc()
size
WeakHashMap<UniqueKey, BigImage> map = new WeakHashMap<>();
UniqueKey key = new UniqueKey("abc");
map.put(key, new BigImage());
BigImage value = map.get(key);
assertNotNull(value);
key = null;
System.gc();
Thread.sleep(1000);
assertTrue(map.isEmpty());
解决方案
看内部实现:
public int size() {
if (size == 0)
return 0;
expungeStaleEntries();
return size;
}
专门用于expungeStaleEntries
使用的方法:
/**
* Reference queue for cleared WeakEntries
*/
private final ReferenceQueue<Object> queue = new ReferenceQueue<>();
size
在返回给您之前,此方法也会更新。
推荐阅读
- c# - c# Xamarin Android 应用程序 - VideoView 流从 Google API 28 开始 > 30 秒后开始
- c# - 如何撤消发布到 azure Web 应用程序
- javascript - 为什么检查 Firebase 中是否存在子项总是返回 false?
- intellij-idea - 如何在Idea中设置三层选项卡
- python - 用街道号和字母 python 分隔街道名称字符串
- jqxgrid - 是否有 jqx 渲染功能的替代方案 - $gridContainer.jqxGrid('render')
- c++ - 无法解决这个错误c++,虽然我已经添加了头文件
- excel - 如何修改另一个工作表列的工作表列?
- xml - 为 Microsoft Powerapps 中的雷达图更改 SVG 中的多边形点
- javascript - 遍历堆栈以获取总和