openjdk.ruOpenJDK на русском

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 и данными, доступными через интерфейсы управления, могут потребовать дополнительного внимания.