如何用MAT(Eclipse Memory Analyzer)

首先用Android studio 生成hprof文件,比如文件名叫:xxx.hprof

然后用hprof-conv xxx.hprof memory-converted.hprof

因为MAT只支持java版的hprof,as生成的hprof只能android版本的hprof,直接导入MAT会报错。

然后通过mat打开这个memory-converted.hprof

然后open a Heap Dump-> Leak Suspects Report

通过分析可以看到Bitmap 占用的内存比较多 点开detail->Suspect Objects by Class

first 10 of 304objects 点开对象列表

然后找最大的对象右键Path to gc Roots->Exclude Weak References 然后就可以看到对象的引用了。

我做了一个自动转hprof的脚本,只要把这个做成app就可以把xxx.hprof 拖到这个app上,就能生成convert的hprof了

javascript 复制代码
on open droppedItems
	repeat with oneItem in droppedItems
		set inputPath to POSIX path of oneItem
		
		-- 输出到原文件同目录,文件名自动加 -converted
		do shell script "
			input_file=" & quoted form of inputPath & "
			dir=$(dirname \"$input_file\")
			base=$(basename \"$input_file\" .hprof)
			output_file=\"$dir/${base}-converted.hprof\"
			/opt/homebrew/bin/hprof-conv \"$input_file\" \"$output_file\"
		"
	end repeat
	
	display dialog "转换完成" buttons {"确定"} default button "确定"
end open

然后可以通过打开Top Components->点开内存最大的比如<system class loader> (80%)->Top Consumer->Biggest Objects 根据Retained Heap 排序,找大的对象进行分析

相关推荐
用户913662962201229 分钟前
ViewModelScope 简介与使用
java
上海安当技术32 分钟前
老系统零改造接入:旁路代理统一认证实战
java·servlet·架构·kubernetes·jenkins
Zane19941 小时前
Lock 接口与 AQS 核心原理:手写理解一把可重入锁是怎么运作的
java·后端
Full Stack Developme1 小时前
SpringBoot 整合 Druid 并列出参数清单
java·spring boot·后端
caishenzhibiao1 小时前
顺势交易矩阵主图 同花顺期货通指标
java·c语言·c#
我命由我123451 小时前
Android 开发 - 广播组件(标准广播、有序广播、静态注册广播、分钟到达广播、网络变更广播...)
android·java·开发语言·网络·java-ee·android studio·android-studio
周航宇JoeZhou1 小时前
JP3-2-1-MyItem项目简介
java·ai·springboot·环境搭建·项目·管理·springai
lemon_sjdk1 小时前
从 ServletRequest 到 Spring 抽象:Web 请求的底层基石与演化
java·前端·spring
唐青枫2 小时前
Java Reactor Netty 实战详解:从响应式 HTTP 到 TCP 长连接
java·netty
SamDeepThinking2 小时前
现场重构一段代码,展示什么叫「好代码,都在表达自己的意图」
java·后端·程序员