Java 诊断垃圾收集(或其他类型的中断)

Java 诊断垃圾收集(或其他类型的中断),java,android,eclipse,Java,Android,Eclipse,我有一个动画游戏,通常达到每秒25-30帧,虽然偶尔会在这里或那里冻结四分之一秒。从各种各样的帖子来看,我猜这可能是在进行垃圾收集 我使用的是eclipse,并配备了DDMS和内部分析器——我还没有完全掌握它们。但据我所知,内存分配似乎非常少,而且不频繁,而且内存分配似乎非常小。此外,当查看函数列表以及它们占用的时间百分比时,我看不到任何奇怪的东西。请注意,我不太知道要查找什么-列表中是否有一个名为DoingGarbageCollectionNow或类似的函数?我找不到类似的东西 编辑:只有在我

我有一个动画游戏,通常达到每秒25-30帧,虽然偶尔会在这里或那里冻结四分之一秒。从各种各样的帖子来看,我猜这可能是在进行垃圾收集

我使用的是eclipse,并配备了DDMS和内部分析器——我还没有完全掌握它们。但据我所知,内存分配似乎非常少,而且不频繁,而且内存分配似乎非常小。此外,当查看函数列表以及它们占用的时间百分比时,我看不到任何奇怪的东西。请注意,我不太知道要查找什么-列表中是否有一个名为DoingGarbageCollectionNow或类似的函数?我找不到类似的东西

编辑:只有在我的三星Galaxy Y安卓2.3.5上,小冻结才显得明显。在我的Google Nexus S Android 2.3.3上,帧速率是25或更高


编辑:延迟是否可能是由在后台运行的另一个应用程序或操作系统过程引起的?如果是,我如何判断?

我没有专门在android上写过,但通常您希望在日志中检查gc,以查看其行为和时间

有关特定于android的gc日志信息,请参阅本文

平台无关的解决方案可能是在平台上查看并行gc或其他gc类型(如果可能)。 姜饼中引入的并发收集器有助于[…]来源:


更好的解决方案仍然是尽可能避免实例化,方法是检查循环中对象的创建并消除它们。

我在我的应用程序中遇到了这个问题,最后我在数组中使用.clone方法。android/ddms中存在一个缺陷,即通过克隆方法创建的分配不会显示在分配跟踪器中。因此,您将看到频繁的垃圾收集,即使您没有看到任何分配非常令人沮丧


有关更多信息,请参阅。

否。不幸的是,在java世界中,您现在无法真正强制执行垃圾收集。这是运行时JVM的责任。我不是说有一个我可以调用的函数——我是说有一个我可以在分析器报告中看到的函数。