Настройка сборщика мусора Garbage-First (G1)

В этом и последующих постах описывается, как адаптировать поведение сборщика мусора Garbage-First (G1), если оно не соответствует вашим требованиям.

Общие рекомендации для G1

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

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

Если вы предпочитаете высокую пропускную способность, то уменьшите время паузы с помощью -XX:MaxGCPauseMillis или предоставьте большую кучу. Если задержка является основным требованием, измените цель времени паузы. Старайтесь не ограничивать размер молодого поколения определенными значениями, используя такие параметры, как -Xmn, -XX:NewRatio и другие, потому что размер молодого поколения является основным средством для G1, чтобы позволить ему соответствовать времени паузы. Установка размера молодого поколения на одно значение переопределяет и практически отключает контроль времени паузы.

Переход на G1 с других сборщиков

Как правило, при переходе на G1 с других сборщиков, в частности сборщика Concurrent Mark Sweep (CMS), начните с удаления всех параметров, влияющих на сборку мусора, и устанавливайте только время паузы и общий размер кучи, используя -Xmx и, необязательно, -Xms.

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


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


Комментарии

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

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

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

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