引言
在 25.0.0.4 版本中,Open Liberty 宣布正式支持 Java 24!
💡 Java 24 是 LTS 版本吗? 与 Java 21 不同,Java 24 不是长期支持(LTS)版本。它的支持周期将在下一个 Java 版本发布后结束。但尽管如此,Java 24 仍然带来了许多值得关注 and 尝试的新特性,特别是对于想要提前评估未来 Java 版本特性的开发者来说。
Open Liberty 25.0.0.4 版本不仅添加了对 Java 24 的支持,还带来了以下重要更新:
- Java 24 支持 – 全面支持最新的 Java 版本
- InstantOn 特性扩展 – 新增对 J2EEManagement、AppClientSupport 和 WsSecurity 的支持
- OpenTelemetry 审计日志 – 通过 MicroProfile Telemetry 2.0 将 Liberty 审计日志导出到 OpenTelemetry
本文将深入介绍这些新特性,并提供实用的配置示例。
Read more: Open Liberty 25.0.0.4 支持 Java 24:探索最新 Java 特性与 InstantOn 扩展📌 快速预览 (TL;DR)
- 运行环境:Open Liberty 25.0.0.4 + JDK 24。
- 核心优势:支持分代 Shenandoah GC 与 AOT 类加载 (JEP 483)。
- 运维更新:审计日志现可通过
mpTelemetry-2.0直接导出至 OpenTelemetry。- 安全预警:Java 24 永久禁用了 Security Manager (JEP 486),需尽早规划迁移。
📊 技术演进:从 Java 21 LTS 到 Java 24
graph LR
LTS["Java 21 (LTS)<br/>生产环境基石"] -- "特性继承" --> J24["Java 24 (最新预览)<br/>分代 Shenandoah + AOT"]
J24 -- "InstantOn 扩展" --> LIB["Open Liberty 25.0.0.4"]
LIB -- "统一观测" --> OTel["OpenTelemetry<br/>(含审计日志)"]
style J24 fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
style LIB fill:#fff8e1,stroke:#f9a825,stroke-width:2pxOpen Liberty 25.0.0.4 新特性概览
🚀 Java 24 支持
Java 24 于 2025 年 3 月 18 日正式发布,带来了 24 个 JEP 的变更。虽然它不是 LTS 版本,但其中的许多特性都值得在企业环境中进行评估和测试。
⚡ InstantOn 特性扩展
Open Liberty 的 InstantOn 特性可以为 MicroProfile 和 Jakarta EE 应用提供毫秒级启动速度。在 25.0.0.4 版本中,InstantOn 支持扩展到以下特性:
- J2EE Management 1.1 (
j2eeManagement-1.1) - Application Client Support 1.0/2.0 (
appClientSupport-1.0,appClientSupport-2.0) - Web Service Security 1.1 (
wsSecurity-1.1)
📊 OpenTelemetry 审计日志集成
现在可以将 Liberty 的审计日志通过 MicroProfile Telemetry 2.0 导出到 OpenTelemetry,实现统一的可观测性。
快速开始:在 Open Liberty 中使用 Java 24
环境准备
要在 Open Liberty 中运行 Java 24,只需以下几个简单步骤:
- 下载并安装 Open Liberty 25.0.0.4 或更高版本
- 获取 Java 24 运行时
- 推荐从 Adoptium 下载 Eclipse Temurin 24
- 配置 JAVA_HOME
- 编辑 Open Liberty 运行时的
server.env文件 - 将
JAVA_HOME指向你的 Java 24 安装目录
- 编辑 Open Liberty 运行时的
- 启动测试
- 现在可以开始测试你的应用程序了!
配置示例(server.env):
JAVA_HOME=/path/to/jdk-24
构建工具配置
Maven 配置
在 pom.xml 中添加以下插件配置:
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>3.11.3</version>
</plugin>
Gradle 配置
在 build.gradle 中添加:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'io.openliberty.tools:liberty-gradle-plugin:3.9.3'
}
}
apply plugin: 'liberty'
容器化部署
使用官方容器镜像:
FROM icr.io/appcafe/open-liberty:java24
💡 Docker 容器提示:如果你使用官方容器镜像(
icr.io/appcafe/open-liberty:java24),通常不需要手动设置JAVA_HOME,因为镜像已经预设好了 Java 24 环境。这使得容器化部署更加简单!
Java 24 核心新特性解析
Java 24 包含了 24 个 JEP 变更,以下是其中的亮点:
1. 分代 Shenandoah 垃圾收集器(JEP 404)⭐
Shenandoah 是一个低暂停时间的垃圾收集器,现在引入了分代模式,可以分别管理年轻代和老年代对象,进一步提高性能。
实验性特性:需要通过 JVM 参数启用:
java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive ...
2. 紧凑对象头(JEP 450)
通过压缩对象头来减少内存占用,特别是对于大量小对象的场景,可以显著降低堆内存使用。
实验性特性:
java -XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders ...
3. 准备限制 JNI 的使用(JEP 472)
Java 24 开始逐步限制 JNI(Java Native Interface)的使用,鼓励开发者迁移到更安全的 Foreign Function & Memory API(在 Java 22 中成为正式特性)。
影响:如果你有使用 JNI 的代码,需要开始规划迁移路径。
4. G1 垃圾收集器的延迟屏障扩展(JEP 475)
优化了 G1 GC 的屏障扩展时机,将部分操作延迟到更合适的时机执行,从而减少暂停时间并提高吞吐量。
5. 类加载和链接的提前处理(JEP 483)⭐
Ahead-of-Time (AOT) Class Loading & Linking 允许在应用程序运行之前完成类的加载和链接,可以显著减少启动时间。
使用示例:
# 在应用程序运行之前生成 AOT 缓存
java -XX:AOTMode=record -XX:AOTConfiguration=app.aot ...
# 使用 AOT 缓存启动应用程序
java -XX:AOTMode=on -XX:AOTConfiguration=app.aot ...
6. 类文件 API(JEP 484)
提供了一个新的 API 用于解析、生成和转换 Java 类文件,替代了第三方库如 ASM。
示例:
// 使用新的 ClassFile API 读取类文件
ClassFile cf = ClassFile.of();
ClassModel classModel = cf.parse(bytes);
7. Stream 收集器(JEP 485)
增强了 Stream API,引入了 Gatherer 接口,允许自定义中间操作,提供了更灵活的流数据处理能力。
示例:
// 使用自定义的收集器
Stream<String> stream = Stream.of("a", "b", "c", "d");
List<String> result = stream.gather(Gatherer.of(
// 自定义处理逻辑
)).toList();
8. 永久禁用安全管理器(JEP 486)⚠️🔥 【重大破坏性变更】
🚨 强烈警告:这是 Java 24 最重大的破坏性变更!
如果你的应用程序依赖安全管理器,需要立即开始迁移工作!
Java 24 永久禁用了安全管理器(Security Manager),这意味着:
- ❌ 不能再尝试用安全管理器启动 Java
- ❌ 不能在运行时安装安全管理器
- ❌ 不能使用
AccessController::checkPermission - ❌ 不能使用
Policy::setPolicy - ❌ 不能使用
SecurityManager::check* - ❌ 不能使用
Subject::getSubject
迁移指南:
- 立即检查你的应用是否使用了
System.setSecurityManager()或SecurityManager - 参考 JEP 486 的描述章节 了解迁移路径
- 考虑使用其他安全机制(如模块系统、代码签名等)替代安全管理器
💡 影响评估:这是 Java 现代化进程中的重要一步,虽然会带来短期的迁移成本,但长期来看将简化 Java 安全模型并提高性能。
9. 虚拟线程同步无固定(JEP 491)
进一步改进了虚拟线程的实现,在 synchronized 块中不再固定(pin)载体线程,提高了虚拟线程的吞吐量和可扩展性。
适用场景:
// 在 Java 24 中,这个操作不会再固定载体线程
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> {
synchronized (lock) { // 不再固定载体线程!
// 执行操作
}
});
}
10. 其他重要 JEP
- JEP 478:密钥派生函数 API(预览版)
- JEP 479:移除 Windows 32 位 x86 移植版本
- JEP 487:作用域值(第四次预览)
- JEP 488:模式、instanceof 和 switch 中的基本类型(第二次预览)
- JEP 489:向量 API(第九次孵化)
- JEP 490:ZGC 垃圾收集器移除非分代模式
- JEP 492:灵活的构造器主体(第三次预览)
- JEP 493:无需 JMODs 链接运行时镜像
- JEP 494:模块导入声明(第二次预览)
- JEP 495:简单源文件和实例 main 方法(第四次预览)
- JEP 496:抗量子模块格密钥封装机制
- JEP 497:抗量子模块格数字签名算法
- JEP 498:使用 sun.misc.Unsafe 的内存访问方法时发出警告
- JEP 499:结构化并发(第四次预览)
- JEP 501:弃用 32 位 x86 移植版本,准备移除
InstantOn 特性扩展
什么是 InstantOn?
Open Liberty 的 InstantOn 特性基于 Linux 内核的 CRIU(Checkpoint/Restore In Userspace)功能,可以对 JVM 做检查点快照,后续可直接恢复运行,实现毫秒级启动速度。
优势:
- ⚡ 毫秒级启动时间
- 📊 不牺牲吞吐量
- 💾 不增加内存占用
- 🔄 保持开发-生产环境一致性
- ☕ 支持所有 Java 语言特性
新增支持的特性
在 25.0.0.4 版本中,以下特性新增了对 InstantOn 的支持:
| 特性 | 描述 | 文档链接 |
|---|---|---|
j2eeManagement-1.1 | J2EE 管理 1.1 | 链接 |
appClientSupport-1.0 | 服务器应用客户端支持 1.0 | 链接 |
appClientSupport-2.0 | 服务器 Jakarta 应用客户端支持 2.0 | 链接 |
wsSecurity-1.1 | Web 服务安全 1.1 | 链接 |
💡 注意事项:InstantOn 仅支持部分 Open Liberty 特性。如果启用了支持列表外的公共特性,检查点操作会失败并抛出错误信息。
通过 OpenTelemetry 收集 Liberty 审计日志
为什么需要审计日志?
审计日志记录了运行时环境的安全相关事件,对于安全合规和故障排查非常重要。
审计日志流向图
graph LR
A[Security Events] --> B[Liberty Audit 2.0]
B --> C{mpTelemetry 2.0}
C -->|Export| D[OpenTelemetry Collector]
C -->|Local| E[audit.log]
style C fill:#fff4e1,stroke:#d4a017,stroke-width:2px
配置示例
要收集审计日志并发送到 OpenTelemetry,只需在 server.xml 中添加以下配置:
<featureManager>
<feature>audit-2.0</feature>
<feature>mpTelemetry-2.0</feature>
</featureManager>
<mpTelemetry source="audit"/>
高级配置:指定审计事件
你还可以通过 auditFileHandler 元素指定要捕获并路由到 OpenTelemetry 的审计事件和结果:
<auditFileHandler maxFiles="5" maxFileSize="20" compact="true">
<events name="AuditEvent_1" eventName="SECURITY_AUTHN" outcome="SUCCESS"/>
<events name="AuditEvent_2" eventName="SECURITY_AUTHN" outcome="REDIRECT"/>
<events name="AuditEvent_3" eventName="SECURITY_AUTHN" outcome="FAILURE"/>
<events name="AuditEvent_4" eventName="SECURITY_AUTHZ"/>
</auditFileHandler>
可观测性统一
通过 MicroProfile Telemetry 2.0,你现在可以统一收集以下类型的遥测数据:
- ✅ 分布式追踪(Tracing)
- ✅ 指标(Metrics)
- ✅ 日志(Logs)
- ✅ 审计日志(Audit Logs) – 新增!
安全漏洞修复
25.0.0.4 版本修复了以下安全漏洞:
| CVE 编号 | CVSS 评分 | 漏洞评估 | 受影响版本 | 备注 |
|---|---|---|---|---|
| CVE-2025-25193 | 5.5 | 拒绝服务 | 21.0.0.2 ~ 25.0.0.3 | 影响 grpc-1.0 和 grpcClient-1.0 特性 |
| CVE-2025-23184 | 5.9 | 拒绝服务 | 17.0.0.3 ~ 25.0.0.3 | 影响 jaxws-2.2、xmlWS-3.0 和 xmlWS-4.0 特性 |
Open Liberty 开发工具支持
Open Liberty 为各大主流 IDE 提供了优秀的开发工具支持:
- IntelliJ IDEA:Liberty Tools 插件
- Visual Studio Code: Liberty Tools 扩展
- Eclipse IDE: Liberty Tools
这些工具提供了高效的开发、测试、调试和应用程序管理功能,全部在你的 IDE 中完成!
迁移建议与最佳实践
从 Java 21 迁移到 Java 24
虽然 Java 24 不是 LTS 版本,但提前了解和测试新特性对于以下场景非常有价值:
- 评估未来 LTS 版本:Java 25 或 26 可能会将 Java 24 中的预览特性转为正式特性
- 测试兼容性:提前发现应用程序在新版本 Java 中的兼容性问题
- 利用新特性:如果某些新特性可以为你的应用带来性能提升,可以考虑使用
重点测试领域
- 安全管理器依赖:如果你的应用使用了安全管理器,需要立即规划迁移
- JNI 使用:如果有 JNI 代码,需要评估迁移到 Foreign Function & Memory API 的工作量
- 虚拟线程性能:测试 JEP 491 带来的虚拟线程性能改进
- AOT 类加载:评估 JEP 483 是否可以改善你的应用启动时间
生产环境建议
⚠️ 生产环境提示:由于 Java 24 不是 LTS 版本,建议在开发和环境测试中使用,生产环境仍然推荐使用 Java 21 LTS。
参考资料
总结
Open Liberty 25.0.0.4 对 Java 24 的支持,为 Java 开发者提供了提前体验最新 Java 特性的机会。虽然 Java 24 不是 LTS 版本,但其中的许多特性(如分代 Shenandoah、AOT 类加载、虚拟线程改进等)都值得关注和测试。
同时,InstantOn 特性的扩展和 OpenTelemetry 审计日志集成为 Open Liberty 的可观测性和启动性能带来了显著提升。
无论你是正在运行微服务架构,还是开发传统的企业应用,现在都可以在开发环境中尝试 Java 24 和 Open Liberty 的最新特性了!
立即体验:
- 下载 Open Liberty 25.0.0.4:https://openliberty.io/start/
- 下载 Java 24:https://adoptium.net/temurin/releases/?version=24
欢迎在评论区分享你使用 Java 24 新特性的经验和心得!
相关阅读: