ZGC или Z Garbage Collector — это наиболее современный сборщик мусора в JDK. Первоначально он появился в JDK 11 в виде экспериментальной функции. Продакшн-функцией ZGC стал в JDK 15 после утверждения улучшения JEP 377. В этой статье мы рассмотрим цели и перспективы ZGC. Кофе-брейк #132. Знакомимся с ZGC, новейшим сборщиком мусора JDK. В чем разница между HashMap, LinkedHashMap и TreeMap в Java - 1

Обзор ZGC

ZGC разработан как масштабируемый сборщик мусора с малой задержкой. Максимальное время паузы при работе ZGC редко превышает 250 микросекунд, Да, именно микросекунд, со средним временем паузы в десятки микросекунд. ZGC обладает высокой масштабируемостью: минимальный размер кучи составляет от 8 МБ до 16 ТБ. Важно отметить, что время паузы не увеличивается с размером кучи. Таким образом, даже с кучей размером в несколько терабайт время паузы все равно будет измеряться в микросекундах. Хотя ZGC обеспечивает малую задержку и высокую масштабируемость, это происходит за счет пропускной способности, которая примерно на 10% ниже по сравнению с G1. Конкретное снижение пропускной способности зависит от дизайна приложения, архитектуры системы и потребностей бизнеса.

Использование ZGC

Поскольку начиная с JDK 9 сборщиком мусора по умолчанию назначен G1, для использования ZGC вам потребуется установка флага VM -XX:+UseZGC. При использовании ZGC наиболее важной конфигурацией является установка максимального размера кучи, -Xmx. Размер кучи должен быть достаточно большим, чтобы справляться с live-set вашего приложения. Также он должен иметь дополнительный резерв для выполнения сборки мусора. Чем больше доступного места в куче, тем реже потребуется выполнять сборку мусора. Но учтите, что это должно быть сбалансировано с использованием памяти.

Дальнейшее развитие ZGC

С момента своего выпуска в качестве производственной функции в JDK 15 ZGC продолжает активно развиваться. С выходом JDK 16 в нем появилась параллельная обработка стека потоков (JEP 376), а в JDK 18 в качестве дополнительной функции добавлена ​​дедупликация строк. В перспективе планируется, что ZGC станет мультипоколенческим (multi-generational), хотя конкретные сроки внедрения этого улучшения еще не установлены.

Дополнительная информация о ZDC