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

参考

相关推荐
冼紫菜1 小时前
[特殊字符]CentOS 7.6 安装 JDK 11(适配国内服务器环境)
java·linux·服务器·后端·centos
秋野酱2 小时前
Spring Boot 项目的计算机专业论文参考文献
java·spring boot·后端
香饽饽~、3 小时前
【第二篇】 初步解析Spring Boot
java·spring boot·后端
你是狒狒吗3 小时前
消息队列了解一哈
后端
Chandler244 小时前
Go语言 GORM框架 使用指南
开发语言·后端·golang·orm
蚂蚁在飞-5 小时前
Golang基础知识—cond
开发语言·后端·golang
程序员爱钓鱼11 小时前
匿名函数与闭包(Anonymous Functions and Closures)-《Go语言实战指南》原创
后端·golang
言之。12 小时前
Go 语言中接口类型转换为具体类型
开发语言·后端·golang
diving deep13 小时前
XML简要介绍
xml·java·后端