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

参考

相关推荐
别惹CC30 分钟前
【分布式锁通关指南 08】源码剖析redisson可重入锁之释放及阻塞与非阻塞获取
redis·分布式·后端
无名之逆1 小时前
Hyperlane:Rust 生态中的轻量级高性能 HTTP 服务器库,助力现代 Web 开发
服务器·开发语言·前端·后端·http·面试·rust
江沉晚呤时1 小时前
使用 .NET Core 实现 RabbitMQ 消息队列的详细教程
开发语言·后端·c#·.netcore
jay丿1 小时前
使用 Django 的 `FileResponse` 实现文件下载与在线预览
后端·python·django
Cloud_.1 小时前
Spring Boot 集成高德地图电子围栏
java·spring boot·后端
程序员小刚2 小时前
基于SpringBoot + Vue 的心理健康系统
vue.js·spring boot·后端
尚学教辅学习资料2 小时前
基于SpringBoot+Vue的幼儿园管理系统+LW示例参考
vue.js·spring boot·后端·幼儿园管理系统
Moment2 小时前
💯 铜三铁四,我收集整理了这些大厂面试场景题 (一)
前端·后端·面试
无名之逆3 小时前
轻量级、高性能的 Rust HTTP 服务器库 —— Hyperlane
服务器·开发语言·前端·后端·http·rust
无名之逆3 小时前
探索Hyperlane:用Rust打造轻量级、高性能的Web后端框架
服务器·开发语言·前端·后端·算法·rust