分類:
功能——Cpu 實(shí)時監(jiān)控工具,可運(yùn)行在模擬器、真機(jī)上。 優(yōu)點(diǎn):實(shí)時、可與應(yīng)用程序同時在前臺展現(xiàn) 可在屏幕底部查看,僅占一個像素,application前臺運(yùn)行,Rd或者qa可以在調(diào)試、測試過程中實(shí)時看到設(shè)備cpu占用率,更容易定位問題所在,可配合自動化工具使用。
功能:內(nèi)存監(jiān)控 實(shí)時監(jiān)控+數(shù)據(jù)存儲 優(yōu)點(diǎn):實(shí)時,曲線圖 實(shí)時展現(xiàn)applition內(nèi)存占用,并將數(shù)據(jù)以excel形式備份。 可配合monkey或者自動化工具使用。 缺點(diǎn):數(shù)據(jù)存儲格式不利于展現(xiàn)。
DDMS——內(nèi)存泄露檢測 功能:內(nèi)存檢測工具。使用DDMS的Heap視圖工具可以很方便的確認(rèn)我們的程序是否存在內(nèi)存泄漏的可能性 啟動DDMS 1、啟動eclipse后,切換到DDMS透視圖,并確認(rèn)Devices視圖、Heap視圖都是打開的; 2、點(diǎn)擊選中想要監(jiān)測的進(jìn)程——>選中視圖頁面上方的"update heap"圖標(biāo) 3、點(diǎn)擊Heap視圖中的“Cause GC”按鈕。此時在Heap視圖中就會看到當(dāng)前選中的進(jìn)程的內(nèi)存使用量的詳細(xì)情況 如何判斷內(nèi)存泄露?點(diǎn)擊“start gc”后無需重復(fù)點(diǎn)擊刷新,heap視圖會定時刷新。 Heap視圖中部有一個Type叫做data object,即數(shù)據(jù)對象,也就是我們的程序中大量存在的類類型的對象。在data object一行中有一列是“Total Size”,其值就是當(dāng)前進(jìn)程中所有Java數(shù)據(jù)對象的內(nèi)存總量,一般情況下,這個值的大小決定了是否會有內(nèi)存泄漏。可以這樣判斷: a) 不斷的操作當(dāng)前應(yīng)用,同時注意觀察data object的Total Size值; b) 正常情況下Total Size值都會穩(wěn)定在一個有限的范圍內(nèi),也就是說由于程序中的的代碼良好,沒有造成對象不被垃圾回收的情況,所以說雖然我們不斷的操作會不斷的生成很多對象,而在虛擬機(jī)不斷的進(jìn)行GC的過程中,這些對象都被回收了,內(nèi)存占用量會會落到一個穩(wěn)定的水平; c) 反之如果代碼中存在沒有釋放對象引用的情況,則data object的Total Size值在每次GC后不會有明顯的回落,隨著操作次數(shù)的增多Total Size的值會越來越大。 注意:ddms只可以初步判斷可能存在內(nèi)存泄露,哪里存在內(nèi)存泄露是無從分析的,只能借助下面工具——MAT.
Mat是一個eclipse plugin(http://download./mat/1.1/update-site/),也有單獨(dú)的rcp客戶端。以下示例環(huán)境——mat plugin+eclipse 啟動MAT,加載生成的hprof文件。即點(diǎn)擊DDMS工具條上面的Dump hprof文件 展示類實(shí)例的直方圖(未釋放的類實(shí)例)及說明(為什么沒有釋放) 在overview中中查看domintor tree,查看未釋放、可排序的、占用內(nèi)存最大的一些對象列表。 選中列表展開比較大的對象,右鍵List Objects > with incoming references。它會生成一個heap上的所有byte數(shù)組的列表,在列表里,我們可以按照Shallow Heap的使用情況來排序; 右鍵path to GC Roots>exclude weak/soft references,它將展示從根到這個對象的路徑--就是一條保證對象有效的鏈條。 根據(jù)以上路徑定位內(nèi)存泄露的位置。 補(bǔ)充: Shallow size就是對象本身占用內(nèi)存的大小,不包含對其他對象的引用,也就是對象頭加成員變量(不是成員變量的值)的總和 retained size:該對象本身的shallow size加上它直接引用或者間接引用的對象的shallow size,即該對象被gc回收,所能回收的內(nèi)存總和。 AndroidPermanceTest+Monkey 結(jié)語 以上工具均可配合monkey、自動化用例使用。 |
|
|