使用串行 GC 时,我有一个示例应用程序,起始 RSS 大小为 600MB。有一次我使用 G1 RSS 内存, Bootstrap 增加到 800Mb 后。
有谁知道我如何分析该增加以及何时有任何 G1 调整选项来改善内存占用?
最佳答案
如果您确实最关心内存占用,请不要使用 G1。它是一个带有辅助数据结构的复杂 GC,并且它通过仅收集旧一代的碎片来避免执行完整的 GC。默认情况下,它还有一个暂停时间目标,这导致它更喜欢增加堆而不是错过其暂停时间目标。
坚持使用串行GC或吞吐量并行收集器。
您可以尝试以下操作:-XX:MaxHeapFreeRatio=30 -XX:MinHeapFreeRatio=20 -XX:InitiatingHeapOccupancyPercent=30
,这应该告诉 G1 更积极地将内存退还给操作系统,并且尽早开始收集旧一代。
关于java - 为什么从串行GC切换到G1会增加RSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31098321/