digital-garden/knowledge/dev/java/Safe Point.md

2.8 KiB
Raw Blame History

aliases tags date zero-link parents linked
зрелость/🌱
2023-11-12
../../../garden/ru/meta/zero/00 Java разработка

Safe Point — это такая точка в выполнении программы, в которой все потоки приложения находятся в известных и устойчивых состояниях, что позволяет сборщику мусора безопасно анализировать и изменять структуры данных памяти, такие как куча (heap).

Во время выполнения программы на Java, потоки могут быть остановлены сборщиком мусора, чтобы обеспечить согласованность данных в памяти. Однако останавливать их можно только в определённых местах, которые называются Safe Points. Это необходимо для того, чтобы гарантировать, что потоки не находятся в середине операции, которая может изменять состояние памяти, и для того, чтобы у сборщика мусора была возможность корректно анализировать достижимые объекты и ссылки между ними.

Достижение Safe Point может быть инициировано в следующих ситуациях:

  1. Перед выполнением операции сбора мусора.
  2. При выполнении некоторых системных вызовов.
  3. Перед выполнением длительных операций, которые не должны прерываться.

Для приостановки потоков и достижения Safe Point используются различные механизмы в зависимости от конкретной реализации JVM и сборщика мусора. Например, потоки могут проверять специальные флаги в контрольных точках в своём коде (polling) или могут быть остановлены с помощью сигналов уровня операционной системы.

  • Синхронизация: останавливает все треды, и убеждается, что все они остановлены
  • VM Operation. Например, сборка мусора.
  • Cleanup. Очистка после VM Operatoin

Команды JVM

  • -XX:+PrintSafepointStatistics