注意:此问题来自 2014 年。从 Java 11 开始,OpenJDK 和 Oracle JDK 正在融合。
Oracle 和 OpenJDK 之间有什么重要区别吗?
例如,垃圾回收和其他 JVM 参数是否相同?
两者之间的 GC 工作方式是否有所不同?
目前,OpenJDK 和 Oracle JDK 均仅由 Oracle 创建和维护。
OpenJDK 和 Oracle JDK 是通过 TCK(Java 技术认证套件)的同一 Java 规范的实现。
大多数 JDK 供应商都是在 OpenJDK 之上编写的,它们做了一些调整 [主要是替换许可的专有部件 / 替换为仅在特定 OS 上可用的更多高性能项目] 组件,而又没有破坏 TCK 兼容性。
许多供应商实施了 Java 规范并通过了 TCK。例如,IBM J9,Azul Zulu,Azul Zing 和 Oracle JDK。
几乎每个现有的 JDK 都派生自 OpenJDK。
正如许多人所建议的那样,许可是 JDK 之间的一种变化。
从 JDK 11 开始获得长期支持,Oracle JDK / Java SE 现在将需要商业许可。现在,您应该注意要安装的 JDK,因为没有订阅的 Oracle JDK 可能会停止工作。 来源
参考: Java 虚拟机列表
对于Java 7 ,没有什么至关重要的。 OpenJDK 项目主要基于 Sun 捐赠的HotSpot 源代码。
此外,OpenJDK 被选为Java 7 的参考实现,并且由 Oracle 工程师维护。
2012 年有一个关于JVM,JDK,JRE 和 OpenJDK 之间区别的更详细的答案,该链接链接到Oracle 博客文章:
问:在 OpenJDK 存储库中找到的源代码与用于构建 Oracle JDK 的代码有什么区别?
答:非常接近 - 我们针对 Oracle JDK 的构建过程是在 OpenJDK 7 上构建的,仅添加了几段内容,例如部署代码,其中包括 Oracle 对 Java Plugin 和 Java WebStart 的实现,以及一些封闭源代码。第三方组件(例如图形光栅化程序),一些开源第三方组件(例如 Rhino)以及一些零碎的地方,例如其他文档或第三方字体。展望未来,我们的意图是将 Oracle JDK 的所有部分开源,但那些我们认为具有商业功能的部分(例如 JRockit Mission Control(Oracle JDK 中尚不可用)),并用开源替代品替代受害的第三方组件以实现更紧密的比价在代码库之间。
未来的主要区别是发布计划和支持策略。
OpenJDK 将每 6 个月发布一次功能发布,仅在下一个功能发布之前受支持。从本质上讲,它是针对开发人员的连续发行版本。
Oracle JDK 的目标人群更多是重视稳定性的企业用户。它基于 OpenJDK 发行版之一,但随后获得了长期支持(LTS)。 Oracle JDK 已计划每 3 年发布一次。