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

28 lines
2.7 KiB
Markdown
Raw Normal View History

2024-06-13 21:01:37 +03:00
---
aliases:
tags:
- зрелость/🌱
date: 2023-11-12
zero-link:
- "[[00 Java разработка]]"
parents:
linked:
---
Safe Point — это такая точка в выполнении программы, в которой все потоки приложения находятся в известных и устойчивых состояниях, что позволяет [сборщику мусора](Garbage%20Collector.md) безопасно анализировать и изменять структуры данных памяти, такие как куча (heap).
Во время выполнения программы на Java, потоки могут быть остановлены сборщиком мусора, чтобы обеспечить согласованность данных в памяти. Однако останавливать их можно только в определённых местах, которые называются Safe Points. Это необходимо для того, чтобы гарантировать, что потоки не находятся в середине операции, которая может изменять состояние памяти, и для того, чтобы у сборщика мусора была возможность корректно анализировать достижимые объекты и ссылки между ними.
Достижение Safe Point может быть инициировано в следующих ситуациях:
1. Перед выполнением операции сбора мусора.
2. При выполнении некоторых системных вызовов.
3. Перед выполнением длительных операций, которые не должны прерываться.
Для приостановки потоков и достижения Safe Point используются различные механизмы в зависимости от конкретной реализации [JVM](JVM.md) и сборщика мусора. Например, потоки могут проверять специальные флаги в контрольных точках в своём коде (polling) или могут быть остановлены с помощью сигналов уровня операционной системы.
![](Pasted%20image%2020231112162050.png)
- Синхронизация: останавливает все треды, и убеждается, что все они остановлены
- VM Operation. Например, сборка мусора.
- Cleanup. Очистка после VM Operatoin
## Команды JVM
- -XX:+PrintSafepointStatistics