![](/img/trans.png)
[英]What happens when two threads trying to put the same key value in concurrent 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.