JDK的版本号解惑

做Java开发的时候,经常看到这些所谓的“同义词”,Java8、JDK8、JDK1.8、J2SE8、J2SE1.8,他们之间的区别和关系如下所示,

(1) Java与JDK的区别与关系

这个应该是看问题的角度不同,在用户眼中,Java是Java应用,而在程序员眼中,JDK是Java开发工具,所以Java等价于JDK。

(2) JDK8与JDK1.8的区别与关系

JDK8或者JDK1.8是由于自从JDK1.5/JDK5命名方式改变后遗留的新旧命令方式问题,所以JDK8或者JDK1.8也是同一个东西。

(3) JDK与J2SE的区别与关系

Java有3个版本:J2SE(Java Platform,Standard Edition)、J2EE(Java Platform,Enterprise Edition)、J2ME(Java Platform,Micro Edition),所以J2SE是3个版本中的其中一个,即标准版本。

现在最新的Java版本就是JDK16,下载链接如下,

https://www.oracle.com/java/technologies/javase-downloads.html#JDK16

但是你可以看到他写了这么一行,意思是如果是个人用途或者开发用途,JDK是免费使用的,但是如果是其他的用途,以前免费的JDK license就不再起作用了,说白了,就是如果是商业用途使用最新的JDK,现在不是免费了,

The new license permits certain uses, such as personal use and development use, at no cost -- but other uses authorized under prior Oracle JDK licenses may no longer be available.

Oracle收购了SUN,他的这种收费策略和标准,自然影响到了MySQL、JDK等技术和产品。你可以随意下载,还可以使用,但是一旦用在了商业领域,以赚钱为目的,你就得注意了,我可以暂时不向你收费,但是等你做大做强了,我就能给你发律师函了,你得赔我的license,甚至能让你赔到倒闭,你说凭什么?就是因为你用了我的产品,我的产品,我说了算。是不是感受到了美帝国主义的色彩?

其实这个也是为什么我们要推动国产化的最重要原因,掐脖子的问题,未雨绸缪,必须解决。

从如下归档链接,我们能找到JDK各版本的地图,

https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html

注意到JDK8这提到了两个8u211和8u202,这其实就是个分水岭,JDK8 8u202及以下是免费的,从JDK8 8u211及以上,就都是收费了,因此我们下载使用的时候,就得有所针对了,如果是商业用途,不要侥幸。

这个最新的免费版本号,其实包括了两个,8u201和8u202,这个就是JDK版本号的命名问题了。从2014年10月发布Java SE 7 Update 71(Java SE 7u71)开始,Oracle在发布Oracle JDK关键补丁更新(CPUs:Critical Patch Updates)的同时一般会发布相应的补丁集更新(PSUs:Patch Set Updates)。其中Oracle JDK关键补丁更新(CPUs)包含安全漏洞修复和重要漏洞修复,Oracle强烈建议所有Oracle JDK用户及时升级到最新的CPU版本,Oracle JDK 关键补丁更新(CPUs)版本号采用奇数编号。Oracle JDK补丁集更新(PSUs)包含相应CPUs中的所有修复以及其他非重要修复,仅当受到Oracle JDK关键补丁更新(CPUs)版本之外的其他漏洞的影响时才应当使用相应的补丁集更新 (PSUs),Oracle JDK补丁集更新(PSUs)版本号采用偶数编号。因此,一般情况下我们只要下载奇数编号的最新版本更新就行了。

简单来讲,Oracle将奇数版本作为BUG修正并全部通过检验的版本,Oracle官方建议用在生产环境最好使用这个版本。Oracle会在奇数版本之后同时发布一个偶数版本,偶数版本包含了奇数版本所有的内容,以及未被验证的BUG修复,Oracle官方建议,除非你受到未验证BUG影响,急需BUG修复才使用这个版本。因此,8u201是CPUs,关键补丁更新。8u202是PSUs,补丁集更新,推荐下载8u201。

网上找到一张图,虽然没更新到最新的版本,但是将大多JDK版本历程介绍清楚了,能了解很多历史,

不得不佩服歪果人的想象力,从JDK1.2.2开始,主要版本(如1.3、1.4、5.0)都是以鸟类或哺乳动物来命名的,而他们的bug修正版本(如1.2.2、1.3.1、1.4.2)都是以昆虫命名的。

其中有几个关键的时间节点,例如JDK1.5升级比较大,那为了表明该版本的重要性,于时将Java版本从原来的J2SE 1.5更名为Java SE 5.0(内部版本号1.5.0),后续的Java版本号都是Java SE X的这种形式。JavaSE 10的时候,此时对应的JDK版本不再是JDK1.10这种形式,而是变成了JDK10这种形式,一直到最新的JavaSE 16对应的JDK16。

这是一张Java各版本的发布和支持时间地图,

