Является ли -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