Технические подробности Android Garbage Collector - PullRequest
25 голосов
/ 27 января 2011

Поскольку я занимаюсь исследованием сходств / различий различных мобильных платформ, одним из исследуемых аспектов является управление памятью.Таким образом, меня интересует более подробная техническая информация о различных механизмах.

В частности, например, , какой тип сборщика мусора использует Android ?
( [GoogleОбсуждение групп] предполагает, что он использует механизм «отслеживания», но я был бы признателен за «более официальный» источник, который я мог бы процитировать, плюс надежду найти там информацию , какое влияние тип может иметь напрограммист ).

Также среди моих вопросов , каким образом GC в Android 3.0 (Honeycomb) был специально настроен для использования нескольких процессоров ?
[Руководство разработчика Android] предполагает, что

Android 3.0 - это первая версия платформы, предназначенная для работы на архитектурах с одним или несколькими ядрами.Различные изменения в Dalvik VM, библиотеке Bionic и других местах добавляют поддержку симметричной многопроцессорной обработки в многоядерных средах.Эти оптимизации могут принести пользу всем приложениям, даже тем, которые являются однопоточными.Например, с двумя активными ядрами однопоточное приложение может по-прежнему видеть повышение производительности, если сборщик мусора Dalvik работает на втором ядре.Система организует это автоматически. "

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

Любой такой вклад приветствуется.

Спасибо!

1 Ответ

26 голосов
/ 29 января 2011

Чтобы ответить на один из ваших вопросов, Dalvik VM действительно использует трассирующий сборщик мусора, используя подход Mark and Sweep .

Согласно Архитектура виртуальной машины Dalvik :

Текущая стратегия в сборщике мусора Dalvik состоит в том, чтобы сохранять метки или биты, которые указывают, что определенный объект «достижим» и, следовательно, не долженбыть мусором, отделенным от другой кучи памяти.

Начиная с Android 5.0 (Lollipop) и далее, Dalvik был заменен на Android Runtime (ART) .

Google говорит следующее об изменениях в сборщике мусора с Dalvik на ART ( source ) :

Улучшенная сборка мусора

Сборка мусора (GC) может ухудшить производительность приложения, что приведет к прерывистому отображению, плохой отзывчивости пользовательского интерфейса и другим проблемам.ART улучшает сборку мусора несколькими способами:

  • Одна пауза GC вместо двух
  • Параллельная обработка во время оставшейся паузы GC
  • Коллектор с меньшим общим временем GC дляособый случай очистки недавно выделенных, недолговечных объектов
  • Улучшенная эргономика сбора мусора, повышающая своевременность одновременных сборок мусора, что делает события GC_FOR_ALLOC чрезвычайно редкими в типичных случаях использования Сжатие GC для уменьшения использования фоновой памяти и фрагментации

См. Также:

...