Автоматический сборщик мусора в .NET работает, периодически сканируя память приложения для определения, какие объекты всё ещё используются, а какие больше не нужны. www.geeksforgeeks.org Объекты, которые больше не используются, помечаются для сборки мусора, и их память автоматически освобождается сборщиком. www.geeksforgeeks.org
Процесс работы сборщика мусора включает несколько этапов: www.geeksforgeeks.org
- Этап разметки. www.geeksforgeeks.org Создаётся список всех действующих объектов путём следования ссылкам от всех корневых объектов. www.geeksforgeeks.org Все объекты, которых нет в списке активных объектов, потенциально удаляются из памяти кучи. www.geeksforgeeks.org
- Этап перемещения. www.geeksforgeeks.org Ссылки на все объекты, которые были в списке всех действующих объектов, обновляются таким образом, чтобы они указывали на новое местоположение, куда объекты будут перемещены на этапе уплотнения. www.geeksforgeeks.org
- Фаза уплотнения. www.geeksforgeeks.org Куча уплотняется по мере освобождения пространства, занятого мёртвыми объектами, и перемещения оставшихся живых объектов. www.geeksforgeeks.org Все живые объекты, оставшиеся после сборки мусора, перемещаются в более старый конец кучи памяти в их первоначальном порядке. www.geeksforgeeks.org
Для эффективной работы с объектами различной «старости» сборщик мусора использует концепцию поколений (поколения 0, 1 и 2): pikabu.ru
- При создании объекты помещаются в поколение 0. pikabu.ru
- Когда поколение 0 заполнено — запускается сборка мусора. pikabu.ru Неиспользуемые объекты удаляются, оставшиеся перемещаются в поколение 1. pikabu.ru
- Аналогично происходит сборка мусора, когда заполнено поколение 1. pikabu.ru Все выжившие объекты перемещаются в поколение 2. pikabu.ru Затем происходит сборка мусора в поколении 0. pikabu.ru
- Когда заполнено поколение 2, происходит полная сборка мусора. pikabu.ru Сперва очищается поколение 2, а затем 1 и 0. pikabu.ru Если после этого недостаточно места для новых объектов — происходит исключение OutOfMemory. pikabu.ru
- В самом конце происходит фаза сжатия, в которой сборщик мусора перемещает живые объекты так, чтобы они располагались в памяти непосредственно друг за другом. pikabu.ru