CLR использует технику, известную как разметка и разметка.
Как часть этой техники, каждый объект можно считать изначально помеченным для сбора.Затем CLR проходит через каждый доступный объект, начиная с ваших глобальных переменных (статические поля и т. Д.) В качестве корней, и очищает отметку на каждом доступном для посещения объекте.Затем он сметает оставшиеся отмеченные объекты.
Имейте в виду, что эта "маркировка" является концептуальной;в действительности, объекты, скорее всего, добавляются в набор сбора.
В случае зацикливания объектов, на которые ссылаются сами, в приложении не будет найдено никаких ссылок на объекты, поэтому алгоритм никогда не достигнетэти объекты, чтобы «снять отметку» с них.