这是我的计划:弱引用对象将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