Как сборщик мусора определяет время сбора мусора и сколько времени объект передается от молодого поколения к старому поколению? - PullRequest
0 голосов
/ 03 декабря 2018

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

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Думайте о молодом поколении как о стеке.Объекты размещаются в текущем указателе стека, а указатель перемещается в соответствии с размером объекта, который был выделен (это действительно быстро).

Когда указатель достигает верхней части диапазона памяти пространства Eden, необходим незначительный сборщик мусора.Чтобы отследить все живые объекты, сборщик начнет с создания корневого набора.Это список всех объектов, напрямую доступных из вашей программы.Сборщик делает это путем сканирования регистров и стека программ в поисках ссылок на объекты.Каждый из этих объектов будет помечен как действующий, а затем будет проверен на предмет ссылок на объекты, которые они содержат для переменных, которые вы в них определяете.Это происходит рекурсивно, пока все объекты, к которым можно получить доступ из вашего кода, не будут помечены.

По завершении все живые объекты в пространстве Эдема копируются в пустое (в) пространство выживших.Также в это время любые объекты, которые все еще живут в занятом (из) пространстве выживших, будут скопированы в пространство для выживших, если они не достигли порога владения, и в этом случае они повышаются (копируются) в старое поколение.

Чтобы ответить на ваш вопрос более конкретно, время, которое объект проводит в молодом поколении, будет зависеть от нескольких факторов из-за алгоритма, описанного выше.

  1. Насколько велико пространство Эдема (чем больше, тем больше времени потребуется для заполнения)
  2. Как быстро вы создаете новые объекты (чем быстрее вы это делаете, тем быстрее будет заполняться пространство Эдема).
  3. порог владенияЭто то, сколько раз объект будет скопирован между пространствами выживших, прежде чем он будет переведен в старое поколение.
  4. Размер пространств выживших также будет играть роль, поскольку объекты будут продвигаться быстрее, если они заполнятся

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

0 голосов
/ 03 декабря 2018

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

Пространство выделения молодого поколения обычно довольно мало и обычно быстро заполняется - один раз в секунду или около того, в зависимости оттип приложения.Поскольку подавляющее большинство объектов имеет очень короткое время жизни, среда выполнения просто ищет несколько объектов, которые все еще достижимы, и перемещает их в пространство выживших.Затем все пространство молодого поколения очищается, и распределение начинается снова.

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

Еслиобъект недоступен при запуске кода, он фактически больше не существует.Не думайте, что сборщик мусора ищет поиск объектов, которые более недоступны, и удаляет их - вместо этого правильная ментальная модель состоит в том, что сборщик мусора постоянно сохраняет объекты, которые все еще доступныот смерти .Если сборщик мусора перестанет обращать внимание на объект, он исчезнет сам по себе: память будет использоваться повторно для какой-то другой цели.

Вам, вероятно, понравятся серии постов Рэймонда Чена, начинающиеся с Все думают о сборке мусора неправильно и Когда объект становится доступным для сборки мусора?

...