MAT内存问题分析定位
MAT内存问题分析定位
1、下载安装MemoryAnalyzer工具。
2、使用DDMS将对应线程的内存日志导出来后,使用hprof-conv工具进行转换,用MAT打开转换后的hprof文件。
Biggest object by retained size:以饼状图列出系统中占用最大资源的对象;
Histogram:以直方图的形式列出每个实例的详细信息;
Dominator Tree:列出最大和保持其存活的对象;
Top Consumers:显示出最耗资源的对象信息;
Duplicate Classes:显示重复类信息;
Leak Suspects:内存泄露嫌疑对象;
3、进入Histogram,选中一个对象右键,list object->with outgoing reference,查看当前对象所引用的外部对象;list object->with incoming reference,查看当前对象被哪些外部对象引用。
4、可以通过Merge Shortest Paths to GC Roots-> exclue all phantom/weak/soft etc. reference 找出某个实例没有被释放的原因。
5、进入Leak Suspects中,查看内存泄露可疑处。
6、Histogram比对
为查找内存泄漏,通常需要两个 Dump结果作对比;打开 Navigator History面板,打开两个hprof文件,分别进入histogram,打开Navigation,分别将两个表的 Histogram结果都添加到Compare Basket中去 :
添加好后,打开Compare Basket面板,得到结果:
点击右上角!按钮,将得到比对结果:
将比对结果进行排序:
通过多次操作被测应用,将前后操作的hprof文件导出进行比对,找出对象引用的差异来定位问题。
MAT内存问题分析定位的更多相关文章
- Android应用内存泄漏的定位、分析与解决策略
什么是内存泄漏 对于不同的语言平台来说,进行标记回收内存的算法是不一样的,像 Android(Java)则采用 GC-Root 的标记回收算法.下面这张图就展示了 Android 内存的回收管理策略( ...
- Android内存优化之——static使用篇(使用MAT工具进行分析)
这篇文章主要配套与Android内存优化之——static使用篇向大家介绍MAT工具的使用,我们分析的内存泄漏程序是上一篇文章中static的使用内存泄漏的比较不容易发现泄漏的第二情况和第三种情况—— ...
- 关于内存泄露分析插件 MAT 的用法
关于内存泄露分析插件 MAT 的用法,建议大家有时间看一下,下面的文章 http://www.blogjava.net/rosen/archive/2010/05/21/321575.html htt ...
- express 内存溢出问题分析定位
一.现象 1. 如下报错 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 1: n ...
- Eclipse MAT内存分析工具(Memory Analyzer Tool)
MAT内存分析工具 MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找内存泄露以及查看内存消耗情况.MAT是基于Eclipse开发的,是一款免费的性能分 ...
- 内存泄漏分析 mat 使用 activity泄漏
https://github.com/square/leakcanary square 公司出品 mat 下载地址: http://pan.baidu.com/s/1kVPoIxx 两天,一个内存泄漏 ...
- 【转】Eclipse MAT内存分析工具(Memory Analyzer Tool)
Eclipse MAT内存分析工具(Memory Analyzer Tool) MAT内存分析工具# MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找 ...
- MAT内存分析
先下载 http://www.eclipse.org/mat/downloads.php 配置环境参数 分析一个堆转储文件需要消耗很多的堆空间,为了保证分析的效率和性能,在有条件的情况下,建议分配给 ...
- 使用Eclipse Memory Analyzer进行内存泄漏分析
一.准备工作 1)工具下载: http://www.eclipse.org/mat/downloads.php 可以选择eclipse插件的方式安装 http://download.eclipse.o ...
随机推荐
- M4: 使用CommandBar
本小节将介绍如何使用CommandBar, CommandBar分为PrimaryCommands和SecondaryCommands,在PrimaryCommands中不要放置多于四个按钮.然后将不 ...
- python数据结构与算法——链表
具体的数据结构可以参考下面的这两篇博客: python 数据结构之单链表的实现: http://www.cnblogs.com/yupeng/p/3413763.html python 数据结构之双向 ...
- Erlang 101 Erlang环境和顺序编程
笔记系列 Erlang环境和顺序编程 Erlang并发编程 Erlang分布式编程 Yaws Erlang/OTP 日期 变更说明2014-10-12 A outline, ...
- LA 3027 合作网络 并查集
题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...
- 深入解读Linux与Android的相互关系(转-lining)
大家都知道Android是基于Linux内核的操作系统,也曾经和Linux基金会因为内核问题产生过分歧,本文将开始对Android的内核进行剖析,主要介绍Android和Linux之间的关系,后续还会 ...
- Git的配置及常用命令
Git配置 git config --global user.name "<username>" git config --global user.email &quo ...
- (转) Deep Reinforcement Learning: Playing a Racing Game
Byte Tank Posts Archive Deep Reinforcement Learning: Playing a Racing Game OCT 6TH, 2016 Agent playi ...
- Array补充方法
Array.prototype.Contain = function (item) { var arr = this; if (arr == null || arr.length == 0) { re ...
- NUnit笔记
注意:单元测试中,Case 与 Case 之间不能有任何关系 测试方法不能有返回值,不能有参数,测试方法必须声明为 public [TestFixture] //声明测试类 [SetUp] //建立, ...
- NHibernate和 FluentNHibernate
NHibernate有两类配置文件,一个是数据库连接配置文件(一般写到程序配置文件里),另一个是数据表和实体的映射文件(实体类.hbm.xml) 开源的框架Fluent NHibernate,有了它, ...