Android中的垃圾收集器正在运行,但在ddms的分配跟踪器中没有显示任何内容

Jes*_*eke 3 enums android garbage-collection ddms

在我的应用程序中,我注意不要在主渲染循环中进行堆分配,以防止垃圾收集器不得不做它的事情.

在对我的应用程序进行一系列更改后,我突然看到垃圾收集器每隔一两秒被调用一次,并且每次调用时释放大约400k的内存.

我回顾一下我所做的更改,并且我没有在渲染线程上发生任何明确的分配.所以我运行ddms并使用"Allocation Tracker"工具,但没有发生任何分配,除了与运行ddms相关的正常分配.当然,没有为400k字节显示足够的分配,显然每秒钟都会收集垃圾

Jes*_*eke 7

(我已经找到了解决方案,但我发布了问题+答案以获得其他好处)

事实证明,我能够跟踪问题,调用枚举类的.values()方法,该方法在每次调用时分配一个新数组.但由于某些原因,这些分配不会出现在ddms的分配跟踪器中,因此很难跟踪.

幸运的是,我能够使用git bisect找到引入该问题的具体更改,然后将其跟踪到该更改中的确切问题.

编辑:经过一些额外的测试后,似乎克隆数组通常不会出现在分配跟踪器中.

附加信息:在克隆对象时,这似乎是Honeycomb及以下的问题.它将在ICS中修复.(http://code.google.com/p/android/issues/detail?id=19831)