java - 当弱引用对象作为key放入HashMap时会发生什么?

标签 java garbage-collection

这是我的程序:

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/

相关文章:

java - 在 Java 中使用写字板打开文件

java - 项目 Euler 3 Java ArithmeticException

java - 如何在android中从json数据在ImageView上显示图像

c# - 返回列表前清除 list 的方法好吗?

go - golang 中的垃圾收集——它是如何发生的?

java - 在开始时管理 JVM OldGen 峰值

java - 对于 Hibernate 中的 MySQL 6,我应该使用哪种方言?

java - Spring JPA 存储库无法捕获 EntityNotFoundException

node.js - node.js --trace-gc 输出的含义是什么?

java对象在多个线程之间共享,何时垃圾收集?