Java WeakHashMap


#Java 笔记


本文的示例中需要触发垃圾回收,用了 垃圾回收 给出的方法。

WeakHashMap 首先是一个 Map,可以用key-value的形式存储数据。

其次,它继承自 WeakReference,当 key 只剩下弱引用时,会以懒处理的方式清理该 key-value 。

懒处理,是指在调用 WeakHashMap 的 size、put、get 等方法时才去清理。

回顾弱引用:WeakReference

当一个对象只有弱引用时,gc时会把该对象回收。

import java.lang.ref.WeakReference;

public class Main {

    public static void main(String[] args) {
        String name = new String("ltt");  // new String,可以防止常量池的副作用

        WeakReference<String> nameRef = new WeakReference<>(name);  // 生成弱引用

        System.out.println(nameRef.get()); // ltt

        name = null;  // 解除强引用

        // 触发垃圾回收
        System.gc();
        System.runFinalization();

        System.out.println(nameRef.get());  // null
    }

}

运行结果:

ltt
null

WeakHashMap 的使用

import java.util.WeakHashMap;

public class Main2 {

    public static void main(String[] args) {
        String name = new String("ltt");
        WeakHashMap<String, Integer> map = new WeakHashMap<>();
        map.put(name, 18);
        System.out.println(map.size()); // 1
 
        name = null;  // 解除强引用

        // 触发垃圾回收
        System.gc();
        System.runFinalization();

        // map 中无数据了
        System.out.println(map.size()); // 0
    }
}

运行结果:

1
0


( 本文完 )