AdoptOpenJDK和Red Hat OpenJDK在Windows上的技术差异

20

Red Hat提供 Red Hat OpenJDK 8 用于Windows开发使用(需注册)。AdoptOpenJDK提供适用于Windows的OpenJDK 8版本(AdoptOpenJDK 8 Windows),没有任何限制。

在使用相同版本/更新(例如8u181)时,这两个软件包之间是否存在技术差异?所谓的“技术差异”是指缺少的类/函数、不同的默认JVM设置等。


你需要联系RedHat来获取答案 - 但很可能两者都是从相同的源代码编译而来,就像http://www.azulsystems.com/products/zulu一样。 - user330315
2
我知道,但是Red Hat为开发人员提供的帮助论坛是Stackoverflow :) https://developers.redhat.com/help/ - derkoe
https://meta.stackoverflow.com/questions/255745/why-were-not-customer-support-for-your-favorite-company - user330315
1
@a_horse_with_no_name 告诉这个 Red Hat。 - derkoe
无论如何,了解所有OpenJDK构建Azul vs. Red Hat vs. Adopt vs. Oracle之间的技术差异都是很有趣的。 - derkoe
3个回答

35
Red Hat提供的OpenJDK 8 Windows二进制文件遵循与AdoptOpenJDK和其他开源OpenJDK 8构建完全相同的许可证 - GNU GPL v. 2 with classpath exception。所有关于“开发使用”的限制仅与可以从Red Hat购买的订阅(支持)相关。
Red Hat OpenJDK 8 for Windows和其他提到的构建之间的技术差异相当小,因为所有这些构建都通过了TCK。通常,Red Hat构建试图尽可能接近包含在RHEL和CentOS中的OpenJDK 8软件包的行为。
区别:
  1. RH OpenJDK 8的构建是基于RHEL/CentOS中使用的OpenJDK RPM软件包的源代码。这些源代码通常非常接近上游源码,但包含一些更改(见下文),并可能提前包含一些错误修复(RPM补丁)。可以在公开可用的CentOS RPM存储库中跟踪RHEL/CentOS的更改。

  2. RH OpenJDK 8包括Shenandoah垃圾回收器

  3. RH OpenJDK 8使用来自RHEL/CentOS的依赖库(zlib、giflib、libjpeg-turbo、libpng、nss不再使用nss))的源代码,而不是在上游jdk源代码中包含的这些库的部分源代码。

  4. RH OpenJDK 8中的椭圆加密实现仅包括3种最流行的椭圆曲线- NIST P-256、NIST P-384和NIST P-521。

  5. RH OpenJDK 8使用来自RHEL/CentOS的根CA证书集。

  6. RH OpenJDK 8可能使用略微更新的时区数据-它来自于RHEL/CentOS。

  7. RH OpenJDK 8包括src.zip文件中的所有Java源代码(IDE用于浏览jdk代码),在上游构建中,这些源代码的大部分未被包含。

  8. RH OpenJDK 8不包括演示和示例。

  9. RH OpenJDK 8包括一组字体文件。

  10. RH OpenJDK 8中的所有本机二进制文件都由RH证书签名。

  11. RH OpenJDK 8安装程序包括JavaFX实现

  12. RH OpenJDK 8安装程序包括WebStart实现

来源:我在红帽公司负责OpenJDK Windows构建。


1
我自己检查了一些差异,发现来自红帽的 rt.jar 包含调试信息(LocalVariableTable、LocalVariableTypeTable)。Oracle 和 AdoptOpenJDK 编译时没有包含调试信息。 - derkoe
确实,这也是从RHEL/CentOS中获取的 - 链接 - alexkasko
@alexkasko 你知道在RH OpenJDK中是否有关于椭圆曲线的文档吗?我们刚刚被这个问题困扰了,但似乎没有找到任何支持或不支持的文档。 - Patrick
1
@Patrick:支持secp256r1、secp384r1和secp521r1,另请参阅此邮件列表线程 - alexkasko
1
@jeremyh,1)你提供的文章是关于在access.redhat.com上下载OpenJDK(非公共)的内容,而我的回答是关于在developers.redhat.com上下载的。2)我是将“仅限开发”消息添加到该页面标题中的人,这个消息的唯一目的是提供“客户门户”的链接,以便访问从access.redhat.com下载的内容(这些内容应该由希望向RH请求支持的客户使用);IANAL,所有OSS OpenJDK构建都只能在GPLv2+CE下分发。 - alexkasko
显示剩余3条评论

1
我发现AdoptOpenJDK的主要区别在于,你可以选择两种不同的虚拟机实现方式:HotSpot和Eclipse Open J9。我发现HotSpot的性能与Oracle的实现类似,都很慢。而基于IBM SDK 8的Eclipse Open J9 jvm实现则要高效得多,并且现在已经开源。为了确认这一点,我有一个Eclipse Maven项目,使用Oracle的JVM实现编译速度很慢。
以下是编译时间的对比:
  1. AdoptOpenJDK Eclipse Open J9 - 1分钟
  2. IBM SDK 8(商业许可证)- 1分钟
  3. AdoptOpenJDK OpenJDK8 with HotSpot - 7分钟
  4. Oracle Java HotSpot(TM) (build 1.8.0_181-b13) - 11分钟
所以我认为,开源Oracle的JVM比商业版更好,但是开源IBM的JDK并使用Open J9要更好,编译时间性能提升了一个数量级(对于我的项目)。

谢谢指出,但我想知道热点版本之间的区别。 - derkoe
1
我们在一个大型应用的Maven构建上尝试了这个 - 编译目标显示HotSpot和J9之间没有区别。 - derkoe
是的,我在使用Java 7时也遇到了Oracle的JVM性能问题,但是在迁移到Java 8后,我开始遇到非常大的内存需求和我的项目100% CPU利用率问题。因此,在HotSpot中应该存在一个错误,而Open J9和IBM SDK已经解决了这个问题,尽管我不知道根本原因是什么。 - Gabriel Hernandez

0

这个答案是误导性的。正如被接受的答案所述,“有关‘开发使用’的所有限制都只与可以从 Red Hat 购买的订阅(支持)有关。” - Peaeater

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接