内存Memory

出处“百度QA”

正常情况下,应用不应占用过多内存资源,且能够及时释放内存,保证整个应用内的稳定性和流畅性。

强度分类

根据手机的使用应用品读和强度不同,将应用使用强度分为如下几种状态:

  1. 空闲状态:指启动应用后,不做任何操作或切换到后台运行的情况,成为空闲状态,该情况为应用对应内存的消耗是最小的。
  2. 中强度状态:该情况用户使用因雇佣的强度和时间长度不确定,相对来说使用时长偏长。
  3. 高强度状态:该种情况为应用内高频率的使用,用户很少达到,跑monkey时可认为高强度状态。该种情况常用来测试应用内存泄漏的情况,可根据用户的操作习惯模拟应用使用频率和强度等级。
获取内存信息方式(adb命令)
  1. adb shell , dumpsys meminfo <package_name> 或 dumpsys meminfo <package_id>
dumpsys meminfo

参数含义
l Naitve Heap Size: 从mallinfo usmblks获得,代表最大总共分配空间
l Native Heap Alloc: 从mallinfo uorblks获得,总共分配空间
l Native Heap Free: 从mallinfo fordblks获得,代表总共剩余空间
l Native Heap Size 约等于Native Heap Alloc + Native Heap Free
l mallinfo是一个C库, mallinfo 函数提供了各种各样的通过C的malloc()函数分配的内存的统计信息。
l Dalvik Heap Size:从Runtime totalMemory()获得,Dalvik Heap总共的内存大小。
l Dalvik Heap Alloc: Runtime totalMemory()-freeMemory() ,Dalvik Heap分配的内存大小。
l Dalvik Heap Free:从Runtime freeMemory()获得,Dalvik Heap剩余的内存大小。
l Dalvik Heap Size 约等于Dalvik HeapAlloc + Dalvik Heap Free

重点关注字段
(1) Native/Dalvik Heap 信息中的Heap Alloc
这两个值分别给出的是JNI层(Java Native Interface)和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。
(2) Total 信息中的 PSS Total
这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。

测试方法
  1. 使用Andoid Studio自带 CPU 和内存检测功能
  2. 使用腾讯插件APT

测试时,重点关注
1)退出某个页面后,内存是否回落。如果没有及时回落,也不一定就是问题,可能程序还没有自动GC,故一般情况下,需要手动GC,如果手动GC后,仍无法回落,此时可以确定有问题。
2)进行某个操作后,内存增长的过快,也可能存在风险,此时可反复操作进行确认。

  1. 使用Android自身提供的ActivityManager.MemoryInfo()方法获得

通过该方法获取某应用的内存信息。目前网易的Emmagee工具就是通过该方法实现某应用内存和cpu数据的获取,测试简单方便,安装app以后选中被测应用即可开始测试,界面会展示内存、CPU和流量等数据。完成测试后,可在本地SD卡种保存一份性能测试数据,可以从里面获取内存信息。

推荐阅读更多精彩内容