我有一個Android應用程序,它使用SimpleFramework進行XML序列化。該應用在我測試過的所有真實設備上運行良好,沒有滯後,但在模擬器上運行時,垃圾收集器在每次啓動應用程序時運行約3分鐘。使用簡單框架時Android模擬器中垃圾回收過多(GC_FOR_MALLOC)
這是我迄今觀察到:在剛序列化對象到XML之前
- 垃圾收集踢
- 它只是發生之前的第一個對象是序列化並通過網絡發送,並且不發生連續呼叫。
- 序列化代碼位於一個單獨的庫中,該庫被封裝並添加爲項目中的.jar文件。
下面是logcat的輸出:
07-27 08:17:10.275: D/dalvikvm(682): GC_FOR_MALLOC freed 10179 objects/482344 bytes in 32ms
07-27 08:17:10.435: D/dalvikvm(682): GC_FOR_MALLOC freed 13927 objects/535968 bytes in 33ms
....... About 300 more similar entries...
這是我目前使用序列化的代碼:
public String fromElement(Object request) {
Writer writer = new StringWriter();
try {
serializer.write(request, writer);
String res = writer.toString();
Log.d(LOG_TAG, res);
return writer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
顯然,這是佔用了大量的時間,每次我在代碼中進行更改並重新部署應用程序。有沒有其他人在使用libaray時遇到過這種情況,如果有的話,是否有某種方法可以防止每次啓動應用程序時從GC中踢出GC(從eclipse中)?增加堆(目前設置爲vm.heapSize=24
)有幫助嗎?還是有不同的解決方案?
升級到新版本(2.6.9)似乎解決了這個問題。 – Jeshurun 2013-01-21 17:12:07