注:此问题来自2014年。截至Java 11 OpenJDK和OracleJDK正在融合。

Oracle和OpenJDK之间有什么关键的区别吗?

例如,垃圾收集和其他JVM参数是否相同?

GC在两者之间的工作方式不同吗?


当前回答

对于Java 8、Oracle JDK与OpenJDK,我的主要区别是:

OpenJDK是Java Standard Edition平台的开源实现,Oracle和开放Java社区对此做出了贡献。OpenJDK根据许可证GPL v2发布,其中Oracle JDK根据Oracle二进制代码许可协议获得许可。实际上,OracleJDK的构建过程是从OpenJDK源代码构建的。因此,OracleJDK和OpenJDK之间没有主要的技术差异。除了基本代码之外,OracleJDK还包括Oracle的Java插件和Java WebStart的实现。它还包括第三方开源和开源组件,如图形光栅化器和Rhino。OpenJDK字体渲染器和Oracle JDK飞行记录器是Oracle JDK和OpenJDK之间显著的主要区别。Rockit是Oracle的JVM,从JavaSE7、HotSpot和JRockit合并为一个JVM。所以现在我们只有合并的HotSpot JVM可用。有些情况下,人们声称他们在运行OpenJDK时遇到了问题,当切换到OracleJDK时,问题得到了解决。Twitter有自己的JDK。像Minecraft这样的软件希望使用Oracle JDK。事实上,他警告说。

有关差异的完整列表,请参阅源文章:Oracle JDK与OpenJDK和Java JDK开发过程

其他回答

它非常接近-我们的Oracle JDK版本的构建过程是在OpenJDK 7上构建的,只添加了几个部分,如部署代码,其中包括Oracle的Java插件和Java WebStart的实现,以及一些封闭源代码的第三方组件,如图形光栅化器,一些开源第三方部件,如Rhino,如其他文档或第三方字体。接下来,我们打算开源OracleJDK的所有部分,除了那些我们认为具有商业功能的部分,如JRockit任务控制(在OracleJDK中尚不可用),并用开源替代品替换受阻碍的第三方组件,以实现代码库之间的更接近对等。

·是的,垃圾收集和其他JVM参数是相同的。

·GC的性能在两者中都是相同的。

Oracle JDK 11和OpenJDK 11之间剩下的几个外观和包装差异可以在这篇博文中找到:

https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later

简而言之:

Oracle JDK 11在使用-XX:+UnlockCommercialFeatures选项时发出警告,它可以配置为向“高级管理控制台”工具提供使用日志数据,它总是要求第三方密码提供者由已知证书签名,它将继续包括安装程序、品牌和JRE打包,而javac-release命令对于Java 9和Java 10目标的行为略有不同,并且java-version和java-fullversion命令的输出将区分OracleJDK版本和OpenJDK版本。

未来的一个关键区别是发布时间表和支持政策。

OpenJDK

OpenJDK将每6个月发布一次功能版本,只有在下一个功能版本之前才受支持。它本质上是针对开发人员的连续发布流。

Oracle JDK

Oracle JDK更多地面向看重稳定性的企业受众。它基于OpenJDK版本之一,但然后给予长期支持(LTS)。Oracle JDK计划每3年发布一次。

资料来源:https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-社交&size=事件

对于Java 8、Oracle JDK与OpenJDK,我的主要区别是:

OpenJDK是Java Standard Edition平台的开源实现,Oracle和开放Java社区对此做出了贡献。OpenJDK根据许可证GPL v2发布,其中Oracle JDK根据Oracle二进制代码许可协议获得许可。实际上,OracleJDK的构建过程是从OpenJDK源代码构建的。因此,OracleJDK和OpenJDK之间没有主要的技术差异。除了基本代码之外,OracleJDK还包括Oracle的Java插件和Java WebStart的实现。它还包括第三方开源和开源组件,如图形光栅化器和Rhino。OpenJDK字体渲染器和Oracle JDK飞行记录器是Oracle JDK和OpenJDK之间显著的主要区别。Rockit是Oracle的JVM,从JavaSE7、HotSpot和JRockit合并为一个JVM。所以现在我们只有合并的HotSpot JVM可用。有些情况下,人们声称他们在运行OpenJDK时遇到了问题,当切换到OracleJDK时,问题得到了解决。Twitter有自己的JDK。像Minecraft这样的软件希望使用Oracle JDK。事实上,他警告说。

有关差异的完整列表,请参阅源文章:Oracle JDK与OpenJDK和Java JDK开发过程

