Android Studio MAT内存分析初探

Android Studio内存性能分析器 内存性能分析器 阅读详情

做开发有一些年头的想必都会碰到程序性能方面的问题,性能优化有很多种,但是首先我们得定位是哪一块的问题;好在前方有巨人可以让我们站,Android Studio已经为我们提供了性能分析工具MAT。

下面有两种使用方式:

一、Android Device Monitor

1、打开Android Studio通过Tools ->Android -> Android Device Monitor打开。

这里写图片描述

在这里楼主遇到了一个小插曲,在打开的时候报错了:unexpected error while parsing input: Invalid uiautomator hierarchy file 解决方式就是:找到路径:C:\Users\用户名\.android下的monitor-workspace文件夹,删掉它重新打开就好了。

2、接下来在Android Device Monitor界面中首先选中你要分析的应用程序的包名(这里我的是zz.mack.com.mytimeview),然后点击Update Heap来更新统计信息,接着点击Cause GC制造GC操作即可查看当前堆的占用情况,最后点击Dump HPROF file 即当前应用的内存信息保存成hprof文件保存至一个目录下;具体如下图:

这里写图片描述

3、打开Android Studio。将你刚才保存的hprof文件拖动到编写代码的窗口即可,就是出现下面的信息:
这里写图片描述

这里首先说下A区域:
左上角是HPROF Viewer查看方式可选列表, 分别是用来选择Heap区域, 和Class View的展示方式的:
Heap类型分为:
App Heap – 当前App使用的Heap
Image Heap – 磁盘上当前App的内存映射拷贝
Zygote Heap – Zygote进程Heap(每个App进程都是从Zygote孵化出来的, 这部分基本是framework中的通用的类的Heap)

Class List View – 类列表方式
Package Tree View – 根据包结构的树状显示

紧接着下面的表名:

列名说明
Class NameHeap中的所有Class
Total Count内存中该类这个对象总共的数量
Heap Count堆内存中这个类对象的个数
Sizeof每个该实例占用的内存大小
Shallow Size所有该类的实例占用的内存大小
Retained Size所有该类对象被释放掉,会释放多少内存

接下来是B区域

列名说明
Instance该类的实例
Depth深度, 从任一GC Root点到该实例的最短跳数
Dominating Size该实例可支配的内存大小

C区域则描述的是B中实例具体被引用信息。

好了上面就是通过Android Device Monitor来生成hprof文件,其实Android Studio已经为我们集成了工具。

二、Android Studio

打开AS,找到底部的工具栏Android Monitor;如图依次点击三个按钮1/2/3,最后就会生成上面的hprof文件并自动打开:
这里写图片描述
接下来的界面跟第一种方式是一样的,这里就不细说了。
如果有发现按钮不能点击的同学,请先编译运行程序。

最后通过这个工具可以很方便让我们快速找出哪个类占用内存比较多容易引发内存泄漏,从而我们好做应对;一般来说容易内存泄漏的都更图片有关,所以做好图片的处理会很关键。

Android Studio和 MAT 内存泄漏分析 2.如果此时传入的是 Activity 的 Context,当这个 Context 所对应的 Activity 退出时,由于该 Context 的引用被单例对象所持有,其生命周期等于整个应用程序的生命周期,所以当前 Activity 退出时它的内存并不会被回收,这就造成泄漏了。非静态内部类默认会持有外部类的引用,而该非静态内部类又创建了一个静态的实例,该实例的生命周期和应用的一样长,这就导致了该静态实例一直会持有该Activity的引用,导致Activity的内存资源不能正常回收。 阅读详情

相关推荐

Android Studio 分析内存泄漏

内存分析入门

一叶知秋的专栏 7057

用Android Studio进行内存分析调试

