30

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

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

尽管在 JDK 7 中-XX:+UnlockExperimentalVMOptions使用时不再需要指定-XX:+UseG1GC,但它是一项 JVM 功能,官方完全没有记录:

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

我能找到的唯一一个提到 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 可能是一个失败的项目,现在默默地停止了吗?还是我需要为文件和支持付费?还是只是测试版?有人可以告诉我这里发生了什么吗?

4

6 回答 6

12

可以在hotspot-gc-dev邮件列表中提出这个问题。

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

我没有找到任何官方新闻公告,但甲骨文就是这样工作的。如果您对其中一位开发人员的非官方且不具约束力的评论感到满意,您也许可以在该邮件列表上询问他们认为他们的进展如何。

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

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

考虑到 GC 行为的更改可能会对现有部署造成很大的破坏,即使在没有提前通知的情况下,我们也不愿意在主要版本中进行这样的更改。因此,在当前版本中,如果您不指定收集器,我们会尝试做出一些简单的自动化选择,但我怀疑我们会在短期内对这种行为做出根本性的改变。

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

我们继续鼓励每个人测试和评估 G1,当然,在我们继续对 G1 进行重大开发时,向我们提供反馈。

-约翰

编辑:根据Oracle 网站上的这个链接,现在 G1GC 似乎得到了完全支持。

于 2011-12-08T06:38:54.877 回答
6

我们已经在使用 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
于 2012-06-20T14:13:14.580 回答
2

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

G1 开发现在主要集中在解决任何剩余的可靠性问题和提高性能

还,

在 GC 暂停时间方面,G1 有时比 CMS 更好,有时更差。正在进行工作以使 G1 始终与 CMS 一样好,甚至更好。

因此,当官方 JDK SE 7 发布时,G1 应该会取代 CMS。

于 2011-12-06T03:00:14.987 回答
1

看起来问题中链接的页面已更新:

Oracle JDK 7 update 4 及更高版本完全支持 Garbage-First (G1) 垃圾收集器。

(但是请注意,对于像 ARM 这样的嵌入式平台,7u4 根本不支持它。)

于 2012-07-06T20:59:48.210 回答
1

AFAIK,G1 并不是秘密——它已经开放供实验使用足够长的时间——至少一两年。每个 JavaOne 都附带一些关于 G1 有多好的演讲:)

来自非官方消息来源:这是 Java 工程师当前关注的重点之一,最终使 G1 生产做好准备。他们只是还没准备好为 JDK 7 打开它。请继续等待 :)

于 2011-12-10T12:18:25.033 回答
1

自 Java 7 update 4 版本发布以来,G1 GC 已准备好生产。

从 oracle文章(在 G1 垃圾收集器下)中,您可以找到 G1 GC 的真实用例。

如果应用程序具有以下一个或多个特征,则现在使用 CMS 或 ParallelOldGC 垃圾收集器运行的应用程序将受益于切换到 G1。

  1. Full GC 持续时间太长或太频繁。
  2. 对象分配率或提升率差异很大。
  3. 不需要的长时间垃圾收集或压缩暂停(超过 0.5 到 1 秒)

有关 G1GC 和要微调的关键参数的更多详细信息,请查看相关问题:

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

关于您的其他查询:

真的稳定了吗?剩下的问题(如泄漏、虚假崩溃和缺少仪器支持)是否已解决?如果是这样,为什么甲骨文将 G1GC 视为无证(尴尬?)秘密?G1 可能是一个失败的项目,现在默默地停止了吗?还是我需要为文件和支持付费?还是只是测试版?有人可以告诉我这里发生了什么吗?

  1. G1GC 稳定。
  2. 我在这个算法中没有发现任何漏洞。
  3. 甲骨文并没有将其保留为无证。您可以在此处此处找到有关 G1GC 的更多信息
  4. G1 不是一个失败的项目,G1GC 将成为新版本 java ( java 9 )中的默认 GC 算法
  5. 您无需支付支持费用。这不是测试版。
于 2016-02-15T12:46:54.283 回答