【问题标题】:Technical difference between AdoptOpenJDK and Red Hat OpenJDK for WindowsAdoptOpenJDK 和 Red Hat OpenJDK for Windows 之间的技术差异
【发布时间】:2018-09-06 11:13:04
【问题描述】:

Red hat 为 Windows 提供 Red Hat OpenJDK 8 仅供开发使用(需要注册)。 AdoptOpenJDK 为 Windows (AdoptOpenJDK 8 Windows) 提供 OpenJDK 8 版本,没有任何限制。

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

【问题讨论】:

标签: java windows redhat-openjdk


【解决方案1】:

Red Hat 在与 AdoptOpenJDK 和任何其他开源 OpenJDK 8 版本完全相同的许可下提供 OpenJDK 8 Windows 二进制文件 - 在 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 包的源代码完成的。这些来源通常非常接近upstream sources,但包含一些更改(请参阅下面的点),并且可能提前包含一些错误修复(RPM 补丁)。可以在公开的repo for CentOS RPM

  2. 中跟踪 RHEL/CentOS 更改
  3. RH OpenJDK 8 包括Shenandoah garbage collector

  4. RH OpenJDK 8 使用来自 RHEL/CentOS 的源代码作为依赖库(zlib、giflib、libjpeg-turbo、libpng、nss (nss is not used anymore))而不是(部分)源代码这些库中包含在上游 jdk 源中的树中

  5. RH OpenJDK 8 中的椭圆加密实现仅包括 3 个最流行的 elliptic curves - NIST P-256、NIST P-384 和 NIST P-521。

  6. RH OpenJDK 8 使用一组来自 RHEL/CentOS 的根 CA 证书

  7. RH OpenJDK 8 可能使用稍新的时区数据 - 它取自 RHEL/CentOS

  8. RH OpenJDK 8 将所有 Java 源代码包含在 src.zip 文件中(IDE 使用它来允许浏览 jdk 代码),在上游构建中这些源的大部分不包括在内

    李>
  9. RH OpenJDK 8 不包含演示和示例

  10. RH OpenJDK 8 包含一组字体文件

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

  12. RH OpenJDK 8 安装程序包括一个JavaFX implementation

  13. RH OpenJDK 8 安装程序包括一个WebStart implementation

资料来源:我在 RH 从事 OpenJDK Windows 构建工作。

【讨论】:

  • 我自己检查了一些差异,发现 Red Hat 的 rt.jar 包含调试信息(LocalVariableTable、LocalVariableTypeTable)。 Oracle 和 AdoptOpenJDK 编译时没有调试信息。
  • 确实,这也是取自 RHEL/CentOS - link
  • @alexkasko 你知道是否有任何关于 RH OpenJDK 中的椭圆曲线的文档吗?我们只是对此有所了解,但似乎没有找到任何支持或不支持的内容。
  • @Patrick:支持 secp256r1、secp384r1 和 secp521r1,另见maillist thread
  • 感谢更新,alexkasko!我猜这与 NSS 库中支持的曲线有关?我已经研究了一个小时,但由于任何其他原因(或者为什么它只会是这些曲线......)仍然找不到有效的文档。
【解决方案2】:

我发现 AdoptOpenJDK 的主要区别在于,您可以从 2 种不同的 VM 实现中进行选择,我发现 HotSpot 的性能与 Oracle 的实现相似,或者基于前 IBM 的更高效的 Eclipse Open J9 jvm 实现SDK 8 现在是开源的。 为了确认我有一个 Eclipse Maven 项目,它在 Oracle 的 JVM 实现中编译速度很慢。

  1. AdoptOpenJDK Eclipse Open J9 - 1 分钟
  2. IBM SDK 8(商业许可)- 1 分钟
  3. 采用带 HotSpot 的 OpenJDK OpenJDK8 - 7 分钟
  4. Oracle Java HotSpot(TM)(内部版本 1.8.0_181-b13)- 11 分钟

所以我认为开源 Oracle 的 JVM 比 Oracle 的商业 JVM 提供了更好的结果,但是开源 IBM 的 JDK 与 Open J9 更好,并且性能在编译时间上快了 1 个数量级(对于我的项目)。

【讨论】:

  • 感谢您指出这一点,但我想知道 HotSpot 版本之间的区别。
  • 在我们的一个大型应用程序的 Maven 构建上试过这个 - 编译目标显示 HotSpot 和 J9 之间没有区别
  • 是的,我在使用 Java 7 时在 Oracle 的 JVM 上也遇到了很好的性能问题,但是在迁移到 Java 8 之后,我开始遇到非常大的内存需求和我的项目 100% 的 CPU 利用率问题。所以HotSpot应该有一个漏洞,Open J9和IBM SDK已经解决了。虽然我不知道根本原因是什么。
【解决方案3】:

redhat 提供的 openjdk 发行版无需订阅即可在生产中使用,这看起来并不正确。

https://developers.redhat.com/products/openjdk/download/ 所以这个页面正确地说它仅供开发使用。 来源:https://access.redhat.com/solutions/3116731

【讨论】:

  • 这个答案具有误导性。正如已接受的答案中所述,“有关“开发使用”的所有限制仅与可从 Red Hat 购买的订阅(支持)有关。”
猜你喜欢
  • 1970-01-01
  • 2011-03-23
  • 2016-10-28
  • 2011-09-02
  • 2012-07-14
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多