Является ли -XX:+UseG1GC правильной заменой для -Xincgc?

В настоящее время мы используем инкрементный сборщик мусора, добавив -Xincgc к команде Java. В JDK 8 этот переключатель устарел. Так что эквивалентная замена для него? -XX:+UseG1GC?

Предыстория: приложение имеет кучу 8 ГБ и создает множество недолговечных объектов. Я заметил, что он часто останавливался на несколько секунд, чтобы сделать сборку мусора. Из любопытства я добавил -Xincgc и обнаружил, что паузы пропали и общая производительность улучшилась в ~4 раза.

К сожалению, я не нашел никакой информации о том, какой тип сборщика мусора -Xincgc триггеры. Есть CMS (одновременная метка и развертка) и новый G1 (сначала мусор). Но что я получу с -Xincgc?

3 ответа

Для Oracle/OpenJDK 8 сборщиком по умолчанию на большинстве машин является сборщик параллельной пропускной способности, за исключением некоторых 32-битных машин с Windows, где это может быть последовательный GC.

Xincgc - это CMS в инкрементном режиме. Вероятно, основное преимущество, которое вы видите, связано с переключением с Throughput Collector на CMS, а не с инкрементного режима, который предназначен для одноядерных процессоров.

Инкрементальный режим также не рекомендуется, так что просто включите CMS через -XX:+UseConcMarkSweepGC и посмотрим, сработает ли это для вас.

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

Итак, попробуйте оба и измерить.

Смотрите также: Руководства по настройке Oracle 8 GC для Oracle

Пока эта опция полностью не рекомендуется Oracle в более новой версии. Мы все еще можем использовать это, применяя следующие параметры jvm:

-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

Последние 2 параметра предназначены для регистрации действий GC.

СИМПТОМЫ В многопроцессорных системах настройка сборщика мусора (GC) виртуальной машины Java для использования «добавочного» режима параллельной очистки с отметками (CMS) приведет к снижению производительности по сравнению с CMS в обычном режиме.

К сожалению, при поиске страниц настройки Java в Интернете можно найти множество документов, в которых рекомендуется использовать CMS в добавочном режиме, установив один из ключей командной строки -XX:+CMSIncrementalMode или -Xincgc.

https://support.oracle.com/knowledge/Middleware/1284201_1.html

Другие вопросы по тегам