Ответ 1
Точное определение и реализация safepoint
изменяется от одной реализации виртуальной машины к другой, но, учитывая Hotspot VM, вы можете найти хорошее определение в: Safepoints в HotSpot JVM.
Глоссарий HotSpot говорит:
Точка во время выполнения программы, при которой известны все корни GC, и содержимое содержимого кучи согласовано. С глобальной точки зрения все потоки должны блокироваться в безопасном месте до запуска GC.
Как правило, safepoint реализуется посредством JVM, вводящего проверку safepoint в метод, большинство сайтов вызовов квалифицируются как safepoints - при достижении проверки safepoint поток проверяет, требуется ли safepoint (например, FullGC запланировано), если да, то поток блокирует. Когда все потоки в блоке VM, вы достигли safepoint, где все объекты в виртуальной машине достижимы. Затем выполняется операция VM, которая запросила безопасное соединение (например, FullGC), после чего потоки возобновляются.
Проверьте список операций VM, требующих safepoint: Безопасность: Safepoints.
Вы можете изучить поведение safepoint в Hotspot с помощью -XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1
.