Чем дольше работает игра, тем больше памяти она занимает, всё сильнее тормозит и в итоге принудительно закрывается.
Почему При переходах между локациями текстуры, UI и эффекты не освобождаются → Следствие GC запускается чаще, памяти ОС не хватает, начинается своп → На экране Через несколько часов игры микрофризы нарастают, потом игра принудительно закрывается (игроку это кажется дисконнектом)
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Замерять расход памяти при смене локаций, находить и исправлять неосвобождаемые текстуры, UI и эффекты, гонять долгие автотесты (soak-тесты).
На графике
Плавный рост · память процесса игры
Где смотреть
Несколько часов записывать в Системном мониторе счётчик Process(игра)\Private Bytes. На мобильных смотреть причину завершения в ApplicationExitInfo на Android (REASON_LOW_MEMORY) и отчёты jetsam на iOS
Подтверждает
С каждым переходом между локациями память растёт и не возвращается, и чем дольше работает игра, тем больше микрофризов и принудительных закрытий
Опровергает
Если память стабильна, а с долгой работой появляется только дрожание, это «Потеря точности времени во float»
Чем проверить
Проверка на стороне игрока
Подробнее
Телефоны обычно держатся за счёт сжатия памяти. Если памяти всё равно не хватает, ОС сразу закрывает игру (вылет). Чем меньше ОЗУ у устройства, тем раньше это происходит.
Источники
Memory allocation among processesAndroid (Google) Android держится за счёт сжатия памяти в zRAM, а когда памяти не хватает, low memory killer завершает процессы. Если завершено приложение на переднем плане, это выглядит как краш
Identifying high-memory use with jetsam event reportsApple Если нехватка памяти не проходит, iOS принудительно завершает приложения (jetsam). Приложение, превысившее свой лимит памяти, становится кандидатом на завершение
ApplicationExitInfoAndroid (Google) REASON_LOW_MEMORY: процесс приложения завершён системным low memory killer (устройства без поддержки сообщают REASON_SIGNALED и SIGKILL)