Насколько стабилен сборщик мусора Z, представленный в Java11?
Я использую Java 11
и новый сборщик мусора Z (ZGC) кажется действительно многообещающим.
Документы говорят, что он использует какой-то механизм сборки мусора с малой задержкой, такой что GC
время паузы никогда не превышает 10 ms
, очень хорошо обрабатывает большие кучи и позволяет возвращать неиспользуемую память кучи в ОС, которой не было в старых GC
Меня беспокоит: насколько стабилен ZGC и есть ли риски, если кто-то продвинется с ним в продвижении?
Благодарность!
2 ответа
Согласно странице JEP 377 (обновление 2020/05/25):
С момента его появления в JDK 11 мы получили положительные отзывы, мы устранили множество ошибок и добавили ряд функций и улучшений. Чтобы выделить некоторые из наиболее важных:
- Выгрузка параллельных классов
- Удаление неиспользуемой памяти (JEP 351)
- Максимальный размер кучи увеличен с 4 ТБ до 16 ТБ.
- Минимальный размер кучи уменьшен до 8 МБ
- -XX:SoftMaxHeapSize
- Поддержка профилировщика утечек JFR
- Поддержка совместного использования данных класса
- Ограниченные и несмежные адресные пространства
- Поддержка размещения кучи в NVRAM
- Повышение осведомленности о NUMA
- Многопоточное предварительное касание кучи
Кроме того, теперь поддерживаются все часто используемые платформы:
- Linux / x86_64 (JEP 333)
- Linux / aarch64 (8214527)
- Windows (JEP 365)
- macOS (JEP 364)
Тестирование ZGC показывает, что он стабилен, и на момент написания этой статьи мы не получали новых ошибок, связанных с ZGC, в течение нескольких месяцев. Благодаря стабильности, набору функций и поддержке платформы, которые ZGC имеет сегодня, пора отменить его экспериментальный статус и сделать его функцией продукта.
Пара предостережений:
- Это исходит от команды, работающей над проектом ZGC. Есть вероятность, что они не совсем объективны. (Это просто человеческая природа...).
- Это зависит от того, сколько людей (команда и пользователи) тестируют / пробуют новый GC.
- Это зависит от того, что они тестируют / пробуют, и соответствует ли это тому, что вы предлагаете сделать.
- С такой сложной задачей, как новый Java GC, могут потребоваться годы, чтобы некоторые ошибки появились в воспроизводимой форме.
Таким образом, хотя это многообещающе, это НЕ считается количественной мерой стабильности и не дает количественной оценки риска.
ZGC по-прежнему является экспериментальной функцией. В JDK 15 планируется сделать это функцией продукта.