Сборщик мусора 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 проверьте:
Логи на наличие сообщений о начале работы ZGC.
GC-логи для анализа пауз и времени сборки мусора.
Метрики производительности (latency, throughput) по сравнению с G1 GC.