2.7 KiB
aliases | tags | date | zero-link | parents | linked | ||
---|---|---|---|---|---|---|---|
|
2023-11-12 |
|
Safe Point — это такая точка в выполнении программы, в которой все потоки приложения находятся в известных и устойчивых состояниях, что позволяет сборщику мусора безопасно анализировать и изменять структуры данных памяти, такие как куча (heap).
Во время выполнения программы на Java, потоки могут быть остановлены сборщиком мусора, чтобы обеспечить согласованность данных в памяти. Однако останавливать их можно только в определённых местах, которые называются Safe Points. Это необходимо для того, чтобы гарантировать, что потоки не находятся в середине операции, которая может изменять состояние памяти, и для того, чтобы у сборщика мусора была возможность корректно анализировать достижимые объекты и ссылки между ними.
Достижение Safe Point может быть инициировано в следующих ситуациях:
- Перед выполнением операции сбора мусора.
- При выполнении некоторых системных вызовов.
- Перед выполнением длительных операций, которые не должны прерываться.
Для приостановки потоков и достижения Safe Point используются различные механизмы в зависимости от конкретной реализации JVM и сборщика мусора. Например, потоки могут проверять специальные флаги в контрольных точках в своём коде (polling) или могут быть остановлены с помощью сигналов уровня операционной системы.
- Синхронизация: останавливает все треды, и убеждается, что все они остановлены
- VM Operation. Например, сборка мусора.
- Cleanup. Очистка после VM Operatoin
Команды JVM
- -XX:+PrintSafepointStatistics