2010-02-04 24 views
2

我已經通過在我的應用程序代碼中插入語句Debug.dumpHprofData("/sdcard/myapp.hprof");創建了hprof文件;然後通過hprof-conv運行hprof文件並在Eclipse中打開轉換後的文件。Android:Eclipse MAT沒有顯示我的應用程序的所有對象

根據MAT「Cheat Sheet」的建議,我通過輸入「com.prepbgg。*」進入「泄漏識別 - >組件報告」並點擊完成,獲得了我應用內存使用情況的分析。

我知道我的應用程序正在消耗大量內存:特別是在我稱之爲dumpHprofData的階段,它具有一個百萬像素位圖對象和一個必須消耗幾百KB的畫布。 (我也懷疑它會泄漏大量內存,因爲在屏幕旋轉幾次後性能會嚴重下降。)

但是,com.prepbgg。*的組件報告顯示的總內存僅爲38.7KB。直方圖視圖顯示了android.graphics.Bitmap(大概這是包括我的所有應用程序的總數)404對象和淺堆12,928。那是12,928字節?

顯然,我的應用程序消耗超過38.7KB,位圖遠遠超過了12,928字節。我哪裏錯了?我怎樣才能看到我的應用程序消耗的內存總量?

回答

1

位圖的大部分空間將位於本機堆上。看到Bitmap的來源:它有七個字段。假設每個字段是四個字節(幾乎可以肯定的參考和整數,以及合理的布爾值)添加額外的四個字節的對象標題,:

(7*4 + 4) * 404 = 12928 

我不認爲有任何簡單的方法來檢查本地堆而不運行自己的構建。

,你可以問多少東西一直在分配:http://developer.android.com/reference/android/os/Debug.html#getNativeHeapAllocatedSize()

+0

非常感謝你的幫助的解答,埃利奧特。 getNativeHeapAllocatedSize是否顯示我的應用程序使用的總內存,它未包含在com.prepbgg。*命名空間的組件報告中顯示的總數(38.7KB)中? (和BitMap一樣,我的應用程序使用的明顯的大對象是Canvas和一個接近300KB的SQLite數據庫,它們是否也會在Native Heap中?) – prepbgg 2010-02-06 11:17:35

相關問題