#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:
Вот несколько вещей, которые вы можете сделать, чтобы уменьшить замедление работы приложения с помощью профилировщика::
- Изменение
Allocation Tracking
наNone
(выпадающий список на панели инструментов) - Не подключайте профилировщик позже. Просто
Run
приложение, затем, когда оно приблизится к точке, которую вы хотите профилировать, откройтеProfiler
вкладку, нажмитеSESSIONS
панели слева и выберите нужное устройство и процесс для профилирования.
Комментарии:
1. Спасибо. Где вы изменяете этот параметр?
2. @Regis_AG: Я подробно изложил ответ.