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

但是你可以看到他写了这么一行,意思是如果是个人用途或者开发用途,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+2×5后的第一个奇数),7u55(40+3×5),随后发布的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,这几个号,好像和计算规则有些不符,没再深究了,如果谁知道,可以留个言

近期更新的文章:

《小白学习MySQL – mysqldump保证数据一致性的参数差异》

《理财投资和个人投资的闲聊》

《新增字段在数据块中的体现》

《SQL Server的索引碎片》

《MySQL客户端预读数据的区别》

文章分类和索引:

《公众号700篇文章分类和索引》

声明:文中观点不代表本站立场。本文传送门:http://eyangzhen.com/136596.html

联系我们
联系我们
分享本页
返回顶部