digital-garden/knowledge/dev/java/Safe Point.md
2024-06-13 21:01:37 +03:00

28 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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