Java WeakHashMap清理

时间:2019-03-15 16:04:56

标签: java garbage-collection weak-references weakhashmap

我试图弄清楚WeakHashMap在收集垃圾后如何清理。 众所周知,WeakHashMap条目在其键成为垃圾回收时会自动删除。但是,例如,如果我做这样的事情:

List<WeakReference<Main>> list = new ArrayList<>();
list.add(new WeakReference<>(new Main()));
System.gc();
Thread.sleep(1000);
list.get(0).get(); //null - WeakReference referent has been removed
list.get(0); //empty WeakReference object is still present in the List

ArrayList不会清除空的WeakReference对象,但是为什么要清除WeakHashMap?哪个组件负责此自动条目删除。我在WeakHashMap源代码中看不到任何可以做到这一点的代码。

1 个答案:

答案 0 :(得分:1)

WeakHashMap会自行清理。呼叫%Appdata%\pip(本身由[global] proxy = proxy.company.com:8080 cert = C:\CA_Proxy.cer getTable()等呼叫),getput的所有首次呼叫expungeStaleEntries,都会重复GC条目的ReferenceQueue并将其从表中删除。垃圾收集器负责将无法访问的WeakReference对象放在队列中。