Garbage Collector C#

Здравствуйте! Очень интересует тема сборки мусора.
Опишите пожалуйста работу сборщика мусора, как происходит сам процесс сборки, по какому сценарию GC собирает ресурсы и как это всё происходит в целом?

GC (Garbage Collection — сборка мусора) — высокоуровневая абстракция, которая избавляет разработчиков от необходимости заботиться об освобождении управляемой памяти.
Во время процесса сборки мусора исполняющая среда будет исследовать объекты в куче, чтобы определить, являются ли они по-прежнему достижимыми (т. е. корневыми) для приложения. Для этого среда CLR будет создавать графы объектов, представляющие все достижимые для приложения объекты. Кроме того, следует иметь в виду, что сборщик мусора никогда не будет создавать граф для одного и того же объекта дважды, избавляя от необходимости выполнения подсчета циклических ссылок, который характерен для программирования в среде COM.
Фазы сборки мусора:

  1. Маркировка (mark phase).
  2. Чистка (sweep phase).
  3. Сжатие (compact phase).
    Поколения объектов:
  4. Нулевое
  5. Первое
  6. Второе
    Краткий принцип работы сборщика мусора:
    "Работает приложение, не хватает памяти для того, чтобы выделить следующий объект, и происходит запуск GC. При этом все активные потоки приложения приостанавливаются. Это самый простой процесс сборки мусора — workstation non-concurrent mode."

источник: https://dou.ua/lenta/articles/principles-of-garbage-collection/