打开Android Studio看下它的界面,在最底下可以找到 Android Monitor标签,点击打开它,如下图所示。第一个Memory就是用来监测当前程序的内存使用状态的,我们只看这个。有的人打开后可能只能看到Logcat模块,不要急,在logcat的最右边找找,看有没有一个小图标,有就点开它,立马就会出现Monitors模块。看看下面这个部分:代表监视器目前监测的手机。这里用来显示监视器正在监测的进程,点击右边的下拉箭头,可以选中某一个进程进行监视。

Hunter2916的博客 4324

一文深度讲解JVM 内存分析工具 MAT及实践(建议收藏)

1. 前言熟练掌握 MAT 是 Java 高手的必备能力,但实践时大家往往需面对众多功能,眼花缭乱不知如何下手,小编也没有找到一篇完善的教学素材,所以整理本文帮大家系统掌握 MAT 分析工具。本文详细讲解 MAT 众多内存分析工具功能,这些功能组合使用异常强大,熟练使用几乎可以解决所有的堆内存离线分析的问题。我们将功能划分为4类:内存分布详情、对象间依赖、对象状态详情、按条件检索。每大类有多个功能点,本文会逐一讲解各功能的场景及用法。此外,添加了原创或引用案例加强理解和掌握。如图所示:​编辑切换为居中添加图

m0_63437643的博客 1万+

内存分析之MAT

MAT(全名:Memory Analyzer Tool),是一款快速便捷且功能强大丰富的 JVM 堆内存离线分析工具。其通过展现 JVM 异常时所记录的运行时堆转储快照(Heap dump)状态(正常运行时也可以做堆转储分析),帮助定位内存泄漏问题或优化大内存消耗逻辑。注意:MAT可独立于eclipse安装应用场景内存溢出,JVM堆区或方法区放不下存活及待申请的对象。如:高峰期系统出现 OOM(Out of Memory)异常,需定位内存瓶颈点来指导优化。

lmchhh的博客 4077

AndroidStudio Memory profiler(内存分析器)

使用AndroidStudio 分析app进程中内存状况,哪些对象被频繁创建导致内存抖动?哪些占用对象一直没有被销毁,查看调用栈逐层分析。

HeXinGen的博客 2093

android 如何分析应用的内存(十七)——使用MAT查看Android堆

前一篇文章,介绍了使用Android profiler中的memory profiler来查看Android的堆情况。如Android 堆中有哪些对象,这些对象的引用情况是什么样子的。可是我们依然面临一个比较严峻的挑战:不管是app开发者,还是内存分析者而言,堆中的对象,非常之多,不仅有Android 原生的类,还有第三方库使用的类。这些类在使用过程中,也可能因为有较大的shallow size 或者retained size而混淆内存的分析。

安仔的博客 2126

Android Studio和MAT结合使用来分析内存问题

Android开发中时常会遇到内存泄漏的问题,而Android系统对单个App又有一定的内存限制,此值可以通过一下方式获取:ActivityManager am = (ActivityManager)getSystemService( Context.ACTIVITY_SERVICE); int memoryClass = am.getMemoryCl

zxm317122667的专栏 1万+

android 如何分析应用的内存(十六)——使用AS查看Android堆

在前面,先介绍了如何使用jdb和VS code查看应用栈相关内容。本文将介绍,如何查看堆中的内容。

安仔的博客 4252

Android studio + MAT内存分析优化 一

关于内存分析和优化,是我们app从开始到结束上线一直都要关注的问题。但是我发现我接触过得项目和公司,都是在APP成型之后,或者快上线了,才会去关注app内存使用情况。派专人去分析每个页面,每个动作是否会触发内存泄漏,ui卡顿等问题。个人认为这是个非常不好的习惯,内存分析优化,UI卡顿等应该是我们每个程序员编码的时候就刻意的去注意的问题。我们每完成一个需求,或者没添加一个逻辑,...

王项雨 的博客 1265

用VSCode远程开发Jetson小车:告别Jupyter,在本地IDE高效调试Rosmaster Python程序

