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.rhkb.cn/news/480424.html

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

相关文章

【Code First】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 &#x1f…

podman 源码 5.3.1编译

1. 构建环境 在麒麟V10服务器操作系统上构建:Kylin-Server-V10-GFB-Release-2204-Build03-ARM64.iso。由于只是编译 podman 源码,没必要特地在物理机或服务上安装一个这样的操作系统,故采用在虚拟机里验证。 2. 安装依赖 参考资料&#xf…

git的使用(简洁版)

什么是 Git? Git 是一个分布式版本控制系统 (DVCS),用于跟踪文件的更改并协调多人之间的工作。它由 Linus Torvalds 在 2005 年创建,最初是为了管理 Linux 内核的开发。Git 的主要目标是提供高效、易用的版本控制工具,使得开发者…

Vue构建错误解决:(error TS6133)xxx is declared but its value is never read.

TypeScript会检查代码中未使用的变量,如果vscode安装了Vue的语法检查工具,会看到告警提示,再npm run build的时候,这个警告会变成错误 解决方案1:删除定义了未使用的变量 推荐使用这种方案,能保证代码的质…

Perplexica - AI 驱动的搜索引擎

更多AI开源软件: AI开源 - 小众AIhttps://www.aiinn.cn/sources Perplexica 是一个开源的 AI 驱动的搜索工具或 AI 驱动的搜索引擎,可以深入互联网寻找答案。受 Perplexity AI 的启发,它是一个开源选项,不仅可以搜索网络&#xf…

企业后端多租户管理平台

1 简介 此系统在企业后端管理系统上进行的更改,用于快速开发租户管理平台。项目中详细的功能请查看文章:企业后端系统通用模版_后端模板-CSDN博客 支持多租户,支持多租户切换,支持多租户数据隔离,支持多租户数据同步等…

微信小程序蓝牙writeBLECharacteristicValue写入数据返回成功后,实际硬件内信息查询未存储?

问题:连接蓝牙后,调用小程序writeBLECharacteristicValue,返回传输数据成功,查询硬件响应发现没有存储进去? 解决:一直以为是这个write方法的问题,找了很多相关贴,后续进行硬件日志…

Zero to JupyterHub with Kubernetes中篇 - Kubernetes 常规使用记录

前言:纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 参考&…

电脑无互联网连接怎么解决?分享5种解决方案

无互联网连接是指设备无法与互联网进行通信或连接失败。这可能会导致我们无法正常上网,给我们的日常生活和工作带来很大的不便。但请不要担心,下面将为您介绍一些解决无互联网连接问题的方法。 一、检查网络是否正常连接 首先,确保您的路由器…

Web前端学习_CSS盒子模型

content padding border margin <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS盒子模型</title><style></style> </head> <body> <div class"demo&quo…

HTML CSS JS基础考试题与答案

一、选择题&#xff08;2分/题&#xff09; 1&#xff0e;下面标签中&#xff0c;用来显示段落的标签是&#xff08; d &#xff09;。 A、<h1> B、<br /> C、<img /> D、<p> 2. 网页中的图片文件位于html文件的下一级文件夹img中&#xff0c;…

华为开源操作系统openEuler安装部署

本文主要描述华为开源操作系统openEuler的安装部署。openEuler是面向数字基础设施的开源操作系统&#xff0c;是由开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目&#xff0c;其愿景是为世界提供数字基础设施的开源操作系统&#xff0c;其…

分布式搜索引擎之elasticsearch单机部署与测试

分布式搜索引擎之elasticsearch单机部署与测试 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的…

渣土车治理新方案:智能化引领安全与环保新时代

一、渣土车问题现状 1. 盲区众多隐患大&#xff0c;事故频发令人忧。 渣土车盲区多&#xff0c;易引发交通事故&#xff0c;给行人和其他车辆带来严重安全威胁。由于渣土车体积庞大&#xff0c;实际的视觉盲区范围包括半盲区为左车门 1.2 米、右前方 1.5 米、正前方 1.2 米&am…

Vue3+node.js实现登录

文章目录 前端代码实现后端代码实现跨域处理 前端代码实现 效果图 前端代码实现 <template><div class"login-container"><el-card class"login-card"><template #header><div class"card-header"><span>…

jenkins 2.346.1最后一个支持java8的版本搭建

1.jenkins下载 下载地址&#xff1a;Index of /war-stable/2.346.1 2.部署 创建目标文件夹&#xff0c;移动到指定位置 创建一个启动脚本&#xff0c;deploy.sh #!/bin/bash set -eDATE$(date %Y%m%d%H%M) # 基础路径 BASE_PATH/opt/projects/jenkins # 服务名称。同时约定部…

Windows10+VirtualBox+Ubuntu:安装虚拟机VirtualBox,虚拟机中安装Ubuntu

一、需求 在Windows10系统中&#xff0c;安装虚拟机VirtualBox&#xff0c;VirtualBox中安装Ubuntu桌面版。 二、环境准备 系统环境 Windows10 内存&#xff1a;8G 虚拟化 虚拟机的运行&#xff0c;如果需要Windows系统开启虚拟化&#xff0c;可以通过BIOS设置。 “虚拟…

pcb元器件选型与焊接测试时的一些个人经验

元件选型 在嘉立创生成bom表&#xff0c;对照bom表买 1、买电容时有50V或者100V是它的耐压值&#xff0c;注意耐压值 2、在买1117等降压芯片时注意它降压后的固定输出&#xff0c;有那种可调降压比如如下&#xff0c;别买错了 贴片元件焊接 我建议先薄薄的在引脚上涂上锡膏…

【漏洞复现】|百易云资产管理运营系统/mobilefront/c/2.php前台文件上传

漏洞描述 湖南众合百易信息技术有限公司&#xff08;简称&#xff1a;百易云&#xff09;成立于2017年是一家专注于不动产领域数字化研发及服务的国家高新技术企业&#xff0c;公司拥有不动产领域的数字化全面解决方案、覆盖住宅、写字楼、商业中心、专业市场、产业园区、公建、…

重学 Android 自定义 View 系列(八):星星评分控件(RatingBar)

前言 本节实现一个常见的星星评分控件&#xff0c;广泛应用于各种评价类应用中&#xff0c;比如电影评分、商品评价等。难度不大&#xff0c;直接开搂&#xff01; 最终效果如下&#xff1a; 1. 效果分析 显示若干颗星星&#xff08;默认为5颗&#xff0c;可根据属性配置&a…