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

JEP 214: Remove GC Combinations Deprecated in JDK 8

Удаление комбинаций GC, объявленных устаревшими в JDK 8

ОтветственныйBengt Rutisson
ТипFeature
ОбластьJDK
СтатусClosed / Delivered
Выпуск9
Компонентhotspot / gc
Обсуждениеhotspot dash gc dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьS
РецензентыJon Masamitsu, Mikael Vidstedt
ОдобренMikael Vidstedt
Создан2014/05/27 14:22
Обновлён2017/01/25 14:43
Задача8044022

Аннотация

Удалить комбинации GC, которые ранее были объявлены устаревшими в JDK 8 в рамках JEP 173.

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

Реализация замены для удаляемых комбинаций GC не является целью этой работы. В большинстве случаев оставшиеся сборщики мусора должны работать так же хорошо или лучше, чем удаляемые комбинации GC. Доработка какого-либо из сборщиков мусора до уровня производительности удаляемых сборщиков мусора не является целью этой работы. Для достижения цели по производительности будет рассматриваться только настройка сборщиков мусора.

Критерии успеха

  • Для соответствующих параметров JVM не выводятся сообщения об устаревании. Вместо этого JVM считает их неизвестными флагами.

  • Влияние перехода с ParNew + SerialOld на ParallelScavenge + SerialOld на производительность хорошо изучено на достаточном наборе бенчмарков.

Мотивация

Как описано в JEP 173, поддержка всех существующих комбинаций GC требует больших затрат на сопровождение. Удаление устаревших комбинаций GC позволит во многом упростить код GC в HotSpot, что, в свою очередь, уменьшит количество ошибок и ускорит разработку оставшихся комбинаций GC.

Описание

Флаги, управляющие комбинациями GC, которые перечислены как устаревшие в JEP 173, а также флаги, включающие сборщик CMS в режиме foreground (объявлены устаревшими в рамках JDK-8027876), будут удалены из кодовой базы. Это значит, что предупреждения для них больше выводиться не будут; вместо этого JVM не запустится, если эти флаги используются.

После удаления флагов весь код, который станет мёртвым, будет удалён из кодовой базы GC. Благодаря этой работе в кодовой базе могут стать возможными упрощения, но большие по объёму. Такие упрощения могут быть выделены в отдельные изменения.

Ниже приведён подробный перечень флагов и комбинаций флагов, которые перестанут работать:

DefNew + CMS       : -XX:-UseParNewGC -XX:+UseConcMarkSweepGC
ParNew + SerialOld : -XX:+UseParNewGC
ParNew + iCMS      : -Xincgc
ParNew + iCMS      : -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC
DefNew + iCMS      : -XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC -XX:-UseParNewGC
CMS foreground     : -XX:+UseCMSCompactAtFullCollection
CMS foreground     : -XX:+CMSFullGCsBeforeCompaction
CMS foreground     : -XX:+UseCMSCollectionPassing

Для комбинации ParNew + SerialOld работа по этому JEP также будет включать тестирование производительности, сравнивающее ParNew + SerialOld с ParallelScavenge + SerialOld. Результатом должны стать рекомендации по настройке при переходе с ParNew + SerialOld на ParallelScavenge + SerialOld.

Альтернативы

Оставить в коде все или некоторые устаревшие параметры. Это помешало бы значительной работе по очистке кода GC и замедлило бы новую разработку в кодовой базе.

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

Существуют тесты, которые проверяют, что для перечисленных параметров выводятся предупреждения. Эти тесты нужно обновить, чтобы они ожидали сообщений о том, что параметры неизвестны.

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

Пользователям, которые используют какие-либо из удаляемых флагов, придётся обновить командные строки запуска JVM. Если они переходят с JDK 8 на JDK 9, то уже видели предупреждения и поэтому не должны быть удивлены. Предполагается, что большинство пользователей выиграют от перехода с удаляемых флагов на более современную настройку GC.

Зависимости

Эта работа зависит от JEP 173: Retire Some Rarely-Used GC Combinations. Этот JEP был реализован в JDK 8, поэтому на данный момент невыполненных зависимостей не осталось.