繁体   English   中英

将弱引用的对象放入HashMap作为键时会发生什么?

[英]What happens when weak referenced object is put itno HashMap as key?

这是我的程序:

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,则应该由垃圾收集器将其删除。 但是,在上述情况下(插入地图),情况并非如此。 有人可以说出为什么地图项(弱引用)没有被销毁吗?

ref.get()返回对您的对象的null或硬引用。 因此,地图将不包含任何“弱”引用。

如果将对象( ref.get() )放入哈希图,则会在该图内创建硬引用,因此无法对该对象进行垃圾回收。

参见http://docs.oracle.com/javase/7/docs/api/java/util/WeakHashMap.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM