Память Android: как проверить память без использования профилировщика?

#java #android #profiler #android-memory #android-profiler

#java #Android #профилировщик #android-память #android-профилировщик

Вопрос:

У меня есть проблема с ошибкой ООМ (OutOfMemory) в моем приложении. Кажется, что это связано с объектом, который занимает все больше и больше места в памяти, но мне не удается найти, какой именно.

Я хотел бы использовать профилировщик Android, чтобы найти проблему. Но у меня есть приложение реального времени, которое использует много процессора и памяти устройства, и когда я использую профилировщик, приложение становится очень медленным и становится практически невозможным в использовании (мне нужно использовать приложение не менее 3 минут на нормальной скорости, чтобы увидеть, как память постепенно растет).

Мои вопросы таковы:

  • есть ли способ использовать профилировщик без этой проблемы с замедлением?
  • если нет, существуют ли какие-либо другие инструменты или методологии, чтобы помочь мне определить, какой объект растет в памяти?

Спасибо!

Ответ №1:

Вы можете собрать heapdump вашего приложения с помощью adb shell

 adb shell am dumpheap <PID> <TARGET_FILE>
 

и просмотреть экспортированный файл с помощью профилировщика Android Studio

В качестве альтернативы, если вы знаете, когда именно в вашем приложении происходит ООМ, вы можете собрать heapdump, используя этот метод Debug.dumpHprofData(String)

Комментарии:

1. Спасибо. Я делаю «adb shell am dumpheap …», но получаю «Невозможно открыть файл: dump.hprof Рассмотрите возможность использования файла в /data/local/tmp/». Должен ли я создать пустой файл dump.hprof на своем телефоне в этом месте? Другое решение? Могу ли я создать файл непосредственно на моем Mac?

2. если вы не можете запустить эту команду как su (если ваш телефон не имеет root), вы можете оставить просто не указывать <TARGET_FILE> и оставить его пустым, am назовет сам файл и распечатает его для вас

Ответ №2:

Вот несколько вещей, которые вы можете сделать, чтобы уменьшить замедление работы приложения с помощью профилировщика::

  1. Изменение Allocation Tracking на None (выпадающий список на панели инструментов)
  2. Не подключайте профилировщик позже. Просто Run приложение, затем, когда оно приблизится к точке, которую вы хотите профилировать, откройте Profiler вкладку, нажмите кнопку на SESSIONS панели слева и выберите нужное устройство и процесс для профилирования.

Комментарии:

1. Спасибо. Где вы изменяете этот параметр?

2. @Regis_AG: Я подробно изложил ответ.