Я проводил свои верные тесты, и это привело меня к пределу накладных расходов GC. Однако, проанализировав статистику памяти и снимки, я понял, что на дублирование строк было потрачено почти 800 МБ.
Глядя на аргументы виртуальной машины и другие параметры времени выполнения, я понял, что использовался GC - PS (Parallel Scavenger - по умолчанию от JVM).
Я изменил верный argLine для использования
-XX:+UseG1GC -XX:+UseStringDeduplication -XX:+PrintStringDeduplicationStatistics
Теперь мои тестовые прогоны используют G1GC.
Ниже приведено сравнение до и после переключения ГХ
![enter image description here](https://i.stack.imgur.com/7RoRl.png)
Если вас интересует статистика дедупликации. Вот:
![enter image description here](https://i.stack.imgur.com/DkCWf.png)
Мой вопрос : Почему G1GC использует так много Старого Гена, и его не собирают в течение жизненного цикла. Он продолжает расти.
Остальная среда и аргументы и все остальное остается прежним. Меняется только алгоритм GC и дедупликация.
Я также просматривал эти темы
JVM G1GC смешанный GC не собирает много старых регионов
Функция дедупликации строк в Java 8
https://openjdk.java.net/jeps/192