LeakCanary是一个Android中检查内存泄漏的框架,其使用方法简单,自动检测内存泄漏问题并且还能显示出泄漏路径,深受Android开发者喜欢。但是一直没有对它的原理进行分析,今天正好有空研究下。
1.LeakCanary的检测原理
1.1内存泄漏的原理
QQ20210701-0.jpg内存泄漏:Java中不再需要的对象依然被引用,导致对象被分配的内存无法被回收。
Java现在判断可回收对象采用的是可达性分析算法:当一个对象到GC ROOTS没有引用链项链时,则证明此对象是不可用的。
在Java中,可作为GC ROOTS的对象包括以下几种:
- 虚拟机栈中引用的对象
- 方法区中静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中JNI引用的对象(一般说的Native方法)
然后我们在猜测下,在页面关闭后,我们把里面的对象加入一个引用链,然后触发GC,再看里面的对象回收没,如果还存在,那么很有可能发生了内存泄漏。
网友评论