java—oracle jdk和openjdk之间的区别

ncgqoxb0  于 2021-06-27  发布在  Java
关注(0)|答案(6)|浏览(551)

注:此问题来自2014年。从Java11开始,openjdk和oracle jdk正在融合。
oracle和openjdk之间有什么重要的区别吗?
例如,垃圾回收和其他jvm参数是否相同?
gc在两者之间的工作方式不同吗?

yptwkmov

yptwkmov1#

根据oracle的博客,oraclejdk发布了java11及更高版本
从Java11开始,oracle将在开放源码gnu通用公共许可v2下提供jdk版本,类路径例外(gplv2+cpe),并在商业许可证下为那些将oracle jdk作为oracle产品或服务的一部分,或不希望使用开放源码软件的用户提供jdk版本。这种使用开源许可证和商业许可证的结合取代了历史上的“bcl”许可证,后者是免费和付费商业条款的结合。
每个许可证将提供不同的版本,但是除了一些外观和 Package 上的差异之外,这些版本在功能上是相同的,下面将详细介绍。
从bcl到gpl
OracleJavaSE技术的二进制代码许可证(“bcl”)是OracleJavaSE技术的主要许可证已有十多年了。bcl允许在某些条件下使用,无需支付许可费。为了简化未来的工作,oracle从java9开始提供开源许可的openjdk构建,使用与linux平台相同的许可模型。如果您习惯于免费获取oracle java se二进制文件,那么只需继续使用jdk.java.net上提供的oracle openjdk版本即可。如果您习惯于将oraclejavase二进制文件作为商业产品或服务的一部分从oracle获得,那么您可以通过myoraclesupport(mos)和其他位置继续获得oraclejdk版本。
功能相同且可互换。。。
oracle的bcl许可jdk历史上包含openjdk构建中不可用的“商业特性”。但是,正如所承诺的那样,在过去的一年中,oracle为openjdk社区提供了以下功能:
java飞行记录器,
java 任务控制,
应用程序类数据共享,以及
zgc公司。
因此,从java11开始,oraclejdk构建和openjdk构建在本质上是相同的。
…但在外观和 Package 上有一些不同
但仍然存在一些差异,有些是故意的,有些是装腔作势的,有些只是因为需要更多的时间与openjdk贡献者讨论。
oraclejdk11在使用-xx:+unlockcommercialfeatures选项时发出警告,而在openjdk构建中,此选项会导致错误。这个选项从来不是openjdk的一部分,现在添加它也没有意义,因为openjdk中没有商业特性。这种差异仍然存在,是为了让oraclejdk10和更早版本的用户更容易迁移到oraclejdk11和更高版本。
oraclejdk11可以配置为向“advancedmanagementconsole”工具提供使用日志数据,这是一个独立的商业oracle产品。我们将与其他openjdk贡献者一起讨论这些使用数据在未来的openjdk版本中是如何有用的(如果有的话)。这种差异主要是为了在做出此类决策之前为oracle客户提供一致的体验。
javac--release命令对java 9和java 10目标的行为不同,因为在这些版本中,oracle jdk包含一些附加模块,这些模块不是相应openjdk版本的一部分:
javafx.base文件
javafx.controls控件
javafx.fxml文件
javafx.graphics文件
javafx.media文件
javafx.web文件
java.jnlp文件
jdk.jfr公司
jdk.management.cmm
jdk.management.jfr文件
jdk.management.resource资源
jdk.packager.services包
jdk.snmp协议
这种差异仍然存在,以便为特定类型的遗留使用提供一致的体验。这些模块现在要么作为openjfx的一部分单独提供,要么同时存在于openjdk和oracle jdk中,因为它们是oracle为openjdk提供的商业功能(如flight recorder),要么从oracle jdk 11(如jnlp)中删除。
java--version和java-fullversion命令的输出将区分oracle jdk构建和openjdk构建,以便支持团队可以诊断可能存在的任何问题。具体来说,使用oracle jdk 11构建运行java--version会导致:
java 11 2018-09-25
java(tm)se运行时环境18.9(内部版本11+28)
java hotspot(tm)64位服务器vm 18.9(内部版本11+28,混合模式)
对于openjdk 11构建:
openjdk版本“11”2018-09-25
openjdk运行时环境18.9(构建11+28)
openjdk 64位服务器vm 18.9(构建11+28,混合模式)
oraclejdk一直要求第三方加密提供者由已知的证书签名。openjdk中的加密框架有一个开放的加密接口,这意味着它不限制可以使用哪些提供者。oraclejdk11将继续需要有效的签名,oracleopenjdk构建将继续允许

