Ответ
Современные сборщики мусора (GC), такие как в .NET или JVM, корректно обрабатывают циклические ссылки, включая самоссылки. Алгоритм mark-and-sweep определяет достижимость объектов, начиная от корневых ссылок (например, статических полей, локальных переменных в стеке, ссылок в регистрах CPU). Если объект с самоссылкой недостижим из любого корня, он будет помечен как мусор и удален.
Пример в C#:
public class Node
{
public Node SelfReference { get; set; }
}
// Создание и изоляция объекта с самоссылкой
var node = new Node();
node.SelfReference = node; // Циклическая ссылка
node = null; // Объект больше не достижим из корней
// При следующей сборке мусора объект будет удален,
// несмотря на внутреннюю ссылку на себя.
Почему это работает: GC обходит граф объектов, помечая все, что достижимо из корней. Недостижимые циклы ("острова изоляции") не помечаются и в фазе очистки (sweep) освобождаются. Это фундаментальное свойство алгоритмов сборки мусора, основанных на достижимости.