G1GC是否仍未正式投入生产?

2022-09-01 13:24:28

我想知道JDK 7版本中“垃圾优先”(G1)收集器的官方状态是什么。我想使用G1作为CMS的低暂停gc替代品,但前提是我真的可以信任它的健壮性。

在JDK 7问世之前,G1被宣传为闪亮的新gc,将取代CMS收集器,甚至成为JDK 7中的默认gc。但是,现在使用Oracle JDK 7u1,G1不是我尝试过的任何计算机上的默认gc。

尽管在 JDK 7 中使用时不需要再指定,但它是一个正式完全没有文档记录的 JVM 功能:-XX:+UnlockExperimentalVMOptions-XX:+UseG1GC

Java 7 (JDK 7) 垃圾回收和 G1 上的文档

我能找到的唯一一份提到G1的官方文件已经严重过时了,早在JDK 7问世之前就已经写好了:

http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html

例如,官方的“Java HotSpot VM Options”文档(http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html)记录了如何启用和调整其他收集器,但甚至没有提到G1的存在。好像它不存在!

这非常令人困惑,我想知道G1的真实状况及其未来是什么。它真的稳定吗?其余问题(如泄漏、虚假崩溃和缺少检测支持)是否已得到解决?如果是这样,为什么甲骨文将G1GC视为一个无证(令人尴尬的?)秘密?G1也许是一个失败的项目,现在已经悄无声息地停止了?还是我需要支付文档和支持费用?还是它只是测试版?有人能启发我这里发生了什么吗?


答案 1

提出这个问题的地方是在hotspot-gc-dev邮件列表中。

如果你查看档案,你会发现有很多工作要做。很多邮件似乎是提交和审查请求/评论,所以他们正忙于工作。

我没有找到任何官方新闻公告,但这就是甲骨文的工作方式。你可以在那个邮件列表上问他们的想法,如果你对其中一个开发人员的非官方和不具约束力的评论感到满意的话。

编辑:@scravy向邮件列表发送电子邮件,这是收到的回复

我不认为这个问题有一个简单的答案,尽管可能不是。G1 最初的重点是为非常大的堆提供合理的暂停。这意味着今天它可能不是每个人的最佳选择。我们认为这项技术有“很多腿”,这意味着通过适应,它可以解决许多不同类型的垃圾收集需求。因此,有一天,它可能实际上是默认的收集器,但现在确定还为时过早。

考虑到 GC 行为更改可能会对现有部署造成非常大的干扰,因此即使在没有提前通知的主要版本中,我们也不愿意进行这样的更改。因此,在当前版本中,如果您不指定收集器,我们会尝试进行一些简单的自动选择,但我怀疑我们是否会在短期内对该行为进行彻底的更改。

对于更大的问题,关于是否支持G1,目前的答案是否定的。但请记住,Oracle 对受支持产品的付费客户做出的支持承诺相当重要,而且不仅仅是满足功能和可靠性要求。

我们将继续鼓励每个人测试和评估G1,当然,在我们继续在G1上取得重大进展时,向我们提供反馈。

-约翰

编辑:根据Oracle网站上的这个链接,看起来G1GC现在完全受支持。


答案 2

我们已经在使用G1GC,从近一年半开始。它在我们的任务关键型事务处理系统中做得很好,事实证明,它是高吞吐量,低暂停,并发,多线程和优化的重内存管理的出色支持。

我们使用以下 JVM 设置:

-server -d64 -Xms512m -Xmx3072m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC
-XX:+UnlockExperimentalVMOptions -XX:+AggressiveOpts -XX:+DoEscapeAnalysis
-XX:MaxGCPauseMillis=400 -XX:GCPauseIntervalMillis=8000 
-XX:+UseCompressedOops -XX:NewRatio=50

推荐