【发布时间】:2019-04-18 09:14:49
【问题描述】:
我正在运行我的万无一失的测试,它让我进入了 GC 开销限制。然而,在分析内存统计数据和快照后,我意识到字符串复制浪费了将近 800 MB。
进一步研究 VM 参数和其他运行时参数,我意识到使用的 GC 是 PS(Parallel Scavenger - JVM 的默认值)。
我修改了surefire argLine 以使用
-XX:+UseG1GC -XX:+UseStringDeduplication -XX:+PrintStringDeduplicationStatistics
现在我的测试运行使用的是 G1GC。
下面是切换GC前后的对比
我的问题:为什么 G1GC 使用了这么多 Old Gen 并且在测试运行的整个生命周期中都没有被收集。它一直在增长。
其余的环境和参数以及其他一切都保持不变。唯一改变的是 GC 算法和重复数据删除。
我也一直在看这些相关的话题
JVM G1GC's mixed gc not collecting much old regions
【问题讨论】:
标签: java garbage-collection g1gc