在Android应用开发中,内存泄漏比较常见;如果应用越来越卡顿以致被系统杀掉,这个时候就可靠考虑分析下是否是内存泄漏导致的。在此分享内存泄漏分析的一种方式,主要是通过ADB、MAT工具分析,并简单描述内存泄漏的原因。
工具使用
分析应用内存,首先查看应用内存使用情况,可以通过Android Studio Profiler 或者dumpsys meminfo 命令查看,然后再通过内存分析工具分析内存泄漏情况。Android 内存泄漏分析工具主要有两种:1,通过Android Stuido Profiler工具实时查看内存使用情况;2,获取应用的hprof文件,然后通过MAT工具分析。我们今天要介绍的就是第二种方式;
查看内存使用情况
Android Studio Profiler查看内存比较直观,但这次我们主要看命令的方式,因为Android Studio Profiler无法应用于Android5.0以下的机器。比如查看A应用的内存使用情况,使用"dumpsys meminfo A应用包名"
-
私有内存(Dirty and Clean):
进程独占内存,也就是进程销毁时可以回收的内存容量。通常private Dirty内存是最重要的部分,因为只被自己进程使用,这也是我们需要关注的。Dirty内存是已经被修改的内存页,因此必须常驻内存(因为没有swap);Clean内存是已经映射持久文件使用的内存页(例如正在被执行的代码),因此一段时间不使用的话就可以置换出去。 -
实际使用内存(PSS):
将跨进程共享页也加入进来, 进行按比例计算PSS。这样能够比较准确的表示进程占用的实际物理内存。
当我们操作应用的时候如果发现TOTAl Private Dirty内存只增无减,那就很有可能存在内存泄漏,需要将应用的堆内存dump出来。
获取hprof文件
获取hprof文件主要包含两个步骤:
-
dump 出java heap 文件,通过An