Когда память, выделенная процессом .NET, возвращается в Windows

The Setup

. NET выделяет память для кучи каждого поколения (0, 1, 2, LOH) сегментами, чтобы получить непрерывный блок памяти при запуске и при попытке удовлетворить запрос на выделение после сбора.

Эта память, выделенная для каждой кучи, вероятно, выровняется по мере «прогрева» приложения, за исключением, возможно, поколения 2 и кучи больших объектов. Во время сборки мусора каждая куча (0, 1, 2) очищается и уплотняется, за исключением кучи больших объектов (LOH), которая просто очищается.

Я понимаю, что часть коллекции «очистка» означает, что сборщик мусора определяет, какие объекты больше не являются корневыми и доступны для сбора (или завершения), и что «компактный» означает, что адреса, которые все еще существуют в куче реорганизованы так, чтобы доступная оставшаяся куча имела больше доступной непрерывной памяти.

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

Вопрос

Мой вопрос сводится к тому, что происходит с этой памятью в каждом куча, то есть не будет больше использоваться приложением (зафиксировано), но по-прежнему зарезервирована .NET? Когда он вернется в ОС? .

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

Нет заблокированного финализатора, и все выглядит нормально для процесса - он мог работать несколько недель, прежде чем вызвал предупреждение монитора (например).

Попытка уточнить вопрос, если вы читаете Tess .NET Управление памятью - аналогия с рестораном , если таблицы представляют собой сегменты кучи, теряет ли ресторан когда-либо таблицы (например, свободные сегменты кучи)?

Править

  1. Удалена сбивающая с толку ссылка на рабочий набор и цыплят
  2. Добавлена ​​ссылка на аналогию с рестораном Тесс

20
задан Zach Bonham 14 March 2011 в 00:02
поделиться