为了账号安全,请及时绑定邮箱和手机立即绑定

Java:当 WeakHashMap 的条目被驱逐时,谁会改变大小?

Java:当 WeakHashMap 的条目被驱逐时,谁会改变大小?

心有法竹 2021-10-28 14:14:01
最近,我试图弄清楚如何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在返回给您之前,此方法也会更新。


查看完整回答
反对 回复 2021-10-28
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

调用该size()方法时会删除陈旧的条目。

size()方法在内部调用私有方法expungeStaleEntries()以删除过时的条目(当然,如果它尚未为空)。


查看完整回答
反对 回复 2021-10-28
  • 2 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信