Как корни из стека управляются в G1 GC - PullRequest
1 голос
/ 03 августа 2020

Как Java управляет Root объектами из стека в сборщике мусора G1? Обходит ли он стеки всех потоков-мутаторов во время сбора мусора (молодая или смешанная фаза) или есть какие-то другие структуры данных, похожие на запоминаемые наборы (используемые для сохранения ссылки на указатели между поколениями), чтобы сэкономить время? Есть ли такая же документация.

1 Ответ

1 голос
/ 15 августа 2020

Стеки ниток сканируются всегда, а не только в G1; но afaik во всех остальных сборщиках мусора, реализованных на JVM. GC должен начинаться с некоторых известных корней, чтобы определить, что живо, а что нет. В случае любого java G C, эти корни состоят из различных частей, среди прочего: стеки ниток.

В каждом цикле они сканируются; в конце концов, они будут изменены и потенциально будут разными в каждом цикле. Болезненная часть состоит в том, что , пока это не реализовано , это фаза остановки мира. А фазы STW могут стать большими из-за безопасного опроса точек или количества потоков. В сценарии реальной жизни ios (по крайней мере, в тех, с которыми я был связан), это не проблема; это быстрый процесс (с Shenandoah 2.0, я видел максимум 15 ms пауз).

remembered sets как-то выполняет другую роль .

...