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

JEP 474: ZGC: Generational Mode by Default

ZGC: Generational Mode (режим с поколениями) по умолчанию

ОтветственныйAxel Boldt-Christmas
ТипFeature
ОбластьJDK
СтатусClosed / Delivered
Выпуск23
Компонентhotspot / gc
Обсуждениеhotspot dash gc dash dev at openjdk dot org
ТрудоёмкостьXS
Связан сJEP 439: Generational ZGC
JEP 490: ZGC: Remove the Non-Generational Mode
РецензентыStefan Karlsson, Vladimir Kozlov
ОдобренVladimir Kozlov
Создан2024/02/26 11:16
Обновлён2024/10/07 17:28
Задача8326667

Аннотация

Сделать режим с поколениями — Generational Mode — режимом по умолчанию для сборщика мусора Z Garbage Collector (ZGC). Объявить режим без поколений устаревшим с намерением удалить его в одном из будущих выпусков.

Цели

  • Показать, что дальнейшая разработка будет сосредоточена на Generational ZGC (ZGC с поколениями).

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

Что не является целью

  • Удаление ZGC без поколений из выпуска, для которого предназначен этот JEP, не является целью.

Мотивация

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

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

Описание

Сделать Generational ZGC режимом ZGC по умолчанию, изменив значение по умолчанию параметра ZGenerational с false на true. Объявить режим без поколений устаревшим, объявив устаревшим параметр ZGenerational.

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

  • -XX:+UseZGC

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

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

    • Используется ZGC без поколений.
    • Выводится предупреждение о том, что параметр ZGenerational устарел.
    • Выводится предупреждение о том, что режим без поколений устарел и будет удалён.

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

Тестирование

Мы убедимся, что предупреждение об устаревшем параметре не влияет на существующие тесты и что они проходят в тех же конфигурациях, что и до этого изменения.

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

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

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

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

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

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

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