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

2,452 阅读6分钟

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

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

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

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

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

表格总览

类别功能名称JEP 编号状态
语言增强提前类加载和链接483正式
语言增强Class-File API484正式
语言增强Stream Gatherers485正式
语言增强Scoped Values487第四次预览
语言增强原始类型在模式、instanceof 和 switch 中的使用488第二次预览
语言增强Vector API489第九次孵化
语言增强灵活构造器体492第三次预览
语言增强模块导入声明494第二次预览
语言增强简单源文件和实例主方法495第四次预览
语言增强结构化并发499第四次预览
性能优化分代 Shenandoah404实验性
性能优化紧凑对象头450实验性
性能优化G1 晚期屏障扩展475正式
性能优化ZGC: 移除非分代模式490正式
性能优化虚拟线程同步无锁定491正式
性能优化无 JMOD 的运行时镜像链接493正式
安全增强键派生函数 API478预览
安全增强量子抗性密钥封装机制 (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支持自定义中间操作。

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

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 (第四次预览)

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

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

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

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

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

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

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

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

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: 灵活构造器体 (第三次预览)

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

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

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

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

import module com.xiaozoujishu.lib;

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

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

示例:

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

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

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

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

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。

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

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

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

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

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

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

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观看发布直播

参考