另外,自JDK 5.0起,甲骨文改变Java版本号命名方式,Java以两种方式发布更新,Limited Update包含新功能和非安全修正,Critical Patch Updates(CPUs)只包含安全修正。因此,其版本号将有所改变,Limited Update更新使用的版本号将是20的倍数,而CPU更新采用的版本号将是上一个Limited Update版本号加上五的倍数后的奇数。

有点懵了?

举例来说,JDK 7的一个Limited Update版本是7u40,接下来的三个CPU版本号将是7u45(40+5),7u51(40+2x5后的第一个奇数),7u55(40+3x5),随后发布的Limited Update版本号是7u60,三个CPU版本号分别为7u65、7u71和7u75。

Java 8的前两个CPU是8u5、8u11,下一个Limited Update是8u20,8u202最近一个Limited Update是8u60,可以看到,中间推出很多CPU,

8u65 8u66 8u71 8u72 8u73 8u74 8u77 8u91 8u92 8u101 8u102 8u111 8u112 8u121 8u131 8u141 8u144 8u151 8u152 8u161 8u162 8u171 8u172 8u181 8u191 8u192 8u201 8u202

P.S. 8u73、8u74、8u144,这几个号,好像和计算规则有些不符,没再深究了,如果谁知道,可以留个言。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java高编译低运行错误(ConcurrentHashMap.keySet)

    本地使用maven编译和运行时一切都正常,但是通过ci的方式,编译、打包、发布到部署环境,运行时抛出了一条显而易见的JDK版本的错误。

    lambeta
  • Linux更换jdk版本,java -version还是原来的版本JDK还是之前的版本

    安装JDK 1.上传jdk-7u80-linux-x64.tar.gz到Linux上 2.解压jdk到/usr/local目录 tar -zxvf jdk-...

    sparkle123
  • 查看 class 的 JDK 版本

    林万程
  • 【JDK版本常见报错及其解决】Unsupported major.minor version 51.0,

    之后我也会在这个专栏继续更新在java开发中遇到的各种疑难杂症,帮助小伙伴们更快的解决bug!

    灰小猿
  • Windows的版本号

    明天(10月22日),备受瞩目的Windows 7就要上市了。 奇怪的是,虽然从名字上看,它是Windows操作系统的7.0版本,但是它的内部版本号却是Wind...

    ruanyf
  • 【答疑解惑】如何安装eclipse

    随着android应用开发的火热,eclipse使用的人也越来越多。好多初学者不知道如何安装eclipse,这里做一个简单回答。 首先我们要确认系统的版本,是3...

    程序员互动联盟
  • jdk 5 到 jdk 10各个版本的新特性

    3.静态导入,如:import staticjava.lang.System.out

    一个会写诗的程序员
  • Spring Cloud 多版本怎么选择?帮你解惑!

    Java技术栈
  • Travis 编译使用 JDK 的版本

    HoneyMoose
  • 修改Maven的默认JDK版本

    2020.05.28更新 推荐这个方法:修改单个项目的JDK编译环境,在pom.xml中加入下面的代码,14是我的jdk版本

    乐心湖
  • Java基础篇——环境配置

    今天就让阿Q带你一起完成一下java开发的环境配置。阿Q的系统是x64位的windows7,那么接下来阿Q就以该系统为基础进行讲解。如果大家有windo...

    阿Q说代码
  • Android获取APP的版本号和版本名

    晨曦_LLW
  • Debian的版本号及distributions

    debian archive里真正的distribution目录用的是code name,比如sarge、etch,其他名字的distribution目录如st...

    Debian中国
  • 你想了解的JDK 10版本更新都在这里

    以下是 Java 10 中的引入的部分新特性。关于 Java 10 新特性更详细的介绍可参考这里。

    我没有三颗心脏
  • IntelliJ IDEA启动一个普通的java web项目的配置

    这是我很久以前刚开始用IntelliJ IDEA时记录的笔记,正好赶上最近离职了,可以有比较多的时间把以前的记录整理一下,可以让刚接触到IntelliJ IDE...

    朱季谦
  • Hashtable 为什么不叫 HashTable?

    前几天在写《HashMap 和 Hashtable 的 6 个区别》这篇文章的时候,差点把 Hashtable 写成了 HashTable,后来看源码证实了是:...

    Java技术栈
  • 查看jar包的jdk版本并降级

    用解压工具打开jar包(例子都是用7zip) ? 进入到META-INF目录,查看MANIFEST.MF文件,查看Bulid-Jdk,下图就为1.7.0_55版...

    千往
  • maven中打不同JDK版本的jar包

    最近项目中,I商机用jdk1.7,而ltc用jdk1.8,所以提供给他们的api都要不同的版本

    星痕
  • IntelliJ 更改项目使用的 JDK 版本

    在当前使用的 IntelliJ 中的 JDK 版本为 1.8,如何修改 IntelliJ 使用的 JDK 版本为 1.11 呢?

    HoneyMoose

扫码关注云+社区

领取腾讯云代金券