Android 記憶體分析工具,android分析工具
D/dalvikvm: <GC_Reason> <Amount_freed>, <Heap_stats>, <External_memory_stats>, <Pause_time>
一、GC_Reason 觸發記憶體回收的回收的集中原因:
類型 |
描述 |
GC_CONCURRENT |
記憶體使用量將滿時,並發的進行記憶體回收。 |
GC_FOR_MALLOC |
當記憶體已滿應用嘗試分配記憶體時會出觸發記憶體回收,所以系統會停止應用進行垃圾整理 |
GC_HPROF_DUMP_HEAP |
當建立HPROF檔案分析記憶體時觸發垃圾收集。 |
GC_EXPLICIT |
顯示的垃圾收集,例如當你調用gc() (應該避免調用,而是交由系統處理) |
GC_EXTERNAL_ALLOC |
只會在API 10以下版本觸發。新版都只會在Dalvik Heap上分配。 |
二、Amount freed 回收的記憶體大小
三、Heap stats 空閑記憶體比例和(活躍對象總數/記憶體大小)
四、External memory stats API 10以下記憶體配置大小
五、Pause time 越大的堆暫停時間越長,並發會顯示兩個暫停:一個是回收開始時間,另外一個是回收結束時間
例子:D/dalvikvm(27235): GC_FOR_ALLOC freed 836K, 27% free 9653K/13116K, paused 101ms, total 104ms
LOG資訊 |
描述 |
freed 836K |
此次回收836K |
27% free |
可用記憶體空間27% |
9653K/13116K |
活躍對象與總大小具體指 |
paused 101ms |
暫停進行記憶體回收用時101ms |
total 104ms |
總用時104ms |
其他external 0K/0K,表示可用外部記憶體/外部記憶體總量paused 2ms+2ms,第一個時間值表示markrootset的時間,第二個時間值表示第二次mark的時間。 如果觸發原因不是GC_CONCURRENT,這一行為單個時間值,表示垃圾收集的耗時時間。
可以通過在LogCat通過 “GC_” 關鍵字 + TAG 兩項過濾
參考資料:https://developer.android.com/tools/debugging/debugging-memory.html#LogMessages