北京时间3月18日凌晨,甲骨文正式发布了JDK 26 (Oracle JDK 26),带来了数千项改进。
这次的版本很有意思——它不仅是技术上的迭代,更标志着Java在AI时代的战略转型。今天,我将带大家深度解读JDK 26的十大JEP (JDK增强提案),从语言特性到底层性能,从AI能力到生态重构,用代码示例和架构图把每个特性讲透。
一、JDK 26全景概览
1.1 发布时间线
JDK 26严格按照六个月的节奏推进:

1.2 十大JEP总览
JDK 26包含10个JDK增强提案,涵盖语言、库、性能、安全、清理五大领域:
| JEP |
名称 |
类型 |
状态 |
| JEP 530 |
模式、instanceof和switch中的原始类型 |
语言特性 |
第四预览 |
| JEP 517 |
HTTP客户端API支持HTTP/3 |
核心库 |
正式 |
| JEP 526 |
延迟常量 |
核心库 |
第二预览 |
| JEP 525 |
结构化并发 |
核心库 |
第六预览 |
| JEP 529 |
Vector API |
孵化器 |
第11轮 |
| JEP 522 |
G1 GC:减少同步提升吞吐量 |
性能 |
正式 |
| JEP 516 |
任意GC的AOT对象缓存 |
性能 |
正式 |
| JEP 524 |
加密对象的PEM编码 |
安全 |
第二预览 |
| JEP 500 |
让final真正成为final |
安全 |
正式 |
| JEP 504 |
移除Applet API |
清理 |
正式 |
二、语言特性:原始类型终于能用了
有些小伙伴在工作中可能遇到过这样的困扰:switch 表达式用起来很爽,但一旦涉及 int、double 这些原始类型,就不得不退化成传统的 if-else。
JDK 26终于解决了这个问题。
2.1 JEP 530:原始类型模式匹配
为什么重要?
Java 16开始支持模式匹配,但一直局限在引用类型。这意味着你无法在 instanceof 或 switch 中直接处理 int、long 等原始类型。现在,这个限制被解除了。
// 之前:处理原始类型只能这样
public String describe(Object obj) {
if (obj instanceof Integer) {
int i = (Integer) obj;
if (i == 0) return "零";
if (i > 0) return "正数";
return "负数";
}
return "未知";
}
// JDK 26:直接匹配原始类型
public String describe(Object obj) {
return switch (obj) {
case Integer i when i > 0 -> "正数";
case Integer i when i < 0 -> "负数";
case Integer i -> "零";
case String s -> "字符串";
case null -> "null";
default -> "未知";
};
}
更进阶的用法:结合record解构,处理复杂类型更优雅。
record Point(int x, int y) {}
public static void printPoint(Object obj) {
switch (obj) {
case Point(var x, var y) -> System.out.println("点: (" + x + ", " + y + ")");
case null -> System.out.println("null");
default -> System.out.println("其他对象");
}
}
这个特性虽然已经是第四预览版,但经过多次迭代已经相当成熟。它让Java的类型系统更加统一,尤其适合AI推理场景中频繁的数据类型转换。
三、性能革命:启动更快、吞吐更高
3.1 JEP 522:G1 GC吞吐量提升5-15%
G1是Java默认的垃圾回收器。JDK 26通过引入第二张卡表,大幅减少了应用线程与GC线程的同步开销。


