Какие знаешь этапы сборки мусора у Garbage Collector

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

Ответ

Garbage Collector в Android (ART/Dalvik) использует поколенческую сборку мусора. Основные этапы:

  1. Marking - GC помечает все достижимые объекты, начиная с GC Roots (активные потоки, статические поля и т.д.)

  2. Sweeping - удаляются неотмеченные (недостижимые) объекты

  3. Compacting (опционально) - живые объекты перемещаются для дефрагментации кучи

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

class LeakyActivity : Activity() {
    private val leak = mutableListOf<Any>()

    override fun onCreate() {
        repeat(100_000) {
            leak.add(ByteArray(1024)) // Утечка - список держит ссылки
        }
    }
}

Нюансы:

  • Молодое поколение (young gen) собирается чаще (minor GC)
  • Старое поколение (old gen) собирается реже (major GC)
  • Stop-the-world паузы (в ART короче, чем в Dalvik)