从技术上讲,Oracle JDK和OpenJDK之间的主要区别是什么?

115 java linux java-7

我一直在使用OpenJDK,最初用于没有问题的小项目.但是自从我开始玩大玩具之后,我开始注意到随机/未知的致命错误和崩溃(使用H.264编解码器等),直到那时才出现系统崩溃和致命错误的噩梦由OpenJDK引起.

在对OpenJDK感到非常沮丧和厌倦之后,我终于决定切换到Oracle JDK 7.从那以后,我的致命错误/崩溃消失了.我仍然在追踪它是否发生,但我从未遇到过那些系统崩溃.

现在我想知道,如果OpenJDK只是一个许可证问题,为什么稳定性不可能呢?

为什么OpenJDK在他们的稳定版本中保留了bug,但是声称它是Oracle JDK的克隆(实际上并不是这样),那么OpenJDK和Oracle JDK在技术上是分开的?(只有快速功能可用性?还是专注于稳定性/可靠性?)

mor*_*ano 72

技术差异是每个人的目标的结果(OpenJDK意味着参考实现,对社区开放,而Oracle意味着是商业的)

它们都具有Java API中几乎相同的类代码; 但是虚拟机本身的代码实际上是不同的,当涉及到库时,OpenJDK倾向于使用开放库,而Oracle倾向于使用封闭的库; 例如, 字体库.

  • 从Java 7开始,当Oracle用开源等效替换了许多封闭的源代码时,情况就不那么正确了.虚拟机的代码实际上几乎完全相同,但有几个库(例如字体一个)被关闭. (68认同)

Use*_*007 65

OpenJDK是一个参考模型和开源,而Oracle JDK是OpenJDK的一个实现,并不是开源的.Oracle JDK比OpenJDK更稳定.

OpenJDK根据GPL v2许可发布,其中Oracle JDK根据Oracle二进制代码许可协议获得许可.

OpenJDK和Oracle JDK的代码几乎相同,但Oracle JDK有更多的类和一些错误修复.

因此,如果您想开发企业/商业软件,我建议您选择Oracle JDK,因为它经过了彻底的测试和稳定.

我使用OpenJDK遇到了许多应用程序崩溃的问题,只需切换到Oracle JDK就可以解决这个问题

  • Cheeso,这里是列表https://bugs.openjdk.java.net/issues/?jql=project%20%3D%20JDK%20AND%20issuetype%20%3D%20Bug%20AND%20resolution%20%3D%20Unresolved %20ORDER%20BY%20priority%20DESC (16认同)
  • 重新"使用OpenJDK应用程序崩溃的许多问题",请列出它们? (11认同)
  • @rajeshnair,这是未解决的OpenJDK错误列表,并不意味着在Oracle JDK中"已修复"! (10认同)
  • 我最近遇到了使用URLConnection通过HTTP轮询数据源的代码问题.与Oracle JDK 7和8一起工作得很好,但是会间歇性地丢失使用OpenJDK 7和8的cookie头.我真的希望像HttpUrlConnection这样的东西现在都是统一的......最后切换到Apache HttpClient使我不必安装Oracle JDK.另一个例子:OpenJDK 8不支持TLS_ECDHE密码套件,但它支持TLS_DHE.这是一个无赖,但我会牺牲一些CPU来保持我的EC2部署更简单 (9认同)
  • Oracle JDK是封闭源代码并不完全正确.Oracle JDK的每个副本都附带src.zip,其中包含jdk中的许多源文件. (8认同)
  • @BùiViệtThành,Oracle的JDK错误列表**然后**? (2认同)
  • @Pacerier,由于代码库之间存在很大的重叠,因此可以肯定的是,上面*是* Oracle JDK 的错误列表。 (2认同)