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