Думайте о молодом поколении как о стеке.Объекты размещаются в текущем указателе стека, а указатель перемещается в соответствии с размером объекта, который был выделен (это действительно быстро).
Когда указатель достигает верхней части диапазона памяти пространства Eden, необходим незначительный сборщик мусора.Чтобы отследить все живые объекты, сборщик начнет с создания корневого набора.Это список всех объектов, напрямую доступных из вашей программы.Сборщик делает это путем сканирования регистров и стека программ в поисках ссылок на объекты.Каждый из этих объектов будет помечен как действующий, а затем будет проверен на предмет ссылок на объекты, которые они содержат для переменных, которые вы в них определяете.Это происходит рекурсивно, пока все объекты, к которым можно получить доступ из вашего кода, не будут помечены.
По завершении все живые объекты в пространстве Эдема копируются в пустое (в) пространство выживших.Также в это время любые объекты, которые все еще живут в занятом (из) пространстве выживших, будут скопированы в пространство для выживших, если они не достигли порога владения, и в этом случае они повышаются (копируются) в старое поколение.
Чтобы ответить на ваш вопрос более конкретно, время, которое объект проводит в молодом поколении, будет зависеть от нескольких факторов из-за алгоритма, описанного выше.
- Насколько велико пространство Эдема (чем больше, тем больше времени потребуется для заполнения)
- Как быстро вы создаете новые объекты (чем быстрее вы это делаете, тем быстрее будет заполняться пространство Эдема).
- порог владенияЭто то, сколько раз объект будет скопирован между пространствами выживших, прежде чем он будет переведен в старое поколение.
- Размер пространств выживших также будет играть роль, поскольку объекты будут продвигаться быстрее, если они заполнятся
Коллекция старого поколения может использовать один из нескольких различных алгоритмов, но для определения того, какие объекты еще живы, используется тот же подход, что и для молодого поколения, т.е. создать корневой набор и затем рекурсивно сканировать все ссылки на объекты.