我正在測試Dalvik虛擬機,想知道是否有任何工具可以分析dalvik中的垃圾收集。我知道分配跟蹤器,但我正在尋找更詳細的東西。dalvik的垃圾收集工具
6
A
回答
0
得到一個日誌中的所有GC操作一段時間:
每次GC發生時,你在你的logcat的一條線。
08-08 16:42:21.998: D/dalvikvm(26942): GC_CONCURRENT freed 773K, 26% free 4739K/6368K, paused 4ms+3ms, total 92ms
08-08 16:42:21.998: D/dalvikvm(26942): WAIT_FOR_CONCURRENT_GC blocked 11ms
看來我得到了我的設備上的所有應用程序的那些。
這一行包括很多關於GC的有趣統計數據,例如釋放的內存量,GC佔用的時間,準確發生時間以及堆的大小(使用/總數)。
由於所有這些日誌行都有標籤dalvikvm
,因此您應該能夠收集並過濾很長一段時間,並進行分析以瞭解GC行爲。
分析的氣相色譜的具體運行:
如果要分析一個特定的GC運行會發生什麼,這個職位的最佳工具是Eclipse的MAT。 Eclipse MAT可以解析堆轉儲。採取堆快照,等待GC(或使用DDMS自己觸發它),然後拍攝另一個快照。
Eclipse MAT可以顯示兩個快照之間的增量。注意你會看到新的分配和GC引起的釋放。有關比較快照的更多信息是。
一些其他的想法:
我不知道你有多少能夠從分析GC過程中學習。 GC的內部工作是一個實現細節。它可以在OS版本/設備/配置之間更改,恕不另行通知。
我在想方法來改善您遇到的GC延遲..在我看來,GC通常在內存條件較低時運行。這可能發生在新分配期間,因此GC可能在您的服務處於活動狀態時運行。也許,如果您手動使用GC服務對GC無效的時間,則可以減少響應Web請求的關鍵路徑中發生的GC數量。爲了嘗試這一點,我會添加一個簡單的後臺計時器,並在我的服務變爲活動狀態時重置它(新請求)。當計時器打勾(在一段時間內不活動)時,我會手動運行System.gc()
。
相關問題
- 1. dalvik vm的垃圾收集
- 2. 垃圾收集在Android 4.2 Jelly bean Dalvik VM中如何工作?
- 3. 垃圾收集
- 4. 垃圾收集java
- 5. DoctrineCommonCache垃圾收集?
- 6. Java垃圾收集
- 7. 垃圾收集器
- 8. C#垃圾收集
- 9. Java垃圾收集
- 10. WeakEvent垃圾收集
- 11. GWT垃圾收集
- 12. Android dalvik垃圾收集可能會崩潰?
- 13. 垃圾收集YGCT和垃圾收集時間不斷上升
- 14. 垃圾收集的工作環境?
- 15. 數量的垃圾收集
- 16. 有效的垃圾收集
- 17. bash中的垃圾收集
- 18. 的Java newSingleThreadExecutor垃圾收集
- 19. Node.js的垃圾收集器
- 20. Objective-C的垃圾收集
- 21. System.gc()的垃圾收集
- 22. 垃圾收集的OutOfMemoryError
- 23. C#中的垃圾收集#
- 24. 的Python:垃圾收集
- 25. Redux垃圾收集如何工作?
- 26. WPF,背景工人和垃圾收集
- 27. 垃圾收集機制如何工作?
- 28. 背景工作者和垃圾收集?
- 29. 垃圾收集:將對象收集
- 30. 垃圾收集是由
我認爲DDMS會幫助你。 –
你想解決什麼問題? –
我在設備上運行後臺服務,該服務嗅探網絡流量並充當設備上其他網絡應用的代理。我的問題是垃圾收集器突然花費比正常執行更長的時間。這會導致後臺服務停滯,進而導致應用程序的Web響應緩慢。我試圖研究垃圾收集器的這種突然的行爲。 – 22kar