最近,我试图弄清楚如何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());
2 回答
慕哥6287543
TA贡献1831条经验 获得超10个赞
看内部实现:
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在返回给您之前,此方法也会更新。
Cats萌萌
TA贡献1805条经验 获得超9个赞
调用该size()
方法时会删除陈旧的条目。
该size()
方法在内部调用私有方法expungeStaleEntries()
以删除过时的条目(当然,如果它尚未为空)。
添加回答
举报
0/150
提交
取消