Соберет ли Garbage Collector циклические ссылки

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

Ответ

Да, Garbage Collector (GC) в Android (через ART/Dalvik) умеет обрабатывать циклические ссылки. Он использует алгоритм mark-and-sweep, который помечает достижимые объекты, начиная с GC Roots (статические поля, активные потоки и т.д.), а все непомеченные (включая циклические ссылки без внешних связей) удаляет.

Пример:

class Node(var next: Node? = null)

fun createCycle() {
    val a = Node()
    val b = Node(a)
    a.next = b // Цикл: a → b → a
}

После выхода из createCycle() оба объекта станут недостижимыми и будут собраны GC, несмотря на циклическую ссылку.