你不知道的Eclipse的用法:使用MAT分析Android的内存

标签: 知道 eclipse mat | 发表时间:2013-07-08 09:20 | 作者:p106786860
出处:http://blog.csdn.net

如果使用DDMS确实发现了我们程序中存在内存泄露,那如何定位到具体出现问题的代码片段,最终找到问题所在呢?如果从头到尾分析代码逻辑,那肯定会把人逼疯,特别是在维护别人写的代码的时候。这里介绍一个极好的内存分析工具Memory Analyzer Tool(MAT)。 

  1. 在Eclipse中安装和使用MAT步骤 

  1. Eclipse安装Allocation tracker插件 

MAT是一个Eclipse插件,同时也有单独的RCP客户端。 

如果安装Eclipse插件(更方便使用,本文介绍的是使用Eclipse插件)。使用http://download.eclipse.org/mat/1.2/update-site/进行安装。 

  1. 生成.hprof文件 

打开Eclipse,切换到DDMS透视图,同时确认Devices、Heap和logat视图已经打开。 

将手机设备连接到电脑,并确保使用“USB调试“模式链接, 

链接成功后在Devices视图中就会看到设备的序列号,和设备正在运行的部分进程。 

选中想要分析的应用进程,在Devices视图上方的一行图标按钮中,同时选中“Update Heap”和“Dump HPROF file”按钮。 

Image 

弹出Getting Started向导对话框,选中Leak Suspects Report,点击Finish按钮。 

Image 

  1. 使用MAT打开并导入.hprof文件 

Eclipse自动跳转到Memory Analysize透视图,并打开default_report窗口。 

Image 

该窗口列出了,可能有问题的代码片段。点击Details可以查看相关的详情。 

Image 

在Shortest Paths To the Accumulation Point的列表中,我们可以追溯到问题代码的类树的结构,并找到自己代码中的类。 

在列表中,有两列Shallow Heap和Retained Heap。Shallow Heap指的是所有的实例的内存总和。Retained Heap指的是所有类实例被分配的内存总和,里面包括它们所有引用的对象。 

Image 

在Accumulated Objects列表中,我们可以看见创建的大量的对象。 

Image 

在Accumulated Objects by Class列表中,我们能看见创建大量对象相关的类。 

  1. 使用MAT视图工具分析内存 

点击Histogrm按钮,显示了Histogrm视图,它显示了一个可以排序的类实例的列表。并可以根据自己的意愿,修改排序。 

Image 

右击某一行,选择ListObjects>with incoming references,它会生成一个heap上的所有该对象数组的列表,我们可以按照Shallow Heap的使用情况来排序。 

Image 

选择一个较大的对象,右击,选择Path to GCRoot->exclude weak/soft reference。 

被JVM持有的对象,如当前运行的线程对象,被systemclass loader加载的对象称为GC Roots。从一个对象到GC Roots的引用链被称为Path to GC Roots, 

通过分析Path to GC Root可以找出Java的内存泄露问题,当程序不在访问该对象时,仍然存在到该对象的引用路径。 

Image 

MAT不会明确的告诉我们这就是内存泄露,因为它也不知道这个东西是不是程序需要的,只有程序员知道。 

 

点击Domanitor_tree按钮,弹出新的窗口,列出了对中最大的对象,第二层级节点标识当被第一层级的节点所引用到的对象,当第一层级的节点被回收时,这些对象也将会回收。 

Image 

这个工具可以帮我们定位对象间的引用情况,垃圾回收时候的引用关系。 

作者:p106786860 发表于2013-7-8 9:20:25 原文链接
阅读:121 评论:0 查看评论

相关 [知道 eclipse mat] 推荐:

你不知道的Eclipse的用法:使用MAT分析Android的内存

- - CSDN博客研发管理推荐文章
如果使用DDMS确实发现了我们程序中存在内存泄露,那如何定位到具体出现问题的代码片段,最终找到问题所在呢. 如果从头到尾分析代码逻辑,那肯定会把人逼疯,特别是在维护别人写的代码的时候. 这里介绍一个极好的内存分析工具Memory Analyzer Tool(MAT). 在Eclipse中安装和使用MAT步骤 .

Eclipse的Mat Plugin查找OOM使用一例

- - CSDN博客推荐文章
最近接手了一个老项目比较头痛. 头痛的原因是这个代码的编写者已经离开了公司,而且代码基本没有注释,结构混乱并且还有严重的内存泄漏问题. 其实接手这个项目最大需要解决的问题就是内存泄漏问题. 由于这个老项目使用JDK1.5,所以像JDK1.6自带很多内存检测工具都派不上用场了. 比如:jdk1.5 使用的jmap -heap 生成的dump文件用eclipse的mat就打不开.

MAT使用入门

- - 移动开发 - ITeye博客
原文出处:  高建武 (Granker,@高爷)   . MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗. 使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象.

JVM性能调试之mat

- - ITeye博客
mat为eclipse的一个内存分析插件,帮助查找内存泄漏和减少内存消耗. 首先基于jmap导出的堆信息. jmap导出参见另一则博客.  执行之后用jmap输出堆信息. 我们可以看到图形化展示:.  我们可以看到有很多的User对象.  这些对象有可能会溢出,然后我们打开OQL窗口看他是否为null,执行如下OQL语句.

MAT JVM内存分析

- - 开源软件 - ITeye博客
我们使用的是 Eclipse Memory Analyzer V0.8,Sun JDK 6. 和其他插件的安装非常类似,MAT 支持两种安装方式,一种是“单机版“的,也就是说用户不必安装 Eclipse IDE 环境,MAT 作为一个独立的 Eclipse RCP 应用运行;另一种是”集成版“的,也就是说 MAT 也可以作为 Eclipse IDE 的一部分,和现有的开发平台集成.

Eclipse 3.7发布

- Power - Solidot
Eclipse基金会宣布发布开源集成开发环境Eclipse 3.7,代号Indigo.

使用MAT分析内存泄露

- - Taobao QA Team
对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题. 随着单机内存越来越大,应用heap也开得越来越大,动辄十几G的Dump也不足为奇了. 要快速分析,快速定位问题就必须有给力的工具帮忙,下面我来介绍下常用内存分析工具. JDK自带的一个工具,是JVM Heap导出的必备工具.

Android性能专项测试之MAT

- - CSDN博客推荐文章
Android内存优化之二:MAT使用进阶. Android内存优化之一:MAT使用入门. MAT中的Bitmap图像. MAT工具全称为Memory Analyzer Tool,一款详细分析Java堆内存的工具,该工具非常强大,为了使用该工具,我们需要hprof文件,该文件我们在之前的 Heap Snapshot工具的时候,我们就生成了该文件.

使用MAT对java内存分析

- - BlogJava-首页技术区
这是一篇阅读MAT helper的笔记. Heap dump是java进程在特定时间的一个内存快照. 通常在触发heap dump之前会进行一次full gc,这样dump出来的内容就包含的是被gc后的对象. dump文件包含的内容:. 1,全部的对象:类,域,原生值和引用;. 2,全部的类:classloader,类名,超类,静态域;.

Google宣布Eclipse Labs

- 旺旺 - Solidot
Google和众多开源社区的开发者都使用Eclipse IDE,Google开发者用Eclipse开发了Android、App Engine、Google Chrome,以及大量Web应用程序. 现在Google宣布与Eclipse基金会合作,促进Eclipse生态系统,他们的合作结晶是Eclipse Labs.