为什么在一个简单的应用程序中有这么多GC_FOR_ALLOC?

Rui*_*ião 15 performance android dalvik

我从dalvikvm获得了太多的GC_FOR_ALLOC.我从REST服务获取XML:在一个活动中,我以编程方式解析了大约100行(me),在另一个活动中,我使用SimpleXML来解析大约200行.

在第一个中,我获得了50个GC_FOR_ALLOC.在第二个我得到300!(我甚至不能发布所有内容,机身制作29579个字符,并且只允许30k)

我搜索过,几乎每个人都抱怨gc_for_"M"alloc而不是gc_for_"A"lloc.

SimpleXML是问题因为创建了实例吗?

我将发布dalvikvm的logcat转储,也许这些值有一些信息.

非常感谢您的帮助.

12-11 06:13:49.564: D/dalvikvm(6759): GC_FOR_ALLOC freed 362K, 13% free 4116K/4688K, paused 181ms, total 182ms
12-11 06:13:50.074: D/dalvikvm(6759): GC_FOR_ALLOC freed 303K, 13% free 4134K/4708K, paused 142ms, total 142ms
.... repeated many times .....
12-11 06:14:06.254: D/dalvikvm(6759): GC_FOR_ALLOC freed 73K, 13% free 4159K/4768K, paused 53ms, total 53ms
12-11 06:14:06.314: D/dalvikvm(6759): GC_FOR_ALLOC freed 103K, 13% free 4159K/4768K, paused 56ms, total 57ms
12-11 06:14:06.374: D/dalvikvm(6759): GC_FOR_ALLOC freed 29K, 12% free 4203K/4768K, paused 54ms, total 54ms
12-11 06:14:06.424: D/dalvikvm(6759): GC_FOR_ALLOC freed 73K, 13% fre
Run Code Online (Sandbox Code Playgroud)

fad*_*den 10

您可以使用DDMS Allocation Tracker(内存调试文档,旧博客文章,ddms文档)查看最近分配的对象.这将显示正在分配的内容,并为执行分配的位置提供堆栈跟踪.

另一篇博客中介绍了MAT和其他相关工具,虽然堆转储分析是这类问题不太有用,因为它通常会显示该对象并没有被释放,而你更感兴趣的是,对象被释放.


QJG*_*Gui 6

在Android Dalvik VM中,当dlmalloc足迹空间不足以用于新的或者时,GC_FOR_ALLOC对象分配步骤中是inovked heap->bytesAllocated + n > hs->softLimit.您可以设置dalvik.system.setTargetHeapUtilization较低的空闲堆空间.


nit*_*oel 2

你可以使用 MAT MAT 教程

查找正在创建和垃圾收集的对象数量。这样你就可以优化你的代码