跳到主要内容

Java版本


Java版本

理解 Java 的版本号、JDK(Java Development Kit),以及相关的概念。下面是对这些概念的详细解释,以及它们之间的区别和作用。

1. Java 版本号

Java 的版本号不能直接套用普通软件的“主版本、次版本、补丁”语义。Java 10 起采用按时间发布的版本编号方案,主要数值部分为:

FEATURE.INTERIM.UPDATE.PATCH
  • FEATURE:特性版本,例如 11、17、21。
  • INTERIM:预留的中间版本字段,当前常见发布节奏中通常为 0。
  • UPDATE:该特性版本内的更新号。
  • PATCH:补丁号;尾部为 0 的字段可以省略,完整字符串还可能带 +构建号 和发行商信息。

例如 11.0.2 表示 FEATURE=11、INTERIM=0、UPDATE=2,不能把其中的 0 解释成新增小功能的“次版本”。

Java 8 常见的 1.8.0_XXX / 8uXXX 属于旧版本编号写法;1.8 对应 Java 8,不是 Java 1 的第八个小版本。查看版本时同时记录发行商、更新号与架构,不只看“Java 8/11/17”。

2. JDK(Java Development Kit)

JDK 是开发 Java 应用程序的工具包,它包含了一系列工具、库和编译器,用于开发、编译、调试和运行 Java 应用程序。JDK 是 Java 的核心组件之一,也是每个 Java 开发者必须安装的工具。

JDK 的主要组成部分

  • Java 编译器 (javac):
    • 编译 Java 源代码(.java 文件)为字节码(.class 文件)。
  • Java 启动器 (java):
    • 执行编译后的字节码,使得 Java 应用程序可以跨平台运行。
  • 标准类库:
    • 包含 Java API 提供的标准类库,如集合框架、I/O 操作、网络编程等。
  • 开发工具:
    • 包括调试工具(jdb)、文档生成工具(javadoc)、打包工具(jar)等。

3. JDK 与 JRE 的区别

JRE(Java Runtime Environment)指运行 Java 应用所需的 JVM 与类库,不包括编译器等开发工具。传统 JDK 常带独立的 jre 子目录,但模块化后的 JDK 不能再按这个目录结构理解;Oracle JDK 11 也不再单独提供 JRE / Server JRE 下载,其他发行商可能仍提供运行时包。

  • JDK:
    • 包含开发工具和运行 Java 所需的组件,不保证有独立的 jre 目录。
    • 适用于开发者。
  • JRE:
    • 仅用于运行 Java 应用程序。
    • 适用于最终用户或运行环境。

4. Java SE, Java EE, Java ME 的区别

  • Java SE (Standard Edition):
    • Java 标准版,包含了开发常规桌面和服务器应用程序所需的基础功能。大多数 Java 开发者都使用 Java SE。
  • Java EE (Enterprise Edition):
    • Java 企业版,基于 Java SE,添加了用于开发大规模分布式企业应用的额外功能,如 Web 服务、企业 JavaBeans (EJB)、Servlets、JSP 等。
  • Java ME (Micro Edition):
    • Java 微型版,专为嵌入式设备、移动设备和小型设备设计,包含适应这些设备的特定功能。

5. 版本区别与用途

每个 Java 版本都会引入新的特性和改进,因此理解不同版本的区别对选择合适的开发环境非常重要。

  • Java 8 (LTS):
    • 被广泛使用的 LTS 版本,引入了 Lambda 表达式、Stream API、默认方法等关键特性。
  • Java 11 (LTS):
    • 继 Java 8 之后的 LTS 版本,标准化了新的 HTTP Client API。局部变量类型推断 var 是 Java 10 引入的,Java 11 新增的是在 lambda 参数声明中使用 var 的能力。
  • Java 17 (LTS):
    • LTS 版本之一,例如包含已正式发布的密封类;switch 表达式在更早的 Java 14 已正式引入,并非 Java 17 首次提供。
  • Java 21、25 也是 LTS 版本,Java 17 不应再写成“最新 LTS”。LTS 的维护期限取决于发行商,选择时还要核对框架与部署环境的兼容范围。
  • 非 LTS 版本:
    • 这些版本在发布后的短期内得到支持,主要用于引入和测试新特性。如 Java 9、10、12、13 等。

6. 常见的 JDK 实现及其特点

1. Oracle JDK

  • Oracle JDK 是 Oracle 公司官方发布的 Java 开发工具包,是 Java SE(Standard Edition)的一个发行版。
  • 特点:
    • 许可证取决于具体版本、更新批次和使用场景,不能概括为“JDK 11 起生产使用一律收费”。下载和部署前核对该安装包适用的许可条款。
    • 定期更新和安全修补。
  • 版本:
    • LTS(长期支持)版本:8、11、17 等。
    • 非 LTS 版本:12、13、14、15、16、18、19 等。

2. OpenJDK

  • OpenJDK 是一个开源的 JDK 实现,由 Oracle 和其他社区成员共同维护,是 Oracle JDK 的基础。
  • 特点:
    • 开源且免费使用。
    • 不同发行版可能在补丁、组件、平台支持、更新周期和商业支持上存在差异,不能简单概括为“免费版缺少商业特性”。
  • 版本:
    • 和 Oracle JDK 同步的版本:8、11、17 等。
    • 提供最新的非 LTS 版本。

