Java Android触摸事件列表和垃圾收集器
我的游戏因为GC而口吃,从40毫秒到140毫秒不等。 我的游戏没有在更新或渲染线程中创建新对象或任何东西,所以我很确定我的项目是干净的,除了一个。 在update方法中,我有一个Java Android触摸事件列表和垃圾收集器,java,android,garbage-collection,Java,Android,Garbage Collection,我的游戏因为GC而口吃,从40毫秒到140毫秒不等。 我的游戏没有在更新或渲染线程中创建新对象或任何东西,所以我很确定我的项目是干净的,除了一个。 在update方法中,我有一个列表touchEvents=getTouchEvents() 我很确定这就是导致GC启动的原因,因为每次我移动时它只会启动GC,因为它需要我触摸屏幕(使用ACTION_MOVE事件)。 我将如何优化或防止这种情况 编辑: 现在我开始认为这与我的FPS极限方法有关。 我假设,因为我限制FPS为30,GC没有足够的时间不干扰
列表touchEvents=getTouchEvents()代码>
我很确定这就是导致GC启动的原因,因为每次我移动时它只会启动GC,因为它需要我触摸屏幕(使用ACTION_MOVE事件)。
我将如何优化或防止这种情况
编辑:
现在我开始认为这与我的FPS极限方法有关。
我假设,因为我限制FPS为30,GC没有足够的时间不干扰我的游戏。
我是在我把限制器取下来,以60帧的速度运行游戏后提出这个理论的。
游戏以60帧/秒的速度运行时非常流畅,但不是30帧/秒。
有什么想法吗?就个人而言,我不建议限制fps。相反,让它尽可能快地运行,并在执行运动和物理操作时参考经过的时间。您是否限制游戏逻辑线程,或渲染线程,或两者都限制?老实说,我不确定。我在网上查阅了如何限制FPS,并实现了一种在我尝试时有效的方法。基本上在新线程中,我创建睡眠时间并使用“if语句”检查睡眠时间是否大于33,如果大于33,则使用睡眠时间作为参数使线程睡眠。在if语句之后,我为当前屏幕调用update和render方法;游戏将以每秒30帧的速度进行。你有什么理由不希望它以更高的FPS运行吗?这听起来像是在限制两个线程,在这种情况下,渲染和游戏逻辑都将以30 FPS的速度更新。我建议游戏逻辑循环至少100 FPS,你应该让渲染循环尽可能快地运行(这基本上意味着60 FPS,因为Android的屏幕是V同步的)。我想我限制了这两个线程。我限制FPS的唯一原因是因为我确信FPS会随着我在游戏开发中的进步而降低。