note: 在k8s构建项目的时候,选择不同镜像造成启动失败的问题,最终查证是jdk镜像的问题,下面简单汇总一下 Oracle JDK与OpenJDK 的对比
Oracle JDK与OpenJDK里的JVM都是HotSpot VM。从源码层面说,两者基本上是同一个东西。
从JDK7开始,Oracle JDK里的HotSpot VM,在研发的时候其实就是用放在OpenJDK的Mercurial代码库。也就是说跟大家从外部能实时看到的OpenJDK用的是同一个代码库。
HotSpot VM只有非常非常少量的功能没有在OpenJDK里,那部分在Oracle内部的代码库里。这些私有部分都不涉及JVM的核心功能。
所以当一个Oracle员工要构建OpenJDK时,他要做的事情跟外面的人一样:从http://hg.openjdk.java.net签出代码,构建。
而当他要构建Oracle JDK时,他同样需要先从http://hg.openjdk.java.net签出OpenJDK,然后从Oracle内部的代码库签出私有的部分,放在OpenJDK代码下的一个特定目录里,然后构建。
这些HotSpot VM私有的部分主要是Java Flight Recorder的内部实现,以及还有没有公开到OpenJDK的其它平台的port,例如Oracle自己的ARM、PPC版HotSpot VM。
JDK6的代码,由于历史原因,Sun JDK6跟OpenJDK6的代码并不同步。但是其中的HotSpot VM仍然是相对一致的。OpenJDK 6里的HotSpot VM只缺了一个Oracle JDK里才有的优化,那就是-XX:+UseCompressedString。这个功能实现得不太好,没带进JDK7/OpenJDK7,所以这点差异没有也罢。
OpenJDK原是SunMicrosystems公司为Java平台构建的Java开发环境(JDK)的开源版本,完全自由,开放源码。Sun Microsystems公司在2006年的JavaOne大会上称将对Java开放源代码,于2009年4月15日正式发布OpenJDK。甲骨文在2010 年收购SunMicrosystem之后接管了这个项目。
Oracle/Sun JDK里面包含的JVM是HotSpotVM,HotSpot VM只有非常非常少量的功能没有在OpenJDK里,那部分在Oracle内部的代码库里。这些私有部分都不涉及JVM的核心功能。所以说,Oracle/Sun JDK与OpenJDK其实使用的是同一个代码库。
值得注意的是,Oracle JDK只发布二进制安装包,而OpenJDK只发布源码。
总结:
- Oracle JDK版本将每三年发布一次,而OpenJDK版本每三个月发布一 次;
- OpenJDK 是一个参考模型并且是完全开源的,而Oracle JDK是 OpenJDK的一个实现,并不是完全开源的;
- Oracle JDK 比 OpenJDK 更稳定。OpenJDK和Oracle JDK的代码几乎 相同,但Oracle JDK有更多的类和一些错误修复。因此,如果您想开发 企业/商业软件,我建议您选择Oracle JDK,因为它经过了彻底的测试和 稳定。某些情况下,有些人提到在使用OpenJDK 可能会遇到了许多应 用程序崩溃的问题,但是,只需切换到Oracle JDK就可以解决问题;
- 顶级公司正在使用Oracle JDK,例如Android Studio,Minecraft和 IntelliJ IDEA开发工具,其中Open JDK不太受欢迎;
- 在响应性和JVM性能方面,Oracle JDK与OpenJDK相比提供了更好的 性能;
- Oracle JDK不会为即将发布的版本提供长期支持,用户每次都必须通过 更新到最新版本获得支持来获取最新版本; 7. Oracle JDK根据二进制代码许可协议获得许可,而OpenJDK根据GPL v2许可获得许可。