jdk24即将直播发布,抢先看新特性

大家好,这里是小奏 ,觉得文章不错可以关注公众号小奏技术

jdk24 23:00将在YouTube进行直播发布

我们来抢先看看jdk24有哪些新特性

本次共有24个新特性。主要包含以下个方面

  • 语言和API增强
  • 性能优化
  • 安全增强
  • 平台和构建调整

表格总览

类别 功能名称 JEP 编号 状态
语言增强 提前类加载和链接 483 正式
语言增强 Class-File API 484 正式
语言增强 Stream Gatherers 485 正式
语言增强 Scoped Values 487 第四次预览
语言增强 原始类型在模式、instanceof 和 switch 中的使用 488 第二次预览
语言增强 Vector API 489 第九次孵化
语言增强 灵活构造器体 492 第三次预览
语言增强 模块导入声明 494 第二次预览
语言增强 简单源文件和实例主方法 495 第四次预览
语言增强 结构化并发 499 第四次预览
性能优化 分代 Shenandoah 404 实验性
性能优化 紧凑对象头 450 实验性
性能优化 G1 晚期屏障扩展 475 正式
性能优化 ZGC: 移除非分代模式 490 正式
性能优化 虚拟线程同步无锁定 491 正式
性能优化 无 JMOD 的运行时镜像链接 493 正式
安全增强 键派生函数 API 478 预览
安全增强 量子抗性密钥封装机制 (ML-KEM) 496 正式
安全增强 量子抗性数字签名算法 (ML-DSA) 497 正式
安全增强 永久禁用安全管理器 486 正式
平台调整 准备限制 JNI 使用 472 正式
平台调整 移除 Windows 32 位 x86 端口 479 正式
平台调整 弃用 Linux 32 位 x86 端口 501 正式
平台调整 对 sun.misc.Unsafe 内存访问方法使用发出警告 498 正式

下面来具体看看

特性

语言和API增强:提升开发体验

JEP 483: 提前类加载和链接

该功能通过缓存已加载和链接的类,显著减少 Java 应用程序的启动时间。

传统 JVM 在每次启动时都需要动态加载和链接类,这对启动时间敏感的应用程序(如微服务或无服务器函数)是一个瓶颈。

提前类加载通过在第一次运行时缓存这些信息,之后启动时直接使用,特别适合短暂运行的程序

JEP 484: Class-File API

提供标准 API 用于解析、生成和转换 Java 类文件,取代第三方库如 ASM,确保与 JVM 规范兼容。

主要是为了简化字节码操作

JEP 485: Stream Gatherers (新特性)

功能:扩展Stream API支持自定义中间操作。

示例:实现滑动窗口统计:

java 复制代码
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
List<Integer> sums = numbers.stream()
    .gather(Gatherers.windowSliding(2))
    .map(window -> window.stream().mapToInt(i->i).sum())
    .toList(); // 结果: [3, 5, 7, 9]

JEP 487: Scoped Values (第四次预览)

提供共享不可变数据的方法,降低线程局部变量的开销,适合并发环境

java 复制代码
import java.lang.ScopedValue;
ScopedValue<String> userName = ScopedValue.newInstance();
userName.set("Alice", () -> {
    System.out.println(userName.get());
});

JEP 488: 原始类型在模式、instanceof 和 switch 中的使用 (第二次预览)

扩展模式匹配至原始类型,增强 instanceof 和 switch 的表达力。

java 复制代码
Object obj = ...;
if (obj instanceof int i) {
    System.out.println("It's an int: " + i);
}

JEP 489: Vector API (第九次孵化)

允许利用 CPU SIMD 指令进行矢量计算,优化性能,适合数值计算。

提升科学计算和机器学习性能

java 复制代码
import jdk.incubator.vector.IntVector;
import jdk.incubator.vector.VectorSpecies;

VectorSpecies<Integer> species = IntVector.SPECIES_256;
IntVector vector = IntVector.fromArray(species, array, offset);
IntVector result = vector.add(vector);
result.intoArray(array, offset);

JEP 492: 灵活构造器体 (第三次预览)

允许在超类构造器前后添加代码,增强构造器灵活性

java 复制代码
public class Sub extends Super {
    int x;
    { x = 10; } // 前导代码
    public Sub() {
        super();
        System.out.println(x); // 后继代码
    }
}

JEP 494: 模块导入声明 (第二次预览)

允许单条语句导入模块的所有包,简化模块使用。

java 复制代码
import module com.xiaozoujishu.lib;

JEP 495: 简单源文件和实例主方法 (第四次预览)

语法糖:允许省略static void main的显式声明。

示例:

java 复制代码
void main() { // 自动识别为入口方法
    System.out.println("Hello, Simplified Main!");
}

JEP 499: 结构化并发 (第四次预览)

将相关任务作为一个单元管理,简化并发编程中的错误处理和资源清理。

主要是为了提高并发可靠性

java 复制代码
import java.util.concurrent.StructuredTaskScope;

try (var scope = new StructuredTaskScope<String>().fork(new Task1()).fork(new Task2())) {
    scope.join();
    scope.resultStream().forEach(System.out::println);
} catch (Exception e) {
    // 处理任务异常
}

性能优化:提升运行效率

JEP 404: 分代 Shenandoah (实验性)

增强 Shenandoah 垃圾回收器,引入分代模式,改善吞吐量和负载峰值抵抗力。

JEP 450: 紧凑对象头 (实验性)

将 64 位架构对象头从 96-128 位减少至 64 位,降低内存占用。

JEP 475: G1 垃圾回收器的晚期屏障扩展

通过在 C2 编译后期扩展屏障,简化 G1 执行,减少运行时间。

JEP 490: ZGC: 移除非分代模式

移除 ZGC 的非分代模式,简化维护,推广分代模式。

JEP 491: 虚拟线程同步无锁定

允许虚拟线程在同步代码阻塞时释放平台线程,提升可扩展性。

JEP 493: 无 JMOD 的运行时镜像链接

减少JDK大小约25%通过jlink创建运行时镜像,无需 JMOD 文件。

安全增强:应对未来威胁

JEP 478: 键派生函数 API (预览)

引入 API 支持密钥派生函数,如 HKDF 和 Argon2。

java 复制代码
import javax.crypto.KDF;
KDF kdf = KDF.getInstance("HKDF");
SecretKey derivedKey = kdf.extractAndExpand(new SecretKeySpec(secret, "HmacSHA256"), salt, 32);

JEP 496: 量子抗性模块-格栅基密钥封装机制

提供量子抗性密钥封装机制,保护对称密钥。

java 复制代码
KeyAgreement ka = KeyAgreement.getInstance("ML-KEM");
ka.init(kp.getPublic());
byte[] ciphertext = ka.generateSecret();

JEP 497: 量子抗性模块-格栅基数字签名算法

提供量子抗性数字签名,检测未经授权修改。

java 复制代码
Signature sig = Signature.getInstance("ML-DSA");
sig.initSign(privateKey);
sig.update(data);
byte[] signature = sig.sign();

JEP 486: 永久禁用安全管理器

禁用安全管理器,简化平台,移除相关引用。

平台和构建调整:聚焦现代架构

JEP 472: 准备限制 JNI 使用

对 JNI 使用发出警告,准备未来默认限制。

调用JNI_CreateJavaVM()会触发警告

JEP 479: 移除 Windows 32 位 x86 端口

移除 Windows 32 位支持,简化构建。

JEP 501: 弃用 Linux 32 位 x86 端口以移除

弃用 Linux 32 位 x86 端口,计划在 JDK 25 移除。

JEP 498: 对 sun.misc.Unsafe 内存访问方法使用发出警告

对已废弃的内存访问方法发出运行时警告,鼓励迁移至标准 API。

使用 Unsafe.getInt() 会触发警告

总结

JDK24在并发编程、性能优化和安全增强方面提供了显著改进.不过有很多功能是实验性和预览功能,线上需要谨慎使用

感兴趣的可以在23:00观看发布直播

参考

相关推荐
有来技术6 小时前
Spring Boot 4 + Vue3 企业级多租户 SaaS:从共享 Schema 架构到商业化套餐设计
java·vue.js·spring boot·后端
东东5167 小时前
学院个人信息管理系统 (springboot+vue)
vue.js·spring boot·后端·个人开发·毕设
三水不滴7 小时前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
小邓吖8 小时前
自己做了一个工具网站
前端·分布式·后端·中间件·架构·golang
大爱编程♡8 小时前
SpringBoot统一功能处理
java·spring boot·后端
好好研究11 小时前
总结SSM设置欢迎页的方式
xml·java·后端·mvc
小马爱打代码11 小时前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端
csdn2015_13 小时前
springboot task
java·spring boot·后端
czlczl2002092513 小时前
Spring Boot :如何高性能地在 Filter 中获取响应体(Response Body)
java·spring boot·后端
码界奇点13 小时前
基于Spring Boot和Vue3的无头内容管理系统设计与实现
java·spring boot·后端·vue·毕业设计·源代码管理