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, поэтому на данный момент невыполненных зависимостей не осталось.