跳转到正文

JDK 17 LTS ​

参考官方文档: OpenJDK JDK 17 Official Features & Release Notes
JDK 17 包含密封类、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(): ADMIN

JEP 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(): 24

2. 🎲 核心类库与安全增强 (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: 639

JEP 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 306Restore Always-Strict Floating-Point Semantics正式版恢复默认严格浮点语义 (strictfp)
JEP 356Enhanced Pseudo-Random Number Generators正式版伪随机数生成器统一 API (LXM 算法)
JEP 382New macOS Rendering Pipeline正式版基于 Metal API 的 macOS 图形渲染管线
JEP 391macOS/AArch64 Port正式版Apple Silicon (M1/M2/M3) 架构原生支持
JEP 398Deprecate the Applet API for RemovalDeprecated废弃 Applet API
JEP 403Strongly Encapsulate JDK Internals正式版强封装 JDK 内部 API (默认禁止反射 sun.misc)
JEP 406Pattern Matching for switchPreviewswitch 模式匹配 (初次 Preview)
JEP 407Remove RMI ActivationRemoved彻底移除 RMI Activation 机制
JEP 409Sealed Classes正式版Sealed 密封类与密封接口
JEP 410Remove Experimental AOT and JIT CompilerRemoved移除实验性 jaotc / C2 AOT 编译器
JEP 411Deprecate the Security Manager for RemovalDeprecated废弃 Security Manager
JEP 412Foreign Function & Memory APIIncubator外部函数与内存 API (Project Panama)
JEP 414Vector APISecond Incubator向量计算 API
JEP 415Context-Specific Deserialization Filters正式版上下文敏感的反序列化过滤器

版本信息与迁移 ​

  • 发布时间 / 标准时间: 2021 年 9 月
  • 维护状态: 截至 2026-08-27,以页面所链接的官方生命周期或规范状态为准
  • 运行时或平台基线: 目标 JDK、JVM 发行版,以及 Jakarta EE、GraalVM 或应用服务器的独立兼容矩阵

迁移影响: 升级时先处理移除模块、弃用 JVM 参数、javax.*/jakarta.* 边界、框架与字节码工具兼容性,再在目标 GC、容器和 CPU 架构上做回归与性能验证。

版本确认 ​

bash
java --version
javac --version

资料核对日期:2026-08-27。

Released under the MIT License.