Удалит ли Garbage Collector два объекта ссылающихся друг на друга

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

Ответ

Да, GC удалит такие объекты, если на них нет внешних ссылок. В Java/Android используется алгоритм mark-and-sweep, который определяет достижимость объектов. Если два объекта ссылаются только друг на друга, но из "корневых" точек (например, активных потоков, статических полей) до них нельзя добраться, они будут помечены как недостижимые и удалены.

Пример:

class Node {
    Node next;
}

Node a = new Node();
Node b = new Node();
a.next = b;
b.next = a;
a = null;
b = null;
// Теперь GC может удалить оба объекта