专业的JAVA编程教程与资源

网站首页 > java教程 正文

详解 Java 版本更新方式与发布周期

temp10 2025-02-13 14:20:52 java教程 10 ℃ 0 评论

#头条创作挑战赛#

Java 19 即将正式发布(2022年9月22号)。与 Java 9 之前相比,Java 的新版本的发布周期变成了半年一次。那 Java 的版本更新是如何管理的呢?首先从 JLS、JSR 和 JEP 说起。

详解 Java 版本更新方式与发布周期

JLS、JSR和JEP

JLS的全称是Java Language Specification,即Java语言规范。顾名思义,JLS是Java语言最权威的描述。它定义了Java语言的方方面面,是Java语言的终极指南。与JLS对应的是JVMS(Java Virtual Machine Specification),即Java虚拟机规范。与Java虚拟机相关的内容,包括 class 文件的格式和字节代码指令等,都在JVMS里面进行了规范。每次Java新的版本发布,Oracle 会在其官方网站上提供该版本的JLS和JVMS。

JSR 的全称是 Java Specification Requests,即 Java 规范请求。顾名思义,JSR表示的是对Java规范进行修改的请求。与JSR相关的是JCP(Java Community Process)组织。JCP是一个开放的Java社区,其作用是管理Java规范的更新,也就是管理JSR。虽然任何个人和公司都可以免费自由的加入JCP,但是除了大公司和诸如 Doug Lea 这样的知名人士之外,普通个人在里面的作用微乎其微。

JCP 中权利最大的机构是执行委员会,负责JSR的审核。JCP社区中的任何人或组织都可以提交JSR草案。JSR草案经过一系列的审核和相应的开发,最终由执行委员会表决通过之后,正式成为Java规范的一部分。

目前的JCP执行委员会的成员包括阿里巴巴、ARM、JetBrains、IBM、Intel、Oracle、SAP和Twitter等大公司。不少人批评JCP其实只是一个“橡皮图章”机构,大部分JSR都是大公司之间权衡较量之后的结果。但是也不能否认 JCP 在 Java 发展中的重要作用。

每个Java的版本都有一个对应的JSR,描述了这个版本对Java规范的改动。下面是一些在 Java 发展历史上产生过重要影响的JSR:

  • JSR-175:Java注解。
  • JSR-223:脚本语言支持。
  • JSR-269:可插拔注解处理器API。
  • JSR-335:Lambda表达式。
  • JSR-376:Java平台模块系统。
  • JSR-380:Bean验证API。
  • JSR-317:JPA 2.0。

作为对Java规范的更新方式,JSR的问题在于其流程太过正式。大多数时候对 Java 的更新是从一些想法出发,然后逐步探索,以找到最适合的实现方式。JSR 的流程对这样的探索就显得太过繁琐,因为不可能在最开始的时候就有很完善的形式化的描述。

JEP 的出现正是为了解决这个问题。JEP的全称是JDK Enhancement Proposal,即JDK更新建议。相对于JSR,JEP的粒度更小,也没有形式化的流程。Python也有类似的更新方式,称为PEP。一般来说,多个JEP可以组成一个JSR。比如 Java 模块系统对应的JSR-376由6个JEP组成。从Java 10开始,Java 改变了发布的周期,变成了半年一次。Java 10 及其之后的Java新版本对应的 JSR 都由几个JEP组成。

所有的JEP都在 OpenJDK 的问题追踪系统(bugs.openjdk.org)中管理。JEP可能处于下表中的几个状态。

名称

说明

草案(DRAFT)

这是最初的状态。JEP的作者根据模板提交草案。

已提交(SUBMITTED)

作者提交JEP来进行审核。

候选(CANDIDATE)

JEP被加入到开发路线图中作为候选。

建议采用(PROPOSED TO TARGET)

JEP被建议提交加入到某个发布版本中。

建议放弃(PROPOSED TO DROP)

JEP被建议放弃。

已采用(TARGETED)

JEP被加入到某个发布版本中。

已集成(INTEGRATED)

JEP的相关代码已经集成。

已完成(COMPLETED)

JEP已经完成。

已关闭(CLOSED)

JEP相关的流程全部完成。

目前的 Java 版本更新是由 JEP 推动的。感兴趣的组织和个人都可以提交自己的 JEP。下图是一个处于候选状态的 JEP。

OpenJDK

OpenJDK是Java SE的免费和开放源代码的实现。从Java SE 7开始,OpenJDK是Java SE的官方参考实现。OpenJDK起源于2006年Sun公司把Java变成开源软件的承诺。经过10多年的努力,在Oracle、Red Hat、IBM、Apple和SAP等大公司的合作下,OpenJDK已经成为了Java平台的基石。

OpenJDK中包含很多组成部分,包括HotSpot虚拟机、Java标准库、Java编译器和相关工具等。OpenJDK 的源代码在 GitHub 上。

Java 的版本更新

从1996年JDK 1.0发布以来,Java的发展历经了很多个版本。在Java 10之前,Java的版本更新速度比较慢,通常耗时两到三年。Java 9更是在Java 8之后3年半才出来。这样的更新频率已经不适合现在的发展趋势了,毕竟其他的开发平台,如Go、NodeJS和Python等都在飞快的迭代发展。根据Java平台首席架构师Mark Reinhold的建议,从Java 9之后,Java改成了半年一次的火车发布(release train)模式。Java会在每年的3月和9月固定发布一个新版本。在固定时间的基础上,再来选择每个版本需要添加的功能。在半年一次的版本发布之外,还有每两年一次的长期支持版本,也就是LTS版本。目前的Java 8、Java 11和Java 17都是LTS版本,而下一个LTS版本是2023年9月发布的Java 21。除了LTS版本之外的其他版本,都认为是在上一个LTS版本之上的小的功能改进。

与Java的发布周期变动相关的是Oracle对Java版本的支持方式也发生了变化。从Java 9开始,Oracle提供了基于OpenJDK的Java发布版本,也就是从jdk.java.net可以下载的版本。这些版本的授权协议对商业使用是友好的。

从Java 11开始,Oracle除了之前提供的OpenJDK的发布版本之外,还提供付费支持的Oracle JDK。Oracle JDK需要从OTN(Oracle Technology Network)下载。Oracle JDK对个人用户的使用是免费的,商业使用则需要付费。Oracle对OpenJDK的发布版本只提供6个月的支持,也就是到下一个版本发布为止。这6个月的支持包括两个按季度的安全更新。也就是说,如果你想一直得到Oracle的OpenJDK发布版本的安全更新,就必须不断地更新版本。

如果你不想更新版本,但是又希望获取安全更新,可以使用其他服务商提供的Java发布版本。其他常用的Java发布版本包括 Eclipse Temurin、Amazon Corretto、Azul Zulu、SAP SapMachine 等。这些发布版本的好处是它们提供了安全更新,并且授权协议对商业使用友好。

对大多数用户来说,Eclipse Temurin 是目前比较好的选择,可以从 adoptium.net 下载。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表