Java G1GC никогда не собирает Old Gen - PullRequest
0 голосов
/ 15 ноября 2018

Я проводил свои верные тесты, и это привело меня к пределу накладных расходов GC. Однако, проанализировав статистику памяти и снимки, я понял, что на дублирование строк было потрачено почти 800 МБ.

Глядя на аргументы виртуальной машины и другие параметры времени выполнения, я понял, что использовался GC - PS (Parallel Scavenger - по умолчанию от JVM).

Я изменил верный argLine для использования

-XX:+UseG1GC -XX:+UseStringDeduplication -XX:+PrintStringDeduplicationStatistics

Теперь мои тестовые прогоны используют G1GC.

Ниже приведено сравнение до и после переключения ГХ

enter image description here

Если вас интересует статистика дедупликации. Вот: enter image description here

Мой вопрос : Почему G1GC использует так много Старого Гена, и его не собирают в течение жизненного цикла. Он продолжает расти.

Остальная среда и аргументы и все остальное остается прежним. Меняется только алгоритм GC и дедупликация.

Я также просматривал эти темы

JVM G1GC смешанный GC не собирает много старых регионов

Функция дедупликации строк в Java 8

https://openjdk.java.net/jeps/192

1 Ответ

0 голосов
/ 09 декабря 2018

G1GC не будет выполнять сбор старого поколения, пока не будет достигнут порог (по умолчанию 45% от общей кучи). Вы можете контролировать этот порог, установив XX:InitiatingHeapOccupancyPercent на другое значение.

...