對APP進行dumpsys meminfo記憶體分析解讀
使用adb shell dumpsys meminfo分析app記憶體截圖:
Native Heap:Native程式碼分配的記憶體,虛擬機器和Android框架分配記憶體。關於什麼是Native程式碼,即非Java程式碼分配的記憶體。詳細介紹請找百度。
Dalvik Heap:Java物件分配的佔據記憶體
Dalvik Other:類資料結構和索引佔據記憶體
Stack:棧記憶體
Ashmem:不以dalvik- 開頭的記憶體區域,匿名共享記憶體用來提供共享記憶體通過分配一個多個程序可以共享的帶名稱的記憶體塊。匿名共享記憶體(Anonymous Shared Memory-Ashmem
Other dev:內部driver佔用的記憶體
.so mmap C庫程式碼佔用的記憶體
.jar mmap java檔案程式碼佔用的記憶體
.apk mmap apk程式碼佔用的記憶體
.ttf mmap ttf檔案程式碼佔用的記憶體
.dex mmap dex檔案程式碼佔用記憶體。類函式的程式碼和常量佔用的記憶體,
Other mmap 其它檔案佔用的記憶體
Pss:程序各部分記憶體的消耗,是所有程序pss相加得到系統佔用記憶體的總和。
Dalvik heap Pss記憶體=私有記憶體Private Dirty+ 共享記憶體Share Dirty/共享的程序數Dalvik heap Pss記憶體=私有記憶體Private Dirty+ 共享記憶體Share Dirty/共享的程序數
Heap Size:Dalvik Heap總共的記憶體大小
Heap Alloc
Native Heap Size 約等於Native Heap Alloc + Native Heap Free
app記憶體測試方面的工具:
Android Studio/Memory Monitor:觀察Dalvik記憶體
Dumpsys meminfo:觀察整體記憶體
Smaps:觀察整體記憶體的詳細組成
Eclipse Memory Analyzer:詳細分析Dalvik記憶體
app開發減少記憶體方法:
儘量不要在迴圈中建立太多的臨時變數
儘量把大型的迴圈拆散,分段或按需執行
引入SDK庫和呼叫新的系統API時,主要不常用功能的消耗,可考慮多程序方案,影響記憶體放入臨時程序執行
調整Dex檔案的順序可以優化空間
歡迎討論。