Java Android dalvikvm堆:钳制目标GC堆
我正在编写一个程序,将大量联系人与Android联系人数据库同步。下载大约700个联系人都可以正常工作,之后我一直收到一个内存堆错误,它调用无限多个GC语句,并最终重新启动手机。我面临着HTC欲望的问题 我使用DDMS中的heap alocation工具检查了应用程序的堆大小,并使用Debug.dumpHprofData提取了hprof文件。两个日志都表明堆大小约为2.4MB 但是,我得到以下日志,这表明堆大小大于32.MBJava Android dalvikvm堆:钳制目标GC堆,java,android,memory-management,memory-leaks,garbage-collection,Java,Android,Memory Management,Memory Leaks,Garbage Collection,我正在编写一个程序,将大量联系人与Android联系人数据库同步。下载大约700个联系人都可以正常工作,之后我一直收到一个内存堆错误,它调用无限多个GC语句,并最终重新启动手机。我面临着HTC欲望的问题 我使用DDMS中的heap alocation工具检查了应用程序的堆大小,并使用Debug.dumpHprofData提取了hprof文件。两个日志都表明堆大小约为2.4MB 但是,我得到以下日志,这表明堆大小大于32.MB dalvikvm-heap(92): Clamp target GC
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
---------------------------------------------------------------
这表明同步触点逻辑中似乎没有内存泄漏
有人能告诉我为什么堆大小增加(高达32.00Mb)到设备重新启动的程度吗?我不熟悉Android和Java,所以请对我放松点:)……虽然这不是最好的答案,但我强烈建议你观看Google IO 2011上的视频演讲。它很好地解释了如何管理内存以及您看到的消息的实际含义。您需要将代码发布给任何人以提供帮助。否则,我假设两件事: