Поделиться через


Фоновая сборка мусора

При фоновой сборке мусора сборка эфемерных поколений (0 и 1) выполняется по мере надобности, в ходе выполнения сборки поколения 2. Фоновая сборка мусора выполняется на одном или нескольких выделенных потоках в зависимости от того, относится ли она к рабочей станции или серверной сборке мусора, и применяется только к коллекциям поколения 2.

Фоновая сборка мусора включена по умолчанию. Ее можно включить или отключить с помощью параметра конфигурации gcConcurrent в приложениях .NET Framework или параметра System.GC.Concurrent в приложениях .NET Core и .NET 5 и более поздних версий.

Примечание.

Фоновая сборка мусора заменяет параллельную сборку мусора и доступна в .NET Framework 4 и более поздних версиях. В .NET Framework 4 она поддерживается только для сборки мусора на рабочих станциях. Начиная с .NET Framework 4.5 фоновая сборка мусора доступна для сборки мусора как на рабочих станциях, так и на серверах

Сборка для эфемерных поколений во время фоновой сборки мусора называется высокоприоритетной сборкой мусора. Во время выполнения высокоприоритетных сборок мусора все управляемые потоки приостанавливаются.

Если выполняется фоновая сборка мусора и в поколении 0 размещено достаточное количество объектов, среда CLR выполняет высокоприоритетную сборку мусора для поколения 0 или поколения 1. Выделенный поток фоновой сборки мусора проверяет в частых точках, безопасных для сбора мусора, чтобы определить, не появился ли запрос выполнения высокоприоритетной сборки мусора. В этом случае фоновая сборка мусора приостанавливается, чтобы позволить выполниться высокоприоритетной сборке мусора. После выполнения высокоприоритетной сборки мусора работа выделенного потока фоновой сборки мусора и пользовательских потоков возобновляется.

Фоновая сборка мусора удаляет ограничения на распределение, наложенные параллельной сборкой мусора, так как эфемерные сборки мусора могут выполняться во время фоновой сборки мусора. Фоновая сборка мусора может удалить неиспользуемые объекты в эфемерных поколениях. Она также при необходимости может увеличить кучу во время сборки мусора поколения 1.

Фоновая сборка мусора на рабочих станциях и серверах

Начиная с .NET Framework 4.5 фоновая сборка мусора стала доступна для серверной сборки мусора. Это режим по умолчанию для сборки мусора сервера.

Этот режим функционирует аналогично фоновой сборке мусора рабочей станции, но с некоторыми отличиями.

  • Для фоновой сборки мусора рабочей станции используется один выделенной поток фоновой сборки мусора, тогда как для фоновой серверной сборки мусора используется несколько потоков. Как правило, имеется по одному выделенному потоку для каждого логического процессора.

  • В отличие от потока фоновой сборки мусора рабочей станции у потоков фоновый сборки мусора сервера время ожидания не истекает.

На следующем рисунке показана фоновая сборка мусора рабочей станции в отдельном выделенном потоке:

Background workstation garbage collection

На следующем рисунке показана фоновая сборка мусора сервера в отдельном выделенном потоке:

Background server garbage collection

Параллельная сборка мусора

Совет

Этот раздел касается:

  • .NET Framework 3.5 и более ранних версий в части, относящейся к сборке мусора рабочей станции;
  • .NET Framework 4 и более ранних версий в части, относящейся к серверной сборке мусора.

В более поздних версиях параллельная сборка мусора заменена на фоновую.

При сборке мусора рабочей станции или серверной сборке мусора можно включить параллельную сборку мусора, что позволит потокам работать параллельно с выделенным потоком, выполняющим сборку мусора, в течение большей части продолжительности сборки. Этот вариант влияет только на сборки мусора для поколения 2, сборки для поколений 0 и 1 всегда выполняются непараллельно, так как они заканчиваются быстро.

Параллельная сборка мусора позволяет интерактивным приложениям лучше реагировать, минимизируя паузы для сборки. В течение большей части времени выполнения потока параллельной сборки мусора управляемые потоки могут продолжить выполнение. Это приведет к сокращению пауз во время выполнения сборки мусора.

Параллельная сборка мусора выполняется в выделенном потоке. По умолчанию среда CLR выполняет сборку мусора рабочей станции с выключенной параллельной сборкой мусора, как на компьютерах с одним процессором, так и с несколькими.

На следующем рисунке показана параллельная сборка мусора на отдельном выделенном потоке.

Concurrent Garbage Collection Threads

См. также