参考文章:Heap Viewer
Android 内存监测工具 DDMS –> Heap
使用DDMS中的内存监测工具Heap来优化内存

Heap Viewer能做什么?

  • 实时查看App分配的内存大小和空闲内存大小
  • 发现Memory Leaks

Heap Viewer使用条件

  • 5.0以上的系统,包括5.0
  • 开发者选项可用

Heap Viewer启动

可以直接在Android studio工具栏中直接点击小机器人启动:

还可以在Android studio的菜单栏中Tools也可以:

如果你不用Android studio,可以在SDK下的tools下的monitor程序打开:

Heap Viewer面板

按上图的标记顺序按下,我们就能看到内存的具体数据,右边面板中数值会在每次GC时发生改变,包括App自动触发或者你来手动触发。

ok,现在来解释下面板中的名词

总览

列名 意义
Heap Size 堆栈分配给App的内存大小
Allocated 已分配使用的内存大小
Free 空闲的内存大小
%Used Allocated/Heap Size,使用率
Objects 对象数量

详情

类型 意义
free 空闲的对象
data object 数据对象,类类型对象,最主要的观察对象
class object 类类型的引用对象
1-byte array(byte[],boolean[]) 一个字节的数组对象
2-byte array(short[],char[]) 两个字节的数组对象
4-byte array(long[],double[]) 4个字节的数组对象
non-Java object 非Java对象

下面是每一个对象都有的列名含义:

列名 意义
Count 数量
Total Size 总共占用的内存大小
Smallest 将对象占用内存的大小从小往大排,排在第一个的对象占用内存大小
Largest 将对象占用内存的大小从小往大排,排在最后一个的对象占用的内存大小
Median 将对象占用内存的大小从小往大排,拍在中间的对象占用的内存大小
Average 平均值

当我们点击某一行时,可以看到如下的柱状图:

横坐标是对象的内存大小,这些值随着不同对象是不同的,纵坐标是在某个内存大小上的对象的数量

Heap Viewer的使用

我们说Heap Viewer适合发现内存泄漏的问题,那你知道何为内存泄漏么?

内存泄漏

英文名:Memory Leaks
标准解释:无用的单纯,但是还是没GC ROOT引用的内存
通俗解释:该死不死的内存

检测

那么如何检测呢?Heap Viewer中的数值会自动在每次发生GC时会自动更新,那么我们是等着他自己GC么?小弟不才,刚开始我就是这么一直等啊等,由于GC的时机是系统把握的,所以很不好把握,既然我们是来看内存泄漏,那么我们在需要检测内存泄漏的用例执行过后,手动GC下,然后观察data object一栏的total size(也可以观察Heap Size/Allocated内存的情况),看看内存是不是会回到一个稳定值,多次操作后,只要内存是稳定在某个值,那么说明没有内存溢出的,如果发现内存在每次GC后,都在增长,不管是慢增长还是快速增长,都说明有内存泄漏的可能性。

实例

先来看3个图:
1.刚打开首页,手动GC一下:

2.首页到详情页10遍,最后回到首页,手动GC一下,直到数值不再变化:

3.首页到详情页10遍,最后回到首页,手动GC一下:

data object一栏看到该类型的数值会在不断增长,可能发生了内存泄漏,而我们也可以从上面三个图的标红部分来看,Allocated分别增加了2.418M1.084M,而且你继续这么操作下去,内存依然是增长的趋势

补充

Heap Viewer不光可以用来检测是否有内存泄漏,对于内存抖动,我们也可以用该工具检测,因为内存抖动的时候,会频繁发生GC,这个时候我们只需要开启Heap Viewer,观察数据的变化,如果发生内存抖动,会观察到数据在段时间内频繁更新。

