前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android | App内存优化 之 全面理解MAT

Android | App内存优化 之 全面理解MAT

作者头像
凌川江雪
发布2019-12-16 18:02:20
1.6K0
发布2019-12-16 18:02:20
举报
文章被收录于专栏:李蔚蓬的专栏李蔚蓬的专栏

本文以上一篇博客 《Android | App内存优化 之 内存泄漏 要点概述 以及 解决实战》获得的**堆转储文件**为例, 介绍一下**MAT工具**;

  • MAT工具上侧有一系列的可选项, 现在看一下第一项,OverView, 也就是一个概览信息, 第一行是大小、Class对象、Object的数量、类加载器等等,

行末的**Unreachable Objects Histogram**可以点击查看**可被回收的 但是仍然在内存当中 没被回收的对象**:

  • 第二个图标按钮是**Histogram**(**单词**是**直方图**的意思),

该视图可以列出来,

某一个具体的Class它到底有多少实例,一个某一类型实例它的个数,及其

Shallow Heap,堆中 此类型所有实例 自身的总大小(以字节为单位),

Retained Heap,为 此类型的所有实例 而 保留的内存总大小(以字节为单位),

(在引用链上,此类型的所有实例占用的内存);

同时我们可以在这个视图中(视图第一行),**检索**具体的某一个类的信息,

从而来**判断该对象**有没有**存在内存泄漏**的可能,

比如我们在上一篇博客《Android | App内存优化 之 内存泄漏 要点概述 以及 解决实战》

检索的就是**MemoryLeakActivity**;

接着,

在下图中,该图标的下拉菜单中,

还有一个**Group by package**的菜单项:

也就是可以让视图中的实例,以**包名的形式**来进行摆放:

默认是以**类的形式**进行摆放的,

即**Group by Class**;

通过**Group by package**的**视图查看形式**,

我们可以很容易地找到**MemoryLeakActivity**:

接下来,点击某一个实例,右键,

选择**List objects -> with incoming references**,

我们在排查**内存泄漏**的过程中,

应该选择**with incoming reference**进行分析才行,!!!!!

查看 本(我们这个) 类型实例 被 谁/哪些类型实例 所引用**,!!!!!**

导致我们这个**类型实例**自身不能被**回收**,!!!!!

【!!!!

因为之所以内存泄漏,

就是某些没用的实例没有被及时正确回收,

而某个实例被别人引用了,也就回收不了了;

!!!!】

(**List objects**下有两个菜单项,

with incoming reference

incoming 指过来

即指的是 引用到该选中实例的实例,

即**查看 本 类型实例 被 谁/哪些类型实例 所引用**;

with outcoming references

outcoming 指出去

被该选中实例引用的实例,

即查看**本 类型实例 引用了 谁/哪些类型实例**;)

  • 第三个按钮,Dominator Tree(Dominator n.支配者,支配力,统治者;) 视图展示 每一个类型对象的 支配树(注意是每一个对象!!):

关注百分比比较大的对象;

观察其能不能被回收,

以及为什么不能被回收;

这里注意**Percentage**这个栏目,

显示的值 即该类型对象总共占了所有对象的百分之几;

比如说我们还是检索一下**MemoryLeakActivity**(注意这个视图也能够**检索**!!)

这里也能够,右键,

选择**List objects**选项:

!!!!

Histogram**是基于** 类型 分析,只分析**类型**, 不具体到某个实例,

Dominator Tree**是基于** 实例 分析, 具体到 某个实例;

!!!!

第四个按钮是OQL,即 对象查询语言 , Object Query Language,

可以像检索数据库一样 检索 对象:

第五个按钮,Thread OverView,

可以查看堆转储文件记录时,有多少线程在执行,

及其线程相关的信息

Top Consumers 和 Leak Suspect

Top Consumers 列出来那么占用内存比较高的对象;

Biggest Objects可以查看相关的更详细的信息;

Leak Suspect则,

提供了两个Problem Suspect 自动化分析,配置有**Detail按钮**可以查看,

供我们参考;


参考自
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Top Consumers 和 Leak Suspect
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档