В чем преимущество сбора объектов с кучей больших объектов в Generation 2? - PullRequest
1 голос
/ 24 июня 2011

Я понимаю, что сборка мусора поколений повышает производительность, так как

  1. Любой объект необходимо будет перемещать не более двух раз в коллекциях не Gen2, а коллекции Gen2 встречаются редко.
  2. Если система выполняет коллекцию Gen0, а объект (Gen1 или Gen2) не был записан со времени последней коллекции Gen0, системе не придется сканировать этот объект, чтобы пометить в нем какие-либо ссылки (так как они будут все будут Gen1 или Gen2). Аналогично, если система выполняет коллекцию Gen1, она может игнорировать любой объект, не записанный со времени последней коллекции Gen1. Поскольку большая часть работы по сборке мусора заключается в сканировании объектов, сокращение времени сканирования является большой победой.

Мне любопытно, однако, какое преимущество в производительности может быть при пропуске больших объектов из сборки мусора Gen1? Большие объекты не перемещаются, даже когда они сканируются сборщиком мусора, и я ожидаю, что коллекции Gen1 все равно должны будут сканировать свое содержимое, если только или до тех пор, пока две последовательные коллекции Gen1 не возникнут без промежуточных записей объектов.

Есть ли какое-то преимущество в производительности, которого я не вижу?

1 Ответ

0 голосов
/ 24 июня 2011

Мне любопытно, однако, какое преимущество в производительности может быть при пропуске больших объектов из сборки мусора Gen1?

Есть две вещи -

Во-первых, у крупных объектов (достаточно больших, чтобы быть на ЛОХ), как правило, более длительный срок службы. Короткоживущие крупные объекты встречаются редко, и в тех случаях, когда это необходимо, вы обычно можете использовать их повторно. Не сканируя, вы эффективно избегаете сканирований, которые почти всегда приводят к сохранению объектов в любом случае. Это, как правило, дает вам победу в перф.

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

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