2015-02-18 5 views
2

Я смотрел на использование памяти в студии android и заметил, что каждый раз, когда я запускаю свое приложение, память увеличивается на несколько МБ. У меня никогда не было отчета об ошибке исключения OutOfMemory с любого из поддерживаемых устройств. Я не знаком с множеством инструментов, включенных в sdk android, поэтому я не уверен, что это означает утечку памяти или нет.Android У моего приложения есть утечка памяти?

В андроиде монитора студии памяти, это то, что график выглядит как после 3-х запусков: memory monitor

Как вы можете видеть, память увеличивается несколько МБ каждого запуска.

Означает ли это, что у меня есть утечка памяти? Если да, то какие шаги я могу предпринять, чтобы найти источник утечек памяти?

+0

Кто-нибудь? Я знаю, что вопрос неопределен, но в документации по Android есть только статьи, отлаживающие использование ram на dalvik VM, я нацелен на леденец (что составляет 60% + моих пользователей). Более подробная информация необходима, пожалуйста, дайте мне знать –

ответ

2

Чтобы убедиться, что ваше приложение не имеет утечек памяти вам нужно сделать две вещи:

  1. Сделайте дамп кучи.
  2. Проанализируйте его с помощью некоторого анализатора памяти.

Способ получения кучи кучи описан в official documentation.
Как только у вас есть дамп, вы можете загрузить его в инструмент анализатора памяти (я предпочитаю YourKit, но вы можете подобрать любой анализатор, который вам нравится) и искать просочившиеся объекты (шаги для этого можно найти в документации выбранный анализатор памяти).

Простой YourKit рабочий процесс: запустить анализатор, открыть дамп кучи с помощью Ctrl + O. Вы увидите экран, похожий на приложенный ниже:

enter image description here

Нажмите кнопку Inspections на левой стороне, а затем Alt + (или Run All кнопка). Инспекция, которая вас интересует, - Objects retained by inner class back references, содержащаяся в пределах Possible leaks группы. Здесь у меня есть только String объектов, которые можно считать нормальными. Каждый раз, когда вы видите здесь некоторые из ваших собственных классов, у вас происходит утечка памяти. Вы можете щелкнуть по своим объектам (если они указаны здесь), чтобы увидеть, какие ссылки у него есть, и кто ссылается на него, чтобы понять, что является источником утечки.

+0

спасибо за информацию, я сделал 2 кучи свалки, второй я снова запустил приложение, а в YourKit кажется, что все мои объекты увеличиваются, буквально все из них, строки, текстовые элементы, RelativeLayouts , Это нормально? или это означает утечку памяти? –

+0

@jefferson похоже. Я отредактировал свой ответ, чтобы показать, как вы можете найти источник утечки памяти. – aga

+0

Большое спасибо за это. я все еще немного смущен тем, что обнаружил пропущенные ссылки в этих объектах. Вот скриншот: http://i.imgur.com/5NH7SSt.png?1, я вижу один из моих фрагментов, но размер небольшой, всего несколько байтов. Я также вижу, что dexCache довольно большой, но я не уверен, как это интерпретировать? –

Смежные вопросы