Использование памяти (анонимный RSS + файл подкачки) — это показатель, отражающий объем памяти, используемой вашим приложением.
Анонимная память — это память, не связанная с файлом в хранилище, например, выделенная память в куче и память, выделенная с помощью mmap. Это включает в себя динамическое выделение памяти вашим приложением, в том числе память в куче Java или Kotlin, неуправляемое выделение памяти в собственной куче (где хранятся пиксельные данные Bitmap в Android 8.0 (уровень API 26) и выше), а также стеки выполнения потоков. Хотя ОС может освободить память, связанную с файлом, под давлением, она не может освободить анонимную память.
Размер резидентного набора (RSS) — это общее количество страниц памяти (как разделяемых, так и неразделяемых), используемых процессом и хранящихся в физической оперативной памяти. Страница считается «разделяемой», если к ней обращается более одного процесса (например, приложения, которые обращаются к одной и той же библиотеке).
В случае использования анонимной памяти система может записывать страницы в пространство подкачки (или zRAM на Android), когда память испытывает нехватку. При необходимости система может считать эти страницы обратно из пространства подкачки.
В целом, использование памяти (анонимный RSS + файл подкачки) — это показатель общего количества страниц памяти вашего приложения, не защищенных файлом в хранилище, включая любую память, которая также сохраняется системой в файле подкачки. Отслеживание анонимного RSS + файла подкачки гарантирует, что вы увидите истинное, неизменяемое использование памяти вашим приложением.
Если ваше приложение использует много памяти, проведите дальнейшее исследование и устраните проблему, следуя инструкциям на этой странице.
Ресурсы
Диагностика чрезмерного использования памяти локально.
Для начала диагностики источника чрезмерного использования памяти вы можете сделать дамп кучи с помощью функции «Запись дампа кучи» в настройках разработчика, Android Studio или Perfetto . Мы рекомендуем начать с создания локального дампа кучи после тестирования основных пользовательских сценариев вашего приложения.
Мы особенно рекомендуем протестировать следующие сценарии взаимодействия пользователя с системой:
- Веб-просмотры и внутриприложения браузерные сессии
- Бесконечная прокрутка с большим количеством медиаконтента
- Процессы создания и редактирования активов
Для исследования потенциальных утечек памяти запустите соответствующие сценарии взаимодействия пользователей локально и соберите дампы памяти в различных состояниях процесса (видимый, работающий на переднем плане и кэшированный), чтобы проверить, освобождает ли приложение память после перехода в фоновый режим. Чтобы понять, как эти состояния процесса соотносятся с коллбэками onTrimMemory , обратитесь к руководству по освобождению памяти в ответ на события .
Если вы отлаживаете проблемы с памятью с помощью профилировщика Android Studio, вы также можете использовать интеграцию с LeakCanary для упрощения обнаружения утечек и дубликатов растровых изображений, чтобы оптимизировать использование изображений .
После создания дампа памяти мы рекомендуем использовать инструмент Android Profiler для его анализа и выявления потенциальных источников чрезмерного использования памяти.
навыки Android
Просмотреть на GitHub Android-профилировщик
android skills add android-profiler
Вот пример того, что могли бы ответить навыки искусственного интеллекта:
I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
Summary of Findings
The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
1. [Library] Image Cache Optimization:
* Review the [Library] caching strategy. Ensure that bitmaps
loaded for animations are released or downsampled when the animation is
not in the foreground.
2. Asset Resolution Audit:
* The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
3. View Lifecycle Management:
* Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
tab are properly detached or their animations are cleared when switching between tabs.
4. Fix Surface Leaks:
* Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
native resource exhaustion.
Дополнительные ресурсы для интерпретации дампов памяти
Следующие ресурсы содержат дополнительную информацию об интерпретации дампов памяти и отладке использования памяти:
- Ручной анализ: Воспользуйтесь руководством Perfetto Heap Dump Explorer, чтобы узнать, как перемещаться по визуализациям дампов кучи и интерпретировать их в пользовательском интерфейсе Perfetto.
- Выделение памяти в Java/Kotlin: Прочитайте статью «Визуализация первого дампа кучи ART» для пошагового анализа дампов кучи среды выполнения Android (ART).
- Выделение памяти нативными приложениями: обратитесь к документации Perfetto Native Profiling , чтобы узнать, как собирать и анализировать профили памяти нативных приложений (C/C++).
- Проверка через командную строку: используйте команду adb dumpsys meminfo , чтобы быстро получить подробную информацию об использовании памяти вашим приложением на устройстве.
Улучшить использование памяти
Для получения дополнительной информации об улучшении использования памяти вашим приложением ознакомьтесь с этими разделами:
- Сократите объем кода и потребляемых ресурсов вашего приложения.
- Отслеживание доступной памяти и её использования.
- Используйте более эффективные с точки зрения использования памяти конструкции кода.
Подробные инструкции по устранению проблем с памятью см. в руководстве «Управление памятью вашего приложения» .
,Использование памяти (анонимный RSS + файл подкачки) — это показатель, отражающий объем памяти, используемой вашим приложением.
Анонимная память — это память, не связанная с файлом в хранилище, например, выделенная память в куче и память, выделенная с помощью mmap. Это включает в себя динамическое выделение памяти вашим приложением, в том числе память в куче Java или Kotlin, неуправляемое выделение памяти в собственной куче (где хранятся пиксельные данные Bitmap в Android 8.0 (уровень API 26) и выше), а также стеки выполнения потоков. Хотя ОС может освободить память, связанную с файлом, под давлением, она не может освободить анонимную память.
Размер резидентного набора (RSS) — это общее количество страниц памяти (как разделяемых, так и неразделяемых), используемых процессом и хранящихся в физической оперативной памяти. Страница считается «разделяемой», если к ней обращается более одного процесса (например, приложения, которые обращаются к одной и той же библиотеке).
В случае использования анонимной памяти система может записывать страницы в пространство подкачки (или zRAM на Android), когда память испытывает нехватку. При необходимости система может считать эти страницы обратно из пространства подкачки.
В целом, использование памяти (анонимный RSS + файл подкачки) — это показатель общего количества страниц памяти вашего приложения, не защищенных файлом в хранилище, включая любую память, которая также сохраняется системой в файле подкачки. Отслеживание анонимного RSS + файла подкачки гарантирует, что вы увидите истинное, неизменяемое использование памяти вашим приложением.
Если ваше приложение использует много памяти, проведите дальнейшее исследование и устраните проблему, следуя инструкциям на этой странице.
Ресурсы
Диагностика чрезмерного использования памяти локально.
Для начала диагностики источника чрезмерного использования памяти вы можете сделать дамп кучи с помощью функции «Запись дампа кучи» в настройках разработчика, Android Studio или Perfetto . Мы рекомендуем начать с создания локального дампа кучи после тестирования основных пользовательских сценариев вашего приложения.
Мы особенно рекомендуем протестировать следующие сценарии взаимодействия пользователя с системой:
- Веб-просмотры и внутриприложения браузерные сессии
- Бесконечная прокрутка с большим количеством медиаконтента
- Процессы создания и редактирования активов
Для исследования потенциальных утечек памяти запустите соответствующие сценарии взаимодействия пользователей локально и соберите дампы памяти в различных состояниях процесса (видимый, работающий на переднем плане и кэшированный), чтобы проверить, освобождает ли приложение память после перехода в фоновый режим. Чтобы понять, как эти состояния процесса соотносятся с коллбэками onTrimMemory , обратитесь к руководству по освобождению памяти в ответ на события .
Если вы отлаживаете проблемы с памятью с помощью профилировщика Android Studio, вы также можете использовать интеграцию с LeakCanary для упрощения обнаружения утечек и дубликатов растровых изображений, чтобы оптимизировать использование изображений .
После создания дампа памяти мы рекомендуем использовать инструмент Android Profiler для его анализа и выявления потенциальных источников чрезмерного использования памяти.
навыки Android
Просмотреть на GitHub Android-профилировщик
android skills add android-profiler
Вот пример того, что могли бы ответить навыки искусственного интеллекта:
I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
Summary of Findings
The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
1. [Library] Image Cache Optimization:
* Review the [Library] caching strategy. Ensure that bitmaps
loaded for animations are released or downsampled when the animation is
not in the foreground.
2. Asset Resolution Audit:
* The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
3. View Lifecycle Management:
* Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
tab are properly detached or their animations are cleared when switching between tabs.
4. Fix Surface Leaks:
* Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
native resource exhaustion.
Дополнительные ресурсы для интерпретации дампов памяти
Следующие ресурсы содержат дополнительную информацию об интерпретации дампов памяти и отладке использования памяти:
- Ручной анализ: Воспользуйтесь руководством Perfetto Heap Dump Explorer, чтобы узнать, как перемещаться по визуализациям дампов кучи и интерпретировать их в пользовательском интерфейсе Perfetto.
- Выделение памяти в Java/Kotlin: Прочитайте статью «Визуализация первого дампа кучи ART» для пошагового анализа дампов кучи среды выполнения Android (ART).
- Выделение памяти нативными приложениями: обратитесь к документации Perfetto Native Profiling , чтобы узнать, как собирать и анализировать профили памяти нативных приложений (C/C++).
- Проверка через командную строку: используйте команду adb dumpsys meminfo , чтобы быстро получить подробную информацию об использовании памяти вашим приложением на устройстве.
Улучшить использование памяти
Для получения дополнительной информации об улучшении использования памяти вашим приложением ознакомьтесь с этими разделами:
- Сократите объем кода и потребляемых ресурсов вашего приложения.
- Отслеживание доступной памяти и её использования.
- Используйте более эффективные с точки зрения использования памяти конструкции кода.
Подробные инструкции по устранению проблем с памятью см. в руководстве «Управление памятью вашего приложения» .