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

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

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

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


person BetaRide    schedule 25.11.2015    source источник


Ответы (2)


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

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

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

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

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

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

person the8472    schedule 25.11.2015
comment
Очень подробный ответ! Спасибо. Я собираюсь попробовать -XX:+UseConcMarkSweepGC и -XX:+UseG1GC и посмотреть, что получится. - person BetaRide; 25.11.2015
comment
Извиняюсь. Я добавил не в том месте. Это для ОП. Я удалю это. - person Ravindra babu; 16.12.2015

До тех пор, пока эта опция полностью не будет объявлена ​​устаревшей Oracle в более новой версии. Мы все еще могли бы использовать это, применив следующие параметры jvm:

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

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

person Tim Long    schedule 22.11.2016