写点什么

Java 24(JDK 24)新特性详细介绍

作者:AiDaddy
  • 2025-03-20
    江苏
  • 本文字数:3554 字

    阅读完需:约 12 分钟

Java 24(JDK 24)新特性详细介绍

1. 分代 Shenandoah 垃圾收集器(实验性)

分代 Shenandoah GC 将堆内存分为年轻代和老年代,提升垃圾回收效率。

常见方法与参数:

  • -XX:+UseShenandoahGC:启用 Shenandoah 垃圾收集器。

  • -XX:ShenandoahGCMode=generational:启用分代模式。

示例(启动参数):

java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -jar app.jar
复制代码

使用场景:

  • 高并发低延迟应用。

  • 需要持续高性能的服务端应用。


2. 精简对象头(实验性)

精简对象头大小,提升内存使用效率。

常见方法与参数:

  • -XX:+UseCompactObjectHeaders:启用精简对象头功能。

示例(启动参数):

java -XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders -jar app.jar
复制代码

使用场景:

  • 内存密集型应用。

  • 需要优化内存占用的场景。


3. 限制 JNI 接口使用准备

鼓励开发者使用 Foreign Function API 代替 JNI。

常见方法:

  • 使用 java.lang.foreign 替代 JNI 调用本地库。

示例代码:

import java.lang.foreign.*;
public class ForeignDemo { public static void main(String[] args) { try (Arena arena = Arena.ofConfined()) { MemorySegment segment = arena.allocate(256); System.out.println(segment.byteSize()); } }}
复制代码

使用场景:

  • 调用本地代码库(如 OpenGL、FFmpeg)。

  • 替代传统 JNI 提高安全性。


4. G1 垃圾回收器延迟屏障扩展

优化 G1 GC 回收效率。

常见方法与参数:

  • -XX:+UseG1GC:启用 G1 垃圾回收器。

  • -XX:+G1LateBarrierExpansion:启用延迟屏障扩展。

示例(启动参数):

java -XX:+UseG1GC -XX:+G1LateBarrierExpansion -jar app.jar
复制代码

使用场景:

  • 大内存、高吞吐量的服务端应用。

  • 需要显著减少垃圾回收停顿的场景。


5. 密钥派生函数 API(预览版)

提供安全可靠的密钥派生方法。

常见方法:

  • PBKDF2WithHmacSHA256

示例代码:

import javax.crypto.SecretKeyFactory;import javax.crypto.spec.PBEKeySpec;import java.util.Base64;
public class KeyDerivationExample { public static void main(String[] args) throws Exception { var spec = new PBEKeySpec("password".toCharArray(), new byte[]{1,2,3}, 65536, 256); var factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); var key = factory.generateSecret(spec); System.out.println(Base64.getEncoder().encodeToString(key.getEncoded())); }}
复制代码



6. 移除 Windows 32 位 x86 支持(JEP 479 & 501)

移除 Windows 32 位支持,需迁移至 64 位平台。

使用场景:

  • 所有使用 Java 的 Windows 应用。


7. 提前类加载与链接(AOT)

提前加载类,减少启动时间。

常见方法与参数:

  • -XX:AOTMode=record:记录类加载信息。

  • -XX:AOTConfiguration:配置 AOT 信息。

示例(启动参数):

java -XX:AOTMode=record -XX:AOTConfiguration=app.conf -jar app.jar
复制代码

使用场景:

  • 微服务架构中快速启动的需求。

  • 容器环境中优化启动速度。


8. 类文件 API

简化对 Java 类文件的读取和操作。

常见方法:

  • ClassFile.read():读取类文件。

示例代码:

import jdk.classfile.ClassFile;import java.nio.file.Paths;
public class ClassFileExample { public static void main(String[] args) throws Exception { var cf = ClassFile.read(Paths.get("Demo.class")); System.out.println(cf.name()); }}
复制代码

使用场景:

  • Java 字节码分析工具。

  • 动态代码生成与分析。


9. Stream 聚合器(Gatherers)

详细介绍

Java 24 引入了 Stream.gather(Gatherer) 方法,允许开发者灵活地定义自定义中间聚合操作,以替代原本必须用多个流操作才能实现的复杂逻辑。


常见方法

• Gatherers.fold():聚合流元素,进行类似于 reduce 的累积计算。

• Gatherers.scan():生成每一步聚合的中间结果。

• Gatherers.windowFixed():按固定大小的窗口分组流数据。


示例代码:

