Задать вопрос
@annaTomas

Как работает выделения памяти под поколения объектов в куче в C#?

Имеется вопрос по части сборки мусора в C#, как я понял память выделяемая под хип зависит от разрядности процесса,
Для 32 - 1.5гб
Для 64 - 8тб
У каждого из 3 поколений объектов в хипе имеются свои ограничения по памяти, и когда память выделяемая под 0 поколение заканчивается, то бишь не удается разместить новый объект, происходит сборка мусора, все выжившие объекты из 0 поколения переходят в поколение 1, первый вопрос - отчего зависит выделяемая память под определенные поколения и в каких диапазонах оно может варьироваться, занимается ли этим исключительно CLR или можно вручную выставить необходимое количество памяти в ручную и что произайдет если нам нужно будет содержать очень большое количество объектов, изменит ли CLR динамически место для каждого поколения?

Далее, у меня есть некоторое противоречие по алгоритму работы GC, как я понял, GC вызывается(во время работы приложения) из-за нехватки памяти в 0 поколении, и если после его очистки ему не хватает памяти то только тогда он переходит к следующему поколению, но с другой стороны, GC при очистке мусора может "запомнить" что например в 1 поколении уже нету места и при следующем заполнении поколения 0 очистит сначала первое 1 а потом уже 0. Вообщем второй вопрос - как это на самом деле работает, да и чем поможет очистка поколения 1 или 2 если нам нужно разместить новый объект в поколении 0?
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Средний 4 комментария
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы