天天看點

【記憶體優化】檢視app(程序)的記憶體占用

1、官方有篇文章,詳細的寫了,可以通過哪些工具檢視記憶體占用的情況

https://developer.android.com/studio/profile/investigate-ram.html

2、較常用的 adb 指令,adb shell dumpsys meminfo <packageName>

  1. Here is an older dumpsys on Dalvik of the gmail app:  
  2. ** MEMINFO in pid 9953 [com.google.android.gm] **  
  3.                  Pss     Pss  Shared Private  Shared Private    Heap    Heap    Heap  
  4.                Total   Clean   Dirty   Dirty   Clean   Clean    Size   Alloc    Free  
  5.               ------  ------  ------  ------  ------  ------  ------  ------  ------  
  6.   Native Heap      0       0       0       0       0       0    7800    7637(6)  126  
  7.   Dalvik Heap   5110(3)    0    4136    4988(3)    0       0    9168    8958(6)  210  
  8.  Dalvik Other   2850       0    2684    2772       0       0  
  9.         Stack     36       0       8      36       0       0  
  10.        Cursor    136       0       0     136       0       0  
  11.        Ashmem     12       0      28       0       0       0  
  12.     Other dev    380       0      24     376       0       4  
  13.      .so mmap   5443(5) 1996    2584    2664(5) 5788    1996(5)  
  14.     .apk mmap    235      32       0       0    1252      32  
  15.     .ttf mmap     36      12       0       0      88      12  
  16.     .dex mmap   3019(5) 2148       0       0    8936    2148(5)  
  17.    Other mmap    107       0       8       8     324      68  
  18.       Unknown   6994(4)    0     252    6992(4)    0       0  
  19.         TOTAL  24358(1) 4188    9724   17972(2)16388    4260(2)16968   16595     336  
  20.  Objects  
  21.                Views:    426         ViewRootImpl:        3(8)  
  22.          AppContexts:      6(7)        Activities:        2(7)  
  23.               Assets:      2        AssetManagers:        2  
  24.        Local Binders:     64        Proxy Binders:       34  
  25.     Death Recipients:      0  
  26.      OpenSSL Sockets:      1  
  27.  SQL  
  28.          MEMORY_USED:   1739  
  29.   PAGECACHE_OVERFLOW:   1164          MALLOC_SIZE:       62  

看上面的資料可以簡單排查出你app中的一些問題,比如看目前Activity數量,如果顯示的數量和你預期的數量不一緻,可能就已經有activity洩露了,然後你可以用工具 mat 來排查具體是什麼原因引起的activity記憶體洩漏,具體可以看這篇:

《【記憶體優化】記憶體洩漏 之 MAT 工具的使用 》