import java.util.stream.Stream;import java.util.stream.Gatherers;
public class StreamGatherersDemo { public static void main(String[] args) { // 使用 Gatherers.fold() 计算整数流的总和 var sumStream = Stream.of(1, 2, 3, 4, 5) .gather(Gatherers.fold(0, Integer::sum)); sumStream.forEach(sum -> System.out.println("求和结果: " + sum));
// 使用 Gatherers.scan() 展示求和过程的每一步结果 var scanStream = Stream.of(1, 2, 3, 4, 5) .gather(Gatherers.scan(0, Integer::sum)); scanStream.forEach(intermediateSum -> System.out.println("中间求和结果: " + intermediateSum));
// 使用 Gatherers.windowFixed() 按窗口大小3划分流数据 var windowedStream = Stream.of(1, 2, 3, 4, 5, 6, 7) .gather(Gatherers.windowFixed(3)); windowedStream.forEach(window -> System.out.println("窗口数据: " + window)); }}
复制代码

适用场景

• 复杂数据分析与处理。

• 数据实时处理管道(如日志处理)。

• 需要中间计算状态的流式数据处理。


10. 永久禁用安全管理器


完全移除 SecurityManager,开发者需重新规划安全架构。


11. Scoped Values(第四次预览)


在线程内安全共享不可变数据。


常见方法:

  • ScopedValue.newInstance():创建新的作用域值实例。

  • ScopedValue.where():定义作用域并设置初始值。

示例代码:

import jdk.incubator.concurrent.ScopedValue;
public class ScopedValuesExample { static final ScopedValue<String> USER = ScopedValue.newInstance();
public static void main(String[] args) { ScopedValue.where(USER, "李四").run(() -> { System.out.println("用户:" + USER.get()); }); }}
复制代码

使用场景:

  • 线程间安全的数据共享。

  • 避免使用传统的线程本地存储(ThreadLocal)带来的潜在内存泄漏问题。


12. 模式匹配支持原始类型与 switch 增强(第二次预览)

简化对原始类型的模式匹配操作。


示例代码:

public class PatternExample {    public static void main(String[] args) {        Object obj = 20;        switch (obj) {            case Integer i when i > 10 -> System.out.println("大于10的整数: " + i);            default -> System.out.println("未知类型或条件不符");        }    }}
复制代码

使用场景:

  • 提高代码可读性。

  • 简化复杂的类型检查。


13. 向量 API(第九次孵化)


实现高效的矢量计算。

示例代码:

import jdk.incubator.vector.*;
public class VectorDemo { static final VectorSpecies<Integer> SPECIES = IntVector.SPECIES_PREFERRED;
public static void main(String[] args) { int[] a = {1,2,3,4}; int[] b = {5,6,7,8}; var result = IntVector.fromArray(SPECIES, a, 0) .add(IntVector.fromArray(SPECIES, b, 0)); System.out.println(result); }}
复制代码

使用场景:

  • 数学计算密集型应用。

  • 大数据处理场景。


14. ZGC 移除非分代模式


默认使用分代模式,无需额外配置。


15. 虚拟线程同步优化(避免固定线程)


优化虚拟线程的并发执行。

使用场景:

  • 高并发微服务。

  • 需要大量轻量线程的场景。


16. 灵活的构造函数主体(第三次预览)


允许构造函数调用父类构造之前执行代码。

示例代码:

class Parent {    Parent(int x) { System.out.println(x); }}
class Child extends Parent { Child(int x, int y) { if (y < 0) throw new IllegalArgumentException(); super(x); }}
复制代码

使用场景:

  • 复杂对象初始化验证。


17. 无需 JMOD 的运行时镜像链接

简化自定义运行时镜像的创建。

jlink --add-modules java.base --output myruntime
复制代码



18. 模块导入声明(第二次预览)


便捷地导入整个模块。


示例代码:

import module java.sql;
复制代码



19. 简单源文件与实例主方法(第四次预览)

无需定义类的简单 Java 程序编写。

void main() {    System.out.println("Java 24");}
复制代码

使用场景:

  • Java 初学者教学。

  • 快速编写工具类程序。




20-21. 量子抗性密钥封装机制与数字签名算法

内部增强安全算法,无需显式调用。


22. 对 sun.misc.Unsafe 中内存访问方法的警告


推荐迁移到 VarHandle API。


23. 结构化并发(第四次预览)


更易管理的线程并发模型。


示例代码:

try (var scope = StructuredTaskScope.ShutdownOnFailure()) {    scope.fork(() -> taskA());    scope.fork(() -> taskB());    scope.join();}
复制代码

使用场景:

  • 并行任务处理。

  • 安全管理多个异步任务。


24. 弃用 32 位 x86 支持并计划移除


参考第 6 项。

用户头像

AiDaddy

关注

还未添加个人签名 2018-05-03 加入

十年开发老兵,多年搜索及推荐领域技术和业务积累目前主要研究低代码平台设计及开发模式,关注三高架构设计方案及系统实现,微服务治理实践及DDD领域驱动设计方案,目前致力于研究低代码平台的最佳实践方案

评论

发布
暂无评论
Java 24(JDK 24)新特性详细介绍_#java_AiDaddy_InfoQ写作社区