android内存分析工具- MAT的初识(1)
目标:该系列文章带领大家掌握android内存溢出的排查,让内存问题不再是android开发者的门槛。
DDMS(Dalvik Debug Monitor Server)和MAT(Memory Analyzer Tool)这两个工具可以很好地帮助我们分析优化内存。MAT是一个Eclipse插件,同时也有单独的RCP客户端。我们使用MAT的eclipse插件,使用插件要比RCP稍微方便一些。插件地址为http://download.eclipse.org/mat/1.5/update-site/,安装方式跟ADT,SVN插件方式一致。
一,MAT的使用
1) 手机连接电脑,点击eclipse DDMS视图,选择Devices视图,确认手机在Devices列表中。
2 在手机上打开应用,运行至需要分析内存的界面,在Devices中对应手机下选中该应用对应的包名,比如com.tencent.kupaodemo,先后点击如下图:
3)点击步骤2)中的2之后稍等数秒,如果已成功安装MAT,便会自动打开hprof文件,进入以下界面:
上图我们最常用的两个MAT功能是:Histogram(直方图)列举了每个对象的统计,Dominator Tree(支配树)提供了程序中最占内存的对象的排列。
二,MAT工具的介绍
1)点击Dominator Tree,显示如下界面:
Dominator Tree可以列出分配的所有对像。
下面认识一下上图红框标注的几个名词含义:
Shallow Heap:指对象自身所占用的内存大小,不包含其引用的对象所占的内存大小。单位为byte。
Retained Heap:前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)。换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。单位为byte。
在JAVA中是通过可达性(Reachability Analysis)来判断对象是否存活,这个算法的基本思想是通过一系列的称谓”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走的路径称为引用链,当一个对象到GC Roots没有任何引用链相连则该对象被判定为可以被回收的对象,反之不能被回收。
右键点击某个对像,点Path to GC root->exclude weak/soft reference. 可以列出这个对像到GC root的路径。如下图所示:
下图显示这个NinePatch(点九图片)对象到GC-root的路径
2)点击Histogram,显示如下界面:
Histogam可以列出程序涉及的所有class。
Histogram视图,以class为分类进行统计,并统计每个class分配了多少对象,占用的shallow size和retain size。
右键点击某一个类-> list objects可以列出这个类生成的所有对象。如下图:
with outgoing reference表示,把此对象引用的对象也显示出来。
with incoming referentce 表示,把引用此对象的对象也显示出来。
3)Group by…
在historgam和dominator tree视图中,可以点击菜单栏的“Group by..”按钮。可以将对像以四种方式分类1.Group by class,实际上就是Hisgtoram视图。
2.Group By class loader 其中在Group By class loader中。会按照class loader进行分类。
3.GroupByPackage
在Group By Package中。可以将类以包名组积显示,结构和我们写程序时看到的Package Explorer相似。如下图所示。在这个视图中,可以很方便的根据我们熟悉的Package explorer找到相关的类。
更多相关文章
- Android中String资源文件的format方法
- Android(安卓)开发必读:如何成为一名优秀的Android开发者
- Android服务注册完整过程源码分析
- Android横竖屏布局总结
- android EditText彻底搞定输入框隐藏/显示背景 可编辑输入问题
- Android(安卓)使用Parcelable传递对象
- Android开发指南-三维图形
- Android-sharedUserId数据权限 android:sharedUserId
- android事件拦截处理机制详解