Azul Zulu版本OpenJDK和Oracle JDK之间的怎样判断差异是否显著什么?

Oracle和OpenJDK JVM是相同的,具有相同的GC功能(从最新版本10+开始)。 在Oracle管理OpenJDK JVM之前,存在一些具体的差异,使得旧的Openjdk JVM在许多环境中几乎无法使用。 JVM现在是一样的。包含JVM作为Kit的一部分的JDK因许可,发布和维护计划以及JDK中包含的软件库而不同。 对我来说至关重要的区别也意味着如果不存在代码就会使代码无法运行。 不仅许可。diff --brief -r openjdk oraclejdk至关重要的是除了Linux JDK上的其他一些文件之外还缺少以下文件(因此,如果你声称'代码在OpenJDK上不起作用,并且在使用javafx时在OracleJDK上这样做那么你是正确的):Only in jdk-10.0.1/bin: javapackagerOnly in jdk-10.0.1/bin: javawsOnly in jdk-10.0.1/bin: jcontrolOnly in jdk-10.0.1/bin: jmcOnly in jdk-10.0.1/bin: jweblauncherOnly in jdk-10.0.1/lib: ant-javafx.jarOnly in jdk-10.0.1/lib: deployOnly in jdk-10.0.1/lib: deploy.jarOnly in jdk-10.0.1/lib: desktopOnly in jdk-10.0.1/lib: fontconfig.bfcOnly in jdk-10.0.1/lib: fontconfig.properties.srcOnly in jdk-10.0.1/lib: fontconfig.RedHat.6.bfc
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
博客之星–博主的年度最高成就表彰活动成为博客之星不仅可获博客之星专属荣誉还可获博客之星年度大奖,一年仅有一次。
去创作
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
Java 11 计划于本月,即 9 月 25 日发布。与 Java 10 不同,Java 11 不仅提供了长期支持,还将作为 Java 平台的参考实现。新的长期支持版本每三年发布一次,根据后续的发布计划,Java 17 将于 2021 年发布。之前,甲骨文已经改进了Java SE(标准版)的商业支持计划,由之前企业一次性支付永久许可费用加年度支持费用的模式,改为新的订阅模式(Java SE Subscription),当然个人使用和非商业使用可继续享受免费支持,无需订阅。在本文中,我们不妨了解一下 Oracle JDK 之外的 JDK,以及围绕 OpenJDK 构建的生态系统所拥有的深度。本文将为大家介绍一些主流的 OpenJDK 变种版本。OpenJDK builds实际上,JDK 只有一组源代码。源代码使用 Mercurial(分布式版本控制系统)托管在 OpenJDK。任何人都可以获取该源码,并通过源码构建一个变种版本发布到网络上。但是需要一个独有的认证程序(Certification Process)来确保构建的变种版本是有效的。这个认证程序是由 JCP(Java Community Process)组织审核的,后者会提供技术兼容性工具包(TCK,有时也称为 JCK)。如果一个组织构建了一个 OpenJDK 的变种版本,并通过了 TCK 的兼容性测试,则可将构建的这个变种版本称为“Java SE compatible”(兼容 Java SE 的 JDK)。要注意的是,如果提供者没有从 Oracle 获得商业许可,不能将该构建版本称为“Java SE”。例如,通过 TCK 兼容性测试的 Adopt Open JDK 不是“Java SE”,而是兼容 Java SE 的 JDK或兼容 Java SE 规范的 JDK。还要注意,认证程序目前是基于信任基础的 —— 结果不会提交给 JCP/Oracle 用于检查,也不会被公开。详细说明可查看:https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html?showComment=1536303755275#c5934330550793525320总的来说,OpenJDK + 变种版本的提供者,将一个源码库转换为许多不同的变种构建版本。在将 OpenJDK 源码转换为变种版本的过程中,提供者可能会添加一些额外的标记或实用程序,但注意不要影响后面的认证程序。例如,提供者无法为 API 添加一个新的公共方法,或一项新的语言特性。Oracle JDK从 Java 11 开始,这是一个提供付费支持的品牌商业版本。当然个人使用和非商业使用仍可继续享受免费支持(Oracle JDK 仍将为开发、测试、原型或展示目的的使用提供免费支持),不需要商业支持或企业管理工具的人可以选择使用 Oracle 的 OpenJDK 构建。Oracle 计划在 2026 年后提供全额付费的服务支持,详情:http://www.oracle.com/technetwork/java/javase/eol-135779.html要注意的是,与过去不同,Oracle JDK 并不比 OpenJDK “更好”(前提是两者都处于相同的安全补丁级别)。OpenJDK builds by Oracle这些是免费的、完全无品牌的 OpenJDK 版本,基于 GPL 开源协议(+Classpath Extension),公司可安全且放心使用。这些版本仅在发布后的六个月内可以使用。要继续使用由 Oracle 的 OpenJDK 构建版本和安全补丁,需要在发布新版本后的一个月内升级至新版本。AdoptOpenJDK builds这些版本也是免费的、完全无品牌的 OpenJDK 版本,基于 GPL 开源协议(+Classpath Extension),以免费软件的形式提供社区版的 OpenJDK 二进制包,公司也可安全且放心使用。与由 Oracle 的 OpenJDK 构建版本不同,这些版本会提供更长的支持,像 Java 11 一样,至少提供 4 年的免费长期支持(LTS)计划。Adopt Open JDK 是一个由社区驱动的项目,如果其他群组在 OpenJDK 的源码仓库中创建和发布了安全修复程序,它们也会提供构建。 IBM 和 Red Hat 也曾表示他们打算提供这些安全补丁。AdoptOpenJDK OpenJ9 builds除了标准的 OpenJDK 构建外,Adopt Open JDK 还提供了使用 OpenJ9 而非 HotSpot 的版本。OpenJ9 最初是由 IBM 实现的 JVM,现在已开源并交由 Eclipse 运作。Red Hat OpenJDK buildsRed Hat 通过 Red Hat Enterprise Linux (RHEL) 提供了 OpenJDK 的变种构建版本,这也是提供付费支持的商业版本,详情:https://access.redhat.com/articles/1299013他们在为 OpenJDK 提供安全补丁方面做得非常好,而且 Red Hat 还为 Java 6 和 7 提供安全更新。Red Hat 构建的版本能更好地集成到操作系统中,所以它称不上是纯粹的 OpenJDK 版本(尽管你也不会注意到差异)。Other Linux OpenJDK builds不同的 Linux 发行版拥有不同的方式来访问 OpenJDK。这里是一些常见的发行版:Debian、Fedora、 Arch、 Ubuntu。Azul ZuluZulu 是 OpenJDK 的免费版本,但同时提供商业付费支持。当然不购买收费的技术支持的话,Azul 也有为 Zulu 提供免费的社区技术支持。Azul 有一个广泛的计划以支持 Zulu 商业化,包括支持 Java 9、13 和 15 ,这点与其他的提供者有不同之处,详情:https://www.azul.com/products/azul_support_roadmap/IBMIBM 为 Java 8 及更早版本提供并支持 JDK。他们还使用 OpenJ9 为 Adopt Open JDK 构建提供商业付费支持。SAPSAP 使用 GPL + CE 许可证为 Java 10 及更高版本提供 JDK。他们还有一个商业的闭源 JVM。不过没有找到任何有关支持生命周期的信息。总结现在有很多不同的 OpenJDK 变种版本,它们都基于原始的上游代码仓库。但每个构建版本都提供了独有的选择 —— 免费或商业,品牌或非品牌。可以选择当然很好,但如果你追求的是“标准”,那么目前我最好的建议是使用 Oracle 的 OpenJDK 构建版本、AdoptOpenJDK 构建版本或操作系统(Linux)中内置的版本。声明:本文经授权转自开源中国,OSC-局长。
写在前面简单记录学习,两者的区别,没有太多技术含量,倒是花了不少心思总结,欢迎关注,点赞哈这里先贴图历史版本新增特性这里引用参考下,这篇大佬文章,链接在此,Oracle与OpenJDK之间的区别他是从组织、开源、市场等角度比较的,我这里主要从开源、前景、相关源码底层…等等角度分析,有兴趣的朋友可以一起来建议,学习一、前景这里我只能抛出几个疑问点,欢迎大家一起来解决,抛出疑问
1、为什么 Docker 容器的Java环境,几乎都是 openJdk ?
2、其实ORACLE jdk是开放了大部分源码的,openJDK是开放所有源码的,迄今我所想看到的实现,在Oracle JDK中都是开放源码的,Oracle JDK没有开放的部分在哪里?答:已解决,Oracle JDK 没有开放的源码,在openJDK中的实现,这里先说明一下,OracleJDK只开放了不到7%,后面我会摘录部分,只是部分哈,有兴趣可以安装一个OpenJDK比较一下区别
3、为什么 OpenJDK开源了 OracleJDK不想开源的东西,
二、开源open-source,开源,这是一种共享,集智的概念openJDK 是对外开放源码的,Oracle JDK则没有(部分开源)三、相关底层架构,实现比较这里就windows版本分析3.1-1、Oracle JDK架构1安装包就一个,如图,官网地址3.1-2、Open JDK架构1链接地址,在此如下图这里比较出 openJDK的JRE和JDK是分开放的3.2 Oracle JDK 与 Open JDK 目录结构比较这里看得出 Oracle JDK 是基于 SDK(Jar)进行版本的维护的,部分提供了源码集OpenJDK 是基于 package 进行版本维护,提供了所有的源码集,目录更清晰,部分实现还变更于与Oracle JDK 不同的包下,后面我摘出部分事例参考还要注意 IntelliJ IDEA 中也集成了部分的 SDK,注意开发时确保正确的开发环境3.3 JVMopenJDK已经不显示 JVM了3.4 不同的命令行操作四、常用对象的不同的实现(OracleJDK源码在OpenJDK中的不同实现)摘录部分,常用对象,这里总结会有点乱(我还没仔细地观察真正的源码区别)4.1、Object4.2、ArrayListoracleJDKpackage java.util;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.UnaryOperator;
import sun.misc.SharedSecrets;
/**
* <a href="{@docRoot}/../technotes/guides/collections/index.html">
* Java Collections Framework</a>.
*
* @author
Josh Bloch
* @author
Neal Gafter
* @see
Collection
* @see
List
* @see
LinkedList
* @see
Vector
* @since
1.2
*/
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{.....}
openJDKpackage java.util;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.UnaryOperator;
import jdk.internal.misc.SharedSecrets;
/**
* <p>This class is a member of the
* <a href="{@docRoot}/java.base/java/util/package-summary.html#CollectionsFramework">
* Java Collections Framework</a>.
*
* @param <E> the type of elements in this list
*
* @author
Josh Bloch
* @author
Neal Gafter
* @see
Collection
* @see
List
* @see
LinkedList
* @see
Vector
* @since
1.2
*/
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{...}
…五、OracleJDK中未开源的部分其实Oracle JDK差不多只开源了 7%左右,只是 rt.jar中的部分实现开源了,还有 23 个 Jar 没有开源,关于 OpenJDK中的实现

我要回帖

更多关于 怎样判断差异是否显著 的文章