xxslljrj

xxslljrj2#

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

开放JDK

openjdk将每6个月发布一次功能版本,直到下一个功能版本才被支持。它本质上是针对开发人员的连续发布流。

甲骨文jdk

oraclejdk更面向重视稳定性的企业用户。它基于一个openjdk发行版,但随后获得了长期支持(lts)。oraclejdk计划每3年发布一次。

资料来源:https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playertype=single-social&size=events

8fq7wneg

8fq7wneg3#

对于Java7,没有什么是关键的。openjdk项目主要基于sun捐赠的hotspot源代码。
此外,openjdk被选为java7的参考实现,并由oracle工程师维护。
关于jvm、jdk、jre和openjdk之间的区别,2012年有一个更详细的答案,链接到oracle的博客文章:
问:在openjdk存储库中找到的源代码与用于构建oraclejdk的代码有什么区别?
答:非常接近-我们的oracle jdk版本的构建过程是在openjdk 7的基础上构建的,只添加了几部分,比如部署代码,其中包括oracle实现的java插件和java webstart,以及一些封闭源代码的第三方组件,如图形光栅化器、一些开放源代码的第三方组件,比如rhino,还有一些零碎的东西,比如附加文档或者第三方字体。向前看,我们的目的是开放oraclejdk的所有部分,除了那些我们认为是商业特性的部分,如jrockit任务控制(oraclejdk中还没有),并用开放源代码替代品替换有障碍的第三方组件,以实现代码库之间更紧密的对等。

p5cysglq

p5cysglq4#

openjdk和oraclejdk目前都是由oracle创建和维护的。
openjdk和oraclejdk是通过tck(java技术认证工具包)的同一java规范的实现。
大多数jdk供应商都是在openjdk的基础上编写的,他们在不破坏tck兼容性的情况下,对组件进行了一些调整[主要是替换许可的专有部件/替换为只在特定操作系统上工作的更高性能的项目]。
许多供应商实现了java规范并通过了tck。例如,ibmj9、azul zulu、azul zing和oraclejdk。
几乎所有现有的jdk都是从openjdk派生的。
正如许多人所建议的,许可是jdk之间的一种变化。
从jdk 11开始,访问长期支持oraclejdk/javase现在需要商业许可证。现在您应该注意您正在安装的jdk,因为没有订阅的oraclejdk可能会停止工作。来源
参考:java虚拟机列表

odopli94

odopli945#

对于java 8,oracle jdk与openjdk的主要区别:
openjdk是java标准版平台的一个开源实现,来自oracle和openjava社区。
openjdk是根据gpl v2许可证发布的,其中oracle jdk是根据oracle二进制代码许可协议发布的。
实际上,oraclejdk的构建过程是从openjdk源代码构建的。因此,oraclejdk和openjdk之间没有重大的技术区别。除了基本代码之外,oraclejdk还包括oracle的java插件实现和javawebstart。它还包括第三方封闭源代码和开源组件,如图形光栅化器和rhino分别。openjdk字体渲染器和oraclejdk飞行记录器是oraclejdk和openjdk之间显著的主要区别。
rockit是oracle的jvm,从javase7开始,hotspot和jrockit合并为一个jvm。所以现在我们只有合并的热点jvm可用。
有些情况下,人们声称他们在运行openjdk时遇到了问题,当切换到oraclejdk时,问题得到了解决。
twitter有自己的jdk。
像minecraft这样的软件期望使用oraclejdk。事实上,他警告说。
有关差异的完整列表,请参阅源代码文章:oraclejdk vs openjdk和javajdk开发过程

qmb5sa22

qmb5sa226#

oracle和openjdkjvm是相同的,并且具有相同的gc特性(从最新版本10+开始)。在oracle管理openjdkjvm之前,存在一些具体的差异,使得旧的openjdkjvm在许多环境中几乎不可用。JVM现在是相同的。
jdk包含jvm作为工具包的一部分,其许可、发布和维护时间表以及jdk中包含的软件库各不相同。对我来说,关键的差异也意味着如果代码不存在,代码就不能运行。不仅仅是授权。

diff --brief -r openjdk oraclejdk

关键的是,除了linux jdk上的一堆其他文件外,还缺少以下文件(因此,如果您“声称”代码在openjdk上不起作用,并且在使用javafx时在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`

相关问题