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

相关推荐
闲猫4 小时前
Spring AI 对接Deepseek ChatModel 聊天对话
java·前端·spring
赵庆明老师4 小时前
Vben精讲:04-了解VSCode中的Git
ide·git·vscode
自信的未来6 小时前
JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
java·前端·json
Brookty6 小时前
【JavaEE】线程安全(一).4:写块串行保安全、CAS
java·开发语言·java-ee·多线程·线程安全
怕孤单的草丛6 小时前
缓存管理面临的主要问题
java·数据库·缓存
犀利豆9 小时前
AI in Harness(二)
java·人工智能·后端
沉静的小伙10 小时前
在微服务中使用领域事件
java·运维·微服务
程序员在囧途10 小时前
likeadmin-api API 算力超市怎么做供应商切换?统一鉴权、task_id 和 callback_url 才能稳交付
java·服务器·数据库·开放api·likeadmin-api·api算力超市
醇氧10 小时前
Spring 容器 Map 注入机制详解
java·后端·spring