Что такое Mark-and-sweep

«Что такое Mark-and-sweep» — вопрос из категории Управление памятью, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Mark-and-sweep — алгоритм сборки мусора в Java (и Android). Работает в 2 этапа:

  1. Mark — обходит все достижимые объекты (через корни GC) и помечает их как активные.
  2. Sweep — удаляет неотмеченные объекты, освобождая память.

Нюансы:

  • Остановка мира (STW) — приложение может зависнуть на время работы GC.
  • Фрагментация — освобожденная память может быть несмежной.

Пример:

// Объект станет недостижим после выхода из метода
void createGarbage() {
    Object temp = new Object(); // Будет удален при следующем sweep
}

В Android оптимизирован через Generational GC и ART (вместо Dalvik).