系统内存分析工具

Google在Android系统中,已经添加了很多内存监控的工具,可以帮助开发者快速了解应用内存状态。

Process Stats

在开发者选项中可以找到Process Stats工具,如图6.44所示。

系统内存分析工具 - 图1 图6.44 系统Process工具

这里展示了系统整体的内存状态,包括:

  • 当前系统内存健康状态。
  • 每个进程占用系统总时间的时间比。

但大部分时间,App开发者是比较关心自己App的内存状态的,点击要查看的App进入每个App的内存状态,如图6.45所示。

系统内存分析工具 - 图2 图6.45 Process详细

这里可以看见当前App的内存使用状态,包括:

  • 平均内存使用。
  • 最大内存使用。
  • 运行时间比。

Apps-Running

在系统设置的Apps中,可以查看当前运行的App的内存使用,包括:

  • 系统占用内存与App占用内存。
  • 每个App占用的内存(Pss内存)。

在这里可以从宏观角度上查看App的内存占用情况,如图6.46所示。

系统内存分析工具 - 图3 图6.46 App-Running

Dumpsys Meminfo

adb dumpsys meminfo指令是Apps-Running的底层实现,可以dump出当前系统的内存使用状态。如果不指定包名,则dump出整个系统的内存分配状态。通常情况下,对于App开发者来说,需要指定包名来获取自己App的内存分配状态。

一个简单的内存快照,如图6.47所示。

系统内存分析工具 - 图4 图6.47 Heap数据

快照中包含了dump时间点的该App的所有内存分配信息,其中最重要的数据就是Pss内存值,即实际物理内存。常见的内存监视工具,基本都是通过线程来指定一定时间间隔的采样,获取其中的dump数据并记录下来,最后通过图表生成采样报表。

在这张图中,开发者最关心的就是前两列——Pss Total和Private Dirty。Pss Total的Total是当前所使用的内存总和。

利用这个工具检测内存泄漏,通常做法是让App多次开启和退出,看Dump出的内存信息中的Views和Activiies是否在退出后清零。其次是看Pss Total的值是否发生显著变化。

Dumpsys Procstats

adb dumpsys procstats指令是Process Stats的底层实现,收集的数据即为指定时间段内的内存分配状况(Pss内存)。通过指令adb shell dumpsys procstats-h可以获取该指令的详细使用方法,如图6.48所示。

系统内存分析工具 - 图5 图6.48 Procstats

该指令功能非常丰富,但使用频率并不高,毕竟IDE中的很多工具已经实现了其大部分的功能。