Стоит ли сначала собирать молодое поколение в полную сборку мусора? - PullRequest
6 голосов
/ 20 октября 2008

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

Сейчас я использую двухшаговый метод, поскольку его было немного проще реализовать, но, возможно, одношаговый метод был бы более эффективным?

Сборщик мусора не копирует, если это имеет значение.

1 Ответ

5 голосов
/ 20 октября 2008

Это зависит от того, как часто вы продвигаете выживших. Если вы будете продвигать их часто, то, похоже, вы добьетесь большего успеха, выполнив GC за один раз. Если нет, то похоже, что они будут очень похожи.

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

...