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 应用程序可以跨平台运行。
- 标准类库:
- 包含 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目录。 - 适用于开发者。
- 包含开发工具和运行 Java 所需的组件,不保证有独立的
- 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 8 之后的 LTS 版本,标准化了新的 HTTP Client API。局部变量类型推断
- 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 支持路线图。
评论将在接近此处时加载,也可点击立即加载。