Я проводил свои верные тесты, и это привело меня к пределу накладных расходов GC. Однако, проанализировав статистику памяти и снимки, я понял, что почти 800 МБ были потрачены впустую при дублировании строк.
Изучив аргументы VM и другие параметры времени выполнения, я понял, что используемый GC был PS (Parallel Scavenger — по умолчанию из JVM).
Я изменил верный argLine для использования
-XX:+UseG1GC -XX:+UseStringDeduplication -XX:+PrintStringDeduplicationStatistics
Теперь мои тестовые прогоны используют G1GC.
Ниже приведено сравнение до и после переключения GC
Если вас интересует статистика дедупликации. Вот он:
Мой вопрос: почему G1GC использует так много данных Old Gen и не собирает их в течение всего периода тестирования. Он продолжает расти.
Остальное окружение, аргументы и все остальное остается прежним. Единственное, что меняется, — это алгоритм GC и дедупликация.
Я тоже просматривал похожие темы
Смешанный gc JVM G1GC не собирает много старых регионов