JDK的版本演化,JDK要收费吗?

Java版本演化历史

Java的版本历史可以追溯到1995年,以下是Java语言自诞生以来的主要版本及其关键特性:

一、早期版本

  1. Java 1.0(1996年1月发布)

    • 引入了Java虚拟机(JVM)和Java应用编程接口(API)。
    • 包含了AWT(Abstract Window Toolkit)图形库。
  2. Java 1.1(1997年2月发布)

    • 增加了JAR(Java Archive)文件格式,用于打包Java类库、图像和声音等资源。
    • 引入了JDBC(Java Database Connectivity)API,用于数据库连接和操作。
    • 增加了JavaBeans组件模型,支持可重用软件组件的开发。

二、Java 2平台(Java 2 Platform)

  1. Java 2 SE(Standard Edition)1.2(1998年12月发布)

    • 引入了JIT(Just-In-Time)编译器,提高了Java程序的执行效率。
    • 增加了Java Plug-In技术,允许在浏览器中运行Java小程序(Applet)。
    • 提供了Java IDL(Interface Definition Language)和CORBA(Common Object Request Broker Architecture)支持,促进了Java与其他面向对象系统的互操作性。
  2. Java 2 SE 1.3(2000年5月发布)

    • 增加了对语音处理的支持,引入了Java Sound API。
    • 提供了对Java 2D的支持,增强了图形处理能力。
    • 改进了RMI(Remote Method Invocation)的通信协议,提高了远程调用的性能。
  3. Java 2 SE 1.4(2002年2月发布)

    • 引入了正则表达式API,提高了字符串处理的灵活性。
    • 增加了NIO(New Input/Output)库,提供了非阻塞式I/O操作的支持。
    • 提供了XML解析器和XSLT转换器,增强了Java对XML数据的处理能力。

三、Java SE(Standard Edition)后续版本

  1. Java SE 5.0(2004年9月发布,代号Tiger)

    • 引入了泛型、自动装箱和拆箱、枚举类型等语言特性,增强了Java语言的表达能力。
    • 提供了元数据(注解)的支持,允许在代码中添加额外的信息。
    • 引入了并发包(java.util.concurrent),提供了丰富的并发编程工具。
  2. Java SE 6.0(2006年12月发布,代号Mustang)

    • 提供了对脚本语言的支持,引入了脚本引擎API。
    • 增加了对Web服务的支持,提供了JAX-WS(Java API for XML Web Services)和JAXB(Java Architecture for XML Binding)等API。
    • 改进了垃圾收集算法,提高了Java应用的性能。
  3. Java SE 7.0(2011年7月发布,代号Dolphin)

    • 引入了try-with-resources语句,简化了资源管理。
    • 允许在switch语句中使用字符串作为分支条件。
    • 提供了对二进制字面量和下划线分隔符的支持,提高了代码的可读性。
  4. Java SE 8.0(2014年3月发布,代号Spider)

    • 引入了Lambda表达式和函数式接口,支持更简洁的并发编程。
    • 提供了新的Date-Time API(JSR 310),改进了时间和日期的处理。
    • 引入了Nashorn JavaScript引擎,允许在Java应用中运行JavaScript代码。

四、Java SE后续快速发布版本

  1. Java SE 9.0(2017年9月发布)

    • 引入了模块化系统(JPMS,Java Platform Module System),提高了Java应用的灵活性和可维护性。
    • 允许接口包含私有方法和静态方法。
  2. Java SE 10.0(2018年3月发布)

    • 引入了局部变量类型推断(var关键字),简化了代码编写。
    • 提供了统一的垃圾收集器接口。
  3. Java SE 11.0(2018年9月发布,长期支持版本)

    • 增加了对HTTP/2的支持。
    • 改进了字符串处理性能。
    • 提供了更多的垃圾收集器选项。

五、Java SE后续版本

  1. Java SE 17及以后版本(从Java SE 9开始,Java平台每六个月发布一个新版本)

    • 不断引入新特性和性能优化。

    • 保持对旧版本的兼容性和向后迁移的能力。

    • Java 21(2024年发布,长期支持版本)

      • 进一步完善了模式匹配(Pattern Matching),引入了switch表达式模式匹配的改进。
      • 引入了虚拟线程(Virtual Threads),解决了线程创建和管理代价高昂的问题。
      • 引入了新的字符串模板功能,使得字符串拼接更加直观和简洁。
      • 记录模式(Record Patterns)进一步扩展,使得可以更轻松地处理Java中的Record类型。
      • 引入了一系列底层性能优化,特别是针对G1和ZGC垃圾回收器的改进。

综上所述,Java语言自诞生以来经历了多个版本的更新和升级,每个版本都引入了新的特性和性能优化。这些更新不仅提高了Java语言的表达能力和性能,还推动了Java技术在各个领域的应用和发展。

JDK的版本号命名规范

JDK(Java Development Kit)版本号的命名规范随着Java技术的发展和版本迭代而有所变化。以下是对JDK版本号命名规范的详细解释:

一、早期JDK版本号命名规范

在Java的早期版本中,JDK的版本号采用了“1.x”的格式,其中“x”代表版本号。例如,JDK 1.0、JDK 1.1、JDK 1.2等都是这种命名方式。这种命名方式直观地表示了Java的版本更新,但随着时间的推移,为了简化版本号的表示和更直观地反映Java的版本更新,JDK的命名方式发生了变化。

二、简化后的JDK版本号命名规范

从JDK 1.5(也被称为Java 5)开始,Java的开发者社区决定采用只包含主要版本号的命名方式。这种新的命名方式去掉了“1.”前缀,直接使用版本号作为JDK的名称,如JDK 5、JDK 6、JDK 7等。这种命名方式不仅简化了版本号的表示,也使得Java的版本更新更加直观和易于理解。

三、Java 9及以后版本的JDK命名规范

从Java 9开始,Oracle改变了JDK版本号的命名规则,使其更加简洁明了。具体规则如下:

  1. 主版本号:表示主要的发布版本,每六个月发布一次。例如,在JDK 9、JDK 11、JDK 17中,9、11、17是主版本号。
  2. 次版本号(可选):如果有的话,表示次要的功能更新。但在Java 9及以后的版本中,这个数字通常不再使用,或者在某些情况下以0表示。
  3. 安全版本号(可选):从Java 11.0.1开始,表示安全更新。每个季度发布的安全更新都会增加这个数字。

四、其他版本号组件

除了上述主版本号、次版本号和安全版本号之外,JDK版本号还可能包含以下组件:

  1. 更新版本号(在早期版本中使用):表示安全更新、bug修复和性能改进。例如,在JDK 8 Update 181中,181是更新版本号。但在Java 9及以后的版本中,这个组件通常被省略。
  2. 构建号(可选):用于标识特定的构建。它通常与安全和修复补丁的内部版本有关。
  3. 预览版本号(可选):对于预览或测试版的JDK,可能会有额外的标识符,如ea表示“早期访问”(Early Access),或者rc表示“候选版本”(Release Candidate)。

五、版本号示例

  1. JDK 1.4.2:这是一个早期版本的JDK,其中1是主版本号(但按照新的命名规则应视为1.x系列),4是次版本号,2是更新版本号。
  2. JDK 5:按照简化后的命名规则,5是主版本号。
  3. JDK 11:同样按照简化后的命名规则,11是主版本号。
  4. JDK 17.0.1:在这个版本中,17是主版本号,0是次版本号(虽然在这个例子中它没有被赋予新的功能含义),1是安全版本号。

以安装文件为例:

安装文件: jdk-8u131-windows-x64.exe
安装后的版本显示:

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

SE 和LTS 代表的是什么版本

SE

SE是Standard Edition的缩写,即标准版。Java SE(Java Standard Edition)是Java平台的基础,也是开发者最常使用的Java版本。它包含了编程中最基础的核心库,如Java的基本语法、面向对象编程、集合框架、多线程、网络编程、输入输出流、JDBC(Java数据库连接)等。Java SE主要用于开发桌面和服务器应用程序,提供了一个全面的环境,支持开发人员在各平台上创建各种类型的应用。

LTS

LTS是Long-Term Support的缩写,即长期支持版本。Java LTS版本是指由Oracle官方或其他维护机构提供长期支持和维护的Java版本。这些版本在发布后会获得较长时间的官方支持,包括安全更新、bug修复和性能提升。LTS版本通常经过深入的测试和使用,具有较高的稳定性和兼容性,非常适合用于生产环境。

LTS版本的发布周期相对较长,通常每几年发布一次,以确保其稳定性和长期支持性。例如,Java 8、Java 11和Java 17都是LTS版本,它们在发布后都得到了Oracle官方或其他维护机构的长期支持和更新。

区别与联系

  1. 定位不同:Java SE是Java平台的标准版,提供了基础的开发环境和核心库;而LTS版本则是Java平台中经过深入测试、具有长期支持和更新的稳定版本。
  2. 发布周期不同:Java SE的版本更新相对频繁,以引入新特性和性能优化;而LTS版本的发布周期较长,以确保其稳定性和长期支持性。
  3. 适用场景不同:Java SE适用于各种类型的应用程序开发,包括桌面、服务器和移动设备等;而LTS版本则更适合用于生产环境,以确保应用程序的稳定性和安全性。

SE 和LTS 在哪出现

在目前Oracle的官方下载中, JDK21 是LTS版本, JDK23 是最新发布的SE版本。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

JDK是免费的吗?

JDK 在很长一段时间都是免费使用的, 这也促成了Java语言的大力发展和养成了众多的开发者。 但在Oracle收购Sun 之后,2019年1月之后发布的Oracle JDK 8版本不再免费用于商业用途。

  • 2019年4月16日当天,Oracle发布了Oracle JDK的8u211和8u212两个版本(属于JDK8系列),并从这两个版本开始将JDK的授权许可从BCL换成了OTN!也就是从这两个版本开始商用收费了。 具体费用大概是: 对于PC, 每用户每月是2.5美元,对于服务器/云部署,每个processor 每月是25美元。
  • JDK11及之后新发布的JDK,都是使用OTN协议。
    关于BCL 和OTN协议的详细介绍,可以参考后面补充的部分。

这个协议变化的影响是:
对于商业用途:
Oracle JDK 8 u191 是2019年1月前发布的最新版本,所以只要一直使用 JDK 8 u191 以及更早的版本,就不需付费。
从2019年1月份开始,Oracle JDK 开始对 Java SE 8 之后的版本开始进行商用收费,确切的说是 8u201/202 之后的版本。如果你用 Java 开发的功能如果是用作商业用途的,如果还不想花钱购买的话,能免费使用的最新版本是 8u201/202。

总结

  • 对于个人学习和开发: 无所谓收费,都可以使用
  • 对于商业用途: 也就是公司使用,或是作为软件产品的一部分免费使用的最新版本: 8u201/202。

如果要继续免费使用高版本的JDK怎么办,答案就是OpenJDK, 当然也有其他免费开源JDK实现,比如 Zulu,AdoptOpenJDK,Amazon的Corretto和阿里巴巴的dragonwell等等

OpenJDK

OpenJDK 是JDK的开放源码版本。

  • OpenJDK项目始于2006年,当时SUN公司在Java One大会上宣布了对Java的开源决定和承诺。
  • 2009年4月,OpenJDK正式对公众发布,并采用了GPL协议。

Open JDK 历史:

  • OpenJDK 6项目 - 基于JDK 7,但经过修改后提供了Java 6的开源版本
  • OpenJDK 7项目 - 2011年7月28日
  • OpenJDK 7u项目 - 该项目开发Java Development Kit 7的更新
  • OpenJDK 8项目 - 2014年3月18日
  • OpenJDK 8u项目 - 该项目开发Java Development Kit 8的更新
  • OpenJDK 9项目 - 2017年9月21日
  • OpenJDK 10项目 - 2018年3月10日至20日
  • OpenJDK 11项目 - 2018年9月11日至25日
    Java 10开始,OpenJDK项目也将每六个月发布一次新功能。但是,OpenJDK不存在STL版本,仅支持对发布的更改,直到下一个版本发布。例如,当OpenJDK 11发布6个月后,OpenJDK 12发布时,OpenJDK 11也就不再进行支持版本更新。

