Sun 仅通过付费支持合同提供最新 G1 垃圾收集器?

  • Dio Synodinos
  • 崔康

2009 年 6 月 2 日

话题:JavaJVM语言 & 开发架构

Sun 的 Garbage First 垃圾收集器(G1)已经随 Java Update 1.6.0_14 (6u14) 发布。虽然开发社区对这款短暂停、服务器风格的收集器盼望已久,但是目前 Sun 仅允许付费用户用于生产环境。

InfoQ 之前已经报道过 G1 的技术细节:

Sun 公司的 Garbage First 垃圾收集器是一款短暂停的垃圾收集器,计划用来取代 Hotspot JVM 中的 CMS。它是一种服务器风格的垃圾收集器,主要针对多处理器大内存的机器。CMS 与 G1 有两大区别。第一,G1 是一款压缩型的收集器。压缩,也就是把 活动的对象从原先的存储地址移到堆的一端,那么堆的另外一端就会有整块的空闲内存,这对于长时间运行的应用系统来说非常重要,因为时间一长,这些系统不可 避免都会产生内存碎片。G1 通过有效的压缩完全避免了对细微空闲内存空间的分配,这不仅大大简化了收集器,而且还消除了潜在的碎片问题。除压缩以外,G1 的垃圾收集停顿也比 CMS 容易估计,它允许用户自定义所希望的停顿参数。这种确定性也让 G1 具有某种实时级别的垃圾收集特征,但这还不是“硬实时”,因为 底层操作系统的某些调度因素无法保证上述的停顿机制。尽管如此,与 Java 实时产品相比,G1 对开发人员来说相对更容易使用,因为已有的程序不需要修改代 码就能利用 G1 改善自身性能。G1 采用了很多有意思的技术,它根据全局的标志信息和其度量,按各个区域的 GC 效率给区域排列垃圾收集的优先级。

G1 在update 6u14中发布:

Garbage First,也就是 G1,是一款短暂停、服务器风格的收集器。G1 相比并发标记—收集器(CMS)的主要优势在于增量压缩、更好的预测和易用性。

... 但是其发行说明中提到你必须与 Sun 达成支持合同才可以把 G1 用于生产环境中:

虽然 G1 已经发布,请注意对 G1 的生产环境使用必须购买 Java 支持合同才能获得授权。G1 通过 Sun 的Java Platform Standard Edition for Business program获得支持。

很多人认为这标志着 Sun 的政策转变,并且与 Oracle 的收购有关:

Java 的收费开始了。Sun 今天发布了 Java 1.6.0_14 JDK 和 JRE,其中包含了一个很酷的新垃圾收集器 G1。不过有一点值得注意。虽然 G1 包含在该发布中,发行说明提到“虽然 G1 已经发布,请注意对 G1 的 生产环境使用必须购买 Java 支持合同才能获得授权。”由此看出,Oracle 的影响已经开始发挥作用。当所有的好东西都进入 Java SE 的商业版本,OpenJDK 是否注定落到被阉割的境地?

其他人则认为这一条款与 G1 的实验性本质有关,在未来版本中会被删除:

当我第一次看到这个说明时,我首先想到的是它其实是想说“现在的代码不适合生产环境,但是不管怎样我们还是发布了,缺省情况下不启用,你的应用表现可能与你的期望不同,如果你准备在生产环境中启用然后发现问题的话,除非你签署了支持合同,否则我们是不会协助你的。”

我怀疑可能在 u14 之后的更新或者 JDK7 发布时,这个支持要求可能会消失。

考虑到G1 是 JDK/OpenJDK7 预告的功能之一,Sun 似乎不太可能只提供给付费用户。

你认为 Sun 应用利用下一代 Java/JVM 的某些功能赚钱吗?这会对 Java 带来什么影响?

查看英文原文:Is Sun offering the new G1 Garbage Collector Only with a Paid Support Contract?

JavaJVM语言 & 开发架构