JDK 17 LTS 官方 Release Notes 深度拆解大典
参考官方文档: OpenJDK JDK 17 Official Features & Release Notes
JDK 17 是极其重量级的 LTS 长期支持版本。它带来了 Sealed 密封类、Apple Silicon (macOS/AArch64) 原生支持、强封装 JDK 内部 API 以及伪随机数引擎增强。本文严格对照 OpenJDK 官方 14 个 JEP 提案进行规范化深度拆解。
🐳 容器运行环境 (Runtime Environment)
在标准 Docker 镜像 eclipse-temurin:17-jdk-alpine 中执行控制台诊断指令 java -version:
📸 Unverified Snapshot📋
eclipse-temurin:17-jdk-alpine⏱️ 856msNot verified
openjdk version "17.0.19" 2026-04-21
OpenJDK Runtime Environment Temurin-17.0.19+10 (build 17.0.19+10)
OpenJDK 64-Bit Server VM Temurin-17.0.19+10 (build 17.0.19+10, mixed mode, sharing)1. 📦 面向数据建模与语言表达力 (Data Modeling & Language)
JEP 409: Sealed Classes (密封类与密封接口)
限定类的继承层级结构,明确指定允许继承的子类(permits Circle, Rectangle),为穷举模式匹配奠定安全基础。
java
public sealed interface Shape permits Circle, Rectangle {}
public final class Circle implements Shape { public double r; }
public final class Rectangle implements Shape { public double w, h; }📸 Unverified Snapshot📋
eclipse-temurin:17-jdk-alpine⏱️ 1612msNot verified
Sealed Class Hierarchy permits Circle, Rectangle:
Circle Area: 78.53981633974483
Compiler Exhaustive Switch Check Passed.JEP 395: Records (不可变数据载体类 - 正式版)
原生生成基于值的不可变数据结构,自动提供全参构造器、equals()、hashCode()、toString() 与属性访问器。
java
public record UserRecord(long id, String username, String role) {}📸 Unverified Snapshot📋
eclipse-temurin:17-jdk-alpine⏱️ 2252msNot verified
Record UserRecord[id=101, username=Alice, role=ADMIN]
Equals check: true
Accessor role(): ADMINJEP 378: Text Blocks (多行文本块)
使用三引号 """ 编写多行 HTML、JSON 或 SQL 字符串,免去繁琐的转义字符与 + 拼接。
java
String json = """
{
"status": "success",
"code": 200
}
""";📸 Unverified Snapshot📋
eclipse-temurin:17-jdk-alpine⏱️ 1570msNot verified
Multi-line Text Block JSON:
{
"status": "success",
"code": 200,
"message": "Hello Multi-line Text Block"
}JEP 394: Pattern Matching for instanceof (模式匹配)
消除了显式强转的防范性代码,在判断类型的同时自动完成类型转换绑定。
java
if (obj instanceof String s) {
System.out.println("Length: " + s.length());
}📸 Unverified Snapshot📋
eclipse-temurin:17-jdk-alpine⏱️ 1525msNot verified
Pattern Matching instanceof:
if (obj instanceof String s) -> s.length(): 242. 🎲 核心类库与安全增强 (APIs & Security)
JEP 356: Enhanced Pseudo-Random Number Generators (伪随机数生成器增强)
提供 RandomGenerator 统一接口体系,内置 LXM(如 L128X128MixRandom)等高性能伪随机数生成算法。
java
RandomGenerator generator = RandomGeneratorFactory.of("L128X128MixRandom").create();📸 Unverified Snapshot📋
eclipse-temurin:17-jdk-alpine⏱️ 1870msNot verified
RandomGeneratorFactory (L128X128MixRandom):
Generated pseudo-random int: 639JEP 403: Strongly Encapsulate JDK Internals (强封装 JDK 内部 API)
默认禁用对 sun.misc.Unsafe 以外大部分内部 API 的跨模块反射访问(除非显式指定 --add-opens),极大提升 JVM 内部安全性。
3. 🖥️ 平台与底层架构支持 (Platform Ports & Cleanup)
JEP 391: macOS/AArch64 Port (Apple Silicon M1/M2/M3 原生支持)
提供针对 Apple M 系列芯片(AArch64 架构)原生优化的 JDK 构建,性能提升巨大。
4. 📜 全部 14 个官方 JEP 提案索引清单 (JDK 17 Full JEP Matrix)
| JEP 编号 | JEP 提案名称 | 状态 | 核心领域 / 变更意义 |
|---|---|---|---|
| JEP 306 | Restore Always-Strict Floating-Point Semantics | 正式版 | 恢复默认严格浮点语义 (strictfp) |
| JEP 356 | Enhanced Pseudo-Random Number Generators | 正式版 | 伪随机数生成器统一 API (LXM 算法) |
| JEP 382 | New macOS Rendering Pipeline | 正式版 | 基于 Metal API 的 macOS 图形渲染管线 |
| JEP 391 | macOS/AArch64 Port | 正式版 | Apple Silicon (M1/M2/M3) 架构原生支持 |
| JEP 398 | Deprecate the Applet API for Removal | Deprecated | 废弃 Applet API |
| JEP 403 | Strongly Encapsulate JDK Internals | 正式版 | 强封装 JDK 内部 API (默认禁止反射 sun.misc) |
| JEP 406 | Pattern Matching for switch | Preview | switch 模式匹配 (初次 Preview) |
| JEP 407 | Remove RMI Activation | Removed | 彻底移除 RMI Activation 机制 |
| JEP 409 | Sealed Classes | 正式版 | Sealed 密封类与密封接口 |
| JEP 410 | Remove Experimental AOT and JIT Compiler | Removed | 移除实验性 jaotc / C2 AOT 编译器 |
| JEP 411 | Deprecate the Security Manager for Removal | Deprecated | 废弃 Security Manager |
| JEP 412 | Foreign Function & Memory API | Incubator | 外部函数与内存 API (Project Panama) |
| JEP 414 | Vector API | Second Incubator | 向量计算 API |
| JEP 415 | Context-Specific Deserialization Filters | 正式版 | 上下文敏感的反序列化过滤器 |