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