Android性能专项测试之Heap Viewer工具相关推荐

  1. Android性能专项测试之Batterystats

    Batterystats & Battery Historian Walkthrough Battery Historian Charts Android应用的耗电量统计 Supplicant ...

  2. Android性能专项测试之GPU Monitor

    Testing Display Performance Speed up your app GPU Monitor能做什么? 分析GPU的性能,实时查看绘制每一帧所花费的时间 GPU Monitor使 ...

  3. android专项测试 方案,Android性能专项测试.pdf

    目录 前言 battery-historian试用 MemoryMonitor工具 HeapViewer工具 AllocationTracker(DeviceMonitor) AllocationTr ...

  4. 移动端性能专项测试之 CPU

    指标背景 很多场景下我们去使用 App,可能会碰到手机会出现发热发烫的现象.这是因为 CPU 使用率过高.CPU 过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起 A ...

  5. | 移动端性能专项测试之CPU资源

    1.指标背景 很多场景下我们去使用 App,可能会碰到手机会出现发热发烫的现象.这是因为 CPU 使用率过高.CPU 过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起 ...

  6. Android app专项测试之耗电量测试

    00 前言 耗电量指标 待机时间成关注目标 提升用户体验 通过不同的测试场景,找出app高耗电的场景并解决 01 需要的环境准备 1.python2.7(必须是2.7,3.X版本是不支持的) 2.go ...

  7. app功耗测试软件,Android app专项测试之耗电量测试

    前言 耗电量指标 待机时间成关注目标 提升用户体验 通过不同的测试场景,找出app高耗电的场景并解决 01需要的环境准备 1.python2.7(必须是2.7,3.X版本是不支持的) 2.golang ...

  8. 安卓 App 性能专项测试之流畅度深度解析-上篇

    指标背景 流畅度,顾名思义是用户感知使用App页面时的流畅情况,"App卡不卡",这是用户最直接的感受. 但是要用量化之后的数据衡量流畅度,在Android平台这边并没有直接有效的 ...

  9. Android系统性能优化(54)---Android性能分析专题

    Android性能分析专题 1.  背景:Android App优化, 要怎么做? 2.  Android App优化之性能分析工具 3.  Android App优化之提升你的App启动速度之理论基 ...

最新文章

  1. VS与Win7 共舞:用户界面特权隔离
  2. 【系统分析与设计】UML协作图绘制方法(真の能看懂~!)
  3. python实现登录网站下载文件-Python爬虫 登录网页后下载图片,怎么保持登录状态?...
  4. TCP/IP网络协议的通俗理解,socket,http,soap。
  5. 2小时撸完代码之后,所有程序员都逃不过的一天... (强共鸣)
  6. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)
  7. Hbase 查看 rowkey在哪个region中
  8. Ubuntu输入ifconfig找不到IP地址,只有lo问题
  9. linux文件系统初识
  10. python小课账号转卖_Python小课笔记--Python报错处理
  11. vue前端项目的结构以及组成部分
  12. 全社会有效需求不足分析
  13. Mac系统最强虚拟机(支持Big Sur)
  14. 数学建模之传染病SIR模型(新冠真实数据)
  15. 怎样用计算机画图合成图片,如何用电脑自带画图软件将多张截图拼成一张图,自动生成的那种...
  16. css 默认显示滚动条,css控制默认滚动条样式
  17. 客服在线咨询工具|即时聊天客服系统下载安装(包含APP)
  18. FCN学习:Semantic Segmentation(摘自知乎)
  19. 客房管理android源码,c++ 客房管理系统完整源码(含数据库)
  20. 访问者模式(JAVA)

热门文章

  1. table表格单元格padding_table的使用以及其内padding、margin的实现
  2. java 强制转换string_toString() 和 强制类型转换 (String)
  3. 清华镜像安装python安装步骤,python详细安装教程
  4. Vue|自定义组件库组件“前缀“咋定义?
  5. [译]Core Animation 3D介绍(第2部分)
  6. 用matplotlib的Animation画动图
  7. kerberos : Failed to find any Kerberos tgt
  8. 程序员在外包公司工作感悟
  9. 【Linux】vim使用小技巧
  10. 用python画嘴_啥是佩琦?我们用Python画给你看!