JDK 25 正式发布,长期支持

news/2025/9/22 9:02:34/文章来源:https://www.cnblogs.com/sevencoding/p/19102955

JDK 25 是 LTS(长期支持版),至此为止,有 JDK8、JDK11、JDK17、JDK21 和 JDK 25 这四个长期支持版了。

JDK 25 共有 18 个新特性,这篇文章会挑选其中较为重要的一些新特性进行详细介绍

语言特性

基本类型模式匹配(JEP 507)

JDK25作为第三次preview

在Java的模式匹配框架instanceofswitch中直接支持原始类型(如intboolean),使这种表达式更加直接,减少样板代码,例如:

static void test(Object obj) {     if (obj instanceof int i) {System.out.println("It's an int: " + i);}  
}

模块导入声明(JEP 511)

该特性第一次预览是由 JEP 476(JDK 23 )提出,随后在 JEP 494 (JDK 24)中进行了完善,JDK 25 顺利转正。

支持import module语句声明模块依赖,替代部分包导入,提升代码可读性和工具链兼容性,例如:

import module java.base;  // 包含了import java.io.*; import java.util.*;import module java.base;      // exports java.util, which has a public Date class
import module java.sql;       // exports java.sql, which has a public Date classimport java.sql.Date;         // resolve the ambiguity of the simple name Date!...
Date d = ...                  // Ok!  Date is resolved to java.sql.Date
...

压缩源文件与实例主方法(JEP 512)

该特性第一次预览是由 JEP 445(JDK 21 )提出,随后经过了 JDK 22 、JDK 23 和 JDK 24 的改进和完善,最终在 JDK 25 顺利转正。

简化程序入口,支持类级别的void main()方法,无需public static修饰,允许我们在没有类声明的情况下编写脚本或演示:

void main() {        System.out.println("Hello Java 25!");
}

这是为了降低 Java 的学习门槛和提升编写小型程序、脚本的效率而迈出的一大步。初学者不再需要理解 public static void main(String[] args) 这一长串复杂的声明。对于快速原型验证和脚本编写,这也使得 Java 成为一个更有吸引力的选择。

灵活的构造函数体(JEP 513)

该特性第一次预览是由 JEP 447(JDK 22)提出,随后在 JEP 482 (JDK 23)和 JEP 492(JDK 24)经历了预览,JDK 25 顺利转正。

Java 要求在构造函数中,super(...) 或 this(...) 调用必须作为第一条语句出现。这意味着我们无法在调用父类构造函数之前在子类构造函数中直接初始化字段。

灵活的构造函数体解决了这一问题,它允许在构造函数体内,在调用 super(..) 或 this(..) 之前编写语句,这些语句可以初始化字段,但不能引用正在构造的实例。这样可以防止在父类构造函数中调用子类方法时,子类的字段未被正确初始化,增强了类构造的可靠性。

   class User {private final String id;User(String rawId) {super();this.id = validateAndFormat(rawId);}}

性能优化

压缩对象头(JEP 519)

该特性第一次预览是由 JEP 450 (JDK 24 )提出,JDK 25 就顺利转正了。

减少了64位体系结构上的对象头大小,此更改通过在对象头中使用紧凑的同步和标识数据布局,减少了Java对象的内存占用。

紧凑对象头并没有成为 JVM 默认的对象头布局方式,需通过显式配置启用:

  • JDK 24 需通过命令行参数组合启用:$ java -XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders ... ;
  • JDK 25 之后仅需 -XX:+UseCompactObjectHeaders 即可启用。

结构化并发(JEP505 第五次预览)

JDK 19 引入了结构化并发,一种多线程编程方法,目的是为了通过结构化并发 API 来简化多线程编程,并不是为了取代java.util.concurrent,目前处于孵化器阶段。

结构化并发将将子任务视为逻辑单元,父任务取消时自动终止子线程,简化错误处理和取消操作,防止资源泄漏,提升高并发可靠性。

结构化并发的基本 API 是StructuredTaskScope,它支持将任务拆分为多个并发子任务,在它们自己的线程中执行,并且子任务必须在主任务继续之前完成。

StructuredTaskScope 的基本用法如下:

try (var scope = new StructuredTaskScope<Object>()) {  
    // 使用fork方法派生线程来执行子任务  
    Future<Integer> future1 = scope.fork(task1);  
    Future<String> future2 = scope.fork(task2);  
    // 等待线程完成  
    scope.join();  
    // 结果的处理可能包括处理或重新抛出异常  
    ... process results/exceptions ...  
} // close

结构化并发非常适合虚拟线程,虚拟线程是 JDK 实现的轻量级线程。许多虚拟线程共享同一个操作系统线程,从而允许非常多的虚拟线程。

分代 Shenandoah GC

Shenandoah GC 在 JDK12 中成为正式可生产使用的 GC,默认关闭,通过 -XX:+UseShenandoahGC 启用。

Redhat 主导开发的 Pauseless GC 实现,主要目标是 99.9% 的暂停小于 10ms,暂停与堆大小无关等

传统的 Shenandoah 对整个堆进行并发标记和整理,虽然暂停时间极短,但在处理年轻代对象时效率不如分代 GC。引入分代后,Shenandoah 可以更频繁、更高效地回收年轻代中的大量“朝生夕死”的对象,使其在保持极低暂停时间的同时,拥有了更高的吞吐量和更低的 CPU 开销。

Shenandoah GC 需要通过命令启用:

  • JDK 24 需通过命令行参数组合启用:-XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:ShenandoahGCMode=generational
  • JDK 25 之后仅需 -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational 即可启用。

安全性增强

作用域值(ScopedValue)

