我在运行surefire测试时遇到了GC超限的问题。然而,在分析内存统计和快照后,我意识到几乎有800 MB的字符串重复浪费。
深入研究VM参数和其他运行时参数后,我发现使用的GC是PS(并行清道夫-来自JVM的默认GC)。
我修改了surefire argLine以使用
-XX:+UseG1GC -XX:+UseStringDeduplication -XX:+PrintStringDeduplicationStatistics
现在我的测试运行正在使用G1GC。
以下是切换GC前后的比较。 如果您对去重统计数据感兴趣。这里是:
![enter image description here](https://istack.dev59.com/DkCWf.webp)
其余的环境、参数和其他所有内容都保持不变。唯一改变的是GC算法和去重。
我也看了这些相关的帖子: JVM G1GC's mixed gc not collecting much old regions String Deduplication feature of Java 8