Эргономические настройки по умолчанию для сборщика мусора G1

В этом разделе представлен обзор наиболее важных значений по умолчанию, относящихся к G1, и их значений по умолчанию. Они дают приблизительный обзор ожидаемого поведения и использования ресурсов с использованием G1 без каких-либо дополнительных опций.

    • Параметр и значение по умолчанию
    • Описание

    • -XX:MaxGCPauseMillis=200
    • Цель на максимальное время паузы.

    • -XX:GCPauseTimeInterval=<ergo>
    • Цель для максимального интервала времени паузы. По умолчанию G1 не ставит никаких целей, позволяя G1 выполнять сборку мусора вплотную в крайних случаях.

    • -XX:ParallelGCThreads=<ergo>
    • Максимальное количество потоков, используемых для параллельной работы во время пауз сборки мусора. Это зависит от количества доступных потоков компьютера, на котором работает виртуальная машина, следующим образом: если число потоков ЦП, доступных для процесса, меньше или равно 8, используйте его. В противном случае добавьте пять восьмых потоков больше, чем к окончательному числу потоков.
      В начале каждой паузы максимальное количество используемых потоков дополнительно ограничивается максимальным общим размером кучи: G1 не будет использовать более одного потока на -XX:HeapSizePerGCThread количество емкости кучи Java.

    • -XX:ConcGCThreads=<ergo>
    • Максимальное количество потоков, используемых для конкурентной работы. По умолчанию это значение -XX:ParallelGCThreads, деленное на 4.

    • -XX:+G1UseAdaptiveIHOP
      -XX:InitiatingHeapOccupancyPercent=45
    • Значения по умолчанию для управления начальным заполнением кучи указывают, что адаптивное определение этого значения включено и что в течение первых нескольких циклов сбора G1 будет использовать заполнение 45% старого поколения в качестве порогового значения начала метки.

    • -XX:G1HeapRegionSize=<ergo>
    • Набор размера области кучи на основе начального и максимального размера кучи. Так что куча содержит примерно 2048 областей кучи. Размер области кучи может варьироваться от 1 до 32 МБ и должен быть степенью 2.

    • -XX:G1NewSizePercent=5
      -XX:G1MaxNewSizePercent=60
    • Общий размер молодого поколения, который варьируется между этими двумя значениями в процентах от текущей используемой кучи Java.

    • -XX:G1HeapWastePercent=5
    • Допустимое невостребованное пространство в коллекции устанавливает кандидатов в процентах. G1 останавливает фазу восстановления пространства, если свободное место в наборе кандидатов-кандидатов меньше этого.

    • -XX:G1MixedGCCountTarget=8
    • Ожидаемая продолжительность этапа восстановления пространства в ряде сборок.

    • -XX:G1MixedGCLiveThresholdPercent=85
    • Регионы старого поколения с большей занятостью живых объектов, чем этот процент, не собираются на этом этапе освоения пространства.

Примечание: <ergo> означает, что фактическое значение определяется эргономично в зависимости от среды.

Сравнение с другими сборщиками

Вот краткое изложение основных различий между G1 и другими сборщиками:

  • Параллельный сборщик (Parallel GC) может уменьшать и восстанавливать пространство в старом поколении только в целом. G1 постепенно распределяет эту работу по множеству гораздо более коротких сборок. Это существенно сокращает время паузы за счет потенциальной потери пропускной способности.
  • Подобно CMS, G1 конкурентно выполняет часть пространственной регенерации старого поколения конкурентно. Тем не менее, CMS не может дефрагментировать кучу старого поколения, что в конечном итоге приводит к длинным Full GC.
  • G1 может демонстрировать более высокие издержки, чем вышеуказанные коллекторы, что влияет на пропускную способность из-за его конкурентной природы.
  • ZGC ориентирован на очень большие кучи, стремясь обеспечить значительно меньшее время паузы при дальнейшей стоимости пропускной способности.

Благодаря тому, как это работает, G1 имеет несколько уникальных механизмов для повышения эффективности сбора мусора:

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

Восстановление пустых больших объектов старого поколения всегда включено. Вы можете отключить эту функцию с помощью опции -XX:-G1EagerReclaimHumongousObjects. Дедупликация строк отключена по умолчанию. Вы можете включить ее, используя опцию -XX:+G1EnableStringDeduplication.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки