一、简介
Heap Viewer是android studio自带的内存分析小工具,5.0及其以上系统可使用。
二、使用介绍
2.1 Heap Viewer的使用面板介绍

操作顺序即按图中的字母顺序。
可以看到数据分为两个部分:
总览:

字段说明:
列名 | 含义 |
---|---|
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 | 平均值 |
当我们点击某一行时,可以看到如下的柱状图:

横坐标是对象的内存大小,这些值随着不同对象是不同的,纵坐标是在某个内存大小上的对象的数量。
2.2 Heap Viewer 如何分析内存问题
上小节我们了解了详细的面板信息,下面我们来看看如何分析内存问题:
Heap Viewer中的数值会自动在每次发生GC时会自动更新,这是个检测前提。通过反复操作,观察数值的变化,来确认是否存在内存问题。如何确认呢?
原则上Heap Viewer用来处理两类内存问题:
1)内存泄漏
观察data object一栏的total size(也可以观察Heap Size/Allocated内存的情况),多次操作后,只要data object的total size是稳定在某个值,那么说明没有内存泄漏,如果发现它在每次GC后,都在增长,不管是慢增长还是快速增长,都说明有内存泄漏的可能性。
2)内存抖动
因为内存抖动的时候,会频繁发生GC,不需要手动触发GC,就能看到数据在频繁更新。
笔者认为,你如果是app开发,当前工具可以比较方便的让你针对项目的页面进行内存泄漏和内存抖动的初步排查,但是不提供问题具体定位。
参考:https://blog.csdn.net/zhangfei2018/article/details/49154479
网友评论