Количество потоков сборщика мусора .NET - PullRequest
2 голосов
/ 28 июля 2011

Сколько из них работает в любой момент времени? Это один для всего Framework или один для каждого .NET управляемого процесса? Когда физической памяти достаточно, можно ли предположить, что нет активных потоков GC?

Ответы [ 3 ]

4 голосов
/ 28 июля 2011

Существует два режима сборки мусора .NET: сервер и рабочая станция.Для рабочей станции у вас будет один поток сборщика мусора на процесс .NET.Если вы используете режим сбора мусора на сервере, у вас будет один поток сборщика мусора на процесс и процессор.Поэтому, если у вас есть процесс .NET, работающий в качестве сервера на 4-ядерном процессоре, у вас будет 4 потока сборщика мусора.

Также для .NET 4 существует новый режим «фоновой сборки мусора».Он будет собирать элементы в поколении 0 и 1. одновременно.

Сборка мусора может произойти, даже если у вас достаточно физической памяти..NET выделит память для своей кучи в блоках.В общих чертах, происходит что-то вроде этого: когда требуется new памяти, .NET попытается найти блок памяти в своей куче, который будет соответствовать требуемому фрагменту памяти.В случае неудачи будет запущен GC, чтобы попытаться собрать ненужные объекты.Только если это не освобождает достаточно памяти, новый блок памяти будет выделен для кучи из базовой ОС.

Подробности в статье MSDN, Основы сборки мусора .

При всем этом, я полностью согласен с одним из других ответов на этот вопрос: Не делайте никаких предположений в отношении GC.Для вашего приложения не должно иметь значения, как распределяется и собирается память.

2 голосов
/ 28 июля 2011

Хотя я не знаю, сколько потоков использует GC, для каждого процесса создается новый экземпляр среды выполнения .NET (framework). Время выполнения .NET каждого процесса не зависит от другого. Следовательно, для каждого процесса существует отдельный экземпляр GC (и, следовательно, поток).

ГХ будет продолжать собирать и очищать память даже в среде с избытком доступной физической памяти. Хотя я точно не знаю (без исходного кода или документации), сборщик мусора может очищать объекты менее агрессивно, чем в среде с нехваткой памяти.

1 голос
/ 28 июля 2011

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

...