OpenJDK 的地址: https://openjdk.java.net/install/

OpenJDK VS Oracle JDK

OpenJDK由Oracle,OpenJDK和Java Community开发。然而,红帽,Azul Systems,IBM,Apple Inc.,SAP AG等顶级公司也积极参与其开发。
OpenJDK具有GNU通用公共许可证(GNU GPL)是完全开源的,可以自由使用。

Oracle JDK 在响应能力和JVM性能方面要好得多。更加稳定。

总结

Java 版本历史

  • SE 标准

  • LTS 长期支持

  • JDK Beta - 1995

  • JDK 1.0 - 1996年1月

  • JDK 1.1 - 1997年2月

  • J2SE 1.2 - 1998年12月

  • J2SE 1.3 - 2000年5月

  • J2SE 1.4 - 2002年2月

  • J2SE 5.0 - 2004年9月

  • Java SE 6 - 2006年12月

  • Java SE 7 - 2011年7月

  • Java SE 8(LTS) - 2014年3月

  • Java SE 9 - 2017年9月

  • Java SE 10(18.3) - 2018年3月

  • Java SE 11(18.9 LTS) - 2018年9月

  • Java SE 12(19.3) - 2019年3月

Oracle 发布计划, 自Java SE 10以来,每6个月发布一次新版本。长期支持(LTS)版本的产品每3年发布一次。

OpenJDK是Java SE Platform Edition的免费开源实现。它最初于2007年发布,是Sun Microsystems于2006年开始开发的结果。
OpenJDK是自SE 7版以来Java标准版的官方参考实现。

协议

  • BCL协议,即Oracle Binary Code License Agreement,可以使用JDK,但是不能进行修改。私用和商用都可以,但是JDK中的某些商业特性,是需要付费才可以使用。
  • OTN协议,即Oracle Technology Network License Agreement,可以私用,商用需要付费。
  • GNU GPL(GNU General Public License)即GNU通用公共许可协议,是一个广泛被使用的自由软件许可协议。

不同类型与版本JDK的更新的问题

为什么要更新? 因为可能会爆出一些漏洞风险。

  • JDK8无法更新,存在安全性等风险
  • OpenJDK 没有TLS版本,也存在没有更新的风险

解决方法:

  • 一直使用OpenJDK 最新版
  • 从其他地方获取OpenJDK的更新支持,比如Red Hat声明:RHEL支持OpenJDK7,8,11,支持至少6年。

补充1: BCL 和OTN协议

BCL和OTN是两种不同的协议,它们各自具有不同的特点和适用场景。以下是对这两种协议的详细解释:

一、BCL协议

  1. 全称:BCL协议即Oracle Binary Code License Agreement,是Oracle二进制代码许可协议。
  2. 主要条款
    • 允许用户使用JDK,但禁止对其进行修改。
    • 允许私人和商业使用,但JDK中的某些商业特性可能需要付费才能使用。
  3. 适用场景
    • 适用于那些希望使用Oracle JDK进行开发,但不需要对其进行修改或定制的用户。
    • 适用于那些希望将Oracle JDK用于商业用途,但愿意为某些商业特性付费的用户。

二、OTN协议

  1. 全称:OTN协议通常指的是Oracle Technology Network License Agreement,即Oracle技术网络许可协议。但需要注意的是,OTN在某些上下文中也可能指其他含义(如光传送网络协议),但在讨论Oracle JDK时,一般指的是前者。
  2. 主要条款
    • 允许用户私人和非商业使用JDK。
    • 商业使用需要付费。
  3. 变更与影响
    • 从2019年4月16日开始,Oracle发布了新的JDK 8的更新,版本号为8u211和8u212,这些版本的许可协议从BCL换成了OTN。
    • 这一变更意味着,如果用户希望在生产环境中使用这些新版本的JDK 8,就需要向Oracle付费。
    • 对于个人或学习使用来说,这一变更并没有太大的影响,因为OTN协议仍然允许私人和非商业使用。

