leakCanery 是检测Android内存泄漏的工具
Android中内存泄漏的本质:Android (或 JVM)的内存泄露:短⽣命周期的对象被⻓⽣命周期的对象持有, 从⽽导致短⽣命周 期的对象不能被释放
垃圾回收机制
垃圾回收机制分为「引⽤计数法」和「可达性分析法」
引⽤计数法:⽤⼀个计数器记录⼀个对象被引⽤的次数,如果引⽤的次数被减少到 0 那么说 明这个对象是垃圾 对象。 都是引⽤计数(引⽤计数有循环引⽤的问题)
**可达性分析法:Jvm 通过⼀些 GC Roots 向下搜索,如果可以被 Gc Roots 引⽤到的对象,说明 这个对象不是垃圾 对象,反之这个对象就算互相引⽤了也是垃圾对象 那些对象 会被作为 GC Roots 呢
**
在线程栈中的局部变量,也就是正在被调⽤的⽅法,它⾥⾯的参数和局部变 量
存活的线程对象
JNI 的引⽤
Class 对象,因为 Android 加载 Class 后不会卸载 Class
引⽤类型的静态变量
四⼤引⽤:
强⼀点的引⽤: 强引⽤——不会被垃圾回收
弱⼀点的引⽤:
弱引⽤——可以通过 get() 获得引⽤对象,会被垃圾回收
软引⽤——可以通过 get() 获得引⽤对象,内存不⾜会被垃圾回收
虚引⽤——不能通过 get() 获得引⽤对象,会被垃圾回收