本文详细介绍了如何利用VSCode的Remote-SSH扩展在本地IDE中高效开发Jetson小车的Rosmaster Python程序。通过配置远程开发环境、调试技巧和项目管理方法,开发者可以告别Jupyter Notebook的碎片化编码,实现完整的机器人控制程序开发,显著提升工作效率。

weixin_30652491的博客 475

STM32串口DMA双缓冲机制实战:提升数据传输效率的终极方案

本文深入解析了STM32串口DMA双缓冲机制的核心原理与实战配置。通过对比传统中断方式,阐述了双缓冲如何实现数据接收与处理的“无缝接力”,从而在工业传感器数据采集等高负载场景下,将CPU占用率降至极低水平并彻底避免数据丢失。文章提供了基于标准外设库的详细配置步骤、中断处理逻辑及性能实测数据,是提升嵌入式系统串口通信效率和可靠性的终极方案。

weixin_29192365的博客 78

【开发篇】四、MAT堆内存分析(Memory Analyzer Tool)

MAT在打开当前的堆内存快照时,需要把快照下的堆内存里的所有对象读入到内存中,这对安装MAT的机器配置有要求,一般的开发桌面打不开这么大的快照文件,而且下载一个几十G的hprof文件,下行带宽小也头疼。MAT打开快照,点击查看对象直方图,里面也显示了一个对象的浅堆和深堆大小,点击表头可排序,执行脚本,启动MAT,分析堆内存,后生成报告,只需下载包告后解压,查看生成的这几个html报告查看即可。再看对象D,引用图中想指向对象D,从近处看,可以是对象B,也可以对象C,所以对象B、C对D。

llg___的博客 3817

STM32+OpenCV云台PID调参实战:从震荡到丝滑跟踪的进阶之路

本文详细介绍了基于STM32和OpenCV的跟踪云台PID调参实战经验。从硬件搭建、PID控制原理到调参技巧,系统讲解了如何通过调整比例、积分和微分参数解决系统震荡问题,实现从震荡到丝滑跟踪的进阶过程,特别适合电赛和嵌入式视觉控制开发者参考。

tgb3456789的博客 715

使用MAT(MemoryAnalyzerTools)进行内存分析

使用mat分析jvm内存

billxin0621的博客 8005

PLC控制气缸与电磁阀:从原理到实战编程详解

在工业自动化领域,很多工程师都能编写PLC程序控制电机启停,但当涉及到气缸和电磁阀的精确控制时,却常常遇到动作不协调、响应延迟甚至设备损坏的问题。这背后的关键不在于PLC编程本身,而在于对气动元件特性和控制逻辑的深入理解。 本文将从实际工程问题出发,深入解析气缸与电磁阀的工作原理、PLC控制逻辑设计、常见故障排查方法,并通过完整的梯形图实例,帮助读者掌握气动系统自动化编程的核心要点。无论你是刚接触PLC的初学者,还是希望提升气动控制技能的工程师,都能从中获得实用的技术指导。 1. 气缸与电磁阀在自动化控制中

weixin_42522374的博客 336

利用恒源云云端GPU高效训练YOLOv11模型全流程:从环境搭建到模型部署,让你摆脱硬件束缚

记住,云端GPU的核心优势是“弹性算力+一键环境”,只要把握好这一工具特性,再结合YOLOv11的高性能模型架构,你也能在计算机视觉领域快速落地项目。接下来,我们从工具准备到模型部署,一步步带你实现高效训练,真正帮你解决资源与效率的核心痛点。凭借其在目标检测、实例分割任务上的卓越性能,成为众多开发者的首选。据统计,使用云端GPU训练YOLOv11,在处理百万级数据集时,训练效率较本地普通GPU提升。在安防监控中,YOLOv11可实时检测人员、车辆异常行为,某园区采用该方案后,异常事件识别准确率达。

LXY_LOVE36的博客 213

