MAT 是 Eclipse出品的一款 Java(堆)内存分析器 。我们可以把使用 Android Profiler 的内存性能分析器捕获的 堆转储 文件,导入MAT中进行详细的应用内存分析。
由于Mac M1系列芯片(M1/M1 Pro/M1 Max) 使用的是 aarch64 架构,因此在安装MAT时要尤其 注意依赖的JDK的版本,避免因版本不适配而导致应用不能正常工作。
我的安装环境如下:
- Mac型号:MacBook Pro Apple M1 Pro
- 操作系统:macOS Monterey 12.0.1
下面介绍下安装流程,以及注意事项。
一、下载MAT
登录 Memory Analyzer 官网,可以看到,目前最新的Mac版本 还未支持aarch64架构 , 不过苹果内置有 Rosetta 转译程序, 可以支持运行x86_64架构的应用。
选择 Mac OSX(Mac/Cocoa/x86_64) 版本下载安装文件。
二、安装MAT
下载好MAT的安装文件后,双击按提示安装即可。
安装完成后,如果你能正常打开应用,那恭喜你,很幸运,说明你的配置环境一切正常😂,你可以开始愉快的使用MAT进行内存分析了。
如果你像我一样,打开时出现了错误提示,不要慌,大概率是JDK环境出了问题,我们来排查排查。
三、配置Java环境
先给大家上结论:最新的MAT版本软件,要求在 Java 11及以上版本 运行,而且由于Mac目前只有x86_64版本,你还需要确保MAT使用的JDK是 x86_64版本。
1. 检查Java版本
在终端中输入 /usr/libexec/java_home -V
,查看本地安装的Java版本。
可以看到,我的电脑安装了3个Java版本,分别是 17.0.1 (arm64) , 11.0.2 (x86_64) 以及 1.0.8_292 (x86_64)
, 目前默认使用的是 /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home
,也就是 17.0.1 (arm64) 版本,和我上面打开MAT时的错误提示,也是对应得上的。
2. 指定Java版本
很显然,我默认使用的是 arm64 版本的Java,而MAT目前仅支持x86_64,所以出现了错误。
现在,我只需要将MAT使用的Java版本更改为x86_64的即可。
2.1 下载Java版本
如果你本机并没有安装 Java 11(x86_64)及以上的版本 的JDK,可登录 JDK网站 下载符合条件的Mac_O 版本,可以看到针对于Mac版本,从 17 GA (build 17+35) 才开始区分 aarch64 和 x86 架构。
我下载的是 11.0.2 (build 11.0.2+9) 版本。
2.2 配置Java版本
修改Java版本有两种方式。
第一种,你可以通过配置 JAVA_HOME
环境变量,指定系统默认使用的Java版本,全局生效。
第二种,你可以修改MAT应用的配置文件,为MAT指定其使用的Java版本。
我建议选择第 二种方式,这里不至于为了某个应用,而变更了整个系统默认配置,避免导致其他使用Java环境的应用出错。
2.3 修改MAT配置
- 在 访达 -> 应用程序 找到 mat ,右键 -> 显示包内容 -> Contents -> Info.plist。
- 打开 Info.plist,找到下面注释的位置。添加脚本,指定MAT使用的Java路径。
<!-- To use a specific Java version (instead of the default) uncomment the following option and
edit it to add a VM. Installed VMs can be found via $/usr/libexec/java_home -V
<string>-vm</string><string>/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/bin/java</string>
-->
<!-- 注意路径一定要写全,最终是定位到了java目录 -->
<string>-vm</string>
<string>/Users/seven/Library/Java/JavaVirtualMachines/jdk-11.0.2/Contents/Home/bin/java</string>
- 保存配置修改,重启MAT。导入文件,开始分析吧!