安裝/配置:
通過另外一個工具也可以測試手機客戶端APP的性能,這就是android開發包中的DDMS工具(Dalvik Debug Monitor Service),先來說一下android開發包的安裝:
1、 首先安裝JDK,1.5以上的版本
2、 在安裝完JDK 后,就需要下載及安裝Android SDK,即: android-sdk-windows,壓縮包大約有551M左右
3、 解壓縮android-sdk-windows,放在C盤的根目錄下,配置系統變量path 的值為:C: \android-sdk-windows\tools
啟動:
1、 可以在運行中進入ddms
2、也可以在C: \android-sdk-windows\tools目錄下啟動ddms.bat
連接:
1、 使用數據線連接安卓系統的手機,確認手機是處於“USB調試”模式
1)在手機上按下“Menu”鍵,在彈出的菜單中選擇“Setting(設置)”;
2)選擇“應用程序”;
3)在此界面勾選“未知來源”,然后選擇“開發”;
4)勾選“USB調試”,“保持喚醒狀態”;
2、 在ddms的左邊框中會顯示手機已經打開的應用程序(APP)進程,如果不顯示,可以多連接幾次,或者換個手機試試
操作:
前提是要打開我們要分析的手機客戶端app程序(網上隨便找的APK程序)
1. 點擊選中想要監測的進程,比如system_process進程;
2. 點擊選中Devices視圖界面中最上方一排圖標中的“Update Heap”圖標;
3. 點擊Heap視圖中的“Cause GC”按鈕;
4. 此時在Heap視圖中就會看到當前選中的進程的內存使用量的詳細情況。
分析:
如何才能知道我們的程序是否有內存泄漏的可能性呢。這里需要注意一個值:Heap視圖中部有一個Type叫做data object,即數據對象,也就是我們的程序中大量存在的類類型的對象。在data object一行中有一列是“Total Size”,其值就是當前進程中所有Java數據對象的內存總量,一般情況下,這個值的大小決定了是否會有內存泄漏。可以這樣判斷:
a) 不斷的操作當前應用,同時注意觀察data object的Total Size值;
b) 正常情況下Total Size值都會穩定在一個有限的范圍內,也就是說由於程序中的的代碼良好,沒有造成對象不被垃圾回收的情況,所以說雖然我們不斷的操作會不斷的生成很多對象,而在虛擬機不斷的進行GC的過程中,這些對象都被回收了,內存占用量會會落到一個穩定的水平;
c) 反之如果代碼中存在沒有釋放對象引用的情況,則data object的Total Size值在每次GC后不會有明顯的回落,隨着操作次數的增多Total Size的值會越來越大,直到到達一個上限后導致進程被kill掉。
d) 此處已system_process進程為例,在我的測試環境中system_process進程所占用的內存的data object的Total Size正常情況下會穩定在2.2~2.8之間,而當其值超過3.55后進程就會被kill。
參考文檔: http://hi.baidu.com/2012jasonhao/item/27fafb0c014a5ac42f4c6b25