android 内存泄露分析

一.内存回收
1.常用的一种算法是引用计数法,如果一个对象的引用为0了,那就可以回收了。但是对于这种方法致命缺陷,当对象之间存在循环引用的时候,A引用B,B引用A,这样A和B的引用就一直不会为0,那就无法回收了。

2、Java采用的算法为根搜索算法,以一系列GC Roots为起点,向下搜索,如果存在引用,则对象依然在用,不能回收;如果不存在引用,则可以回收。

可以作为GC Roots的有如下几种:
a、虚拟机栈(栈帧中的本地变量表)中的引用的对象
b、方法区中的类静态属性引用的对象
c、方法区中的常量引用的对象
d、本地方法栈中JNI的引用的对象
这里写图片描述

二.android studio分析内存泄露方法 内存分析工具MAT(Memory Analysis Tools) 【步骤1】得到hprof文件 在Android Studio的Android Monitor,选择你的进程,然后点击左上角第3个图标, Dump Java Heap 这样在工程目录下的captrue文件夹下就会产生hprof文件,但是这个不是标准的hprof文件,需要经过转换才能被MAT打开分析,转换操作 【步骤2】使用MAT分析内存情况 打开MAT,open File,选择刚才转换好的标准hprof文件打开 点击Leak Suspects,里面会列出问题可疑点,饼图的下方是可以点的具体描述,我们找到自己写的那个类相关的可疑点,点击Details