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

JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector

Удаление сборщика мусора Concurrent Mark Sweep (CMS)

ОтветственныйThomas Schatzl
ТипFeature
ОбластьImplementation
СтатусClosed / Delivered
Выпуск14
Компонентhotspot / gc
Обсуждениеhotspot dash gc dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьS
Связан сJEP 291: Deprecate the Concurrent Mark Sweep (CMS) Garbage Collector
РецензентыErik Helin, Mikael Vidstedt, Per Liden
ОдобренMikael Vidstedt
Создан2019/08/03 19:52
Обновлён2020/06/18 13:39
Задача8229049

Аннотация

Удалить сборщик мусора Concurrent Mark Sweep (CMS).

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

  • Удаление других сборщиков мусора не является целью.
  • Целью не является удаление сборщика мусора CMS из выпусков, вышедших раньше выпуска, для которого предназначен этот JEP.

Мотивация

Более двух лет назад в JEP 291 мы пометили сборщик CMS как устаревший и подлежащий удалению в одном из будущих выпусков, чтобы ускорить разработку других сборщиков. За это время не нашлось ни одного заслуживающего доверия участника, который взялся бы сопровождать CMS.

За это же время появились два новых сборщика, ZGC и Shenandoah, а G1 получил дальнейшие улучшения. G1 задумывался как преемник CMS ещё с JDK 6. Теперь сборщики мусора, доступные в HotSpot JVM, либо превосходят CMS по производительности, либо уступают ему настолько незначительно, что CMS уже можно безопасно удалить. Мы ожидаем, что будущие улучшения существующих сборщиков ещё больше уменьшат потребность в CMS.

Описание

Это изменение отключит компиляцию CMS, удалит содержимое каталога gc/cms в дереве исходного кода и удалит параметры, относящиеся только к CMS. Упоминания CMS также будут удалены из документации. Тесты, которые пытаются использовать CMS, будут удалены или при необходимости адаптированы.

При попытке использовать CMS с помощью параметра -XX:+UseConcMarkSweepGC будет выведено следующее предупреждение:

Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option UseConcMarkSweepGC; \
support was removed in <version>

после чего VM продолжит работу со сборщиком по умолчанию.

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

Код CMS можно было бы оставить в репозитории, но не компилировать. Однако без сопровождающего этот код быстро устарел бы, но при этом мог бы создавать ложное впечатление, что он поддерживается.

Пользователи могут перейти на сборщик мусора G1 или на любой другой сборщик. Пользователи, которым CMS совершенно необходим, могут по-прежнему использовать его, пока он поддерживается в более ранних выпусках.