Как Garbage Collector определяет мусорный объект

«Как Garbage Collector определяет мусорный объект» — вопрос из категории Управление памятью, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Garbage Collector в Android (начиная с ART) использует алгоритм Mark-and-Sweep:

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

  2. Sweep (Очистка)
    Удаляет все объекты, которые не были помечены (недостижимые).

Пример утечки памяти:

class LeakyActivity : Activity() {
    private val leak = SomeSingleton.getInstance(this) // Активность удерживается синглтоном
}

Нюансы:

  • Generational Collection – объекты делятся на молодые (часто удаляются) и старые (редко).
  • Concurrent GC – работает параллельно с приложением, минимизируя лаги.
  • Finalization – перед удалением вызывается finalize(), но это deprecated с API 28.

Для отладки утечек используйте LeakCanary или Android Profiler.