Android MAT的使用

Java 8 和Java 11都有的情况下,把Java 11放到Java 8前面,这样Java环境才是11。最后Java -version 验证一下。由于最新版的MAT还需要JAVA 11,所以还需要配置JAVA 11的环境。

且听真言 1168

基于深度学习YOLOv10的障碍物检测系统

为了方便用户使用,我们将开发一个图形用户界面(GUI),允许用户上传图像或视频流并查看检测结果。我们使用PySide6开发GUI界面,它是Qt框架的Python绑定,适用于开发跨平台的桌面应用程序。本文详细介绍了如何基于YOLOv10模型构建一个障碍物检测系统,包括数据集准备、模型训练和推理到图形用户界面的开发。通过这一系统,用户可以方便地上传图像或视频流并进行障碍物检测,广泛应用于自动驾驶、机器人导航等领域。

斌擎科技 1051

Memory Analyzer(MAT)分析内存

MAT是Memory Analyzer tool的缩写,是一款非常强大的内存分析工具,只需要打开采集的hprof文件即可开始对内存开始分析对比,一款“傻瓜式“的堆转储文件分析工具,谁都能学会。

fumeidonga的博客 5076

【S32K3 MCAL配置】-4.1-CAN Driver:如何解决CAN帧发送丢帧问题

【S32K3 MCAL配置】-4.1-CAN Driver:如何解决CAN帧发送丢帧问题

「汽车电子助手」的博客 1439

别再瞎改网络结构了!解决YOLO小目标检测痛点,我用这招把mAP提了15%

本文基于我7年工业PCB缺陷检测、无人机航拍、安防监控项目的一线落地经验,针对YOLO小目标检测最痛的「漏检率高、特征丢失、精度难提升」三大核心问题,拆解出。本文全程配套小目标特征丢失原理图、分块训练流程图、切图前后效果对比图、mAP提升柱状图、多方案性能对比表等可视化内容,从YOLO天生不擅长小目标的底层根源、方案核心原理、可直接复制的代码实现,到工业场景实测验证、新手必踩的10个坑位避坑指南,全链路讲透。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 386

android studio 内存分析

Android开发中时常会遇到内存泄漏的问题,而Android系统对单个App又有一定的内存限制,此值可以通过一下方式获取: ? 1 2 3 ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); int me

JerryWu145的专栏 4426

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Anroid 应用内存使用情况分析方法

通过 Android Studio 的 Profiler 工具步骤连接设备或启动模拟器,运行你的应用。打开 Android Studio,点击底部工具栏的Profiler(或选择Memory选项卡,即可实时查看应用的内存占用情况。可以点击或进行更详细的分析。

以后会多把工作中总结的知识、问题处理思路和方法通过博客分享出来,欢迎大家关注和共同探讨! 1795

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

使用 Android Studio Profiler 工具解析应用的内存和 CPU 使用数据

为了帮助开发者开发出更加轻快高效的应用,我们在 Android Studio 3.0 以及更高版本中加入了 Android Profiler 工具,用于应用的 CPU、内存、网络和能耗分...

谷歌开发者 3767

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android Studio Memory Monitor内存分析核心指标详解

本文解析了内存分析中的四个关键指标:Shallow Size(对象自身内存)、Retained Size(可释放总内存)、Native Size(本地内存)和Depth(引用层级)。通过用户详情页案例,展示了各指标的计算方法,并深入讲解了计算规则和特性。重点分析了高Retained Size、Native内存泄漏和引用过深的风险,提出了优化策略和工具验证方法。核心建议:优先优化高Retained Size对象,警惕Native内存泄漏,控制引用层级不超过7层,使用Memory Profiler和MAT等工具

猿小蔡的博客 1054
上一篇: Android 7.0多渠道打包Signature Scheme v2签名失效
下一篇: Android 不解压直接读取zip包
Mackkill
博客等级 码龄15年 65粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值