我正在使用OpenGLES 2.0创建Android游戏,我的游戏目前可以渲染高达每秒55-60帧,但我对垃圾收集器有一点问题,它减慢到每秒35帧,你可以看到一个会损害用户体验的延迟。它在完全随机的时刻运行。
我的问题:
是否有可能以某种方式控制垃圾收集器的执行,例如我可以将GC延迟0.5秒或之前调用GC并确保在接下来的两秒内不会调用GC吗?或者有没有办法减少GC对应用程序执行的影响?
答案 0 :(得分:2)
基本上您无法停止GC,但可以使用System.gc()
尝试these步骤以避免GC出现此类问题
答案 1 :(得分:2)
垃圾收集器在需要从未使用的对象中释放内存时启动。
最好的操作方法是减少重用旧对象的数量。
阅读您的代码,每当您看到new
关键字问自己时,我真的需要一个新的对象吗?或者我可以重置旧的未使用的对象?
尝试阅读开发人员Android网站http://developer.android.com/training/articles/perf-tips.html
中的提示 注意:对System.gc()
的调用只是对垃圾收集系统的建议,该系统会自动选择何时运行。从javadoc “调用此方法建议,Java虚拟机花费精力回收未使用的对象......”
答案 2 :(得分:1)
您不能以太多方式影响GC。它会在必要时运行(当它决定它想要时)。
您可以尝试通过减少创建的对象,避免创建它们或重用旧对象来尽量减少收集的数量。