28 lines
2.7 KiB
Markdown
28 lines
2.7 KiB
Markdown
---
|
||
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 |