如何用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 排序,找大的对象进行分析

相关推荐
喵喵蒻葉睦2 小时前
力扣 hot100 和为K的子数组 哈希&前缀和
java·数据结构·算法·leetcode·前缀和·哈希算法
G探险者2 小时前
DDD开发模式说明
java·运维·数据库
Amour恋空2 小时前
SpringBoot使用SpringAi完成简单智能助手
java·spring boot·后端
lang201509282 小时前
18 Byte Buddy 进阶:揭秘方法委托中的“歧义解析”机制
java·byte buddy
SimonKing2 小时前
Spring Boot 动态多数据源:核心思路与关键考量
java·后端·程序员
好家伙VCC2 小时前
**NumPy中的高效数值计算:从基础到进阶的实战指南**在现代数据科学与机器学习领域
java·python·机器学习·numpy
旷世奇才李先生2 小时前
066基于java的中医养生系统-springboot+vue
java·vue.js·spring boot
qingy_20462 小时前
Java基础:数据类型
java·开发语言·算法
躲在没风的地方2 小时前
异常执行顺序
java·运维·服务器·spring boot