2014-10-31 21 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或硬引用您的对象。所以地图不会包含任何'弱'参考。

相关问题