我试图弄清楚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源代码中看不到任何可以做到这一点的代码。
答案 0 :(得分:1)
WeakHashMap会自行清理。呼叫%Appdata%\pip
(本身由[global]
proxy = proxy.company.com:8080
cert = C:\CA_Proxy.cer
,getTable()
等呼叫),get
和put
的所有首次呼叫expungeStaleEntries,都会重复GC条目的ReferenceQueue并将其从表中删除。垃圾收集器负责将无法访问的WeakReference对象放在队列中。