dha*_*ram 8 java garbage-collection g1gc
我正在运行我的万无一失的测试,它让我进入了 GC 开销限制。然而,在分析内存统计数据和快照后,我意识到几乎 800 MB 的内存被浪费在字符串复制中。
进一步研究 VM 参数和其他运行时参数,我意识到使用的 GC 是 PS(Parallel Scavenger - JVM 的默认GC)。
我修改了 Surefire argLine 来使用
-XX:+UseG1GC -XX:+UseStringDeduplication -XX:+PrintStringDeduplicationStatistics
Run Code Online (Sandbox Code Playgroud)
现在我的测试运行使用的是 G1GC。
下面是切换GC前后的对比
我的问题:为什么 G1GC 使用了如此多的 Old Gen,并且在测试运行期间没有被收集。它不断增长。
其余的环境和争论以及其他一切都保持不变。唯一改变的是 GC 算法和重复数据删除。
我也一直在查看这些相关主题
除非达到阈值(默认为总堆的 45%),否则 G1GC 不会进行老年代收集。您可以通过设置XX:InitiatingHeapOccupancyPercent为其他值来控制此阈值。