Java ReferenceQueue


#Java 笔记


在[使用软引用、弱引用、幽灵引用]时候,可以指定一个 ReferenceQueue 对象,它存储的是被回收数据对应的引用。

我们以为弱引用为例:

import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;

public class Main {

    public static void main(String[] args) throws InterruptedException {
        ReferenceQueue<String> queue = new ReferenceQueue<>();

        String data = new String("data");
        WeakReference<String> dataRef = new WeakReference<>(data, queue);
        System.out.println(dataRef);

        data = null; // 解除强引用

        // 触发垃圾回收
        System.gc();
        System.runFinalization();
        
        // 查看哪些弱引用中的数据被回收了
        while (true) {
            Reference ref =  queue.poll();
            if (ref == null) {
                break;
            }
            System.out.println("回收了: " + dataRef);
        }

    }
}

运行结果:

java.lang.ref.WeakReference@2f92e0f4
回收了: java.lang.ref.WeakReference@2f92e0f4


( 本文完 )