猿问

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());


心有法竹
浏览 114回答 2
2回答

慕哥6287543

看内部实现:public int size() {&nbsp; &nbsp; if (size == 0)&nbsp; &nbsp; &nbsp; &nbsp; return 0;&nbsp; &nbsp; expungeStaleEntries();&nbsp; &nbsp; return size;}专门用于expungeStaleEntries使用的方法:/**&nbsp;* Reference queue for cleared WeakEntries&nbsp;*/private final ReferenceQueue<Object> queue = new ReferenceQueue<>();size在返回给您之前,此方法也会更新。

Cats萌萌

调用该size()方法时会删除陈旧的条目。该size()方法在内部调用私有方法expungeStaleEntries()以删除过时的条目(当然,如果它尚未为空)。
随时随地看视频慕课网APP

相关分类

Java
我要回答