Java 学习笔记

👉 所有文章
⏬ 近期文章 transmittable-thread-local 库 JOOR 反射库 Lombok 库:为你减少样板代码 Slf4j 日志组件的使用 加速maven、gradle依赖下载

🌴 键盘双击 xx ,可以快速查看所有文章列表。

Java ReferenceQueue


在[使用软引用、弱引用、幽灵引用]时候,可以指定一个 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

( 本文完 )

文章目录