Android 其他进程调用GC,这会减慢我的游戏速度

Android 其他进程调用GC,这会减慢我的游戏速度,android,garbage-collection,Android,Garbage Collection,我正在为Android编写一个实时街机游戏>=2.1。在游戏过程中,我不会分配内存,也不会引诱GC。因为如果GC调用,它需要处理器70-200毫秒。用户将此视为“哦,不,那个游戏落后了…” 我查了一下LogCat。有很多GC_FOR_MALLOC或GC_EXPLICIT。但是不是从我的进程的PID!我的游戏没有引起他们。它们是由其他进程在后台运行引起的。一些壁纸,小部件,收音机,电子邮件,天气检查和其他服务 我不完全明白。例如,当墙纸消失时,我想它的onPause()会被调用。因此,它应该停止所

我正在为Android编写一个实时街机游戏>=2.1。在游戏过程中,我不会分配内存,也不会引诱GC。因为如果GC调用,它需要处理器70-200毫秒。用户将此视为“哦,不,那个游戏落后了…”

我查了一下LogCat。有很多GC_FOR_MALLOC或GC_EXPLICIT。但是不是从我的进程的PID!我的游戏没有引起他们。它们是由其他进程在后台运行引起的。一些壁纸,小部件,收音机,电子邮件,天气检查和其他服务

我不完全明白。例如,当墙纸消失时,我想它的onPause()会被调用。因此,它应该停止所有线程,当然不分配任何内存(或调用System.gc())。也许它被错误地执行了?我不知道。但也有一些安卓服务,它们也不时引起GC。。。这很奇怪


这是一个大的安卓首先,你在LogCat中看到的东西在不同的设备上会有所不同。如果你确定GC不是来自你的应用程序,那么你绝对无能为力。你总会发现GC在做一些事情。 确保您的代码保持干净和精简

另外,请记住,一般来说,在存在垃圾收集器的情况下,手动调用GC从来都不是好的做法。GC是围绕启发式算法组织的,当留给他们自己的设备时,启发式算法工作得最好。手动调用GC通常会降低性能

偶尔,在一些相对罕见的情况下,您可能会发现某个特定的GC出错,手动调用GC可能会改善性能。这是因为实际上不可能实现“完美”的GC,它在所有情况下都能以最佳方式管理内存。这种情况很难预测,并且取决于许多微妙的实现细节。“良好实践”是让GC自己运行;对GC的手动调用是例外情况,只有在实际性能问题得到适当见证后,才应该设想这种情况


我不相信这是安卓系统的一个缺陷,为什么你不相信?是的,我已经在2.2和4.1上测试过了。2.2上的行为与我描述的一样。在4.1中,正如我提到的,有一个并发GC,这使得这个问题不那么严重。