3. Adoptium (Eclipse Temurin)

  • Adoptium 前身为 AdoptOpenJDK,现在由 Eclipse 基金会管理。
  • 特点:
    • 社区驱动的开源 JDK 发行版。
    • 提供高质量的二进制构建,适用于不同平台。
  • 版本:
    • 支持 LTS 版本:8、11、17 等。
    • 提供非 LTS 版本。

4. Amazon Corretto

  • Amazon Corretto 是由亚马逊发布的免费、开源的 JDK 发行版。
  • 特点:
    • 亚马逊维护,包含长时间的支持和性能改进。
    • 完全兼容 OpenJDK。
  • 版本:
    • 提供 LTS 版本:8、11、17 等。
    • 提供非 LTS 版本。

5. Azul Zulu

  • Azul Zulu 是由 Azul 公司发布的一个商业支持的 OpenJDK 发行版。
  • 特点:
    • 商业支持,适用于企业环境。
    • 提供与不同平台兼容的版本,包括 Windows、Linux、macOS 和嵌入式系统。
  • 版本:
    • 支持 LTS 版本:8、11、17 等。
    • 提供非 LTS 版本。

6. GraalVM

  • GraalVM 是 Oracle 提供的一个高性能、可扩展的 Java 虚拟机,它也是一个多语言开发环境。
  • 特点:
    • 支持多语言运行时,包括 Java、JavaScript、Python、Ruby 等。
    • 提供本机映像生成(Native Image)功能。
  • 版本:
    • 基于 OpenJDK 构建,版本与 OpenJDK 保持一致。

7. Red Hat OpenJDK

  • Red Hat OpenJDK 是由 Red Hat 提供的 OpenJDK 构建,主要针对企业级应用。
  • 特点:
    • 提供商业支持和长期支持。
    • 常用于 Red Hat Enterprise Linux(RHEL)环境中。
  • 版本:
    • 支持 LTS 版本:8、11、17 等。
    • 提供非 LTS 版本。

8. SAP Machine

  • SAP Machine 是 SAP 发布的 OpenJDK 发行版。
  • 特点:
    • 用于 SAP 产品和客户的支持环境。
    • 完全开源,兼容 OpenJDK。
  • 版本:
    • 支持 LTS 版本:8、11、17 等。

9. Liberica JDK

  • Liberica JDK 是由 BellSoft 发布的 OpenJDK 发行版。
  • 特点:
    • 提供不同构建;JavaFX 是否随包提供取决于具体发行包,下载时核对所选构建。
    • 提供不同平台和操作系统的兼容版本。
  • 版本:
    • 支持 LTS 版本:8、11、17 等。
    • 提供非 LTS 版本。

7. SDK (Software Development Kit)

SDK 是软件开发工具包(Software Development Kit)的缩写。它通常包括了一组开发工具、库、示例代码、文档和其他资源,帮助开发者构建应用程序。对于 JVM 生态系统中的 SDK,最常见的例子是 Java 开发工具包(JDK,Java Development Kit)。

  • JDK: JDK 是 Java 的官方 SDK,包含了开发 Java 应用程序所需的所有工具和库。JDK 中主要包括:
    • Java 编译器(javac): 用于将 Java 源代码编译成字节码(.class 文件)。
    • 运行时组件: 包含 JVM 和标准 Java 类库,负责运行 Java 应用程序;现代 JDK 不一定附带独立 JRE 安装包。
    • 其他工具: 如 javadoc(生成文档的工具)、jdb(Java 调试器)等。

除了 JDK,其他 JVM 语言(如 Scala、Kotlin)也有自己的 SDK,这些 SDK 提供了用于编译、运行和调试这些语言的工具。

8. JVM 工具

JVM 工具 是指那些用于开发、管理和优化基于 JVM 的应用程序的工具。这些工具帮助开发者在 JVM 上构建和管理应用程序,包括编译、运行、调试、打包、依赖管理等方面。

  • JVM 是 Java 程序的运行环境。Java 代码在编译器的帮助下转化为字节码,这些字节码由 JVM 来执行。JVM 为不同的操作系统提供了统一的运行环境。
  • Java 程序跨平台性的实现依赖于 JVM。Java 编译器将源代码编译成与平台无关的字节码,JVM 则负责在不同平台上将字节码解释成机器码并执行。因此,只要平台有适配的 JVM,Java 程序就可以在上面运行,无需修改代码。
  • 虽然 JVM 是为 Java 设计的,但由于它的通用性,其他语言(如 Scala、Kotlin、Groovy 等)也可以编译为 JVM 字节码,并在 JVM 上运行。因此,JVM 并不局限于 Java 语言,它已经发展为支持多种语言的强大平台。

参考:JEP 322 版本编号、JEP 286:局部变量类型推断、Oracle JDK 11 迁移指南、Java SE 支持路线图。


文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
赏
评论

评论将在接近此处时加载,也可点击立即加载。

  目录