您可以做的最好的事情就是减少分配,或者使用像Azul这样的暂停较少的GC。这将使GC更易于管理。如果您在关键部分(使用度量标准例如JMC / JFR之类的分析工具)中足够减少分配,您可以整天运行而不进行完全收集,或者在极端情况下,整天运行而不进行小型收集。您可以监视tenured空间的占用情况,并查看它是否正在填充(存在其他导致full GC的原因,但这是最常见的原因)。
System.gc()
。当此调用返回时,不太可能在不久的将来发生新的GC。 - Ole V.V.gc()
可能很容易不会发生或被禁用。 "不久的将来" 是一个模糊的术语,新 GC 的可能性完全取决于 OP 系统的具体情况、其运行时配置文件和其错误,而我们对此一无所知。因此,我们还不能负责任地断言gc()
会产生什么影响。 - Lew Blochgc
调用,即使它们没有被明确禁用,而且它们会产生重大的GC而不仅仅是小的GC,所以你真的不能依赖它们。 - Lew Bloch