Android性能专项测试之Heap Viewer工具
参考文章: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.418M
和1.084M
,而且你继续这么操作下去,内存依然是增长的趋势
补充
Heap Viewer不光可以用来检测是否有内存泄漏,对于内存抖动,我们也可以用该工具检测,因为内存抖动的时候,会频繁发生GC,这个时候我们只需要开启Heap Viewer,观察数据的变化,如果发生内存抖动,会观察到数据在段时间内频繁更新。
Android性能专项测试之Heap Viewer工具相关推荐
- Android性能专项测试之Batterystats
Batterystats & Battery Historian Walkthrough Battery Historian Charts Android应用的耗电量统计 Supplicant ...
- Android性能专项测试之GPU Monitor
Testing Display Performance Speed up your app GPU Monitor能做什么? 分析GPU的性能,实时查看绘制每一帧所花费的时间 GPU Monitor使 ...
- android专项测试 方案,Android性能专项测试.pdf
目录 前言 battery-historian试用 MemoryMonitor工具 HeapViewer工具 AllocationTracker(DeviceMonitor) AllocationTr ...
- 移动端性能专项测试之 CPU
指标背景 很多场景下我们去使用 App,可能会碰到手机会出现发热发烫的现象.这是因为 CPU 使用率过高.CPU 过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起 A ...
- | 移动端性能专项测试之CPU资源
1.指标背景 很多场景下我们去使用 App,可能会碰到手机会出现发热发烫的现象.这是因为 CPU 使用率过高.CPU 过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起 ...
- Android app专项测试之耗电量测试
00 前言 耗电量指标 待机时间成关注目标 提升用户体验 通过不同的测试场景,找出app高耗电的场景并解决 01 需要的环境准备 1.python2.7(必须是2.7,3.X版本是不支持的) 2.go ...
- app功耗测试软件,Android app专项测试之耗电量测试
前言 耗电量指标 待机时间成关注目标 提升用户体验 通过不同的测试场景,找出app高耗电的场景并解决 01需要的环境准备 1.python2.7(必须是2.7,3.X版本是不支持的) 2.golang ...
- 安卓 App 性能专项测试之流畅度深度解析-上篇
指标背景 流畅度,顾名思义是用户感知使用App页面时的流畅情况,"App卡不卡",这是用户最直接的感受. 但是要用量化之后的数据衡量流畅度,在Android平台这边并没有直接有效的 ...
- Android系统性能优化(54)---Android性能分析专题
Android性能分析专题 1. 背景:Android App优化, 要怎么做? 2. Android App优化之性能分析工具 3. Android App优化之提升你的App启动速度之理论基 ...
最新文章
- VS与Win7 共舞:用户界面特权隔离
- 【系统分析与设计】UML协作图绘制方法(真の能看懂~!)
- python实现登录网站下载文件-Python爬虫 登录网页后下载图片,怎么保持登录状态?...
- TCP/IP网络协议的通俗理解,socket,http,soap。
- 2小时撸完代码之后,所有程序员都逃不过的一天... (强共鸣)
- ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)
- Hbase 查看 rowkey在哪个region中
- Ubuntu输入ifconfig找不到IP地址,只有lo问题
- linux文件系统初识
- python小课账号转卖_Python小课笔记--Python报错处理
- vue前端项目的结构以及组成部分
- 全社会有效需求不足分析
- Mac系统最强虚拟机(支持Big Sur)
- 数学建模之传染病SIR模型(新冠真实数据)
- 怎样用计算机画图合成图片,如何用电脑自带画图软件将多张截图拼成一张图,自动生成的那种...
- css 默认显示滚动条,css控制默认滚动条样式
- 客服在线咨询工具|即时聊天客服系统下载安装(包含APP)
- FCN学习:Semantic Segmentation(摘自知乎)
- 客房管理android源码,c++ 客房管理系统完整源码(含数据库)
- 访问者模式(JAVA)
热门文章
- table表格单元格padding_table的使用以及其内padding、margin的实现
- java 强制转换string_toString() 和 强制类型转换 (String)
- 清华镜像安装python安装步骤,python详细安装教程
- Vue|自定义组件库组件“前缀“咋定义?
- [译]Core Animation 3D介绍(第2部分)
- 用matplotlib的Animation画动图
- kerberos : Failed to find any Kerberos tgt
- 程序员在外包公司工作感悟
- 【Linux】vim使用小技巧
- 用python画嘴_啥是佩琦?我们用Python画给你看!