Платформа Android исходит из того, что свободная память — это бесполезная трата памяти. Android постоянно пытается использовать всю доступную память. Например, система сохраняет приложения в памяти после их закрытия, чтобы пользователь мог быстро вернуться к ним. По этой причине устройства Android часто работают с очень небольшим количеством свободной памяти (см. Распределение памяти Android здесь ).
Процесс- демон Android Low Memory Killer (LMK) отслеживает состояние памяти работающей системы Android и реагирует на высокую нехватку памяти, убивая наименее важные процессы, чтобы поддерживать производительность системы на приемлемом уровне.
Чтобы решить, какой процесс уничтожить, демон LMK использует показатель нехватки памяти, называемый oom_adj_score , для определения приоритета запущенных процессов . Процессы с высоким рейтингом уничтожаются первыми. Фоновые приложения закрываются первыми; системные процессы, в последнюю очередь. В следующей таблице перечислены категории оценок LMK от высокой до низкой. Предметы в категории с самым высоким рейтингом в первой строке уничтожаются первыми:

Метрика LMK в Android Vitals
Android Vitals поможет вам отслеживать и улучшать показатель LMK вашего приложения. Android Vitals измеряет только один показатель LMK: показатель LMK, воспринимаемый пользователем .
Этот показатель отражает процент ваших ежедневных активных пользователей, которые испытали хотя бы один LMK, воспринимаемый пользователями. LMK, воспринимаемый пользователем, — это LMK, который, скорее всего, был замечен пользователем. Например, LMK, которые происходят, когда ваше приложение отображает активность или работает в качестве службы переднего плана.
Вы можете найти этот показатель в разделе «Стабильность» в Android Vitals:

Как и в случае с другими основными важными показателями, такими как количество ошибок ANR и сбои, вы можете фильтровать показатели, сравнивать свои показатели с аналогичными или отслеживать изменения показателей в течение длительного периода времени (до 3 лет). Данные доступны для существующих приложений начиная с 28 января 2025 года.

Инструменты профилирования памяти
Следующие инструменты могут помочь вам найти и диагностировать проблемы с памятью следующими способами:
- Посмотрите, как ваше приложение распределяет память с течением времени. Вы можете найти в реальном времени график того, сколько памяти использует ваше приложение, количество выделенных объектов Java и время выполнения сборки мусора.
- Инициируйте события сборки мусора и делайте снимок кучи Java во время работы вашего приложения.
- Записывайте распределение памяти вашего приложения, проверяйте все выделенные объекты и просматривайте трассировку стека для каждого выделения.
Профилировщик памяти Android Studio
Android Studio предоставляет профилировщик памяти как компонент Android Profiler , который помогает выявлять утечки и перебои памяти, которые могут привести к зависаниям, зависаниям и даже сбоям приложений. Профилировщик показывает в реальном времени график использования памяти вашим приложением и позволяет создавать дамп кучи, принудительно собирать мусор и отслеживать распределение памяти.

Инструменты профилирования памяти Unity
Если вы используете Unity Engine для создания своих приложений, вы можете следовать руководству по профилированию памяти Unity . Unity предлагает два инструмента для анализа использования памяти в вашем приложении в Unity.
Первый — это модуль Memory Profiler , который представляет собой встроенный профилировщик, предоставляющий вам базовую информацию о том, где ваше приложение использует память.

Второй инструмент — это пакет Memory Profiler , который представляет собой пакет Unity, который вы можете добавить в свой проект. Пакет добавляет дополнительное окно профилировщика памяти в редактор Unity. Профилировщик памяти позволяет еще более детально анализировать использование памяти в вашем приложении. Вы можете хранить и сравнивать снимки, чтобы обнаружить утечки памяти, или просмотреть структуру памяти, чтобы обнаружить проблемы фрагментации памяти.

Нереальная информация о памяти
Приложения, созданные с помощью Unreal Engine, могут использовать Unreal Memory Insights для просмотра подробной информации о выделении и освобождении памяти, включая теги памяти низкого уровня (LLM) и стеки вызовов, связанные с блоками памяти.
Система запросов Memory Insights может находить текущие распределения в любой момент времени, выявлять изменения в использовании памяти, обнаруживать утечки памяти и отличать краткосрочное распределение от долгосрочного.
Начиная с UE 5.4, Memory Insights поддерживает трассировку памяти с помощью стеков вызовов для проектов Android.

Низкая память
Android предоставляет обратные вызовы и API, которые позволяют сократить требования к памяти вашей игры и определить, почему предыдущие запуски игры были прекращены.
Обратные вызовы
Не регистрируйтесь для устаревших обратных вызовов обрезки . В Android нет API-интерфейсов для обнаружения событий нехватки встроенной памяти, когда система достигает пределов памяти. Обратные вызовы Trim не помогли предотвратить уничтожение нехватки памяти, поэтому Android объявил устаревшими все из них, кроме TRIM_MEMORY_UI_HIDDEN
и TRIM_MEMORY_BACKGROUND
.
Прекращение игры
Android пытается использовать всю доступную память для кэширования приложений и игр, чтобы обеспечить их быструю загрузку (улучшая взаимодействие с пользователем), но когда память становится ограниченной, система убивает наиболее ресурсоемкие приложения и игры, чтобы освободить память для нормальной работы устройства.
Информация, идеи и рекомендации, которые помогут вам лучше использовать игровую память, включают следующее:
- Используйте
ApplicationExitInfo
: этот API возвращает причину, по которой предыдущий запуск игры был прекращен системой Android. ИспользуйтеApplicationExitInfo
для проверки нехватки памяти как причины смерти предыдущего запуска процесса. Проверьте, не была ли игра завершена из-за нехватки памяти, чтобы можно было оптимизировать игру для использования меньшего количества памяти на этом устройстве. - Посмотрите на общий объем физической оперативной памяти . Чтобы игры не закрывались на переднем плане, а также для соответствия возможностям устройства, посмотрите на общий объем физической оперативной памяти на устройство для более детальной детализации и на основе этого скорректируйте использование игровой памяти. Если цель состоит в том, чтобы предотвратить завершение работы приложений вскоре после перехода в фоновый режим (чтобы позволить игроку выполнять многозадачность), используйте обратные вызовы обрезки (в частности,
TRIM_MEMORY_UI_HIDDEN
), чтобы уменьшить использование игровой памяти.