Что такое GC Roots

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

Ответ

GC Roots — это набор объектов, которые гарантированно доступны в приложении и служат отправными точками для сборщика мусора (GC) при определении достижимых объектов. Если объект не достижим через цепочку ссылок от GC Roots, он считается мусором и удаляется.

Основные типы GC Roots в Android:

  • Активные потоки (Thread)
  • Статические поля (static variables)
  • Локальные переменные в стеке (local variables)
  • JNI references
  • Системные классы загрузчика (ClassLoader)

Пример:

class MyActivity : Activity() {
    companion object {
        val staticList = mutableListOf<String>() // GC Root (static)
    }

    private val instanceList = mutableListOf<String>() // Не GC Root

    override fun onCreate() {
        val localList = mutableListOf<String>() // GC Root (пока метод выполняется)
    }
}