热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MAT使用(MemoryAnalyzerTool)堆内存分析

MAT使用下载:http://eclipse.org/mat/dow

MAT使用
下载:http://eclipse.org/mat/downloads.php
MAT工具全称为Memory Analyzer Tool,一款详细分析Java堆内存的工具,该工具非常强大,为了使用该工具,我们需要hprof文件。但是该文件不能直接被MAT使用,需要进行一步转化,可以使用hprof-conv命令来转化,但是Android Studio可以直接转化,转化方法如下:
1.选择一个hprof文件,点击右键选择Export to standard .hprof选项。
在这里插入图片描述
2.填写更改后的文件名和路径:
在这里插入图片描述
点击OK按钮后,MAT工具所需的文件就生成了,下面我们用MAT来打开该工具:
1.打开MAT后选择File->Open File选择我们刚才生成的doctorq.hprof文件
在这里插入图片描述
2.选择该文件后,MAT会有几秒种的时间解析该文件,有的hprof文件可能过大,会有更长的时间解析,解析后,展现在我们的面前的界面如下:
在这里插入图片描述
这是个总览界面,会大体给出一些分析后初步的结论
Overview视图
该视图会首页总结出当前这个Heap dump占用了多大的内存,其中涉及的类有多少,对象有多少,类加载器,如果有没有回收的对象,会有一个连接,可以直接参看(图中的Unreachable Objects Histogram)。
比如该例子中显示了Heap dump占用了41M的内存,5400个类,96700个对象,6个类加载器。
然后还会有各种分类信息:
Biggest Objects by Retained Size
会列举出Retained Size值最大的几个值,你可以将鼠标放到饼图中的扇叶上,可以在右侧看出详细信息:
在这里插入图片描述
图中灰色区域,并不是我们需要关心的,他是除了大内存对象外的其他对象,我们需要关心的就是图中彩色区域,比如图中2.4M的对象,我们来看看该对象到底是啥:
在这里插入图片描述
该对象是一个Bitmap对象,你如果想知道该对象到底是什么图片,可以使用图片工具gimp工具浏览该对象.
histogram视图
histogram视图主要是查看某个类的实例个数,比如我们在检查内存泄漏时候,要判断是否频繁创建了对象,就可以来看对象的个数来看。也可以通过排序看出占用内存大的对象:
在这里插入图片描述
默认是类名形式展示,你也可以选择不同的显示方式,有以下四种方式:
在这里插入图片描述
下面来演示一下:
在这里插入图片描述
Dominator tree视图
在这里插入图片描述
该视图会以占用总内存的百分比来列举所有实例对象,注意这个地方是对象而不是类了,这个视图是用来发现大内存对象的。这些对象都可以展开查看更详细的信息,可以看到该对象内部包含的对象:
在这里插入图片描述
Leaks suspects视图
在这里插入图片描述
在这里插入图片描述
这个视图会展示一些可能的内存泄漏的点,比如上图上图显示有3个内存泄漏可疑点,我们以Problem Suspect 1为例来理解该报告,首先我们来看该可疑点详细信息:
在这里插入图片描述
上面信息显示ImageCahe类的一个实例0xa50819f8占用了14.19%的内存,具体值为5147200字节(5147200/1024/1024=4.9M),并存放在LinkedHashMap这个集合中,然后我们点击Details跳转到更详细的页面:
在这里插入图片描述
这样我们就能找到在我们的app源码中造成该泄漏可疑点的地方,很容易去定位问题.

代码示例:https://download.csdn.net/download/wdx_1136346879/10912701


版权声明:本文为wdx_1136346879原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wdx_1136346879/article/details/86360223
推荐阅读
  • 【Android Lock Pattern】图案解锁(一):LockPatternView源代码
    选择Settings-Security-Setupscreenlock设置屏幕锁选择Pattern设置图案在我的真机HTCDesire(Android2.2)上,截图如下:An ... [详细]
  • android适配方案讲解,APP设计常识解读:android界面适配的机制
    这是一篇关于app设计师去了解下如何做android多分辨率多密度下界面适配方案的原理解读。如果你已经知道了,可以不用再来阅读了。本文25学堂只是为了给一些app设计 ... [详细]
  • 在安卓中创建自定义SeekBar原文:https://www ... [详细]
  • 201820192 20175226王鹏雲 实验四《Android程序设计》实验报告
    2018-2019-220175226王鹏雲实验四《Android程序设计》实验报告实验报告封面课程:Java程序设计班级:1752班姓名: ... [详细]
  • 搭建简单Ext
    一、EXT是什么?1.Ext是一个Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的bs应用更加具有活力及生命力࿰ ... [详细]
  • 序言   QBittorrent是一个新的轻量级BitTorrent客户端,可运行于Linux、windows及其他可能系统,它简单易用,漂亮的外观,功能强大,是linux下的 ... [详细]
  • DDD领域驱动设计和实践(转载)
    --目录导航一、DDD领域驱动设计介绍1.什么是领域驱动设计(DDD)2.领域驱动设计的特点3.如果不使用DDD?4.领域驱动设计的分层架构和构成要素5.事务脚本和领域模型二 ... [详细]
  • Linux DNS
    libnss_files.solibnss_dnslibnss_ldap展现的就是一个配置文件etcnsswitch.conf?查看这个文件这个files就是通过libnss_fi ... [详细]
  • postman使用环境变量
    变量postman提供了变量设置,有四种变量类型本地变量全局变量环境变量数据变量什么是环境变量环境变量指在不同环境,同一个变量值随着环境不同而变化,比如在测试环境时,host为:d ... [详细]
  • 导读:今天编程笔记来给各位分享关于php技术员是什么的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • RocketdecodeSimplifyDC
    https:mp.weixin.qq.coms4uWqBRrMVG6FlnBKmw8U-w介绍SimplifyDC如何简化解码逻辑。1.使用??简化从mint和maxt中查找的逻辑 ... [详细]
  • Android休眠唤醒机制
    有四种方式可以引起休眠①在wake_unlock()中,如果发现解锁以后没有任何其他的wakelock了,就开始休眠②在定时器到时间以后,定时器的回调函 ... [详细]
  • 获取鼠标的位置/坐标
    使用javascript如何获取鼠标的位置呢?获取光标的位置?获取鼠标坐标先看效果?核心方法:****返回鼠标的坐标*@parame*@returns{{x ... [详细]
  • 题目:写一个函数返回参数二进制中1的个数方法1:我自己写的,运用‘%‘和‘‘,感觉挺简单的。intcount_one_bit(intnum){unsignedintcount0;w ... [详细]
  • 这就是我做到的.首先,我使用了很多AndroidDisplayingBitmapsinYourUItutorial的代码.然后,我添加了以下调整:在包含ViewPag ... [详细]
author-avatar
iar2984165
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有