#android #memory-leaks #dalvik
#Android #утечки памяти #dalvik
Вопрос:
В нашем приложении есть кнопка, которая может воспроизводить видео. MediaCenter.apk
Недавно мы обнаружили, что каждый раз, когда мы проигрываем и выходим из видео. Виртуальный адрес процесса mediacenter увеличивается примерно на 5784KB (но физический адрес остается прежним), поэтому процесс завершается сбоем в стресс-тестировании видеоплеера, потому что тогда виртуального адреса недостаточно. Я использовал command pmap -x pid
для проверки использования виртуальной памяти процессом mediacenter и обнаружил, что было использовано увеличенное 5784KB /data/dalvik-cache/system@app@MediaCenter.apk@classes.dex
.
65b29000 5784 8 0 0 r--p /data/dalvik-cache/system@app@MediaCenter.apk@classes.dex
Я обнаружил, что размер файла /data/dalvik-cache/system@app@MediaCenter.apk@classes.dex
был почти равен 5784KB. Казалось, что весь файл был сопоставлен с памятью процессу mediacenter. Но как я могу узнать, на каком этапе файл был отображен в память в процессе? И как узнать, почему виртуальный адрес не освобождается после выхода из видеоплеера?
Ответ №1:
Инструмент Android hprof показывает использование памяти вашим процессом приложения. Ниже приведена ссылка, https://developer.android.com/studio/profile/am-hprof.html
Чтобы узнать максимальную допустимую кучу на вашем устройстве, добавьте приведенный ниже код в приложение yout.
Runtime.getRuntime().maxMemory();
Комментарии:
1. Спасибо. Но, похоже, hprof можно использовать только для анализа использования физической памяти процесса приложения. В моем случае утечка памяти происходит по виртуальному адресу, а не по физическому адресу.
2. В моем понимании виртуальный адрес — это пространство кучи (использование ОЗУ). В физической памяти нет ничего, кроме размера apk в файловой системе (Nand mem). hprof выполняет анализ кучи.
3. Извините, здесь я имею в виду виртуальный адрес процесса Linux, физическим адресом является ОЗУ.