JDK 25 发布说明总结

JDK 25 发布说明总结

📅 发布时间:2025 年 9 月 16 日
🆔 版本号:25+37


主要新功能(Major New Functionality)

语言特性

  • 模式匹配中的原始类型(第三次预览)instanceofswitch 中支持直接使用原始类型。
  • 模块导入声明:允许一次性导入模块导出的所有包,简化模块复用。
  • 简化单文件程序:Compact Source Files 和 Instance Main Methods,让入门更简单。
  • 灵活构造方法体:构造函数中可在 super(...)this(...) 之前写语句(但不能用未构造好的对象)。

库(Libraries)

  • 结构化并发(第五次预览):让一组相关任务作为一个整体来管理。
  • Scoped Values:跨线程共享不可变数据,比 ThreadLocal 更轻量。
  • Stable Values(预览):初始化灵活的不可变对象,可被 JVM 优化。
  • 向量 API(第十次孵化):在支持的 CPU 上生成高效 SIMD 指令。

安全性

  • PEM 编码 API(预览):支持 PEM 格式的加解密对象。
  • 新的密钥派生函数(KDF)API

性能

  • 压缩对象头:从实验性转为正式功能。
  • AOT(预编译)改进:简化缓存生成,支持方法级 profile 提前加载,缩短应用预热时间。

监控与诊断

  • JFR(Flight Recorder)增强:包括 CPU 时间采样(实验性)、协作式采样,以及方法级计时/跟踪。

新增特性(New Features)

  • CharSequence / CharBuffer 新增 getChars(...) 方法,高效复制字符。
  • 新增系统属性 stdin.encoding,指定标准输入流编码。
  • HttpClient 新增限制响应体大小的 API(BodyHandlers.limiting 等)。
  • ZIP 文件系统提供器可只读或读写模式。
  • ForkJoinPool 实现 ScheduledExecutorService,新增带超时的提交方法。
  • Inflater / Deflater 实现 AutoCloseable,支持 try-with-resources。
  • G1 GC、ZGC 在延迟和内存占用上进一步优化。

移除功能(Removed Features)

  • Graal JIT 被移除。
  • Socket 的老构造函数(带 stream=false)不再允许。
  • 某些 JMX 系统属性(如 jmx.invoke.getters)被移除。
  • PerfData 的采样机制被移除。
  • 旧的对象监视器性能计数器被移除,建议用 JFR 替代。
  • 移除过期的根证书(如 Baltimore CyberTrust Root)。
  • 移除 SunPKCS11 提供者中部分 PBE 实现。

弃用功能(Deprecated)

  • Linux 的 -Djdk.lang.Process.launchMechanism=VFORK 被弃用。
  • java.locale.useOldISOCodes 被弃用(设为 true 已无效果)。
  • JMX 中 XML 相关 API 被弃用。
  • UseCompressedClassPointers 被弃用(未来会彻底移除非压缩模式)。
  • 多种权限类(如 FilePermissionSSLPermission 等)被标记准备移除,因为 Security Manager 已不再支持。

已解决问题(Resolved Issues)

  • 修复 CodeModel 丢失未知属性的问题。
  • 日本皇历(Japanese Imperial Calendar)异常更合理。
  • Serial/Parallel GC 在 JNI 临界区的内存回收修复,避免 OOME。
  • G1 Mixed GC 改进,减少暂停时间波动。
  • ZGC 字符串去重策略优化,跳过短命字符串。
  • JVMTI ClassFileLoadHook 提供的 class files 都会被验证。

已知问题(Known Issues)

  • java.time 某些类的 Class 对象 跨版本序列化/反序列化不兼容。
  • ClassValue::remove + get 场景下性能回退,影响部分库(如 Scala 2.12)。
  • G1 GC 下 -XX:+UseTransparentHugePages 在某些 Linux 配置下无效。

其他注意事项(Other Notes)

  • Windows 上 File.delete 不再能删除只读文件,除非设置 -Djdk.io.File.allowDeleteReadOnlyFiles=true
  • 文件/目录名末尾空格在 Windows 上一律报错。
  • File("")(空路径)行为更一致,视为当前目录。
  • CLDR 数据升级到 v47,带来部分格式更新。

⚠️ 升级建议

  • 检查是否依赖已删除或弃用的 API(JMX 属性、SunPKCS11 PBE、UseCompressedClassPointers 等)。
  • Windows 环境下涉及只读文件删除逻辑要调整。
  • 如果使用跨版本序列化 Class 对象,需注意不兼容问题。
  • 测试 ClassValue 的使用场景,避免性能回退。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值