技术细节:
- 原本G1的写屏障需要约50条指令,现在降至12条
- 吞吐量提升5-15%,对象引用字段修改频繁的应用受益最大
- 第二张卡表仅需约2MB原生内存/1GB堆容量,开销几乎可忽略
实测效果:
# JDK 25
$ java -XX:+UseG1GC -jar myapp.jar
吞吐量: 10000 TPS
# JDK 26
$ java -XX:+UseG1GC -jar myapp.jar
吞吐量: 11500 TPS # 提升15%
3.2 JEP 516:任意GC的AOT对象缓存
一句话解释:应用启动时直接加载预初始化的Java对象,避免重复初始化。
这是Project Leyden的又一重要成果。JDK 24引入了AOT缓存(仅限G1),JDK 25扩展到Serial GC,现在JDK 26终于支持ZGC了。
// 假设有一个耗时的初始化方法
public class HeavyService {
private final Map<String, Configuration> cache;
public HeavyService() {
// 耗时操作:加载配置文件、建立连接等
this.cache = loadFromDatabase();
}
}
// 正常启动:每次都要执行耗时操作
HeavyService service = new HeavyService();
// 使用AOT缓存:首次运行生成缓存,后续直接加载
// java -XX:+UseAOTCache -jar myapp.jar
// 启动时间从2秒降至0.3秒
3.3 G1的其他优化
JDK 26还修复了G1的若干痛点:
- 巨型对象及时回收:以前只在整个堆满了才会回收大对象,现在只要对象不可达就立即回收
- GC开销限制:连续5次GC耗时超过98%且堆使用率低于2%时,直接抛出
OutOfMemoryError,避免GC空转
- 透明大页支持:修复了JDK 25引入的THP兼容性问题
四、AI能力:Java终于能跑Python了
如果说前面都是增量改进,那JDK 26在AI领域的布局绝对是重磅炸弹。
4.1 Project Detroit:让Java调用Python/JavaScript
Oracle在JavaOne 2026上正式宣布了Project Detroit。
这个项目的目标是直接在JVM进程内嵌入V8(JavaScript引擎)和CPython运行时。


