Что означает GC для MALLOC, GC EXPLICIT и других GC * в Android Logcat?
Если вы видите журналы Android, вы можете увидеть много таких вещей.
что они означают, зная, что это может помочь нам сделать лучшее распределение памяти.
пример:
28470 dalvikvm D GC_FOR_MALLOC freed 665 objects / 239992 bytes in 71ms
28470 dalvikvm D GC_FOR_MALLOC freed 673 objects / 240288 bytes in 87ms
21940 dalvikvm D GC_EXPLICIT freed 4802 objects / 185320 bytes in 78ms
28470 dalvikvm D GC_FOR_MALLOC freed 666 objects / 240536 bytes in 63ms
3 ответов:
GC_FOR_MALLOC означает, что GC был вызван, потому что в куче осталось недостаточно памяти для выполнения выделения. Может быть вызвано при создании новых объектов.
GC_EXPLICIT означает, что сборщик мусора был явно запрошен для сбора, а не вызван высокими отметками воды в куче. Происходит повсюду, но, скорее всего, когда поток убивается или когда связь с связующим берется вниз.
есть еще несколько других:
GC_CONCURRENT срабатывает, когда куча достигла определенного количества объектов для сбора.
GC_EXTERNAL_ALLOC означает, что виртуальная машина пытается уменьшить объем памяти, используемой для собираемых объектов, чтобы освободить место для более не собираемых.
обновление: произошло изменение имени первого события в более поздних версиях Android. Теперь это называется "GC_FOR_ALLOC". Существует также новое событие доступно, хотя очень редко в современных телефонах: GC_BEFORE_OOM означает, что система работает очень мало памяти, и что есть окончательный GC выполняется, чтобы избежать вызова low memory killer.
еще одно место, где сообщения сборщика мусора Dalvik объясняются в этом видео:Google I / O 2011: управление памятью для Android-приложений
примерно через 14 минут после начала презентации он разбивает формат сообщения. (Кстати, это видео имеет действительно хорошую информацию об отладке утечек памяти)
грубо говоря, формат
[Reason] [Amount Freed], [Heap Statistics], [External Memory Statistics], [Pause Time]причина
Роберт / Юку уже дал информацию о значении эти.
Сумма Освобожденного
например.
freed 2125Kпояснений
Куча Статистики
например.
47% free 6214K/11719Kэти цифры отражают условия после запуска GC. "47% бесплатно" и 6214K отражают текущее использование кучи. 11719K представляет общий размер кучи. Из того, что я могу сказать, куча может расти/сжиматься, поэтому у вас не обязательно будет OutOfMemoryError, если вы достигнете этого предела.
Внешняя Память Статистика
например
external 7142K/8400KПримечание: это может существовать только в pre-Honeycomb версии Android (pre 3.0).
перед Honeycomb растровые изображения выделяются внешними для вашей виртуальной машины (например, Bitmap.createBitmap () выделяет растровое изображение внешне и только выделяет несколько десятков байт в локальной куче). Другие примеры внешних распределений предназначены для java.НИО.Объектов ByteBuffer.
Пауза Времени
если это параллельное событие GC, будет два время указано. Один-для паузы перед GC, один-для паузы, когда GC в основном делается. Е. Г.
paused 3ms+5msдля неконкурентных событий GC существует только одно время паузы, и обычно оно намного больше. Е. Г.
paused 87ms
Я также нашел это в источниках Android,
dalvik/vm/alloc/Heap.h. Пусть это будет полезно.typedef enum { /* Not enough space for an "ordinary" Object to be allocated. */ GC_FOR_MALLOC, /* Automatic GC triggered by exceeding a heap occupancy threshold. */ GC_CONCURRENT, /* Explicit GC via Runtime.gc(), VMRuntime.gc(), or SIGUSR1. */ GC_EXPLICIT, /* GC to try to reduce heap footprint to allow more non-GC'ed memory. */ GC_EXTERNAL_ALLOC, /* GC to dump heap contents to a file, only used under WITH_HPROF */ GC_HPROF_DUMP_HEAP } GcReason;
Comments