Ответ
Mark-and-sweep — алгоритм сборки мусора в Java (и Android). Работает в 2 этапа:
- Mark — обходит все достижимые объекты (через корни GC) и помечает их как активные.
- Sweep — удаляет неотмеченные объекты, освобождая память.
Нюансы:
- Остановка мира (STW) — приложение может зависнуть на время работы GC.
- Фрагментация — освобожденная память может быть несмежной.
Пример:
// Объект станет недостижим после выхода из метода
void createGarbage() {
Object temp = new Object(); // Будет удален при следующем sweep
}
В Android оптимизирован через Generational GC и ART (вместо Dalvik).