Стоит ли сначала собирать молодое поколение в полную сборку мусора?

StackOverflow https://stackoverflow.com/questions/219540

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top