Google Maps API вызывает утечки памяти? - PullRequest
4 голосов
/ 12 декабря 2011


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

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

1 Ответ

0 голосов
/ 14 декабря 2011

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

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

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

...