我想知道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可能是一个失败的项目,现在已经默默地停止了吗?或者我需要支付文档和支持吗?还是仅仅是测试版?有人可以告诉我这里发生了什么吗?
答案 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。
查看相关问题,了解有关G1GC的更多详细信息以及需要微调的关键参数:
Java 7 (JDK 7) garbage collection and documentation on G1
关于您的其他疑问:
它真的稳定了吗?是否已解决剩余的问题(如泄漏,虚假崩溃和缺少仪器支持)?如果是这样,为什么Oracle将G1GC视为无证(令人尴尬?)的秘密? G1可能是一个失败的项目,现在已经默默地停止了吗?或者我需要支付文档和支持吗?还是仅仅是测试版?有人可以告诉我这里发生了什么吗?