Я работаю над игрой для Android и отлаживаю ее на своем N1. Сначала производительность была неоднородной. Затем я работал над очисткой всех распределений, чтобы предотвратить сбор мусора. Это значительно улучшило ситуацию, но я все еще видел некоторые коллекции мусора, которые вызывали очень короткие паузы в анимации.Разработка игр для Android и сборка мусора
После вытягивания волос на некоторое время, я заметил, что идентификаторы процессов, которые делали сборку мусора (GC_FOR_MALLOC), не были моим идентификатором процесса. Идентификаторы процессов принадлежали «Android-системе» и android.process.acore (определяется с помощью приложения «Android System Info» с рынка). Процесс acore был привязан к настольному виджету, называемому цифровыми часами. Я удалил виджет и почти сделал его через всю игру без каких-либо пауз. Была одна очень короткая пауза для GC для «Android-системы».
Извините за длинное объяснение, но теперь мои вопросы:
- Как это, что другие игры не иногда имеют пауз из-за системного процесса в GC (что-то из-под контроля разработчика)?
- В соответствии с первым вопросом, как я могу работать с другим приложением, вызывающим GC, которое замедляет мой процесс и вызывает икоту в моей игре?
Я просто чувствую, что что-то мне не хватает, поскольку в других играх нет этой проблемы.
Thanks
Если ваше приложение чувствительно к сборщику мусора, вы делаете это неправильно. – Falmarri
Возможно, вам повезло на http://gamedev.stackexchange.com/ для конкретных вопросов игры. Я не уверен, что есть простой ответ на этот вопрос. Вы не можете предотвратить gc, просто скройте их. 2.3 включает в себя одновременный gc, но это не поможет вам, если вы хотите настроить таргетинг на более ранние платформы. –