java 基础 - WeakReference 和 ReferenceQueue

what 什么是weakReference和ReferenceQueue?

weakReference表示弱引用,其实就是包装了一个强引用,GC的时候,这个被包装的强引用能被释放掉。如果有ReferenceQueue的话,在释放的时候就把这个Reference放到ReferenceQueue里面,ReferenceQueue里面其实维护的就是Reference的链表而已。

从引用链的角度来说,Reference中引用了包装的对象和ReferenceQueue,Reference包装的对象被回收的时候,Reference被放到了ReferenceQueue维护的链表当中,也就是说Reference还有个queueNext字段指向了Queue链表中的Reference,如果是末尾,自己指向自己。

How 怎么用?

       ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>();
        WeakReference<Object> weakReference = new WeakReference(new Object(), referenceQueue);
        Object obj = weakReference.get();

Why 为什么要用呢?

弱引用的好处就是GC的时候能够断开引用,如果没有其它引用,对象就被回收了,所以可以解决内存泄漏问题。

Reference和ReferenceQueue一块使用可以,检测内存泄漏问题,比如LeakCanary。

说到内存泄漏,不得不说到WeakReference

(源码)详细分析Android中的引用机制Reference(WeakReference、SoftReference、PhantomReference)

扫描二维码关注公众号,回复: 11039405 查看本文章

Android对Reference的源码进行了改动,下面是的对Java版的说明

java 源码系列 - 带你读懂 Reference 和 ReferenceQueue

这篇文章推荐阅读的文章都得学习一下

发布了189 篇原创文章 · 获赞 25 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/lizhongyisailang/article/details/104071205