1.類聲明:
//key是保存在在WeakReference中的,因此若是key只在這個WeakReference中有引用,那麼在下一次垃圾回收的時候就會將key進行回收,同時將這個WeakReference放到ReferenceQueue中。
public class WeakHashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V> {}
2.變量:
//核心方法,查看引用隊列,將隊列中的引用所在的節點刪除,節點對應的value置爲null,方便垃圾回收。這個方法調用很多方法都會觸發,比如get,put,size方法
private void expungeStaleEntries() {
for (Object x; (x = queue.poll()) != null; ) {
synchronized (queue) {
@SuppressWarnings("unchecked")
Entry<K,V> e = (Entry<K,V>) x;
int i = indexFor(e.hash, table.length);
Entry<K,V> prev = table[i];
Entry<K,V> p = prev;
while (p != null) {
Entry<K,V> next = p.next;
if (p == e) {
if (prev == e)
table[i] = next;
else
prev.next = next;
// Must not null out e.next;
// stale entries may be in use by a HashIterator
e.value = null; // Help GC
size--;
break;
}
prev = p;
p = next;
}
}
}
}
參考文章:http://blog.csdn.net/u012403290/article/details/70158262