Ответ 1
Другое место, где объясняются сообщения сборщика мусора 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 2125K
Самообслуживание
Статистика кучи
например. 47% free 6214K/11719K
Эти числа отражают условия после запуска GC. "47% свободных" и 6214 тыс. Отражают текущее использование кучи. 11719K представляет общий размер кучи. Из того, что я могу сказать, куча может расти/сокращаться, поэтому вы не обязательно будете иметь OutOfMemoryError, если вы нажмете этот предел.
Статистика внешней памяти
Например, external 7142K/8400K
Примечание. Это может существовать только в версиях Android, предшествующих сотовой версии (до 3.0).
Перед Honeycomb растровые изображения выделены вне вашей виртуальной машины (например, Bitmap.createBitmap() выделяет растровое изображение извне и выделяет всего несколько десятков байтов на вашей локальной куче). Другие примеры внешних распределений для java.nio.ByteBuffers.
Время паузы
Если это параллельное GC-событие, будет указано два раза. Один из них - для паузы перед GC, один - для паузы, когда GC в основном выполняется.
Например. paused 3ms+5ms
Для неконкурентных событий GC есть только одно время паузы, и оно обычно намного больше.
Например. paused 87ms