如何最小化GC_FOR_ALLOC次数?

时间:2012-12-30 03:53:48

标签: java android memory-management garbage-collection dalvik

我的应用程序导致这些可怕的GC_FOR_ALLOC在特定位置(方法)多次发生:

12-29 22:20:30.229: D/dalvikvm(10592): GC_FOR_ALLOC freed 1105K, 14% free 10933K/12615K, paused 33ms, total 34ms
12-29 22:20:30.260: D/dalvikvm(10592): GC_FOR_ALLOC freed 337K, 13% free 11055K/12615K, paused 25ms, total 26ms
12-29 22:20:30.288: D/dalvikvm(10592): GC_FOR_ALLOC freed 278K, 14% free 10951K/12615K, paused 24ms, total 24ms
12-29 22:20:30.495: D/dalvikvm(10592): GC_CONCURRENT freed 633K, 11% free 11317K/12615K, paused 16ms+3ms, total 79ms
12-29 22:20:30.495: D/dalvikvm(10592): WAIT_FOR_CONCURRENT_GC blocked 16ms
12-29 22:20:30.499: D/dalvikvm(10592): WAIT_FOR_CONCURRENT_GC blocked 15ms

我很清楚我在内存管理方面做错了(是的,垃圾收集很棒,但仍然没有让我免除责任,知道何时以及如何分配)。

您能推荐一种故障排除方法或技术,这可能会导致我发现有问题的代码行和可能的解决方案吗?

1 个答案:

答案 0 :(得分:55)

Android DDMS是eclipse中Android开发工具的一部分,它提供了非常有用的工具,可用于分析和内存分配跟踪。

下面的屏幕截图突出显示了其中一些工具(全部在DDMS下),需要通过单击左侧面板中的相应按钮(以红色突出显示)激活某些工具,然后您可以看到值(有些带有图形)通过选择要观看的选项卡(以蓝色突出显示)

选择右侧面板

堆和分配跟踪器在您的情况下非常有用。

eclipse screenshot showing profiling and memory allocation tools