为什么从串行 GC 切换到 G1 会增加 RSS

Why switching form serial GC to G1 increase RSS

我有使用串行 GC 时起始 RSS 大小为 600MB 的示例应用程序。在 bootstrap 增加到 800Mb 之后我使用 G1 RSS 内存。

有谁知道我如何分析这种增加以及何时有任何 G1 调整选项来改善内存占用?

如果您真的非常关心内存占用,请不要使用 G1。这是一个具有辅助数据结构的复杂 GC,它通过仅收集旧的碎片来避免进行完整的 GC。它还有一个默认的暂停时间目标,这导致它更愿意增加堆而不是错过它的暂停时间目标。

坚持使用串行 gc 或吞吐量并行收集器。

不过您可以尝试以下操作:-XX:MaxHeapFreeRatio=30 -XX:MinHeapFreeRatio=20 -XX:InitiatingHeapOccupancyPercent=30,这应该会告诉 G1 更积极地将内存还给 OS 并尽快开始收集老一代。