从技术上讲,Oracle JDK 和 OpenJDK 之间的主要区别是啥? [复制]
Posted
技术标签:
【中文标题】从技术上讲,Oracle JDK 和 OpenJDK 之间的主要区别是啥? [复制]【英文标题】:Technically what is the main difference between Oracle JDK and OpenJDK? [duplicate]从技术上讲,Oracle JDK 和 OpenJDK 之间的主要区别是什么? [复制] 【发布时间】:2013-06-25 22:47:44 【问题描述】:我已经使用 OpenJDK 很长时间了,最初是用于没有问题的小型项目。但是自从我开始用它来玩大玩具后,我开始注意到随机/未知的致命错误和崩溃(使用 H.264 编解码器等),在此之前获得系统崩溃+致命错误是一场噩梦由 OpenJDK 引起的。
在对 OpenJDK 彻底失望和厌倦之后,我最终决定切换到 Oracle JDK 7。从那时起,我的致命错误/崩溃就消失了。我仍在跟踪以查看它是否发生,但我还没有遇到那些系统崩溃。
现在我想知道,如果 OpenJDK 只是一个许可证问题,为什么它不可能稳定?
为什么 OpenJDK 在其稳定版本中保留错误,但声称它是 Oracle JDK 的克隆(实际上并非如此),那么在技术上真正将 OpenJDK 与 Oracle JDK 区分开来的是什么? (只有快速的功能可用性?还是专注于稳定性/可靠性?)
【问题讨论】:
@Ved 不是同一个问题,在你评论的那个问题上,问题是是否应该使用 JDK,这里的问题是关于技术差异 这不是同一个问题 找到更好的答案:***.com/a/59041992/248847 【参考方案1】:技术差异是各自目标的结果(OpenJDK 旨在作为参考实现,对社区开放,而 Oracle 旨在成为商业实现)
它们都具有“几乎”相同的 Java API 类代码;但是虚拟机本身的代码其实是不一样的,在库方面,OpenJDK倾向于使用开放的库,而Oracle倾向于使用封闭的库;例如,the font library。
【讨论】:
这在 Java 7 中并不完全正确,当时 Oracle 用开源等效项替换了许多闭源部分。虚拟机的代码实际上几乎完全相同,但是有几个库(例如字体库)是关闭的。 哇,好混乱。那么在Java 7之后,当你用OpenJDK-JRE打包一个应用程序时,它与Oracle ServerJDK-JRE打包它是相同吗?【参考方案2】:OpenJDK 是一个参考模型并且是开源的,而 Oracle JDK 是 OpenJDK 的一个实现并且不是开源的。 Oracle JDK 比 OpenJDK 更稳定。
OpenJDK 在 GPL v2 许可下发布,而 Oracle JDK 在 Oracle 二进制代码许可协议下获得许可。
OpenJDK 和 Oracle JDK 的代码几乎相同,但 Oracle JDK 的类更多,并且修复了一些错误。
因此,如果您想开发企业/商业软件,我建议您使用 Oracle JDK,因为它经过全面测试且稳定。
我在使用 OpenJDK 时遇到了很多应用程序崩溃问题,只需切换到 Oracle JDK 就可以解决这些问题
【讨论】:
Oracle JDK 是封闭源代码并不完全正确。 Oracle JDK 的每个副本都附带 src.zip,其中包含 jdk 中的许多源文件。 关于“使用 OpenJDK 应用程序崩溃的很多问题”,请列出它们? Cheeso,这里是列表bugs.openjdk.java.net/issues/… 我最近遇到了使用 URLConnection 通过 HTTP 轮询数据源的代码问题。在 Oracle JDK 7 和 8 上运行良好,但在 OpenJDK 7 和 8 中会间歇性丢失 cookie 头。我真的希望像 HttpUrlConnection 这样的东西现在在两者之间是统一的......最后切换到 Apache HttpClient 让我不必安装 Oracle JDK。另一个例子:OpenJDK 8 不支持 TLS_ECDHE 密码套件,尽管它支持 TLS_DHE。这很糟糕,但我会牺牲一些 CPU 来让我的 EC2 部署更简单 @rajeshnair,这是 OpenJDK 未解决的 bug 列表,并不意味着在 Oracle JDK 中“已修复”!以上是关于从技术上讲,Oracle JDK 和 OpenJDK 之间的主要区别是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu18.04安装java+tomcat+mysql环境