我研究了可用于 JVM 的各种垃圾收集器之间的差异。这是解释它们之间主要区别的答案:https://stackoverflow.com/a/54619838/5345646
G1GC 的说法是:
它是低暂停/服务器风格的GC,主要用于大堆(> 4Gb)。
我们有一台机器,总内存为 4 GB,分配给 JVM 的堆大小为 1 GB。我想了解这是否会给我们带来任何问题,或者 G1GC 是否能正常工作。
以下总结基于:
如果您对 GC 暂停时间完全不感兴趣,请使用串行收集器(如果您只有一个核心)或并行收集器(如果您有多个核心)。
如果您需要较短的暂停时间(概率较高),请使用 G1 收集器。
如果您需要超短的暂停时间,和/或您有一个非常大的堆,请使用 Z 收集器。
从 Java 14 开始,旧的 CMS 收集器已被删除。
请注意,如果您指定暂停时间和/或吞吐量目标,则可以将 GC 的选择和调整留给 JVM。当您不明白自己在做什么时,这可能比手动选择和调整 GC 的风险要小。
我们有一台机器,总内存为 4 GB,分配给 JVM 的堆大小为 1 GB。我想了解这是否会给我们带来任何问题,或者 G1GC 是否能正常工作。我们无法告诉您效果是否良好。这取决于应用程序行为的各个方面以及您的期望。例如,如果您的应用程序遇到哪些“问题”,您会担心这些问题。我建议从“基于行为的调整”开始,看看它会给你带来什么。
最后,设置对于应用程序来说太小的最大堆大小
不会有好结果......无论你选择什么GC。