jdk的版本号解惑

article/2025/8/30 4:48:57

做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,


http://chatgpt.dhexx.cn/article/PD67Qihh.shtml

相关文章

C++静态库和动态库用法

1、前言 从事软件工作也有两年了,C静态库和动态库也用了不少,但都是依葫芦画瓢,一直没具体去研究一下二者的区别,加载方式等,今天花时间看了几篇博客,重新学习了一下,做出如下笔记。 2、定义 静态库和动态库从字面意思来看,区别就是静态和动态。而这里的静态和动…

Linux下的动态库和静态库详解

动态库和静态库 文章目录 动态库和静态库静态库与动态库的概念理解动静态库如何打包动静态库与如何使用动静态库如何制作打包动态库 为什么我们要使用别人(一般是顶尖的工程师写的)的代码? 为了开发效率和鲁棒性(健壮性) 如何使用别人的功能? 1、库 2、开…

静态链接库和动态链接库

一、前言 1、代码复用是提高软件开发效率的重要途径。 2、一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用。小到一个函数、一种数据类型、一个类,大到一种类、一个模块、库。 3、复用从方式上…

linux之静态库与动态库

我们在写c语言的时候&#xff0c;经常会去包含一个.h的头文件&#xff0c;这个头文件就是库文件&#xff0c;比如<stdio.h>,<stdlib.h>这些都是标准的头文件&#xff0c;一般放在/usr/include,也就是说&#xff0c;从这个目录中我们可以找到这个头文件&#xff0c;…

理解和创建Windows和Linux下的动态和静态库区别

一、引言 在计算机编程的世界中&#xff0c;库是一个非常重要的改变。它的出现提供了一种共享和重用代码的可能性&#xff0c;复杂的程序因为动态库的出现而变得简洁和方便。然而&#xff0c;库并不是单一的&#xff1a;它们可以是动态的&#xff0c;也可以是静态的&#xff0…

静态库与动态库的区别和使用

动静态库所用到的一些库文件&#xff1a; .o 是目标对象文件,相当于windows中的.obj文件。可由一个或多个.c /.cpp来生成 .a 为静态库&#xff0c;可以是一个或多个.o合在一起,用于静态连接&#xff1b;多个.o文件可以链接生成一个.exe的可执行文件。静态库在程序编译时会被连…

静态库和动态库的使用与区别

引文 库文件是计算机上的一类文件&#xff0c;可以理解为一种代码仓库&#xff0c;提供给使用者一些可以直接使用的变量、函数或类。 库文件分为两类&#xff1a; 静态库&#xff1a;在链接阶段&#xff0c;会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中…

【Linux静态库和动态库】

Linux静态库和动态库 1. 编译与ELF格式2. 库的基本概念3.静态库的制作&#xff1a;&#xff08;假设要将a.c、b.c制作成静态库&#xff09;4.静态库的常见操作5.静态库的使用6. 多个库的相互依赖举例1.(库文件制作、错误处理) 7.静态库和动态库的关系和区别8.动态库的制作软链接…

如何理解静态库与动态库

究竟什么是库&#xff1a; 日常生活中有很多所谓的库&#xff0c;比如车库啊&#xff0c;优衣库啊&#xff0c;甚至还有一库&#xff08;日语&#xff09;咳咳。然后对程序员来说&#xff0c;所谓的库&#xff0c;即是程序库&#xff0c;当一段代码十分耐用&#xff0c;又经过…

C++静态库与动态库的区别

文章目录 什么是库静态库Linux下创建与使用静态库Windows下创建与使用静态库 动态库Linux下创建与使用动态库Windows下创建与使用动态库 动态库的显式调用在Linux下显式调用动态库在Windows下显式调用动态库显式调用C动态库注意点 附件&#xff1a;Linux下库相关命令g(gcc)编译…

动态库静态库的区别

1、动态库以及静态库区别 静态库是函数和数据编译进一个二进制文件里面&#xff08;.lib文件&#xff09;&#xff0c;在使用静态库链接成可执行程序的时候&#xff0c;链接器会复制静态库内的函数和数据进可执行程序里面(.EXE文件)&#xff0c;所以在加载库的时候不需要加载相…

详谈静态库和动态库的区别

一、什么是库&#xff1a; 库是写好的&#xff0c;现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说&#xff0c;库是一种可执行代…

【C语言】详解#define,#ifdef,#ifndef,#elif,#undef,以及相关运算符

1.明示常量 #define 预处理指令结尾不带&#xff1b;&#xff08;分号&#xff09;&#xff0c;在预编译的过程中使用宏的地方会进行展开&#xff0c;是用多少次就展开多少次&#xff0c;但是只替换 不计算&#xff0c;预处理器在发现程序中的宏后&#xff0c;会用宏等价的替换…

Vue 项目报错:‘$‘ is not defined ( no-undef )

错误描述 报错如上图所示&#xff0c;错误原因是不认识 $ 符&#xff0c;他是 JQuery 中得符号&#xff0c;我也确实引入了 JQuery&#xff1a; 解决办法 在 vue 项目的根目录下创建一个 .eslinttrc.js 文件&#xff0c;文件内容如下&#xff1a; module.exports {root: true…

undefined和is not defined区别

undefined定义&#xff1a; undefined是javascript的一种基本数据类型&#xff0c;变量未赋值或者函数没有返回值时返回。 xxx is not defined是一种错误类型&#xff0c;其完整形式是&#xff1a;Uncaught ReferenceError: xxx is not defined&#xff08;未捕获的引用错误&a…

#define #undef等基本知识

1、预处理符号 例子&#xff1a; #include <stdio.h> #define DEBUG_PRINT printf("FILE %s line %d:" \"x%d, y%d, z%d," \__FILE__,__LINE__,x,y,z) //或者如下: //#define DEBUG_PRINT printf( "File %s line %d:…

undefined和is not defined一样吗?

https://blog.csdn.net/sheldon178/article/details/48298151/ undefined和is not defined&#xff0c;字面意思看来没什么两样&#xff0c;不都是未定义吗&#xff1f; 在JavaScript中&#xff0c;可并非如此。 undefined定义如下&#xff1a; undefined是javascript的一种…

C++中 #define 与 #undef

define 宏指令 #define 与 # include类似,它的好处呢就是速度快,使用define定义函数可以减少函数调用的额外开销 define 主要体现在2个地方 1 定义一个值 2 定义一个函数或者说功能 #include <iostream> using namespace std; // 定义一个值 #define HELLO_WORLD "…

#define #undef 使用

#define 是宏定义 #define 的用法是非常多功能的&#xff0c;它不止能实现常量宏定义&#xff0c;开关&#xff0c;还能实现函数 #undef 是取消宏定义 在undef后面要加上你要取消的宏定义 不想取消在后面可以瞎写但是不能为空 例子 #include "stdio.h"int main(…

C语言 #undef的用法

C语言中#undef的语法定义是&#xff1a;#undef 标识符&#xff0c;用来将前面定义的宏标识符取消定义。 然而&#xff0c;在实际应用中&#xff0c;#undef到底可以用来做什么&#xff1f; 整理了如下几种#undef的常见用法。 1. 防止宏定义冲突 在一个程序块中用完宏定义后&…