大家好,这里是小奏 ,觉得文章不错可以关注公众号小奏技术
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() 会触发警告
总结
JDK
24在并发编程、性能优化和安全增强方面提供了显著改进.不过有很多功能是实验性和预览功能,线上需要谨慎使用
感兴趣的可以在23:00
观看发布直播