Google Maps API вызывает утечки памяти?


Я только начал использовать Eclipse Memory Analyzer, чтобы попытаться устранить утечку памяти в моей деятельности, которая расширяет MapActivity, но я не уверен, правильно ли я понимаю ее вывод. Чтобы проанализировать утечку, я запустил действие и пару раз повернул экран, а затем взял дамп кучи и открыл его. Первым делом я открыл вид гистограммы и посмотрел на свою активность (называемую ChangeLocationActivity). Это действительно похоже на утечку памяти, поскольку есть три экземпляра одной и той же активности. Итак, я получил список объектов с входящими ссылками, а затем получил "Путь к корням GC", исключающий слабые ссылки для всех трех экземпляров. Это путь первого экземпляра, это для второго экземпляра (этот пользовательский MyLocationOverlay - действительно простой класс, созданный для обхода ошибки на некоторых устройствах Motorola, и он не имеет ничего особенного, кроме перехвата исключения в drawMyLocation()) и наконец, это третий экземпляр, который выглядит так, как показано в данный момент.

Как я уже говорил ранее, я не уверен, правильно ли я понимаю эти результаты (Eclipse Memory Analyzer действительно мощный, но довольно сложный), но из того, что я могу сказать, похоже, что причина утечки памяти связана с библиотекой Google Maps. Может кто-нибудь сказать мне, если я прав или я просто не понимаю эти результаты?

1 ответ

Решение

Выберите все действия и используйте "Объединить кратчайшие пути с корнями GC". Опубликуйте результат здесь. Ваша вторая активность, кажется, жива, потому что вы зарегистрировали EventListener.

"Объединить кратчайшие пути к корням GC" - одна из наиболее важных команд в MAT. Он показывает все пути для объектов к корням, но объединяет их и поэтому позволяет вам анализировать, какие объекты еще живы, потому что они имеют одни и те же пути. Из вашего скриншота (пожалуйста, разверните 3 поддерева) кажется, что ваши 3 актива удерживаются как 3 корневых объекта. Для утечек характерно, что некоторые общие объекты имеют общие корневые пути. Обычно из того, что я видел в вашем случае, у вас есть более одной причины утечки, потому что каждое действие удерживается различным корневым объектом. Я бы порекомендовал попытаться получить как можно больше утечек при повторении теста.

С уважением, Маркус

Другие вопросы по тегам