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

JEP 490: ZGC: Remove the Non-Generational Mode

ZGC: удаление режима без поколений

ОтветственныйAxel Boldt-Christmas
ТипFeature
ОбластьJDK
СтатусClosed / Delivered
Выпуск24
Компонентhotspot / gc
Обсуждениеhotspot dash gc dash dev at openjdk dot org
ТрудоёмкостьXS
ДлительностьXS
Связан сJEP 439: Generational ZGC
JEP 474: ZGC: Generational Mode by Default
РецензентыStefan Karlsson, Vladimir Kozlov
ОдобренVladimir Kozlov
Создан2024/07/08 08:41
Обновлён2025/02/14 20:13
Задача8335850

Аннотация

Удалить режим без поколений из сборщика мусора Z Garbage Collector (ZGC) и оставить для ZGC режим по умолчанию Generational Mode (режим с поколениями).

Цель

  • Сократить затраты на поддержку двух разных режимов.

Мотивация

Поддержка ZGC без поколений замедляет разработку новых возможностей. Как сказано в JEP 439: Generational ZGC (ZGC с поколениями):

Generational ZGC должен в большинстве сценариев оказаться лучшим решением, чем ZGC без поколений. Со временем мы должны получить возможность заменить второй первым, чтобы сократить долгосрочные затраты на поддержку.

Описание

Режим без поколений удаляется: параметр ZGenerational объявляется устаревшим (obsolete), а код ZGC без поколений и его тесты удаляются. В одном из будущих выпусков срок действия параметра истечёт. После этого HotSpot JVM перестанет его распознавать и откажется запускаться.

После этих изменений соответствующие параметры командной строки будут работать так:

  • -XX:+UseZGC

    • Используется Generational ZGC.
  • -XX:+UseZGC -XX:+ZGenerational

    • Используется Generational ZGC.
    • Выводится предупреждение об устаревшем параметре.
  • -XX:+UseZGC -XX:-ZGenerational

    • Используется Generational ZGC.
    • Выводится предупреждение об устаревшем параметре.

У нагрузок, которые переходят на Generational ZGC, может измениться вывод в журналы и данные, доступные через API обслуживания и управления.

Риски и допущения

Риски и допущения у этого JEP те же, что у JEP 439: Generational ZGC и JEP 474: ZGC: Generational Mode by Default.

Производительность Generational ZGC будет отличаться от производительности ZGC без поколений. Главный риск в том, что некоторые нагрузки по своей природе не делятся на поколения, поэтому их производительность может немного снизиться. Мы считаем, что таких нагрузок достаточно мало и они не оправдывают затрат на долгосрочную поддержку двух отдельных режимов ZGC.

Конкретные риски:

  • Пользователям может понадобиться изменить конфигурации, настроенные для ZGC без поколений.

  • Предупреждения об устаревшем параметре могут вызвать проблемы.

  • Нагрузкам, которые тесно связаны с внутренним устройством JVM, журналами GC и данными, доступными через интерфейсы управления, может потребоваться дополнительное внимание.