0 前言
官宣发布:
IDEA已支持下载:
1 JEPs
JEP 455 Primitive Types in Patterns, instanceof, and switch (Preview)
通过允许在所有模式上下文中使用原始类型模式,增强了模式匹配,并扩展了 instanceof
和 switch
以适用于所有原始类型。这是一项预览语言特性。
JEP 466 Class-File API (Second Preview)
提供解析、生成和转换 Java 类文件的标准 API。这是一项预览 API。
JEP 467 Markdown文档注释
使 JavaDoc 文档注释能够用 Markdown 而非 HTML 和 JavaDoc @
标签的混合体编写。
JEP 469 Vector API (Eighth Incubator)
引入一个 API 来表达向量计算,这些计算在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。
JEP 471 废除 Memory-Access Methods in sun.misc.Unsafe for Removal
将 sun.misc.Unsafe
中的内存访问方法标记为将来版本中删除。这些不受支持的方法已被标准 API 取代,即 VarHandle API (JEP 193, JDK 9) 和 Foreign Function & Memory API (JEP 454, JDK 22)。强烈鼓励库开发者从 sun.misc.Unsafe
迁移到支持的替代品,以便应用程序能够顺利迁移到现代 JDK 版本。
JEP 473 Stream Gatherers (Second Preview)
增强 Stream API 以支持自定义中间操作。这将允许流管道以不容易用现有内置中间操作实现的方式转换数据。这是一项预览 API。
JEP 474 ZGC: Generational Mode by Default
将ZGC默认模式切换为分代模式。弃用非分代模式,并计划在未来版本中删除。
JEP 476 Module Import Declarations (Preview)
简洁地导入模块导出的所有包。简化了模块库重用,但不需要导入代码本身处于模块中。预览语言特性。
JEP 477 Implicitly Declared Classes and Instance Main Methods (Third Preview)
发展 Java 编程语言,以便初学者在不需要理解为大型程序设计的语言特性的情况下编写首个程序。远非使用语言的单独方言,初学者可为单类程序编写简化的声明,然后随技能提升,无缝扩展程序以使用更高级特性。经验丰富开发同样可享受简洁编写小程序乐趣,而无需使用旨在大规模编程的构造。预览语言特性。
JEP 480 Structured Concurrency (Third Preview)
通过引入 结构化并发 API简化并发编程。结构化并发将不同线程中运行的一组相关任务视为单一工作单元,简化错误处理和取消操作,提高可靠性,并增强可观察性。预览 API。
JEP 481 Scoped Values (Third Preview)
引入 作用域值,使方法能在线程内与其被调用者共享不可变数据,并与子线程共享。作用域值比线程局部变量更易理解。还具有更低空间和时间成本,尤其与虚拟线程 (JEP 444) 和结构化并发 (JEP 480) 一起使用时。预览 API。
JEP 482 Flexible Constructor Bodies (Second Preview)
允许在显式构造函数调用(即 super(..)
或 this(..)
)之前出现语句。这些语句不能引用正在构造的实例,但它们可初始化其字段。在调用另一个构造函数之前初始化字段,当方法被覆盖时,可以使类更可靠。预览语言特性。
2 新特性
带明确区域设置的控制台方法 (JDK-8330276)
core-libs/java.io
java.io.Console
类添加了以下方法,这些方法接受一个 java.util.Locale
参数:
public Console format(Locale locale, String format, Object ... args)
public Console printf(Locale locale, String format, Object ... args)
public String readLine(Locale locale, String format, Object ... args)
public char[] readPassword(Locale locale, String format, Object ... args)
用户现在可以用指定的 Locale
格式化输出字符串或显示提示文本,该 Locale
可能与默认区域设置无关。例如,代码片段 System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date())
将显示:
2024-五月-16 星期四
支持直到另一个瞬间的持续时间 (JDK-8331202)
core-libs/java.time
java.time.Instant
类添加了一个新的方法,以获得直到指定 Instant
的 Duration
。新方法 Instant.until(Instant)
产生的持续时间与 Duration.between(Temporal, Temporal)
相同,但更易于用户发现。此外,与 Instant.until(Temporal, TemporalUnit)
方法相比,新方法直接返回一个 Duration
,无需单位转换。
新的 Parallel GC Full GC 算法 (JDK-8329203)
hotspot/gc
Parallel GC 现在使用与 Serial GC 和 G1 GC Full GCs 中相同的 Full GC 算法。
以前的算法包括通过 Java 堆中的每个活动对象进行三次传递:
- 标记活动对象
- 计算每个活动对象的新位置
- 移动对象到新位置并更新每个对象的字段
在第 2 步中计算的对象位置使用非堆内存存储,以避免通过 Java 堆中的活动对象进行第四次传递。问题是这种方案对于某些问题工作负载来说扩展性不好。此外,这种数据结构使用 Java 堆的 1.5% 作为非堆内存。
新算法对于问题工作负载的性能显著更好,并且不需要额外的内存,减少了所有工作负载的占用空间。
3 已移除的特性和选项
移除 ThreadGroup.stop
(JDK-8320786)
core-libs/java.lang
在此版本中已移除 java.lang.ThreadGroup.stop()
方法。这个固有不安全的方法在 JDK 1.2 (1998) 中已被弃用,在 Java 18 中弃用于删除,并在 Java 20 中重新规定/降级为无条件抛出 UnsupportedOperationException
。使用此方法的代码将不再编译。在旧版本上编译的代码,如果在使用 JDK 23 或更新版本时执行,现在会抛出 NoSuchMethodError
而不是 UnsupportedOperationException
。
移除 Thread.suspend/resume
和 ThreadGroup.suspend/resume
(JDK-8320532)
core-libs/java.lang
在此版本中已移除 java.lang.Thread.suspend()
、java.lang.Thread.resume()
、java.lang.ThreadGroup.suspend()
和 java.lang.ThreadGroup.resume()
方法。这些容易死锁的方法在 JDK 1.2 (1998) 中已被弃用,在 Java 14 中弃用于删除,并在 Java 19/20 中重新规定/降级为无条件抛出 UnsupportedOperationException
。使用这些方法的代码将不再编译。在旧版本上编译的代码,如果在使用 JDK 23 或更新版本时执行,现在会抛出 NoSuchMethodError
而不是 UnsupportedOperationException
。
移除模块 jdk.random
(JDK-8330005)
core-libs/java.util
已从 JDK 中移除 jdk.random
模块。该模块包含 java.util.random.RandomGenerator
算法的实现。这些实现已移动到 java.base
模块,java.base
模块现在将负责支持这些算法。
依赖 jdk.random
模块的应用程序,无论是通过构建脚本还是通过模块依赖项,都应删除对此模块的引用。
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。
各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。
负责:
- 中央/分销预订系统性能优化
- 活动&券等营销中台建设
- 交易平台及数据中台等架构和开发设计
- 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
- LLM Agent应用开发
- 区块链应用开发
- 大数据开发挖掘经验
- 推荐系统项目
目前主攻市级软件项目设计、构建服务全社会的应用系统。
参考: