JEP 535: Shenandoah GC: Generational Mode by Default
Shenandoah GC: Generational Mode (режим с поколениями) по умолчанию
| Ответственный | William Kemper |
| Тип | Feature |
| Область | Implementation |
| Статус | Targeted |
| Выпуск | 28 |
| Компонент | hotspot / gc |
| Обсуждение | shenandoah dash dev at openjdk dot org |
| Трудоёмкость | XS |
| Длительность | XS |
| Связан с | JEP 404: Generational Shenandoah (Experimental) |
| JEP 521: Generational Shenandoah | |
| Рецензенты | Y. Ramakrishna |
| Одобрен | Vladimir Kozlov |
| Создан | 2026/03/10 21:40 |
| Обновлён | 2026/08/04 15:57 |
| Задача | 8379682 |
Аннотация
Сделать Generational Mode режимом по умолчанию для сборщика мусора Shenandoah. Перевести режим без поколений в статус Deprecated (устаревший), чтобы удалить его в одном из будущих выпусков.
Цели
-
Обозначить, что дальнейшая разработка будет сосредоточена на Generational Shenandoah (Shenandoah с поколениями).
-
Снизить затраты на сопровождение двух разных режимов.
Что не является целью
- Удаление Shenandoah без поколений на данном этапе не является целью.
Мотивация
Сопровождение Shenandoah без поколений замедляет разработку новых возможностей. Generational Shenandoah собирает молодые объекты чаще, а старые реже. Поэтому для большинства нагрузок снижаются накладные расходы на конкурентную работу, растёт пропускная способность выделения памяти и уменьшается объём занимаемой памяти.
Описание
Сделать Generational Shenandoah режимом по умолчанию: изменить значение параметра ShenandoahGCMode по умолчанию с satb на generational. Перевести режим без поколений в статус Deprecated: пометить как Deprecated значение параметра satb.
После этих изменений поведение будет зависеть от переданных аргументов командной строки следующим образом:
-
-XX:+UseShenandoahGC- Используется Generational Shenandoah.
-
-XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational- Используется Generational Shenandoah.
-
-XX:+UseShenandoahGC -XX:ShenandoahGCMode=satb- Используется Shenandoah без поколений.
- Выводится предупреждение о том, что режим без поколений имеет статус Deprecated for Removal (устаревший, будет удалён).
У нагрузок, которые перейдут на Generational Shenandoah, могут измениться вывод журналов и данные, доступные через API обслуживания и управления.
Тестирование
Мы проследим, чтобы предупреждение об устаревшем параметре не влияло на существующие тесты и чтобы они проходили в тех же конфигурациях, что и до этого изменения.
Риски и допущения
Generational Shenandoah будет работать иначе, чем Shenandoah без поколений. Главный риск здесь в том, что у некоторых нагрузок по самой их природе нет разделения на поколения, поэтому их производительность может немного снизиться. Мы считаем, что таких нагрузок достаточно мало и ради них не стоит нести затраты на долгосрочное сопровождение двух отдельных версий Shenandoah.
Конкретные риски:
-
Пользователям может потребоваться изменить конфигурации, настроенные для Shenandoah без поколений.
-
Предупреждения об устаревании могут вызвать проблемы у инструментов или скриптов, которые разбирают вывод JVM.
-
Нагрузки, тесно связанные с внутренним устройством JVM, журналами GC и данными, доступными через интерфейсы управления, могут потребовать дополнительного внимания.