Java 11 将至,不妨了解一下 Oracle JDK 之外的版本
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 兼容性测试的 AdoptOpenJDK 不是"Java SE",而是兼容 Java SE 的 JDK或兼容 Java SE 规范的 JDK。还要注意,认证程序目前是基于信任基础的 —— 结果不会提交给 JCP/Oracle 用于检查,也不会被公开。详细说明可点此查看。
总的来说,OpenJDK + 变种版本的提供者将一个源码库转换为许多不同的变种构建版本。
在将 OpenJDK 源码转换为变种版本的过程中,提供者可能会添加一些额外的标记或实用程序,但注意不要影响后面的认证程序。例如,提供者无法为 API 添加一个新的公共方法,或一项新的语言特性。
Oracle JDK
从 Java 11 开始,这是一个提供付费支持的品牌商业版本。当然个人使用和非商业使用仍可继续享受免费支持(Oracle JDK 仍将为开发、测试、原型或展示目的的使用提供免费支持),不需要商业支持或企业管理工具的人可以选择使用 Oracle 的 OpenJDK 构建。Oracle 计划在 2026 年后提供全额付费的服务支持(详情)。要注意的是,与过去不同,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)计划。AdoptOpenJDK 是一个由社区驱动的项目,如果其他群组在 OpenJDK 的源码仓库中创建和发布了安全修复程序,它们也会提供构建。 IBM 和 Red Hat 也曾表示他们打算提供这些安全补丁。
AdoptOpenJDK OpenJ9 builds
除了标准的 OpenJDK 构建外,AdoptOpenJDK 还提供了使用 OpenJ9 而非 HotSpot 的版本。OpenJ9 最初是由 IBM 实现的 JVM,现在已开源并交由 Eclipse 运作。
Red Hat OpenJDK builds
Red Hat 通过 Red Hat Enterprise Linux (RHEL) 提供了 OpenJDK 的变种构建版本,这也是提供付费支持的商业版本(详情)。他们在为 OpenJDK 提供安全补丁方面做得非常好,而且 Red Hat 还为 Java 6 和 7 提供安全更新。Red Hat 构建的版本能更好地集成到操作系统中,所以它称不上是纯粹的 OpenJDK 版本(尽管你也不会注意到差异)。
Other Linux OpenJDK builds
不同的 Linux 发行版拥有不同的方式来访问 OpenJDK。这里是一些常见的发行版:Debian,Fedora, Arch, Ubuntu。
Azul Zulu
Zulu 是 OpenJDK 的免费版本,但同时提供商业付费支持。当然不购买收费的技术支持的话,Azul 也有为 Zulu 提供免费的社区技术支持。Azul 有一个广泛的计划以支持 Zulu 商业化,包括支持 Java 9,13 和 15 ,这点与其他的提供者有不同之处(详情)。
IBM
IBM 为 Java 8 及更早版本提供并支持 JDK。他们还使用 OpenJ9 为 AdoptOpenJDK 构建提供商业付费支持。
SAP
SAP 使用 GPL + CE 许可证为 Java 10 及更高版本提供 JDK。他们还有一个商业的闭源 JVM。不过没有找到任何有关支持生命周期的信息。
总结
现在有很多不同的 OpenJDK 变种版本,它们都基于原始的上游代码仓库。但每个构建版本都提供了独有的选择 —— 免费或商业,品牌或非品牌。可以选择当然很好,但如果你追求的是“标准”,那么目前我最好的建议是使用 Oracle 的 OpenJDK 构建版本、AdoptOpenJDK 构建版本或操作系统(Linux)中内置的版本。
编译自:https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html
作者:Stephen Colebourne
Java 11 将至,不妨了解一下 Oracle JDK 之外的版本的更多相关文章
- 【Java】Linux下安装配置Oracle JDK 1.7版本
1 环境 Vmware虚拟机中的Ubuntu 12.04 32位系统 2具体安装步骤 ①下载最新的jdk包 注意jdk区分32位版本和64位版本,要与Ubuntu兼容才行 下载地址 http://ww ...
- Java线程的几种状态(基于Oracle jdk 1.8)
Java中线程的状态定义在java.lang.Thread类中的一个枚举中. public enum State { /** * Thread state for a thread which has ...
- Java 11 新功能来了!
关键时刻,第一时间送达! 目前 Oracle 已经发布了 Java Development Kit 10,下个版本 JDK 11 也即将发布.本文介绍 Java 11 的新功能. 根据Oracle新出 ...
- Java 11新功能抢先了解
目前 Oracle 已经发布了 Java Development Kit 10,下个版本 JDK 11 也即将发布.本文介绍 Java 11 的新功能. 根据Oracle新出台的每6个月发布一次Jav ...
- Java 11正式发布,这几个逆天新特性教你写出更牛逼的代码
就在前段时间,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用! 这无疑对我们来说是一大好的消息.作为一名java开发者来说,虽然又要去学习和了解java11 ...
- JRE vs OpenJDK vs Oracle JDK
JRE vs OpenJDK vs Oracle JDK 在我们继续了解如何安装Java之前,让我们快速地了解JRE.OpenJDK和Oracle JDK之间的不同之处. JRE(Java Runti ...
- Oracle JDK与OpenJDK到底有什么不同?
不知道各位developer平时是否有过疑问,Oracle JDK是什么,OpenJDK又是什么? Oracle JDK便是平常我们在windows系统上做开发使用的JDK,又称作SUN JDK.O ...
- CentOS7.6下安装Oracle JDK
注:本教程使用XShell ssh到CentOS服务器,并使用root用户登录,如使用其他普通用户登录,请在命令前加sudo 1).在/usr/local/目录下(看个人情况)新建文件夹java用来存 ...
- How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Written by Rahul, Updated on April 3, 20
本文系转载备份 请阅读点击下面链接阅读原文以获取更佳地阅读体验.谢谢. How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Writt ...
随机推荐
- [think]关于个人发展值得记住的一些建议 听别人的话,即使你不想听 不要只做不想 成功不能被复制,但失败总在不停复制。看看别人是怎么倒下的,你可以更早地成功
[think]关于个人发展值得记住的一些建议 偶然看到一篇采访周爱民的文章,里面的一些建议虽然朴实无华,却感觉很有道理,特此记录: 记者:对于程序员的技术发展和职业规划能否给大家一些建议呢?----- ...
- IT技术需求建立时需考虑的因素
2012-11-13 内容存档在evernote,笔记名"IT技术需求建立时需考虑的因素"
- 进阶之路(基础篇) - 020 放弃Arduino IDE,拥抱Sublime Text 3
本帖转载:Arduino讨论区相信大家对Arduino IDE的不能输入中文,排版不方便,没有行号,界面难看......深恶痛绝.我也是.经过vs2012,eclipse等IDE的试用,配置麻烦,ID ...
- 【转】windows平台多线程同步之Mutex的应用
线程组成: 线程的内核对象,操作系统用来管理该线程的数据结构. 线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量. 操作系统为每一个运行线程安排一定的CPU时间 —— 时间片.系统通 ...
- 【MongoDB】MongoDB的java驱动包使用
要在Java中使用Mongo数据库 首先导入驱动包mongo-java-driver.jar. 然后获得库,获得集合.就可以对数据库操作了,比如: //创建MongoClient对象 MongoCli ...
- golang ----map按key排序
实现map遍历有序 1. key有序 思路:对key排序,再遍历key输出value 代码如下:既可以从小到大排序,也可以从大到小排序 package main import ( "fmt& ...
- /proc 目录详细说明
/proc路径详细: Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以 ...
- Python - 列表解析式/生成器表达式
列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_e ...
- 使用Object#tap使代码更优雅
今天看spree源码的时候经常看到Object#tap方法.以前只知道有这个方法,而且感觉这个方法调试的作用大于实际,今日看来以前的理解应该不够准确. 先看下官方文档上tap的例子 Yields se ...
- VC学习笔记:状态栏
原文链接: http://www.cnblogs.com/skyseraph/archive/2010/11/27/1889952.html 实例学习 1 新建对话框程序 2 为Dlg类添加成员变 ...