openjdk与Oraclejdk的区别
在2006年11月13日的JavaOne大会上,Sun公司(当时还没被收购)宣布计划要把Java开源,在随后的一年多时间内,它陆续地将JDK的各个部分在GPL v2(GNU General Public License v2)协议下公开了源码,并建立了OpenJDK组织对这些源码进行独立管理。除了极少量的产权代码(Encumbered Code,这部分代码所有权不属于Sun公司,Sun本身也无权进行开源处理)外,OpenJDK几乎拥有了当时SunJDK 的全部代码。
OpenJDK的质量主管曾经表示在JDK 7中,SunJDK和OpenJDK除了代码文件头的版权注释之外,代码几乎是完全一样的,所以OpenJDK 7与SunJDK 7本质上就是同一套代码库出来的产品。
总结下来,OpenJDK和OracleJDK存在以下方面的区别:
授权协议不同
OpenJDK 采用GPL V2协议放出,而OracleJDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。
OpenJDK不包含OracleJDK中的部分产权代码
由于OracleJDK中的部分代码的产权也不是归Oracle所有的,所以这部分代码就没开源到OpenJDK中。但是很多“好心”的开源爱好者在OpenJDK中实现了相同的功能,并将源代码开源到OpenJDK中。比如说字体栅格化引擎,使用Free Type代替。
不能使用Java商标
在Sun被Oracle收购以后,Java这个商标就归Oracle所有了。不仅OpenJDK不能使用java商标,J2EE这个曾经Sun的亲儿子命运也同样坎坷,已经被Oracle无情抛弃,同样
不能在使用Java商标。
但是随着JDK版本的不断发布,Oracle失去了维护OpenJDK的耐心,因为不赚钱啊。RedHat从Oracle手上接过OpenJDK的管理权利和维护职责。
2019年3月20日,JDK 12发布,只包含8个JEP,其中主要有Switch表达式、Java微测试套件(JMH)等新功能,最引人注目的特性无疑是加入了由RedHat领导开发的Shen-andoah垃圾收集器。Shenandoah作为首个由非Oracle开发的垃圾收集器,其目标又与Oracle在JDK 11中发布的ZGC几乎完全一致,两者天生就存在竞争。Oracle马上用实际行动抵制了这个新收集器,在JDK 11发布时才说应尽可能保证OracleJDK和OpenJDK的兼容一致,转眼就在OracleJDK 12里把Shenandoah的代码通过条件编译强行剔除掉,使其成为历史上唯一进入了OpenJDK发布清单,但在OracleJDK中无法使用的功能。
所以对于高版本的OpenJDK和OracleJDK之间,也存在OpenJDK中有的功能,但是OracleJDK中不包含的。
总的来说,对于普通开发,使用OpenJDK和OracleJDK并没有太大差别,两者的差别更体现在商业考量上面。
openjdk源代码不完整
这个很容易想到,在采用GPL协议的OpenJDK中,SUN JDK的一部分源代码因为产权的问题无法开放给OpenJDK使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码。因此这些不能开放的源代码 将它作成plug,以供OpenJDK编译时使用,你也可以选择不要使用plug。而Icedtea则为这些不完整的部分开发了相同功能的源代码 (OpenJDK6),促使OpenJDK更加完整。
总结
其他区别欢迎各位指出
以上就是openjdk与Oraclejdk的区别的详细内容,更多关于openjdk与Oraclejdk的资料请关注我们其它相关文章!
相关推荐
-
CentOS8 安装 jdk8 / java8的教程(推荐)
前言 最开始我是想在CentOS8上使用 wget 下载,然后对它进行解压,配置环境变量,奈何搞了很长时间都没有搞好,于是放弃,使用yum直接安装. 1.安装方法 CentOS8上使用 yum 直接安装,环境变量自动配置好 2.查看是否已安装 看到下面结果,说明已经安装配置 jdk [root@localhost ~]# java -version openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_
-
JDK1.6“新“特性Instrumentation之JavaAgent(推荐)
简介 Java Agent是在JDK1.5以后,我们可以使用agent技术构建一个独立于应用程序的代理程序(即为Agent),用来协助监测.运行甚至替换其他JVM上的程序.使用它可以实现虚拟机级别的AOP功能. Agent分为两种,一种是在主程序之前运行的Agent,一种是在主程序之后运行的Agent(前者的升级版,1.6以后提供). JavaAgent的作用Agent给我们程序带来的影响.jpg 使用Agent-premain方法影响的程序效果图.jpg 使用Agent-agentmain方法
-
java项目jar包与jdk的版本不兼容的问题解决
这篇文章主要介绍了java项目jar包与jdk的版本不兼容的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在我们搭建框架或者引入jar包是,总是会因为版本不统一导致版本兼容问题,而且错误还不好找, 今天就遇到了一个问题Unsupported major.minor version 52.0并记录下解决方案 错误原因: 我当时使用的是jdk7,因为公司是传统行业,所以jdk的版本不是很到,而我现在需要搭建一套新的项目框架,我引入了一些最
-
Java JDK 1.8 lambda的用法详解
具体代码如下所示: public class Student { private String id; private String name; private String age; private String address; public Student(String id, String name, String age, String address) { this.id = id; this.name = name; this.age = age; this.address = a
-
Win10 Java jdk14.0.2安装及环境变量配置详细教程
1.下载安装 下载地址:https://www.oracle.com/java/technologies/javase-jdk14-downloads.html ,根据提示进行安装,记住安装路径,这里路径为:E:\Java\jdk14.0.2 2.环境变量配置 新版的jdk中默认不含有jre目录,通过如下方式生成:首先进入命令行,切换至安装路径,并运行以下命令: bin\jlink.exe --module-path jmods --add-modules java.desktop --out
-
详解Java JDK动态代理
今天来看看Java的另一种代理方式--JDK动态代理 我们之前所介绍的代理方式叫静态代理,也就是静态的生成代理对象,而动态代理则是在运行时创建代理对象.动态代理有更强大的拦截请求功能,因为可以获得类的运行时信息,可以根据运行时信息来获得更为强大的执(骚)行(操)力(作). 我们还是以上一个例子为例,这里的IStars接口和Stars类都不需要修改,只需要修改代理类. 创建JDK动态代理需要先实现InvocationHandler接口,并重写其中的invoke方法,具体步骤如下: 1. 创建一个类
-
在CentOS系统上安装Java的openjdk的方法
CentOS 6.X 和 5.X 自带有OpenJDK runtime environment (openjdk).它是一个在linux上实现开源的java 平台.CentOS yum 命令 安装 Java SDK openjdk centos linux JAVA(openjdk)软件包名 1.java-1.7.0-openjdk - OpenJDK Runtime Environment 2.java-1.7.0-openjdk-devel - OpenJDK Development E
-
openjdk与Oraclejdk的区别
在2006年11月13日的JavaOne大会上,Sun公司(当时还没被收购)宣布计划要把Java开源,在随后的一年多时间内,它陆续地将JDK的各个部分在GPL v2(GNU General Public License v2)协议下公开了源码,并建立了OpenJDK组织对这些源码进行独立管理.除了极少量的产权代码(Encumbered Code,这部分代码所有权不属于Sun公司,Sun本身也无权进行开源处理)外,OpenJDK几乎拥有了当时SunJDK 的全部代码. OpenJDK的质量主管曾经
-
深入理解可视化JVM 故障处理工具
本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 可视化工具 在 JDK 中为我们提供了大量的 JVM 故障处理工具,都在 JDK 的 bin 目录下: 这其中除了大量的命令行工具以外,还为我们提供了更加方便快捷的可视化工具,主要是以下这 4 个: JConsole: 最古老的工具,早在 JDK 5 时期就已经存在的虚拟机监控工具. JHSDB: 名义上在 JDK 9 中才正式提供,但之前已经以 sa-jdi.jar 包里面的 HSDB(可视化工具) 和 CLHSDB(命令行工具)
-
深入剖析理解AsyncGetCallTrace源码底层原理
目录 前言 源码实现 核心数据结构 函数申明 AsyncGetCallTrace 实现 pd_get_top_frame_for_signal_handler 实现 pd_get_top_frame 实现 forte_fill_call_trace_given_top 实现 总结 前言 AsyncGetCallTrace 是由 OracleJDK/OpenJDK 内部提供的一个函数,该函数可以在 JVM 未进入 safepoint 时正常获取到当前线程的调用栈(换句话说,使用该函数获取线程栈时,
-
基于编译虚拟机jvm—openjdk的编译详解
java只所以被推广,实际上很大原因是因为本身是跨平台的,很大作用是因为虚拟机的关系. 一般情况下开发人员不需要关注虚拟机内部实现就可以日常开发了,但是有时候涉及到性能的时候就需要了解虚拟机的实现机制了. 那么今天写的内容更多的是关于编译一套自己的虚拟机,为日后了解虚拟机底层原理铺铺路. 编译虚拟机可能会遇到很多坑,也很花费时间.也因大家的环境的差异,可能遇到的问题都不一致. 我只能说把自己遇到的问题都列出来,权当抛砖引玉了. 1首先我们应该下载openjdk的源码,这个openjdk实际上是有
-
C++中的多态与多重继承实现与Java的区别
多态问题 笔者校招面试时被问到了著名问题「C++ 与 Java 如何实现多态」,然后不幸翻车.过于著名反而没有去准备,只知道跟虚函数表有关.面试之后比较了 C++ 和 Java 多态的实现的异同,一并记录在这里. C++ 多态的虚指针实现 首先讨论 C++. 多态也即子类对父类成员函数进行了重写 (Override) 后,将一个子类指针赋值给父类,再对这个父类指针调用成员函数,会调用子类重写版本的成员函数.简单的例子: class Parent1 { public: virtual void s
-
JVM Client和Server端有什么区别
java -version 命令大家都用过,大部分就是看下jdk版本或检查下环境变量的设置,但最后一行的信息也挺重要,如下图所示: Server VM表示我们的虚拟机类型,mixed mode表示虚拟机以混合模式工作. 一. 虚拟机 先说下本篇文章的内容都是基于HotSpot虚拟机. 我们熟知的Java虚拟机是一种规范标准,有多种实现,比如HotSpot虚拟机就是JVM的一种实现,也是目前使用范围最广的Java虚拟机.其实HotSpot最早也不是Sun开发的,是他早期收购的一家公司开发的,后来S
-
麒麟V10更换OpenJDK为Oracle JDK的方法
1 简介 JDK(Java Development Kit)是 Java 平台编程中使用的软件开发环境.它包含一个完整的 Java 运行时环境,即所谓的私有运行时.该名称来自于它包含的工具多于独立的 JRE 以及开发 Java 应用程序所需的其他组件.常见的有 OpenJDK 和 Oracle JDK OracleJDK 根据 Oracle 二进制代码许可协议获得许可,而 OpenJDK 具有 GNU 通用公共许可证(GNU GPL)版本2. 使用 Oracle 平台时会产生一些许可影响.如 O
-
解析java.library.path和LD_LIBRARY_PATH的介绍与区别
背景 近期要将算法部署到一个机群的虚拟主机(Debian 9.1 gcc 6.3.0)上,采用的是Java + JNI + shared library的方式来完成底层算法能力的部署. 其中需要用到各种第三方库,有从源码编译的,也有直接下载的so,包括OpenCV相关.TensorFlow相关.MKL以OpenMP相关的动态库. 遇到一个问题,libmklml_intel.so 这个库只能放在 LD_LIBRARY_PATH中进行加载,而不能通过java.library.path完成加载,所以有
-
Java中的OpenJDK使用原理
目录 Java和OpenJDK的特殊之处是什么? OpenJDK是如何产生的 OpenJDK的工作原理和优点是什么 Java语言与体系结构无关,JVM是可移植的 Java很简单,面向对象,大家都很熟悉 Java是健壮和安全的 Java是高性能的 OpenJDK是如何开发的 OpenJDK作为太空竞赛的基础 OpenJDK的升级过程 错误修复 新功能的实施和过时功能的弃用 主要分支机构以外的项目 规范变更 释放节奏 为什么开源优于闭源 为什么有那么多OpenJDK供应商和实现? 结论 前言: Op
-
红帽RHEL8和7的区别对比分享(Centos8与7参照redhat)
目录 红帽RHEL8与RHEL7的区别 1. 红帽RHEL8和RHEL7功能区别对比 1.1 默认的文件系统 1.2 RHEL8与RHEL7的内核版本分别是多少 1.3 内核代码名字 1.4 标准/默认的仓库频道 RHEL8 RHEL7 1.5 网络时间同步 1.6 支持最大的文件 1.7 软件包管理 1.8 最大支持的内存 1.9 默认的网络数据包过滤 1.10 默认的数据库 1.11 支持的硬件架构 1.12 可供安装的ISO镜像类型 1.13 默认情况下的Cockpit web控制台的安装
随机推荐
- PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
- Python查询阿里巴巴关键字排名的方法
- vbs字符串分割函数
- BAT脚本编写教程(比较易懂和全面)
- ThinkPHP公共配置文件与各自项目中配置文件组合的方法
- 使用XHGui来测试PHP性能的教程
- Python while、for、生成器、列表推导等语句的执行效率测试
- jsp中自定义标签用法实例分析
- 基于集合的子集与集合的全排列的相关问题
- 在Ruby中处理日期和时间的教程
- 关于nttstat.exe的解决办法
- jQuery实用密码强度检测
- Android仿小米时钟效果
- Ubuntu 16.04下无法安装.deb的解决方法
- java实现收藏名言语句台词的app
- C#圆角窗体简单实现方法
- 【先锋海盗类】Ver2005 最终版
- python基础教程项目四之新闻聚合
- 分析Python读取文件时的路径问题
- Oracle连续相同数据的统计