您的位置:首页 > 移动开发 > Android开发

android内存分析工具- MAT的初识(1)

2016-01-13 23:21 351 查看
目标:该系列文章带领大家掌握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找到相关的类。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: