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

参考

相关推荐
风象南2 小时前
我把大脑开源给了AI
人工智能·后端
橙序员小站7 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德7 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆9 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
开心就好202510 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
悟空码字10 小时前
告别“屎山代码”:AI 代码整洁器让老项目重获新生
后端·aigc·ai编程
小码哥_常10 小时前
大厂不宠@Transactional,背后藏着啥秘密?
后端
奋斗小强10 小时前
内存危机突围战:从原理辨析到线上实战,彻底搞懂 OOM 与内存泄漏
后端
小码哥_常11 小时前
Spring Boot接口防抖秘籍:告别“手抖”,守护数据一致性
后端
心之语歌11 小时前
基于注解+拦截器的API动态路由实现方案
java·后端