Сборщик мусора ZGC#

Обзор#

ZGC (Z Garbage Collector) — масштабируемый сборщик мусора с низкими задержками (latency), который был разработан Oracle для работы с большими объемами памяти. DataGrid поддерживает использование ZGC в качестве альтернативы G1 GC.

Когда использовать ZGC#

ZGC рекомендуется применять в сценариях:

  • Строгие SLA по задержкам. ZGC обеспечивает предсказуемые и минимальные паузы (обычно менее 10 мс), что критично для систем реального времени (real-time).

  • Быстрые паузы. При необходимости можно минимизировать время остановки приложений (stop-the-world pauses).

  • Большие кластеры. ZGC особенно эффективен при работе с кластерами, где требуется поддержка больших объемов (от 32 ГБ) динамической памяти (кучи, heap).

Ограничения:

  • ZGC не поддерживает сжатые указатели (compressed oops). При размере кучи менее 32 ГБ фактическое потребление памяти может быть выше, чем при использовании G1 GC.

  • Использовать ZGC с DataGrid рекомендуется начиная с JDK версии 21, в которой появился флаг -XX:+ZGenerational. Генерационный режим ZGC обеспечивает лучшую производительность за счет разделения объектов на «молодые» и «старые», что снижает накладные расходы на сборку мусора.

  • Для кластеров с кучей менее 32 ГБ и при отсутствии жестких требований к задержкам предпочтительнее использовать G1 GC.

Основные параметры ZGC#

JDK 17#

Минимальный набор опций для JDK 17 и более ранних версий:

-XX:+UseZGC
-XX:+ZUncommit
-XX:+ZGenerational

Примечание

Флаг -XX:+ZGenerational в JDK 17 является экспериментальным и может быть недоступен.

JDK 21 (рекомендуемая версия JDK для ZGC)#

Для JDK 21 и выше рекомендуется использовать генерационный режим ZGC:

-XX:+UseZGC
-XX:+ZUncommit
-XX:+ZGenerational

Флаг -XX:+ZGenerational включает генерационную сборку мусора, которая значительно снижает накладные расходы за счет оптимизации работы с «молодыми» объектами.

Рекомендации по настройке#

Размер кучи#

Для ZGC рекомендуется выделять не менее 32 ГБ кучи, чтобы компенсировать отсутствие сжатых указателей:

-Xms32g -Xmx32g

Мониторинг#

Для анализа работы ZGC настройте логирование с помощью опций:

-Xlog:gc*:file=logs/gc-zgc.log:time,uptime,level,tags

Пример конфигурации для DataGrid#

export JVM_OPTS="-XX:+UseZGC -XX:+ZUncommit -XX:+ZGenerational -Xms32g -Xmx32g"
export JVM_OPTS="-XX:+UseZGC -XX:+ZUncommit -Xms32g -Xmx32g"

Важно

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

Проверка работы ZGC#

После запуска DataGrid с ZGC проверьте:

  1. Логи на наличие сообщений о начале работы ZGC.

  2. GC-логи для анализа пауз и времени сборки мусора.

  3. Метрики производительности (latency, throughput) по сравнению с G1 GC.