Android游戏中导致延迟的GC_FOR_ALLOC

Android游戏中导致延迟的GC_FOR_ALLOC,android,garbage-collection,cocos2d-iphone,Android,Garbage Collection,Cocos2d Iphone,我正在为Android开发一款加农炮游戏,它需要程序生成关卡。当玩家在空中飞行时,新的部分被添加到关卡的末尾,以使关卡无限期地运行。当这些部分被添加时,玩家已经通过的部分将被删除。问题是,创建一个节通常会导致一个GC_FOR_ALLOC,这会使游戏暂停约30毫秒,并导致明显的延迟 空闲内存保持相当一致,因为对象被删除,而其他对象被添加,所以似乎没有内存泄漏。 我使用的引擎是来自iOS的cocos2D-android-1端口 我看到了很多类似于“在游戏运行时不要初始化东西”的解决方案,但是级别生成

我正在为Android开发一款加农炮游戏,它需要程序生成关卡。当玩家在空中飞行时,新的部分被添加到关卡的末尾,以使关卡无限期地运行。当这些部分被添加时,玩家已经通过的部分将被删除。问题是,创建一个节通常会导致一个GC_FOR_ALLOC,这会使游戏暂停约30毫秒,并导致明显的延迟

空闲内存保持相当一致,因为对象被删除,而其他对象被添加,所以似乎没有内存泄漏。 我使用的引擎是来自iOS的cocos2D-android-1端口

我看到了很多类似于“在游戏运行时不要初始化东西”的解决方案,但是级别生成的本质要求这样做,因为无法在游戏开始时创建无限长的级别


谢谢你的帮助

你不是很具体。如果滞后太大,你必须设法减少它

一种方法可能是更频繁地收集,从而缩短但更频繁地出现停顿

例如,您可以创建较小的或仅部分的分区,然后尝试推动垃圾收集器运行。为此,您将使用
System.gc()
。但是请注意,
System.gc()
并不能保证它实际开始运行


更好的解决方案是重用对象。在级别启动之前创建的对象。这样,即使是无限的级别也不会导致任何垃圾收集,因为没有垃圾累积。但请确保不要创建任何非池对象

你不是很具体。如果滞后太大,你必须设法减少它

一种方法可能是更频繁地收集,从而缩短但更频繁地出现停顿

例如,您可以创建较小的或仅部分的分区,然后尝试推动垃圾收集器运行。为此,您将使用
System.gc()
。但是请注意,
System.gc()
并不能保证它实际开始运行


更好的解决方案是重用对象。在级别启动之前创建的对象。这样,即使是无限的级别也不会导致任何垃圾收集,因为没有垃圾累积。但请确保不要创建任何非池对象

如果正在进行过多的垃圾收集。。。然后找到一种使用更少内存的方法。我不知道你还想让我们说什么。没有魔法按钮可以阻止垃圾收集器完成其工作。:)如果正在进行过多的垃圾收集。。。然后找到一种使用更少内存的方法。我不知道你还想让我们说什么。没有魔法按钮可以阻止垃圾收集器完成其工作。:)我很抱歉说得不够具体。谢谢你的建议!我在各种情况下(例如在节生成之间)尝试了System.gc(),但没有多大帮助。我现在正在考虑实现对象池,因为将有大量的对象重用,而且这看起来是一个很好的解决方案。我为不够具体而道歉。谢谢你的建议!我在各种情况下(例如在节生成之间)尝试了System.gc(),但没有多大帮助。我现在正在研究实现对象池,因为将有大量的对象重用,而且它看起来是一个很好的解决方案。