为什么这么做?
- 以前通过JNI调用Python需要启动子进程、IPC通信,性能损失大
- Python生态没有Java那样严格的规范,直接在JVM上实现Python解释器很困难
- 干脆把Python的“官方运行时”CPython直接嵌入JVM,完美兼容所有Python库
预期效果:
// JDK 26 + Project Detroit
public class PythonIntegration {
public static void main(String[] args) {
try (var python = PythonRuntime.newRuntime()) {
// 直接调用numpy等Python库
PythonObject result = python.eval("""
import numpy as np
a = np.array([1,2,3,4,5])
a.mean()
""");
System.out.println("均值: " + result.toDouble());
}
}
}
4.2 Vector API的第11轮孵化
Vector API已经进入第11轮孵化器,它让Java开发者能直接使用CPU的SIMD指令。
public float[] addArrays(float[] a, float[] b) {
var vectorA = FloatVector.fromArray(
FloatVector.SPECIES_256, a, 0);
var vectorB = FloatVector.fromArray(
FloatVector.SPECIES_256, b, 0);
var result = vectorA.add(vectorB);
float[] c = new float[a.length];
result.intoArray(c, 0);
return c;
}
这对于人工智能推理、科学计算等场景至关重要。配合Project Detroit,Java终于能在AI领域拥有一席之地。
五、网络和并发:云原生时代的必修课
5.1 JEP 517:HTTP/3支持
HTTP/3基于QUIC协议,解决了HTTP/2的队头阻塞问题。JDK 26的HttpClient终于支持HTTP/3了。
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_3)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
只需要设置 .version(HTTP_3),剩下的交给JDK。这对微服务间的通信延迟优化很有帮助。
5.2 JEP 525:结构化并发(第六预览)
结构化并发已经预览到第六版了,可见Oracle对它的重视程度。它让并发代码像顺序代码一样清晰。
// 传统写法:线程泄漏、取消传播困难
Future<User> userFuture = executor.submit(() -> findUser());
Future<Order> orderFuture = executor.submit(() -> fetchOrder());
User user = userFuture.get(); // 如果这里抛异常,orderFuture还在运行
Order order = orderFuture.get();
// 结构化并发
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
Future<User> userFuture = scope.fork(() -> findUser());
Future<Order> orderFuture = scope.fork(() -> fetchOrder());
scope.join(); // 等待所有任务
scope.throwIfFailed(); // 任何一个失败就抛出
return new Dashboard(userFuture.resultNow(), orderFuture.resultNow());
}
// 自动取消未完成的任务
六、安全加固:让final真正不可变
6.1 JEP 500:让final真正成为final
这是JDK 26最“激进”的改动之一。
以前可以通过反射修改 final 字段:
class Secret {
private final String password = "secret";
}
// 以前可以这样绕过
Secret secret = new Secret();
Field field = Secret.class.getDeclaredField("password");
field.setAccessible(true);
field.set(secret, "hacked"); // 修改成功!
// JDK 26:会收到警告
field.set(secret, "hacked");
// WARNING: Illegal reflective access by ... to field Secret.password
JDK 26默认开启警告,未来版本会完全禁止。这对安全敏感系统很重要。
6.2 JEP 524:PEM编码API
第二预览版的PEM编码API,让证书、密钥的处理标准化:
// 读取PEM格式的私钥
Path keyPath = Path.of("private-key.pem");
String pemString = Files.readString(keyPath);
PrivateKey key = (PrivateKey) PemDecoder.decode(pemString);
// 生成PEM格式证书
X509Certificate cert = generateCert();
String pem = PemEncoder.encode(cert);
Files.writeString(Path.of("cert.pem"), pem);
6.3 量子安全的JAR签名
为了应对未来的量子计算威胁,JDK 26引入了后量子密码学就绪的JAR签名。
虽然现在还不需要,但提前准备总没错。
七、生态重构:Java Verified Portfolio
JDK 26最大的新闻或许不在JDK本身,而是Oracle同时发布的Java Verified Portfolio(JVP)。
7.1 什么是JVP?
JVP是Oracle提供的一套经过验证和支持的企业级Java组件集合:
| 组件 |
说明 |
支持范围 |
| Helidon |
Oracle的云原生微服务框架 |
Java SE订阅者免费 |
| JavaFX |
富客户端UI框架 |
商业支持重新引入 |
| VS Code扩展 |
Java Platform Extension |
5.1M下载,满分5.0 |
7.2 JavaFX回归
JavaFX曾是Java的官方UI框架,后来被分离出去。现在,Oracle重新引入JavaFX的商业支持。
为什么?
因为AI驱动的数据分析需要交互式可视化。JDK 8的JavaFX支持延长到2028年3月,新版本与JDK同步发布。
7.3 Helidon成为OpenJDK项目
Oracle计划将Helidon贡献给OpenJDK,并使其发布节奏与JDK对齐。
Helidon AI集成了LangChain4j,支持MCP(模型上下文协议),让Java开发者能构建AI智能体。
八、版本策略提醒
最后提醒一下:JDK 26不是LTS版本,仅支持6个月,直到今年晚些时候发布JDK 27。
下一个长期支持版本是预计2027年9月的JDK 29。
版本建议:
生产环境: JDK 21/25 LTS
新项目探索: JDK 26 体验新特性
AI项目: JDK 26 + Project Detroit预览
总结
JDK 26可以总结为三个层面的重构:
- 语言层面:原始类型模式匹配终于补齐了Java模式匹配的最后一块拼图
- 性能层面:G1吞吐量提升5-15%、AOT缓存支持ZGC、启动时间缩短
- 战略层面:Project Detroit让Java能直接运行Python/JavaScript、Java Verified Portfolio统一生态支持、Helidon成为OpenJDK项目
适用场景建议:
| 场景 |
推荐度 |
理由 |
| 微服务开发 |
⭐⭐⭐⭐ |
HTTP/3、结构化并发、G1优化 |
| AI应用开发 |
⭐⭐⭐⭐⭐ |
Project Detroit、Vector API |
| 安全敏感系统 |
⭐⭐⭐⭐⭐ |
JEP 500、PEM API、抗量子签名 |
| 遗留系统维护 |
⭐ |
Applet被删除,检查依赖 |
Oracle的副总裁Georges Saab说得很到位:“我们仔细思考应该在Java中放入什么。我们需要在长期稳定性和积极创新之间取得平衡。”
JDK 26正是这种平衡的体现——既有G1优化这样的稳定性改进,也有Detroit这样的战略布局。想了解更多类似的技术深度解析和实践分享,欢迎访问云栈社区。
JDK 26下载地址:dev.java