G1GC还没有正式生产吗?

时间:2011-12-03 17:34:14

标签: java garbage-collection heap-memory g1gc

我想知道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功能:

Java 7 (JDK 7) garbage collection and documentation on 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的真实状态及其未来是什么。它真的稳定吗?是否已解决剩余的问题(如泄漏,虚假崩溃和缺少仪器支持)?如果是这样,为什么Oracle将G1GC视为无证(令人尴尬?)的秘密? G1可能是一个失败的项目,现在已经默默地停止了吗?或者我需要支付文档和支持吗?还是仅仅是测试版?有人可以告诉我这里发生了什么吗?

6 个答案:

答案 0 :(得分:12)

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

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

我没有找到任何官方新闻公告,但这就是Oracle的工作方式。如果你对其中一个开发者的非官方和非约束性评论感到满意,你或许可以在邮件列表上询问他们认为他们会怎么做。

编辑: @scravy已将an email发送到邮件列表,这是收到的response

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

     

考虑到GC行为的改变可能会造成非常大的破坏         现有的部署,我们不愿意这样做         甚至在主要版本中也没有相当大的提前通所以在目前的版本中,如果你         不指定收集器,我们试图做一些简单的         自动选择,但我怀疑我们会做出根本改变         近期的行为。

     

关于G1支持的更大问题,目前         答案是否定的。但请记住,支持承诺         Oracle向其付费客户提供支持的产品         相当重要,除了会议之外还有更多内容         功能和可靠性要求。

     

我们继续鼓励大家测试和评估G1和         当然,随着我们继续发展,向我们提供反馈         G1的发展。

     

-John

编辑:根据this link on Oracle's site,现在看起来G1GC已得到完全支持。

答案 1 :(得分:4)

我们已经使用了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

答案 2 :(得分: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。

答案 3 :(得分:1)

AFAIK,G1并不是秘密 - 它可以让实验使用足够长的时间 - 至少一两年。每个JavaOne都附带了一些关于G1将如何变好的内容:)

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

答案 4 :(得分:1)

看起来the page linked in the question已更新:

  

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

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

答案 5 :(得分:1)

自从Java 7更新4版本发布以来,G1 GC已投入生产。

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

  

如果应用程序具有以下一个或多个特征,那么今天使用CMS或ParallelOldGC垃圾收集器运行的应用程序将有利于切换到G1。

  1. 完整的GC持续时间过长或过于频繁。
  2. 对象分配率或促销率差异很大。
  3. 不期望的长垃圾收集或压缩暂停(超过0.5到1秒)
  4. 查看相关问题,了解有关G1GC的更多详细信息以及需要微调的关键参数:

    Java 7 (JDK 7) garbage collection and documentation on G1

    关于您的其他疑问:

      

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

    1. G1GC稳定。
    2. 我没有在此算法中发现任何泄漏。
    3. Oracle并未将其保留为无证件。您可以找到有关G1GC herehere
    4. 的更多信息
    5. G1不是失败的项目,G1GC将成为较新版本的java(java 9)中的默认GC算法
    6. 您不需要支付费用。它不是测试版。