1. 程式人生 > >對APP進行dumpsys meminfo記憶體分析解讀

對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

Android匿名共享記憶體是基於Linux共享記憶體的,都是在tmpfs檔案系統上新建檔案,並將其對映到不同的程序空間,從而達到共享記憶體的目的,只是,AndroidLinux的基礎上進行了改造,並藉助Binder+fd檔案描述符實現了共享記憶體的傳遞。

Other dev:內部driver佔用的記憶體

.so mmap  C庫程式碼佔用的記憶體

.jar mmap  java檔案程式碼佔用的記憶體

.apk mmap apk程式碼佔用的記憶體

.ttf mmap  ttf檔案程式碼佔用的記憶體

.dex mmap  dex檔案程式碼佔用記憶體。類函式的程式碼和常量佔用的記憶體,

dex mmap是對映classex.dex檔案,Dalvik虛擬機器從dex檔案載入類資訊和字串常量等。Dex檔案有索引區和Data

Other mmap  其它檔案佔用的記憶體

Pss:程序各部分記憶體的消耗,是所有程序pss相加得到系統佔用記憶體的總和。

Dalvik heap Pss記憶體=私有記憶體Private Dirty+ 共享記憶體Share Dirty/共享的程序數Dalvik heap Pss記憶體=私有記憶體Private Dirty+ 共享記憶體Share Dirty/共享的程序數

Heap SizeDalvik Heap總共的記憶體大小

Heap Alloc

:所有應用例項分配的記憶體,包括了應用從zygote共享分享的記憶體

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檔案的順序可以優化空間

歡迎討論。