Ada*_*zyk 11 android garbage-collection
我正在为Android> = 2.1编写一个实时街机游戏.在游戏过程中我不分配内存,不引诱GC.如果GC调用,它需要处理器70-200ms.用户将此视为"哦不,那场比赛已经落后......".
我检查了LogCat.有很多GC_FOR_MALLOC或GC_EXPLICIT.但是......不是来自我的过程的PID!我的游戏不会导致他们.它们是因为其他进程在后台运行而引起的.一些壁纸,小工具,收音机,电子邮件,天气检查和其他服务......
我完全不明白.我猜想,当例如壁纸消失,其onPause()被调用时.因此,它应该停止所有线程,当然不分配任何内存(或调用System.gc()).也许这是错误的实施?我不知道.但也有一些Android服务,它们也不时引起GC ......这很奇怪.
这是一个很大的Android <= 2.2架构缺陷吗?Android 2.3 引入了并发GC,花费的时间更少.
我该怎么做才能确保我的游戏顺利运行?
首先,您在 LogCat 中看到的内容因设备而异。如果您确定 GC 不是来自您的应用程序,那么您绝对无能为力。你总会发现 GC 正在做一些事情。确保您的代码保持干净且精简。
另外,请记住,一般来说,在存在垃圾收集器的情况下,手动调用 GC 绝不是一个好习惯。GC 是围绕启发式算法组织的,这些算法在留给自己的设备时效果最佳。手动调用 GC 通常会降低性能。
有时,在一些相对罕见的情况下,人们可能会发现特定的 GC 出错,然后手动调用 GC 可能会在性能方面有所改善。这是因为实际上不可能实现在所有情况下都能以最佳方式管理内存的“完美”GC。这种情况很难预测,并且取决于许多微妙的实现细节。“好的做法”是让 GC 自己运行;对 GC 的手动调用是例外,只有在充分见证实际性能问题后才应设想这种情况。
我不认为这是 Android <= 2.2 上的缺陷。高版本上会出现这种情况吗?你测试过吗?
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |