这是我的程序:
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 中)中,情况并非如此。有人可以告诉为什么 map 条目(弱引用)没有被破坏吗?
最佳答案
ref.get() 返回对对象的 null 或硬引用。因此 map 不会包含任何“弱”引用。
关于java - 当弱引用对象作为key放入HashMap时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26672883/