首页 > 解决方案 > 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());

标签: javacollections

解决方案


看内部实现:

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在返回给您之前,此方法也会更新。


推荐阅读