[英]How to analyse Dalvik GC behaviour?
我正在Android上開發應用程序。 這是一個長期運行的應用程序,可連續處理傳感器數據。 在運行該應用程序時,我在logcat中看到很多GC消息。 大約每秒一。
這很可能是因為對象被創建並立即在循環中取消引用。
如何找到要立即創建和釋放的對象?
我嘗試過的所有Java堆分析工具(*)都被堆上對象的數量和大小所困擾。 盡管它們很有用,但我更感興趣的是找出創建
臨時
短暫對象最多的站點。
(*)我嘗試了jcat
和Eclipse MAT
。 我不能讓hat
在Android堆轉儲工作; 它抱怨不支持的轉儲文件版本。
如何找到要立即創建和釋放的對象?
步驟#1:臨時修改代碼(或使用代碼的相關部分創建剪貼項目),您可以在其中單擊按鈕或執行某種操作,以完全通過傳感器處理邏輯運行一次。
步驟2:進入DDMS(獨立或Eclipse透視圖)。
步驟#3:選擇您的模擬器,然后單擊分配跟蹤器選項卡
步驟4:將您的應用程序移至等待步驟1中單擊按鈕的位置,然后在DDMS分配跟蹤器選項卡中單擊開始跟蹤。
步驟#4:單擊按鈕,並在傳感器處理通過完成后,單擊DDMS分配跟蹤器選項卡上的獲取分配。
這將告訴您在那部分代碼中分配了什么。 它不會告訴您“釋放”了什么,因為在GC循環運行之前這是不確定的。
編輯
我不確定,但是android.os.Debug
類上的startAllocCounting()
可能與單擊“開始跟蹤”按鈕具有相同的效果。 如果是這樣,您可以簡單地檢測代碼以在循環的一遍中跟蹤分配,而不用搞亂我上面概述的代碼更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.