LeakCanery 浅析理解

7 阅读1分钟

leakCanery 是检测Android内存泄漏的工具

Android中内存泄漏的本质:Android (或 JVM)的内存泄露:短⽣命周期的对象被⻓⽣命周期的对象持有, 从⽽导致短⽣命周 期的对象不能被释放

垃圾回收机制

垃圾回收机制分为「引⽤计数法」和「可达性分析法」

引⽤计数法:⽤⼀个计数器记录⼀个对象被引⽤的次数,如果引⽤的次数被减少到 0 那么说 明这个对象是垃圾 对象。 都是引⽤计数(引⽤计数有循环引⽤的问题)

**可达性分析法:Jvm 通过⼀些 GC Roots 向下搜索,如果可以被 Gc Roots 引⽤到的对象,说明 这个对象不是垃圾 对象,反之这个对象就算互相引⽤了也是垃圾对象 那些对象 会被作为 GC Roots 呢
**

在线程栈中的局部变量,也就是正在被调⽤的⽅法,它⾥⾯的参数和局部变 量

存活的线程对象

JNI 的引⽤

Class 对象,因为 Android 加载 Class 后不会卸载 Class

引⽤类型的静态变量

四⼤引⽤:

强⼀点的引⽤: 强引⽤——不会被垃圾回收

弱⼀点的引⽤:

                   弱引⽤——可以通过 get() 获得引⽤对象,会被垃圾回收 

                   软引⽤——可以通过 get() 获得引⽤对象,内存不⾜会被垃圾回收 

                   虚引⽤——不能通过 get() 获得引⽤对象,会被垃圾回收