Android регистрирует «GC_EXTERNAL_ALLOC» «GC_FOR_MALLOC» - PullRequest
25 голосов
/ 29 декабря 2010

Во время работы моих приложений я получаю такие журналы:

GC_EXTERNAL_ALLOC освобожден 2K, 38% свободен 8772K / 14087K, внешний 17480K / 17998K, приостановлен 87мс
GC_FOR_MALLOC освобожден 0K, 38% свободен 8772K / 14087K, внешний 17480K / 17998K, приостановлен 67мс
GC_CONCURRENT освобожден 2125K, 47% свободен 6214K / 11719K, внешний 7142K / 8400K, приостановлен 3 мс + 5 мс

Кто-нибудь знает, что означают эти журналы? Заранее спасибо!

  1. В чем разница между «GC_EXTERNAL_ALLOC», «GC_FOR_MALLOC» и «GC_CONCURRENT». Есть ли какие-нибудь другие события "GC"?
  2. Что означает «38% свободных 8772K / 14087K»? Что такое «8772K» и «14087K»?
  3. Что означает «внешний 17480K / 17998K»? Что такое «17480К» и «17998К»?

Спасибо!

Ответы [ 2 ]

44 голосов
/ 04 августа 2011

Другое место, где объясняются сообщения сборщика мусора Dalvik, - это видео: Google I / O 2011: управление памятью для приложений Android

Примерно через 14 минут после презентации онразбивает формат сообщения(Кстати, у этого видео действительно хорошая информация об устранении утечек памяти)

Грубо говоря, формат [Reason] [Amount Freed], [Heap Statistics], [External Memory Statistics], [Pause Time]

Причина

Виктор / Роберт уже объяснили GC_CONCURRENT, GC_FOR_MALLOC, GC_EXTERNAL_ALLOC.

Существует также:

  • GC_HPROF_DUMP_HEAP - Если вы выгрузите кучу, нажав кнопку «Отменить кучу» в DDMS илипрограммно

  • GC_EXPLICIT - Если вы звоните System.gc ()

Сумма Freed

Например freed 2125K

Не требует объяснений

Статистика кучи

Например 47% free 6214K/11719K

Эти цифры отражают условия после запуска ГХ.«47% свободного» и 6214K отражают текущее использование кучи.11719K представляет общий размер кучи.Из того, что я могу сказать, куча может расти / уменьшаться, поэтому вы не обязательно будете иметь ошибку OutOfMemoryError, если вы достигнете этого предела.

Статистика внешней памяти

Например external 7142K/8400K

Примечание. Это может существовать только в версиях Android, предшествующих Honeycomb (до 3.0).

Перед Honeycomb битовые карты выделяются вне вашей виртуальной машины (например, Bitmap.createBitmap () выделяет битовую карту извне и выделяет тольконесколько десятков байтов в вашей локальной куче).Другие примеры внешнего выделения для java.nio.ByteBuffers.

Время паузы

Если это параллельное событие GC, в списке будет два раза.Один - для паузы перед GC, другой - для паузы, когда GC в основном делается.Например, paused 3ms+5ms

Для не одновременных событий GC существует только одна пауза, которая обычно намного больше.Например paused 87ms

14 голосов
/ 21 марта 2011

Я тоже искал эту информацию.

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

    • GC_EXTERNAL_ALLOC : означает, что виртуальная машина пытается уменьшить объем используемой памяти для собираемых объектов, чтобы освободить место для не подлежащих сбору объектов.
    • GC_FOR_MALLOC : Означает, что сборщик мусора был запущен, поскольку в куче не хватило памяти для выполнения выделения. Может сработать при создании новых объектов.
    • GC_CONCURRENT : срабатывает, когда куча достигает определенного количества объектов для сбора.
  1. Я предполагаю, что 38% свободного означает, что 38% кучи не используется. 8772K будет размером используемой памяти в куче, а 14087K будет размером кучи.
  2. Не знаю, извините.

Обратите внимание, что вся эта информация основана на сообщении от Роберта на похожий вопрос, опубликованный здесь на stackoverflow. Вся заслуга (если это правильно) достается Роберту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...