Во время STW Java-потоки приостанавливаются в безопасных для JVM точках, чтобы GC мог выполнить фазы, требующие согласованного состояния. Набор действий зависит от сборщика: корни, перемещение или завершение маркировки.
Что происходит в рамках Stop-the-World паузы? Почему требуется остановка потоков при работе garbage collector?
Во время STW Java-потоки приостанавливаются в безопасных для JVM точках, чтобы GC мог выполнить фазы, требующие согласованного состояния. Набор действий зависит от сборщика: корни, перемещение или завершение маркировки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Во время STW Java-потоки приостанавливаются в безопасных для JVM точках, чтобы GC мог выполнить фазы, требующие согласованного состояния. Набор действий зависит от сборщика: корни, перемещение или завершение маркировки.
Если объекты перемещаются, ссылки должны корректно обновиться, пока приложение не наблюдает промежуточное состояние. Concurrent-сборщики выполняют значительную часть работы вместе с приложением, используя barriers, но всё равно могут иметь короткие паузы. Parallel GC уменьшает время некоторых фаз несколькими GC-потоками, не делая их автоматически concurrent. Safepoint нужен и не только для GC.