Настройка параметров G1GC для агрессивной сборки мусора? - PullRequest
0 голосов
/ 25 декабря 2018

Моя виртуальная машина Java - в основном искровый исполнитель, который выполняет задачи одну за другой.Задача требует много памяти и требует значительного объема памяти в течение своего жизненного цикла.

JConsole и JVisualVM сообщают бок о бок

Вышеупомянутая JVM работает в G1GC с параметрами по умолчанию.Как вы можете видеть в отчете VisualVM справа от 4:25 до 16:32, скачки происходят из-за каждой задачи, выполняемой исполнителем (по сути, каждый скачок происходит из-за того, что исполнитель выбирает новую задачу послепредыдущий закончен).Когда я запустил ручной сборщик мусора в 4:35, я увидел резкое снижение использования кучи.Кроме того, как вы можете видеть с левой стороны в отчете JConsole, G1GC никогда не собирает пространство старого поколения (резкое сокращение пространства старого поколения непосредственно перед 16:35 связано с ручным сбором мусора).Поскольку мое приложение является приложением пакетного задания, я в порядке, если JVM потратили много времени на сборку мусора.Но у меня мало памяти.Итак, я хотел знать, как я могу настроить параметры JVM G1GC так, чтобы там были более частые GC (при этом также собиралось пространство старого поколения), и я мог выполнить работу со значительно меньшим пространством кучи (XMX).

1 Ответ

0 голосов
/ 06 января 2019

Для G1 быстрый возврат неиспользованной памяти в операционную систему - это функция OpenJDK 12:

Если у вас недостаточно памяти, скорее всего, вам нужно держать под контролем RSS (общий объем памяти, выделенный из операционной системы), а не только используемую память в куче Java.С G1 в текущем OpenJDK, (частично) полные GC, запускаемые вручную, кажутся единственным способом вызвать уменьшение RSS.(G1 будет работать плохо, если вы измените эргономику, что полные GC часто происходят.)

Если ваша сборка OpenJDK содержит сборщик Shenondoah , это может быть лучшим выбором, если вам нужно сохранить памятьособенно с некоторыми настройками, такими как -XX:ShenandoahGCHeuristics=compact.

ZGC должен в конечном итоге также поддерживать возврат памяти, но в настоящее время не поддерживает ;патч с добавлением опции -XX:+ZReleaseUnusedHeap не был объединен.

...