我寫一個程序來同步大量的Android聯繫人數據庫中的聯繫人的。對於大約700個聯繫人,下載工作正常,之後我一直在收到一個內存堆錯誤,它會調用無限數量的GC語句,並最終重新啓動手機。我正面臨着HTC渴望的問題。的Android dalvikvm堆:卡箍目標GC堆
我檢查使用從DDMS堆alocation工具應用程序以及使用提取的Debug.dumpHprofData HPROF文件的堆的大小。這兩個日誌都表明堆大小約爲2.4MB。
但是我得到以下日誌表明堆大小更是32.MB
dalvikvm-heap(92): Clamp target GC heap from 33.999MB to 32.000MB
dalvikvm(92): GC_FOR_MALLOC freed 2 objects/48 bytes in 313ms
我已經插入以下在我的contatcs下載邏輯是寫在循環日誌語句。
Log.e("Memory", "free mem =" +runtime.freeMemory());
Log.e("Memory", "total memory =" +runtime.totalMemory());
這些是語句的初始值和最終值印刷
---------------------------------------------------------------
11-11 12:56:04.168: ERROR/Memory(25132): free mem =871248
11-11 12:56:04.168: ERROR/Memory(25132): total memory =4202464
---------------------------------------------------------------
11-11 13:01:55.408: ERROR/Memory(25132): free mem =891640
11-11 13:01:55.408: ERROR/Memory(25132): total memory =4726752
---------------------------------------------------------------
這表明apperently有存在於同步的聯繫人邏輯沒有內存泄漏。
可有人請讓我知道爲什麼被堆的大小增加(高達32.00Mb),以這樣一種程度,即設備重新啓動本身?我是Android和Java的新手,所以請在我身上輕鬆一下:))
你能鏈接或粘貼相關的源代碼嗎? – 2011-10-04 20:56:03
看到一些代碼會有所幫助。 無論如何 - 你爲什麼需要將所有聯繫人存儲在內存中? 通常,在同步聯繫人時,會設置一個光標並對查詢進行批處理。您可能不需要一次將所有聯繫人保存在內存中。我錯過了什麼嗎? – Guy 2011-10-17 12:03:37
日誌中的dalvikvm行的進程ID是否是您的進程? – Ifor 2011-10-17 21:39:19