2014-10-31 60 views
0

這是我的計劃:弱引用對象將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中),事實並非如此。有人可以告訴爲什麼地圖條目(弱引用)沒有被破壞?

+0

您能解釋一下您試圖實現的目標嗎?無論如何,它們可能不是GC'd,因爲GC認爲它們仍然被使用(這是事實),或者可能是因爲GC根本沒有被調用。 – 2014-10-31 10:57:02

+0

這個例子的代碼非常可怕。 – Kayaman 2014-10-31 11:00:54

回答

1

ref.get()返回null或硬引用您的對象。所以地圖不會包含任何'弱'參考。

相關問題