Когда поколение 0, поколение 1, поколение 2 срабатывают точно? - PullRequest
5 голосов
/ 27 октября 2011

Gen 0: Итак, я прочитал, что поколение 0 срабатывает, когда поколение 0 превышает порог размера. Но я также читал, что GC не выполняется в «новом», потому что «новый» просто перемещает адрес вперед. Затем, когда он проверяет, что он превысил пороговое значение для запуска GC 0 поколения?

Генерал 1/2: Есть ли у поколения 1/2 их собственный порог размера, который вызывает GC? Когда они считают порог? Это момент, когда выжившие повышаются до ген?

Означает ли это, что для ГК 1-го поколения он сначала проверяет 0-й, а затем переводит их в 1-й, только чтобы обнаружить, что 1-й поколения превысил порог, и поэтому он проверяет 1-й и снова проверяет 0-го?

И означает ли это, что GC 2-го поколения должен произойти, он сначала проверяет Gen 0, затем переводит их в Gen 1, только чтобы обнаружить, что Gen 1 превысил порог, и поэтому он проверяет Gen 1, и снова проверяет Gen 0. Затем повышает 0-го до 1-го и 2-го поколения только для того, чтобы обнаружить, что 2-е поколение превысило пороговое значение, и поэтому снова проверяет 2-е поколение, 1-е поколение и снова 0-е поколение?

Ответы [ 2 ]

1 голос
/ 27 октября 2011

После инициализации CLR объекты, которые сначала добавляются в управляемую кучу, определяются как Gen0.Когда GC выполнится, генерация объектов, которые не были собраны, увеличится на 1 уровень и станет Gen1.Объекты, созданные после этого, все еще являются Gen0.При создании объектов: Только если памяти, освобожденной объектами Gen0, недостаточно для создания новых объектов, а объем в Gen1 превышает емкость, GC будет собирать объекты Gen0 и Gen1.После этого объекты, не собранные в Gen1, станут Gen2, а объекты, не собранные в Gen0, станут Gen1.Объекты, созданные после этого, все еще являются Gen0.

0 голосов
/ 27 октября 2011

Gen 0 срабатывает, когда виртуальной машине не хватает памяти.
Поколение 1 срабатывает, когда Поколение 0 не освобождает достаточно памяти и все еще не хватает памяти. Gen n срабатывает, когда Gen n - 1 не освобождает достаточно памяти и все еще недостаточно памяти.
Если он достигает последнего поколения и все еще не освободил достаточно памяти, выделяется новая память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...