替代ThreadLocal,支持线程间安全共享不可变数据,简化生命周期管理。

JDK19的JEP 428: Structured Concurrency (Incubator)作为第一次incubator
JDK20的JEP 437: Structured Concurrency (Second Incubator)作为第二次incubator
JDK21的JEP 453: Structured Concurrency (Preview)作为首次preview
JDK22的JEP 462: Structured Concurrency (Second Preview)作为第二次preview
JDK23的JEP 480: Structured Concurrency (Third Preview)作为第三次preview
JDK24的JEP 487: Scoped Values (Fourth Preview)作为第四次preview,与JDK23不同的是callWhere以及runWhere方法从ScopedValue类中移除,可以使用ScopedValue.where()再链式调用run(Runnable)或者call(Callable)

JDK25作为第五次preview,有个改动就是 ScopedValue.orElse 方法不再接受null作为参数

class Framework {private static final ScopedValue<FrameworkContext> CONTEXT= ScopedValue.newInstance();    // (1)void serve(Request request, Response response) {var context = createContext(request);where(CONTEXT, context)                         // (2).run(() -> Application.handle(request, response));}public PersistedObject readKey(String key) {var context = CONTEXT.get();                    // (3)var db = getDBConnection(context);db.readKey(key);}
}

作用域值通过其“写入时复制”(copy-on-write)的特性,保证了数据在线程间的隔离与安全,同时性能极高,占用内存也极低。这个特性将成为未来 Java 并发编程的标准实践。

体验优化

飞行记录仪(JFR)升级

  • 增强Linux系统CPU时间分析,精准定位性能瓶颈。
  • 协作式采样支持安全线程栈检查,优化Java程序性能。

类文件 API 转正

标准化类文件解析与生成接口,取代ASM等第三方库。

垃圾回收器改进

  • Shenandoah分代回收器正式转正,优化内存管理效率。
  • G1垃圾回收器增强后期屏障,减少停顿时间。

弃用陈旧特性

完全删除32位x86平台的支持,包括:

  • 删除相关源代码(如HotSpot虚拟机中的 x86-32 后端);
  • 移除构建配置、测试基础设施中与 x86-32 相关的内容;
  • 只保留对x86-64(64 位)平台的支持,推动现代化硬件迁移。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年(2026 届)计算机保研记录

925 后发布。经验分享篇。 在写了,925 后发布。作者@Luckyblock,转载请声明出处。

linux驱动制作

linux驱动制作2025-09-22 08:59 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

实用指南:RESTful API:@RequestParam与@PathVariable实战对比

实用指南:RESTful API:@RequestParam与@PathVariable实战对比pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

Android普通应用切到后台后,多长时间会被系统回收 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

变分法和欧拉-拉格朗日方程 - Emi

基本概念函数(function):函数是一种映射,输入一个数,输出一个数。 泛函(functional):泛函也是一种映射,输入一个函数,输出一个数。故我们可以说泛函是函数的函数。 微分(derivation):微分是函数的”输入和…

【Android】View 的滑动 - 实践

【Android】View 的滑动 - 实践2025-09-22 08:49 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

AT_arc194_d [ARC194D] Reverse Brackets

考虑将包含关系建出一棵树,那么答案相当于你可以重排儿子,相同大小儿子不区分,问能得到多少种树的形态。 简单用树哈希做就好了。

2025.9.22——1橙

普及- P10376 [GESP202403 六级] 游戏 很简单的DP,但要注意数组偏移,把负数也存进去。

huggingface.co 无法访问

Ping查询结果: huggingface.co 查询时间:2025-09-22 08:46:27

202403_QQ_brutezip

流量分析,文件分离,ZIP文件,掩码爆破Tags:流量分析,文件分离,ZIP,掩码爆破 0x00. 题目 题目表述 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202403_QQ_brut…

实用指南:Vue开发准备

实用指南:Vue开发准备pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

完整教程:WPF 程序用户权限模块利用MarkupExtension实现控制控件显示

完整教程:WPF 程序用户权限模块利用MarkupExtension实现控制控件显示2025-09-22 08:10 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto…

私有外设总线PPB(Private Peripheral Bus) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

enrichmcp 构建数据驱动mcp的框架

enrichmcp 构建数据驱动mcp的框架enrichmcp 构建数据驱动mcp的框架 包含的特性通过数据模型生成类型工具 处理实体关系 处理schema 发现 通过pydantic 模型进行input 以及output 校验 支持database,api,自定义逻辑 支…

完整教程:visual studio快捷键

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AppSpider 7.5.020 for Windows - Web 应用程序安全测试

AppSpider 7.5.020 for Windows - Web 应用程序安全测试AppSpider 7.5.020 for Windows - Web 应用程序安全测试 Rapid7 Dynamic Application Security Testing (DAST) released Sep 2025 请访问原文链接:https://sys…

上周热点回顾(9.15

热点随笔:为什么不建议在 Docker 中跑 MySQL? (苏三说技术) C# 2025年6-9月TIOBE排名增长及未来展望 (张善友) 重要:Java25正式发布(长期支持版)! (磊哥|www.javacn.site) 刚刚 Java 25 炸裂发布!让 Java 再次…

“学术造神”何时休?

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087这个时代的学术圈,正在上演一场盛大的滑稽剧:实验室里产出的不再…

vLLM 核心机密:大模型推理引擎内部长啥样?

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087vLLM Offcie Hours #32 又披露了一批新技术。其中有两个比较特殊,…

华为销量下滑OV米荣迎来窗口期

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087一、华为手机销量阶段性下滑以下是全国全渠道销量份额(不包含智选…