三、BCL与OTN协议的比较

  1. 使用范围
    • BCL协议允许更广泛的商业使用,只要用户不为某些特定的商业特性付费。
    • OTN协议则对商业使用进行了更严格的限制,要求用户为商业使用付费。
  2. 修改权限
    • 两者都禁止用户修改JDK。
  3. 适用版本
    • BCL协议通常适用于Oracle JDK的早期版本。
    • OTN协议则适用于从2019年4月16日开始发布的新版本JDK 8及以后的版本(具体适用版本可能因Oracle的政策调整而有所变化)。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

书生大模型实训营第4期进阶岛第三关:LMDeploy 量化部署进阶实践

书生大模型实训营第4期进阶岛第三关:LMDeploy 量化部署进阶实践 1. 配置 LMDeploy 环境1.1 开发机的创建与环境搭建1.2 模型获取1.3 模型测试 2. InternLM2.5 的部署与量化2.1 LMDeploy API 部署 InternLM2.52.1.1 启动API服务器2.1.2 以命令行形式连接 API 服务器2…

visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具

1.需求:找出图像中的这个图形。 2.步骤 使用CogPMAlignTool工具,该工具是模板匹配工具,见名知意,所谓模板匹配工具就是说先使用该工具对一张图像建立模板,然后用这个模板在其他图像上进行匹配,匹配上了就说…

Z2400027基于Java+SpringBoot+Mysql+thymeleaf引擎的图书馆管理系统的设计与实现 代码 论文

图书馆管理系统的设计与实现 一、项目背景与简介二、系统总体功能三、运行环境与技术选型四、系统架构与模块划分五、系统界面截图六、源码获取 一、项目背景与简介 项目背景: 随着信息技术的不断发展和图书资源的日益丰富,图书馆作为知识传播和学习的重…

详谈面试题:Vue、React为什么使用虚拟DOM

虚拟DOM是一种在前端框架中广泛使用的技术,它可以提升开发效率。那么国外流行的框架svelte没有使用虚拟DOM,而是直接操作真实DOM,效率依然很高。为什么Vue和React不采用这种方式呢? 目录 一、框架设计 二、解耦运行环境 三、总…

Next.js-样式处理

#题引:我认为跟着官方文档学习不会走歪路 Next.js 支持多种为应用程序添加样式的方法,包括: CSS Modules:创建局部作用域的 CSS 类,避免命名冲突并提高可维护性。全局 CSS:使用简单,对于有传统…

神经网络中的损失函数(Loss Function)

损失函数(Loss Function)在机器学习和深度学习中扮演着至关重要的角色,它是衡量模型预测值与实际值之间差异程度的函数。通过最小化损失函数,我们可以优化模型的参数,使其预测结果更加准确。 一、损失函数的定义 损失函…

AWS账户是否支持区域划分?

在云计算的世界中,亚马逊网络服务(AWS)凭借其全球化的基础设施和丰富的服务选项受到许多企业和开发者的青睐。一个常见的问题是:AWS账户是否支持区域划分?为了回答这个问题,我们九河云一起深入了解AWS的区域…

鼠标前进后退键改双击,键盘映射(AutoHotkey)

初衷: 1.大部分鼠标为不可自定义按键,可以自定义的又很贵。 鼠标左键是双击是很频类很高的操作,鼠标前进/后退按键个人感觉使用频率很低,因此把鼠标前进/后退改为双击还是很合适的。 2.有些短款的键盘没有Home或End键,…

华为海思2025届校招笔试面试经验分享

