Как найти утечку памяти в Java / Android - PullRequest
3 голосов
/ 17 января 2020

У меня много проблем с утечкой памяти в одном из наших приложений, и я не уверен, где искать дальше. Я знаю, что подобные вопросы задавались, но ни на один не было ответов, которые были бы полезны.

Когда мы используем профилировщик в android studio, он показывает, что «родная» память увеличивается довольно быстро, и после использования приложения в течение примерно 10–15 минут оно изменит sh из-за утечки памяти.

Наше приложение полностью написано на java и kotlin, я просматривал любой объект stati c или объекты, которые хранятся в сопутствующих объектах, которые не могут быть собраны сборщиком мусора, но есть это не что иное, как несколько строк c, например, TAG для ведения журнала.

Мы пытались использовать утечку канарейки, но она не может обнаружить утечки памяти и постоянно говорит нам, что наше приложение в порядке. Я даже намеренно добавил утечку, статически удерживая контекст активности android только для того, чтобы убедиться, что канарейка утечки работала, и это было. в моем java коде? Какие-нибудь конкретные c объекты, которые я могу удерживать, вызывают это?

1 Ответ

1 голос
/ 17 января 2020

В Android Studio вы можете сгенерировать дамп кучи, нажав кнопку кучи Dump Java: Dump Java Heap Button

здесь вы можете увидеть, какой класс использует память , например, вы можете найти класс, который должен был быть собран сборщиком мусора, но не был.

** обновление: как вы заявили, проблема связана с собственным выделением памяти, но я бы сохранил этот ответ, потому что это может помочь кому-то еще.

...