垃圾回收器跟踪活动的对象,只要映射表对象(Map)是活动的,其中的所有桶也是活动的。因此,需要由程序员负责长期存活的映射表中删除那些无用的值。或者使用WeakHashMap完成这件事。当对键的唯一引用来自散列表条目时,这一数据结构将于垃圾回收器协同工作一起删除键/值对。
下面是这种机制的内部运行情况。WeakHashMap使用弱引用(weak references)保存键。WeakReference对象将引用保存到另外一个对象中,在这里,就是散列表键。对于这种类型的对象,垃圾回收器用一种特有的方式进行处理。通常,如果垃圾回收器发现某个特定的对象已经没有人使用它,但要将引用这个对象的弱引用放入到队列中。WeakHashMap将周期性地检查队列,以便找出新添加的弱引用。一个弱引用进入队列意味着这个键不再被别人使用,并且已经被收集起来。于是,WeakHashMap将删除对应的条目。