Как найти утечку памяти в виртуальном адресе в Android?

#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, физическим адресом является ОЗУ.