什么是内存泄漏
Android虚拟机的垃圾回收采用的是根搜索算法。GC会从根节点(GC Roots)开始对heap进行遍历。到最后,部分没有直接或者间接引用到GC Roots的就是需要回收的垃圾,会被GC回收掉。而内存泄漏出现的原因就是存在了无效的引用,导致本来需要被GC的对象没有被回收掉。
内存泄漏的检测
打开Android Studio,编译代码,在模拟器或者真机上运行App,然后点击,在Android
Monitor下点击Monitor对应的Tab,进入如下界面
在Memory一栏中,可以观察不同时间App内存的使用情况,点击可以手动触发GC,点击
可以进入HPROF
Viewer界面,查看app的Heap,如下图:
Reference Tree代表指向该实例的引用,可以从这里面查看内存泄漏的原因;
Shallow Size指的是该对象本身占用内存的大小;
Retained
Size代表该对象被释放后,垃圾回收器能回收的内存总和。