什么时候不使用 G1GC 垃圾收集器?

When not to use G1GC garbage collector?

我研究了可用于 JVM 的各种垃圾收集器之间的差异。这是解释它们之间主要区别的答案:

这里说 G1GC 是:

It's low pause / server style gc, mainly for large heap (> 4Gb).

我们有一台机器,总内存为 4 GB,分配给 JVM 的堆大小为 1 GB。我想了解这是否会给我们带来任何问题,或者 G1GC 是否会正常工作。

以下总结基于:


  • 如果你对GC暂停时间完全不感兴趣,那么使用串行收集器(如果你只有一个核心)或并行收集器(如果你有多个核心)。

  • 如果你需要低停顿时间(概率高),那么使用G1收集器。

  • 如果您需要 ultra-low 次暂停,and/or 您有一个非常大的堆,请使用 Z 收集器。

从 Java 14 日起,旧的 CMS 收集器已被删除。


请注意,如果您指定 pause-time and/or 吞吐量目标,您可以将 GC 的选择和调整留给 JVM。当您不明白自己在做什么时,这可能比手动 select 调整和调整 GC 风险更小。

描述了这种“behavior-based 调整”方法及其优点 here


您问的是:

We have a machine that has a total memory of 4 GB, and heap size allocated to JVM of 1 GB. I wanted to understand whether that would cause any issues for us, or would G1GC work out fine.

我们无法告诉您它是否会成功。这将取决于应用程序行为的各个方面以及您的期望。例如,如果您的应用程序遇到了哪些“问题”,您会关心这些问题。我建议先尝试“behavior-based 调整”,然后看看它能给你带来什么。

此外,请注意,为应用程序设置太小的最大堆大小将不会很好地结束......无论您使用哪种 GC select。