2010-06-24 61 views
46

我需要檢查我的應用程序的內存泄漏,我還需要看到我的應用程序的內存分配。 我下載並安裝了eclipse內存分析器,它看起來像第一步是打開一個堆轉儲。 但是什麼是堆轉儲,我如何創建堆轉儲。 而我要去究竟如何使用這個軟件,我做了一些谷歌搜索,但我找不到任何有用的信息 感謝Android ==>內存分析==> Eclipse內存分析器?

+3

僅供參考,因爲它涉及到的話題 - 有一個關於內存分析的Android博客上的新博客文章:http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html – 2011-03-25 03:36:31

回答

40

當您調試應用程序,在Eclipse開放DDMS。在工具欄上有一個堆轉儲按鈕,您可以使用它來生成堆轉儲以在Eclipse內存分析器中查看。這隻支持我認爲1.6+或2.0+ SDK。

+0

好吧,所以我點擊轉儲,並打開了一個新的名爲android123123123的窗口中有很多奇怪的字符。 我該如何處理這個頁面? 檔案在哪裏? 再次感謝 – aryaxt 2010-06-24 18:48:59

+2

我想出了自己。 文件==>另存爲,然後在內存分析器中打開文件 – aryaxt 2010-06-24 18:58:19

+6

您省略了Mathias答案中提到的一個關鍵步驟:「使用hprof-conv.exe轉換器將dalvik VM的堆轉儲轉換爲常規hprof格式工具在Android SDK的工具目錄中。「 – 2012-07-24 16:55:54

10

需要使用Android SDK工具目錄中的hprof-conv.exe轉換工具將dalvik VM的堆轉儲轉換爲常規hprof格式。 您可以打開這個HPROF與Eclipse MAT或其他工具有: YourKit http://www.yourkit.com/ 還有JProbe http://www.quest.com/jprobe/

除了DDMS你可以從你的應用程序/代碼(僅適用於新的軟件開發工具包),通過Debug.dumpHprofData(...)

還要注意創造HPROF在DDMS中你可以看到你的應用程序正在使用的堆。它不顯示外部資源(如位圖)正在分配的本機堆。儘管如此,在檢查內存泄漏時還需要考慮這些資源。當原生應用堆和應用堆合計達到16MB/resp時。 24MB你會得到一個OOM錯誤。

您可以通過Debug.getNativHeapAllocatedSize()查看已使用的本地堆(即通過位圖在您的應用中)。

+0

我在Mac上沒有像exe文件那樣的刺激,我不必對文件做任何事情,我只是保存它,因爲它是從日食,我用記憶分析器打開它,沒有問題 – aryaxt 2010-06-24 23:06:08

+1

@MathiasLin,有沒有什麼辦法來分析/查看本地堆中的對象? – snapfractalpop 2012-04-04 03:02:32

+0

@snapfractalpop對不起,我不知道,還沒有找過我自己。 – 2012-04-04 09:50:09

3

另見http://developer.android.com/guide/developing/debugging/ddms.html#profiling

如果有幫助,您可以通過使用調試API允許通過的代碼局部區域分析。以這種方式,分析traceview中的痕跡時就不那麼冗長了。例子見http://macgyverdev.blogspot.com/2011/07/profiling-android-application-tutorial.html

,並就如何轉換DDMS堆轉儲,因此您可以在Eclipse內存分析器進行查看,並通過支配樹的工具找到你的泄漏對象的一些更詳細的信息:http://macgyverdev.blogspot.com/2011/11/android-track-down-memory-leaks.html