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

news/2024/11/30 1:48:40/

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.ppmy.cn/news/1551064.html

相关文章

【GoF23种设计模式】01_建造者模式

文章目录 前言一、基本概念二、使用步骤 前言 提示:设计者模式有利于提高开发者的编程效率和代码质量: GoF(Gang of Four,四人帮)设计模式由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者合著&…

《掩码语言模型(Masked Language Model, MLM)》

一、引言 在自然语言处理领域,掩码语言模型(Masked Language Model, MLM)是一种重要的预训练方法。它通过随机掩码输入文本中的一部分单词,然后让模型预测被掩码的单词,从而学习语言的语义和语法知识。MLM 已经在许多自…

vue2面试题11|[2024-11-25]

1.vue源码-模版解析 <!DOCTYPE html> <html> <head><title></title> </head> <body><div idapp><h1> {{ str }} </h1>{{ str }} </div></body><script type"text/javascript" srcvue.js…

SM3 Sm4加密算法

一、概述 1、SM3是一种分组消息摘要算法&#xff0c;用于生成数据的哈希值&#xff08;消息摘要&#xff09;&#xff0c;而非直接加密数据。 1.1、 应用场景 数据完整性校验&#xff1a;验证数据在传输或存储过程中是否被篡改。 数字签名&#xff1a;与SM2等算法结合使用&am…

02.ES6(2)

2.10、rest参数 ES6 引入 rest 参数&#xff0c;用于获取函数的实参&#xff0c;用来代替 arguments <script>// ES5 获取实参的方式/* function date(){console.log(arguments);}date(大白,二黑,三孩); */// rest 参数/* function date(...args) {console.log(args)…

数据库期末复习题库

1. Mysql日志功能有哪些? 记录日常操作和错误信息&#xff0c;以便了解Mysql数据库的运行情况&#xff0c;日常操作&#xff0c;错误信息和进行相关的优化。 2. 数据库有哪些备份方法 完全备份&#xff1a;全部都备份一遍表备份&#xff1a;只提取数据库中的数据&#xff0…

最新特性MCP协议客户端复现

参考官方文档 https://modelcontextprotocol.io/quickstart1、客户端 2、 安装uv&#xff0c;一键安装命令&#xff1a; 先使用这个开放策略&#xff0c;否则直接安装失败 &#xff08;我是win11&#xff0c;再powershell&#xff09; Set-ExecutionPolicy RemoteSigned -Sco…

Spring Boot 开发环境搭建详解

下面安装spring boot的详细步骤&#xff0c;涵盖了从安装 JDK 和 Maven 到创建和运行一个 Spring Boot 项目的全过程。 文章目录 1. 安装 JDK步骤 1.1&#xff1a;下载 JDK步骤 1.2&#xff1a;安装 JDK步骤 1.3&#xff1a;配置环境变量 2. 安装 Maven步骤 2.1&#xff1a;下载…