Oracle和OpenJDKJVM是相同的,并且具有相同的GC功能(从最新版本10+开始)。在Oracle管理OpenJDK JVM之前,存在一些具体的差异,使得旧的OpenJDK JVM在许多环境中几乎不可用。JVM现在是相同的。

包含JVM作为工具包一部分的JDK在许可、发布和维护计划以及JDK中包含的软件库方面有所不同。对我来说,关键的差异也意味着,如果代码不存在,代码将无法运行。不仅仅是许可。

diff --brief -r openjdk oraclejdk

重要的是,除了linux JDK上的一堆其他文件外,还缺少以下文件(因此,如果您在使用javafx时“声称”代码在OpenJDK上不起作用,而在OracleJDK上起作用,那么您是正确的):

Only in jdk-10.0.1/bin: javapackager
Only in jdk-10.0.1/bin: javaws
Only in jdk-10.0.1/bin: jcontrol
Only in jdk-10.0.1/bin: jmc
Only in jdk-10.0.1/bin: jweblauncher
Only in jdk-10.0.1/lib: ant-javafx.jar
Only in jdk-10.0.1/lib: deploy
Only in jdk-10.0.1/lib: deploy.jar
Only in jdk-10.0.1/lib: desktop
Only in jdk-10.0.1/lib: fontconfig.bfc
Only in jdk-10.0.1/lib: fontconfig.properties.src
Only in jdk-10.0.1/lib: fontconfig.RedHat.6.bfc
Only in jdk-10.0.1/lib: fontconfig.RedHat.6.properties.src
Only in jdk-10.0.1/lib: fontconfig.SuSE.11.bfc
Only in jdk-10.0.1/lib: fontconfig.SuSE.11.properties.src
Only in jdk-10.0.1/lib: fonts
Only in jdk-10.0.1/lib: javafx.properties
Only in jdk-10.0.1/lib: javafx-swt.jar
Only in jdk-10.0.1/lib: java.jnlp.jar
Only in jdk-10.0.1/lib: javaws.jar
Only in jdk-10.0.1/lib: jdk.deploy.jar
Only in jdk-10.0.1/lib: jdk.javaws.jar
Only in jdk-10.0.1/lib: jdk.plugin.jar
Only in jdk-10.0.1/lib: jfr
Only in jdk-10.0.1/lib: libavplugin-53.so
Only in jdk-10.0.1/lib: libavplugin-54.so
Only in jdk-10.0.1/lib: libavplugin-55.so
Only in jdk-10.0.1/lib: libavplugin-56.so
Only in jdk-10.0.1/lib: libavplugin-57.so
Only in jdk-10.0.1/lib: libavplugin-ffmpeg-56.so
Only in jdk-10.0.1/lib: libavplugin-ffmpeg-57.so
Only in jdk-10.0.1/lib: libbci.so
Only in jdk-10.0.1/lib: libcmm.so
Only in jdk-10.0.1/lib: libdecora_sse.so
Only in jdk-10.0.1/lib: libdeploy.so
Only in jdk-10.0.1/lib: libfxplugins.so
Only in jdk-10.0.1/lib: libglassgtk2.so
Only in jdk-10.0.1/lib: libglassgtk3.so
Only in jdk-10.0.1/lib: libglass.so
Only in jdk-10.0.1/lib: libgstreamer-lite.so
Only in jdk-10.0.1/lib: libjavafx_font_freetype.so
Only in jdk-10.0.1/lib: libjavafx_font_pango.so
Only in jdk-10.0.1/lib: libjavafx_font.so
Only in jdk-10.0.1/lib: libjavafx_iio.so
Only in jdk-10.0.1/lib: libjfxmedia.so
Only in jdk-10.0.1/lib: libjfxwebkit.so
Only in jdk-10.0.1/lib: libnpjp2.so
Only in jdk-10.0.1/lib: libprism_common.so
Only in jdk-10.0.1/lib: libprism_es2.so
Only in jdk-10.0.1/lib: libprism_sw.so
Only in jdk-10.0.1/lib: librm.so
Only in jdk-10.0.1/lib: libt2k.so
Only in jdk-10.0.1/lib: locale
Only in jdk-10.0.1/lib: missioncontrol
Only in jdk-10.0.1/lib: oblique-fonts
Only in jdk-10.0.1/lib: plugin.jar
Only in jdk-10.0.1/lib: plugin-legacy.jar
Only in jdk-10.0.1/lib/security: blacklist
Only in jdk-10.0.1/lib/security: public_suffix_list.dat
Only in jdk-10.0.1/lib/security: trusted.libraries
Only in openjdk-10.0.1: man`