digital-garden/knowledge/dev/java/gc/Shenandoah GC.md

44 lines
2.5 KiB
Markdown
Raw Normal View History

2024-06-13 21:01:37 +03:00
---
aliases:
tags:
- зрелость/🌱
date: "[[2023-11-08]]"
zero-link:
- "[[00 Java разработка]]"
parents:
- "[[Garbage Collector]]"
linked:
- "[[ZGC]]"
---
Входит в состав OpenJDK начиная с [[Java 12]], но есть порты сборщика в [Java 11](Java%2011).
Похож на [G1](Garbage%20First.md):
- Также использует с разбиением на регионы
- Политика сборки: в первую очередь собирает регионы с большим количеством мусора
Не похож на [G1](Garbage%20First.md):
- Отсутствует деление на молодые/старые сборки
- Учетом ссылок между регионами. Используется Matrix.
- Требует [барьеры на запись](Барьеры%20в%20программировании.md) на всех записях. Но на практике эти барьеры срабатывают редко, только во время эвакуации, на редких эвакуируемых объектах, в момент когда они еще не были перемещены.
## Алгоритм работы
![](Pasted%20image%2020231108141041.png)
- [Concurrent Mark](Concurrent%20Collection.md) начинается с маленькой паузы [StopTheWorld](StopTheWorld.md).
- Final Mark еще одна небольшая пауза [StopTheWorld](StopTheWorld.md)
- В это время выбираются регионы с максимальным количеством мусора.
- [Concurrent Evacuation](Concurrent%20Collection.md)
- Ключевое отличие от [G1](Garbage%20First.md). G1 использует [StopTheWorld](StopTheWorld.md). В этом месте.
На самом деле есть еще 2 коротенькие паузы.
![](Pasted%20image%2020231112162050.png)
Также
**Плюсы:**
- Относится к ultra-low latency GC. Паузы около 1 ms.
- Продолжительность сборки не зависят от размера хипа и количества живых объектов
## Дополнительный материал
- [Алексей Шипилёв — Shenandoah: сборщик мусора, который смог - YouTube](https://www.youtube.com/watch?v=ZYiQCHxgABI)
- [Алексей Шипилёв — Shenandoah: сборщик мусора, который смог (часть 2) - YouTube](https://www.youtube.com/watch?v=HBWaffsl7fo)