天天看點

移動App性能測評與優化1.2.4 新的問題

<b>1.2.4 新的問題</b>

經過上一輪的優化,在記憶體螢幕裡新版本的heap記憶體表現已經比較好了,新功能隻消耗了幾萬位元組到幾十萬位元組記憶體。但是要注意的是,heap記憶體并不是應用的全部,我們在設定或其他管理工具裡看到的應用記憶體大小是應用整個程序的記憶體使用量。也有可能出現heap部分完全沒有增長而其他部分增長的情況。

要觀察程序的記憶體使用情況,就需要用到其他的觀測工具,android裡最常用于觀察程序記憶體的方法就是dumpsys meminfo &lt;package name|pid&gt;指令。

對我們的新版應用執行該指令,能夠得到以下的輸出結果:

** meminfo in

pid 17481 [com.example] **

                         shared  private    

heap     heap     heap

                   pss    dirty   

dirty     size    alloc    

free

                ------   ------  

------   ------   ------  

------

       native       28       

8       28     5744    

3739     1117

 dalvik heap   

10112    10224     9624   

14076    10386     3690

 dalvik other     3212    

3076        0        0

        stack      270     

270        0        0

       ashmem        2       

0        0        0

    other dev        7       

0        4        0

     .so mmap     1867    

1330      160        0

    .jar mmap        4       

    .apk mmap     2944       

0     2690        0

    .dex mmap     4110    

  64     3420       

   other mmap       16       

4        4        0

      unknown     2351    

2331        0        0

        total   

24895    12404     6212       

在以上輸出結果中,左邊pss列的資料辨別程序各部分對真實實體記憶體的消耗,左下角的total值就是我們在各種管理工具裡看到的應用記憶體消耗。

而android studio等工具裡顯示的記憶體值,在這裡是dalvik heap alloc部分。根據以上的資料,我們可以看到dalvik heap和heap alloc不是相等的,而且除了dalvik heap之外,還有其他很多部分也會消耗記憶體。

這時候我們再對比一下舊版,看看是否也如此:

pid 14233 [com.example] **

                   pss   

dirty    dirty     size   

alloc     free

8       28     5664    

3767     1040

 dalvik heap    

8026    10372     7508   

11784    10113     1671

 dalvik other   

3159     3076        0       

        stack      260     

260        0        0

     .so mmap     1887    

1344      160        0

    .apk mmap     2941       

0     2680        0

    .dex mmap     4013      

64     3360        0

      unknown     2256    

2244        0        0

        total   

22599    17372    13716       

這時候就會發現問題了,heap alloc沒增加多少,但dalvik heap pss增加了許多。而其他部分基本保持不變或有少量增長。可見問題還是出現在dalvik heap部分,但隻靠檢查配置設定的對象是看不出來問題的。

java代碼的記憶體配置設定和釋放都是由虛拟機管理的,那麼這個問題會是虛拟機的問題嗎?我們接下來繼續通過虛拟機部分機制來探索這些記憶體增長的原因。

繼續閱讀