目前如果秋招还没有offer的同学,可以赶紧投递下面这些公司,都在补招。争取大家年前就把后端offer拿下。如果大家在准备秋招补录取过程中有任何问题,都可以私信小编,免费提供帮助。如果还有部分准备备战春招的同学,也可…

Springboot项目搭建(7)-Layout界面布局

1.概要 初步搭建了Layout界面的布局,其中包括左侧导航栏及其路由功能,和右侧头、体、脚部分的大致排版。最后在头部分中的昵称与头像替换成动态数据。 2.Layout主页布局 文件地址:src\views\Layout.vue 2.1 script行为模块 从elementUI中…

c语言的qsort函数理解与使用

介绍:qsort 函数是 C 标准库中用于排序的快速排序算法函数。它的用法非常灵活,可以对任意类型的元素进行排序,只要提供了比较函数即可。 qsort 函数原型及参数解释: void qsort ( void* base, //指向要排序的数组的首元素…

#渗透测试#红蓝攻防#HW#漏洞挖掘#漏洞复现01-笑脸漏洞(vsftpd)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

(73)脉冲幅度调制PAM调制解调通信系统的MATLAB仿真

文章目录 前言一、PAM调制的基本原理二、PAM调制的步骤三、PAM调制示例四、PAM调制的应用五、MATLAB仿真1. 仿真代码2. 仿真结果 总结 前言 PAM(Pulse Amplitude Modulation,脉冲振幅调制)是一种模拟信号到数字信号的转换方式,它…

算法的NPU终端移植:深入探讨与实践指南

目录 ​编辑 引言 算法选择 模型压缩 权重剪枝 量化 知识蒸馏 硬件适配 指令集适配 内存管理 并行计算 性能测试 速度测试 精度测试 功耗测试 案例分析 图像识别算法的NPU移植案例 结论 引言 在人工智能技术的浪潮中,神经网络处理器(…

汽车免拆诊断案例 | 2017款捷豹F-PACE车发动机偶尔怠速不稳

故障现象  一辆2017款捷豹F-PACE车,搭载2.0 L GTDi发动机,累计行驶里程约为16万km。车主反映,车辆组合仪表上发动机故障灯点亮(图1),且发动机偶尔怠速不稳。 图1 发动机故障灯点亮 故障诊断 接车后试车…

不建模,无代码,如何快速搭建VR虚拟展厅?

不建模、无代码搭建虚拟展厅,可以借助一些专业的虚拟展厅搭建平台或工具来实现。以下是一些具体的步骤和建议: 一、选择平台或工具 首先,需要选择一个适合的平台或工具来搭建虚拟展厅。这些平台通常提供预设的展厅模板、拖拽式编辑工具和丰富…

数星星 (C++ 树状数组)

1265. 数星星 - AcWing题库 分析: 星星是按纵坐标递增给我们的,如果纵坐标相同,就按横坐标来给 所以星星是从低到高,一行一行来给的 题目要求我们去求每个等级的星星各有多少个 星星的等级由它左下角(包括左边和下…

AIGC培训讲师人工智能培训讲师叶梓Python深度学习与AIGC培训提纲

【课程时长】 8天(6小时/天) 【课程简介】 随着AIGC(基于AI的内容生成)技术的崛起,以ChatGPT为代表的人工智能技术正引领全球科技潮流。为了帮助学员更好地理解和应用这一技术,特推出了本课程。 本课程…

GB28181系列三:SIP消息格式

我的音视频/流媒体开源项目(github) GB28181系列目录 目录 一、SIP消息Header字段 二、SIP URI(URL) 三、SIP路由机制 1、路由机制介绍 2、严格路由(Strict Routing)与松散路由(Louse Routing) 3、总结 四、SIP消…

STM32-C语言基础知识

C语言基础知识 stdint.h简介 给寄存器某个位赋值 给位6赋值为1流程:先清0,再赋值 带参数的宏定义 建议使用do {…}while(0)来构造宏定义 条件编译 条件编译后面必须跟宏语句,如#if _LED_H 指针使用常见的2大问题 1、未初始化 2、越界使…