這是我的計劃:弱引用對象將itno HashMap作爲關鍵字會發生什麼?
public class MemoryLeaksWithMapsWeakReference {
private Map<MemoryLeaksWithMapsWeakReference, Integer> map = null;
public MemoryLeaksWithMapsWeakReference() {
map = new HashMap<MemoryLeaksWithMapsWeakReference, Integer>();
}
public static void main(String[] args) {
MemoryLeaksWithMapsWeakReference m = new MemoryLeaksWithMapsWeakReference();
while(true) {
m.run();
}
}
private void run() {
MemoryLeaksWithMapsWeakReference mm = new MemoryLeaksWithMapsWeakReference();
WeakReference<MemoryLeaksWithMapsWeakReference> ref = new WeakReference<MemoryLeaksWithMapsWeakReference>(mm);
mm = null;
map.put(ref.get(), 1);
System.out.println(map.size());
}
}
現在,如果對象是weakReferenced,它應該得到被垃圾收集器刪除。但是,在上面介紹的情況下(插入到Map中),事實並非如此。有人可以告訴爲什麼地圖條目(弱引用)沒有被破壞?
您能解釋一下您試圖實現的目標嗎?無論如何,它們可能不是GC'd,因爲GC認爲它們仍然被使用(這是事實),或者可能是因爲GC根本沒有被調用。 – 2014-10-31 10:57:02
這個例子的代碼非常可怕。 – Kayaman 2014-10-31 11:00:54