Вопрос проверяет понимание алгоритмов обнаружения мусора (включая циклические ссылки).
Да, сборщик мусора удалит такие объекты. Современные GC (например, G1) определяют недостижимость через достижимые корни (GC roots), а не через подсчёт ссылок.
Как это работает:
Объекты A и B ссылаются друг на друга, но нет внешних ссылок на них.
GC Roots (например, стек потоков, статические поля) не содержат ссылок на A или B.
Алгоритм 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 соберёт a и b