Java 18 孵化了一个矢量 API,预览 switch 表达式的模式匹配,采用 UTF-8 作为默认字符集,包括一个简单的 Web 服务器等等。
Java Development Kit (JDK) 18 现在作为正式的生产版本提供。新版本的标准 Java 有九个新特性,包括一个简单的 Web 服务器和另一个用于switch.
OpenJDK 页面列出了以下正式针对 JDK 18 的功能:服务提供者接口、简单的 Web 服务器、矢量 API 的第三个孵化器、代码片段、核心反射的重新实现、UTF-8 字符集、第二个孵化器外部函数和内存 API,switch 语句模式匹配的第二次预览,以及最后添加的 finalization 的弃用。
JDK 17是一个长期支持 (LTS) 版本,将获得 Oracle 至少八年的支持,而 JDK 18 将是一个短期功能版本,支持六个月。JDK 18 可以从oracle.com下载。
JDK 18 提案的细节包括:
- 弃用最终确定以进行删除在未来的版本中。Finalizer 存在的缺陷会在安全性、性能、可靠性和可维护性方面导致重大的现实问题。它还有一个困难的编程模型。现在默认启用最终确定,但可以禁用以促进早期测试。它将在功能版本中默认禁用,并在以后的版本中完全删除。该提案要求使用命令行选项来禁用标准 Java API 中所有终结器和终结方法的终结和弃用。该提案的目标包括帮助开发人员了解最终确定的危险,让开发人员为最终删除它做好准备,并提供简单的工具来帮助检测对最终确定的依赖。在 Java 1.0 中引入的 finalization 旨在帮助避免资源泄漏。一个类可以声明一个终结器——方法protected void finalize()— 其主体释放任何底层资源。垃圾收集器会在回收对象内存之前调度一个不可达对象的终结器被调用;反过来,该finalize方法可以采取诸如调用对象的close. 这似乎是防止资源泄漏的有效安全网,但存在缺陷,包括不可预测的延迟,在对象变得无法访问和调用其终结器之间需要很长时间;不受约束的行为,终结器代码能够采取任何行动,包括复活对象并使其再次可访问;终结器始终处于启用状态,没有明确的注册机制;终结器可以以任意顺序在未指定的线程上运行。鉴于最终确定的问题,建议开发人员使用替代技术来避免资源泄漏,即 try-with-resources 语句和清理器。(有关详细信息,请参阅JDK 增强提案 421。)
- 对于互联网地址解析 SPI,建议为主机和名称地址解析定义一个 SPI,以便Inet.Address可以使用平台内置解析器以外的解析器。这项工作的动机包括更好地启用Project Loom、Java 中的并发和新编程模型,以及集成新的网络协议、定制和启用测试。该提案不涉及为 JDK 开发替代解析器。
- 模式匹配switch的第二个预览,其中 Java 语言将通过switch表达式和语句的模式匹配以及对模式语言的扩展来增强。这是在JDK 17中预览的。扩展模式匹配以switch允许针对多个模式测试表达式,每个模式都有特定的操作,因此可以简洁安全地表达复杂的面向数据的查询。此功能来自Project Amber,这是一个专注于较小的、面向生产力的 Java 功能的 OpenJDK 项目。“模式匹配switch是每个 Java 程序员都会看到、遇到并且能够利用的东西,”甲骨文 Java 平台组副总裁 Georges Saab 说。该功能显示了对 Java 模式匹配的广泛支持;以前它可用于instanceof. Saab 说,这种编程风格将成为第二天性。
- 使用方法句柄重新实现核心反射将在方法句柄之上重新实现lang.reflect.Method、Constructor和。将方法句柄用作反射的底层机制将降低API和API 的维护和开发成本。Fieldjava.lang.invokejava.lang.reflectjava.lang.invoke
- 使用简单的 Web 服务器提案,将提供一个命令行工具来启动仅服务于静态文件的最小 Web 服务器。没有可用的 CGI 或类似 servlet 的功能。该工具可用于原型设计、临时编码和测试,特别是在教育环境中。该计划的目标包括提供一个开箱即用的静态 HTTP 文件服务器,它易于设置和最少的功能,减少开发人员的激活能量并使 JDK 更易于使用,并通过命令行和一个小 API 提供默认实现用于程序化创建和定制。提供功能丰富或商业级的服务器不是该提案的目标。
- 外来函数和内存 API的第二次孵化,其中引入了一个 API,Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作。通过调用外部函数(JVM 之外的代码)以及安全地访问外部内存(不受 JVM 管理的内存),API 允许 Java 程序调用本地库并处理本地数据,而不会像 JNI(Java 本地接口)那样脆弱和危险。其目的是用卓越的纯 Java 开发模型取代 JNI。此 API 在 JDK 17 中孵化。对于 JDK 18,将根据反馈进行改进,例如在内存访问 var 句柄中支持更多的载体,如布尔和 MemoryAddress,以及用于将 Java 数组复制到内存和从内存中复制的新 API段。
- 矢量 API将在 JDK 18 中第三次孵化,此前曾在JDK 16和JDK 17中孵化。该提议将表达向量计算,在运行时编译为支持的 CPU 架构上的最佳向量指令,实现优于等效标量计算的性能。矢量运算表示一定程度的并行化,可以在单个 CPU 周期内完成更多工作,从而显着提高性能。与平台无关的向量 API 旨在提供一种用 Java 编写复杂算法的方法,使用现有的 HotSpot 自动向量化器,但使用使向量化更可预测的用户模型。JDK 18 还将增加对ARM 标量向量扩展的支持平台并提高在支持硬件掩码的架构上接受掩码的向量操作的性能。矢量 API 也源自Project Panama。
- 将 UTF-8 指定为标准 Java API 的默认字符集. UTF-8 是一种用于电子通信的可变范围字符编码,被认为是 Web 的标准字符集。Charset 是一种字符编码,能够对网络上的所有字符进行编码。通过此更改,依赖于默认字符集的 API 将在所有实现、操作系统、语言环境和配置中保持一致。该提案无意定义新的 Java 标准或 JDK 特定的 API。该提案的支持者预计,Java 选择 UTF-8 不会对许多环境中的应用程序产生任何影响,因为 MacOS、许多 Linux 发行版和许多服务器应用程序已经支持 UTF-8。但是,在其他环境中存在风险,最明显的是,依赖于默认字符集的应用程序在处理未指定默认字符集时生成的数据时会出现错误行为。数据损坏可能会悄无声息地发生。预计主要影响将落在亚洲地区的 Windows 系统用户以及亚洲和其他地区的一些服务器环境。
- Java API 文档中的代码片段@snippet,涉及为 JavaDoc 的标准 Doclet引入标签,以简化在 API 文档中包含示例源代码。该计划的目标之一是通过提供对这些片段的 API 访问来促进源代码片段的验证。虽然正确性是作者的责任,但对 JavaDoc 和相关工具的增强支持可以使其更容易实现。其他目标包括启用现代样式,例如语法突出显示,以及名称与声明的自动链接,以及为创建和编辑片段提供更好的 IDE 支持。该提案指出,API 文档的作者通常在文档注释中包含源代码片段。
Saab 表示,尽管 JDK 18 是一个非 LTS(长期支持)版本,仅得到六个月的支持,但它仍然具有生产质量。LTS 版本每两年发布一次,下一个版本 JDK 21 将于 2023 年 9 月发布。继 JDK 18 之后,JDK 19将于今年 9 月发布。
Linux/RISC-V 端口正式面向 Java 19,这是标准 Java 的非 LTS 版本,将于 9 月发布。Java Development Kit 19 预计将于今年 9 月推出,现在正式提出了一个针对它的初始功能:JDK 到开源 Linux/RISC-V 指令集架构 (ISA) 的端口。
根据正在进行的增强 Java 的计划,JDK 19,或简称为 Java 19,可能会承载大量的特性,从通用泛型到值对象。但到目前为止,RISC-V 端口是唯一官方提出的针对 JDK 19 的功能。JDK 19 将紧随JDK 18之后。标准 Java 的发布周期为六个月。
借助Linux/RISC-V 端口,Java 将获得对已被多种语言工具链支持的硬件指令集的支持。RISC-V 实际上是一系列相关的 ISA。Linux/RISC-V 端口仅支持 RISC-V 的 RV64GV 配置,RISC-V 是一种包含矢量指令的通用 64 位 ISA。Java 的开发者将来可能会考虑其他 RISC-V 配置。
该端口将支持以下 HotSpot VM 选项:模板解释器、C1(客户端)JIT 编译器、C2(服务器)JIT 编译器以及包括 ZGC 和 Shenandoah 在内的所有当前主线垃圾收集器。实际移植几乎完成;JDK 增强提案 (JEP) 的重点是将端口集成到 JDK 主线存储库中。
除了 RISC-V 端口之外,一个外部函数和内存 API的预览,允许 Java 程序与 JVM 运行时之外的代码和数据进行互操作,似乎也注定了官方针对 JDK 19,因为 API 提案本身引用了JDK 19 作为目的地。但截至 3 月 14 日,OpenJDK 的 JDK 19 页面上的特性中并未列出外部函数和内存 API 。
JDK 18 和 JDK 19 都是短期版本,只有六个月的顶级Premier支持。当前版本JDK 17是一个长期支持 (LTS) 版本,提供了数年的支持。
说明:本文限于篇幅,故而只展示部分的面试内容,完整的Java面试学习文档小编已经帮你整理好了,有需要的朋友点赞+关注私信我777免费领取Java、大厂面试学习资料哦!