GC, используемый .NET, является трассирующим сборщиком мусора (термин "Mark and Sweep" - связанный термин)
Объекты памяти считаются "мусором", если их больше нельзядостигаются следующими указателями / ссылками из незаполненной части памяти вашей программы.
Чтобы определить, что достижимо, а что нет, GC сначала устанавливает набор корневых ссылок / указателей.Это ссылки, которые гарантированно достижимы.Примеры включают локальные переменные и статические поля.
Затем он рекурсивно следует этим ссылкам (отслеживает) и помечает каждый объект, с которым встречается, как «не мусор».Как только у него заканчиваются ссылки, которым нужно следовать, он входит в фазу «очистки», где освобождается каждый объект, который не был помечен как «не мусор» (который может включать в себя вызов финализатора объекта).
Так что, как толькопоскольку ни один из объектов в вашем «объектном кольце» не упоминается ни одной частью ваших «живых» объектов, он будет собирать мусор.