Android
iOS
PPS обнаружил хорошее выступление по утечкам памяти в iOS
NOTE1: лики лучше искать на эмуляторе. На Android
в эмуляторе можно находить лики даже в приложениях, сорцов которых у
вас нет. (На девайсе в большинстве случаев надо править некоторые
конфигурационные файлы, а для этого надо обладать root-правами ). Но придется смириться с некоторыми тормозами в чистке heap и добытии *.hprof файлов с эмулятора (иногда до 3-4 минут)
- Качаем и ставим Eclipse memory analyzer
- Запускаем Eclipse и подключаем эмулятор или девайс
- DDMS>Devices>Update heap
- В DDMS выбираем вкладку Heap
- Интенсивно используем проверяемое приложение
- Наблюдаем за потребление памяти
- Кликаем Cause GC, если потребление не уменьшилось через 30 секунд то
- Кликаем Dump HPROF file и сохраняем файл
- Конвертируем hprof-conv исходный_файл конечный_файл
- Запускаем Memory Ananlyzer>Open Heap Dump
- Выбираем Leak Suspects Report
- Анализируем подозреваемых
- Переключаемся на вкладку Overview>клик на Dominator Tree
- Анализируем что течет
- Закрываем приложение – наблюдаем сгенерированные файлы отчётов в папке, куда был скопирован *.hprof файл
Также можно мониторить потребление памяти при включенном параметре "Don't keep activities" (OS 4 и выше) в Settings>Developer options. Все активити, на которых нет ссылок должны очищаться garbage collector.
Помимо утечек памяти может меть место неправильное управление памятью. В представленом ниже видео так и случается.
- При каждой смене ориентации девайса выделяется память
- После того как мы принудительно почистим память - использованное количество памяти уменьшается, но общее выделенное количество не уменьшается
В итоге рано или поздно память закончится (heap size) и приложение завалится.
Естественно, пример утрирован, но небольшие утечки памяти при смене ориентации девайса случаются достаточно часто.
iOS
NOTE2: Лики лучше искать на реальном девайсе, все-таки симулятор – не эталон
- Запускаем xCode и выбираем интересующий нас проект
- Product>Profile
- Instruments>Leaks
- Интенсивно нагружаем приложение
- Следим за выделением памяти на графике Allocations
- Как только memory leak появляется на графике Leaks, кликаем на него и наблюдаем где он появился
PPS обнаружил хорошее выступление по утечкам памяти в iOS