Почему CMS останавливает мир для начальной отметки, а не для фазы развертки?

Есть 4 этапа высокого уровня CMS работает для полного GC

  1. Начальная оценка:- Останови мир (STW)
  2. Параллельная маркировка:- Запускать одновременно
  3. Замечание:- STW
  4. Параллельная подметание:- Запуск одновременно

Я получил высокий уровень понимания CMS после прочтения

http://www.tikalk.com/java/garbage-collection-serial-vs-parallel-vs-concurrent-mark-sweep/ и https://plumbr.eu/handbook/garbage-collection-algorithms-implementations/concurrent-mark-and-sweep

Мой вопрос: почему начальная стадия оценки STW для Initial Mark фаза? Разве у нас не может быть только фаза Remark в качестве STW, так как это последняя стадия примирения.

Точно так же почему Sweeping phase не STW, так как для этого потребуется сжатие, что означает изменение физического местоположения объекта. Так что, если объект упоминается приложением и параллельный поток меняет физическое местоположение, не будет ли это проблемой?

Я знаю, что здесь что-то упущено, но что это?

1 ответ

Я предполагаю, что вы имеете в виду реализацию Concurrent Mark Sweep в Oracle HotSpot JVM.

Начальная фаза отметки включает сканирование молодого пробела (любая ссылка от старого к старому является корнем для одновременной отметки). Этап замечания включает в себя ту же операцию.

Теоретически, вы можете опустить STW для начальной метки, так как она сканируется одновременно с риском пропустить несколько корневых файлов (которые будут восстановлены во время финальной реплики в любом случае). Хотя здесь есть недостатки

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

Подметание не требует STW, потому что это не компактно. CMS не уплотняет старое пространство в параллельных циклах.

Вот моя статья, объясняющая природу и асимптотику пауз CMS GC

Другие вопросы по тегам