.NET использует алгоритм mark-and-sweep для определения объектов, которые больше не нужны и готовы к удалению.
Сборщик мусора начинает с определения корневых объектов, которые включают:
Из этих корневых объектов сборщик мусора проходит по всем доступным ссылкам и помечает каждый достижимый объект. Это создаёт полную карту всех объектов, которые используются твоим приложением.
После завершения маркировки любой объект, который остался непомеченным, считается недостижимым и становится кандидатом на удаление сборщиком мусора. Сборщик мусора затем удаляет эти недостижимые объекты из памяти, освобождая место в куче, которое они занимали.
.NET понимает, что объект готов к удалению, когда у него нет активных ссылок от корневых объектов или от других объектов, на которые ссылаются. Если сборщик мусора не может проследить путь от какого-либо корневого объекта к конкретному объекту во время фазы маркировки, этот объект автоматически считается подлежащим удалению из памяти.
Garbage collector сначала идентифицирует корневые объекты, к которым относятся глобальные переменные, статические объекты, локальные переменные в стеке и регистры CPU, а затем проходит по их ссылкам, чтобы отметить все доступные объекты.
Новый — ещё не проверен сообществом
Вы