Ответ
Shenandoah — это сборщик мусора с низкими паузами (low-pause), разработанный в Red Hat для OpenJDK. Его ключевая цель — сократить время остановки приложения (STW — Stop-The-World) во время фазы эвакуации (evacuation) живых объектов, делая её выполняемой конкурентно с работой приложения.
Основные характеристики:
- Конкурентная эвакуация: Перемещение живых объектов в новые регионы памяти происходит одновременно с выполнением потоков приложения.
- Короткие и предсказуемые паузы: Время STW не зависит от размера кучи, а лишь от количества корневых ссылок (root scanning).
- Регионная (Region-based) организация кучи: Память делится на регионы, что позволяет эвакуировать их независимо.
Как включить:
java -XX:+UseShenandoahGC -jar myapp.jar
| Сравнение с G1: | Параметр | G1 GC | Shenandoah GC |
|---|---|---|---|
| Эвакуация | Параллельная (STW) | Конкурентная (основная работа без STW) | |
| Паузы | Зависят от размера региона | Краткие, почти постоянные | |
| Накладные расходы | Ниже | Выше (из-за механизма перенаправления ссылок — Brooks pointers) |
Идеальный сценарий использования: Приложения, чувствительные к задержкам (low-latency), такие как финансовые системы, игровые серверы или сервисы реального времени, где даже короткие, но частые паузы GC недопустимы.
Ограничение: Shenandoah требует дополнительных ресурсов CPU для фоновой конкурентной работы.