LeakCanary 是一个简单方便的内存泄漏检测框架,做 android 的同学基本都收到过 LeakCanary 检测出来的内存泄漏。目前 LeakCanary 最新版本为 2.7 版本,并且采用 kotlin 重写了一遍。最近也是对 kotlin 有了一些了解后,才敢来分析 LeakCanary 的实现原理。

1. 准备知识

1.1 Reference

Java中的四种引用类型,我们先简单复习下

  • 强引用,对象有强引用时不能被回收

  • 软引用 SoftReference,对象只有软引用时,在内存不足时触发GC会回收该对象

  • 弱引用 WeakReference,对象只有弱引用时,下次GC就会回收该对象

  • 虚引用 PhantomReference,平常很少会用到,源码注释主要用来监听对象清理前的动作,比Java finalization更灵活,PhantomReference 需要与 ReferenceQueue 一起配合使用。

12-11 19:07