Eclipse Memory Analyzer (MAT) 是分析 Java Heap Dump 的強大工具,可識別記憶體洩漏、優化物件佔用。Android Studio 可通過外部工具或插件整合使用。
MemoryAnalyzer.exeMemoryAnalyzer.ini 增加堆記憶體:-Xmx4g(根據機器記憶體調整)Open MATmat 安裝路徑/MemoryAnalyzer.exe$FilePath$$ProjectFileDir$Help → Eclipse Marketplace → 搜尋 "Memory Analyzer" 安裝。但 Android Studio 基於 IntelliJ 平台,Eclipse 插件不相容。
adb shell am dumpheap /data/local/tmp/heap.hprof
adb pull /data/local/tmp/heap.hprof .
注意:Android .hprof 格式需轉換:hprof-conv heap.hprof heap_conv.hprof(SDK tools 目錄下)
SELECT * FROM android.content.Context WHERE (toHexString(id) IN (SELECT toHexString(referent) FROM java.lang.ref.WeakReference))| 模式 | MAT 特徵 | 典型原因 |
|---|---|---|
| Context 洩漏 | Activity/Context 物件被靜態變數/單例持有 | 靜態引用 View、未註冊監聽器、Handler 洩漏 |
| 集合無限增長 | ArrayList/HashMap 大小持續增長 | 缺少清理邏輯、快取無過期策略 |
| Bitmap 佔用過大 | byte[] 大量佔用記憶體 | 圖片未壓縮、未使用 inSampleSize、LruCache 配置不當 |
MAT 是深度記憶體分析的利器,建議**開發階段用 LeakCanary/AS Profiler 快速迭代,疑難雜症導出 Dump 用 MAT 精準定位**。掌握 Dominator Tree 與 OQL 查詢是進階關鍵。