JDK JDK 学习手册8 → 27 · JDK 专用学习站
JDK 25 · LTS · 2025-09-16 · 完整课程

JDK 25:生产基线换代:作用域、紧凑源文件与对象头

JDK 25 是 2025-09-16 发布的 LTS。它把 21 时代的几条预览线收束为正式能力:Scoped Values、紧凑源文件与实例 main、模块导入、灵活构造器体。同时,结构化并发仍在第五次预览,紧凑对象头转正但默认关闭——版本边界比新语法更值得先记。

速查 6 主题深钻 3 主题面试 15 题速查卡 12 张class 版本 69
已掌握 0 / 0 个学习单元
在任意速查 / 深钻页底部标记

这一课,你必须能自己回答GOALS

合上资料后,逐条自述

  1. ScopedValue 与 ThreadLocal 的成本差异在哪里?为什么它适合虚拟线程?绑定何时失效?
  2. 结构化并发在 JDK 25 是什么状态?新的 open/Joiner API 与 21 的 ShutdownOnFailure 有何不同?
  3. 紧凑源文件允许什么、禁止什么?java Hello.java 与 javac 的行为差别在哪?
  4. import module java.base; 到底导入了什么?为什么它不能替代模块系统?
  5. 灵活构造器体允许在 super()/this() 之前写什么?字段初始化的限制是什么?
  6. 紧凑对象头把对象头压到多少位?为什么 25 上默认没有开启?启用条件是什么?
  7. 从 21 升到 25,哪些 API 与启动参数需要先处理?32 位 x86 移除影响谁?
  8. JDK 25 还有哪些预览特性?预览 class 为什么不能跨版本运行?
验收方式:不是「看过」,而是能用自己的话讲出因果、举出代码例子、说出至少一个版本边界或反例。每个深钻单元最后的费曼自检就是按这个标准设计的。

三种模式,各解决一个问题MODES

学习路径TRACKS

面试突击 · 2 小时

先结论后机制

先用 15 道题暴露盲区,再回到速查补齐 API 与版本边界。重点记「哪些转正、哪些仍预览、哪些默认没变」。

语言与启动 · 1 天

从单文件到构造器

按「紧凑源文件 → 模块导入 → 灵活构造器体」顺序走一遍。每节都先看编译器允许什么、拒绝什么,再谈写法。

并发与运行时 · 2 天

机制 + 边界

从 ScopedValue 的绑定快照讲到结构化并发的取消树,再下潜到对象头布局。重点不是 API,而是「什么状态下谁负责清理」。

换一个版本,继续同一门课SWITCH

所有完整课程共用「速查 → 深钻 → 面试」结构。切换版本后,再从顶栏版本菜单切一次,就会落在目标版本的同一模块。

全部学习单元9

速查模块 · 6 个主题

01

Scoped Values:作用域内的不可变上下文

ScopedValue 把上下文从「每个线程一份可变副本」变成「一段执行路径上的只读绑定」:进入作用域时安装,退出时恢复,子任务只在结构化 fork 时继承。JDK 25 转正,API 与 21 预览版有差异。

30 分钟核心
02

Structured Concurrency:第五次预览的新 API

JDK 25 的结构化并发仍是预览,但 API 已换成 open() + Joiner:作用域是接口,子任务默认跑在虚拟线程上,失败或超时会取消兄弟任务。21 的 ShutdownOnFailure / ShutdownOnSuccess 在 25 已不存在。

35 分钟进阶
03

Compact Source Files:没有 class 外壳的程序

JDK 25 正式允许单文件程序省略 package 与 class 声明,直接写 import、字段、方法和实例 main。java Hello.java 即可运行;它降低的是入门与小工具的门槛,不是替代正规类结构。

25 分钟核心
04

Module Import Declarations:一行导入一个模块

import module java.base; 把 java.base 导出的所有包一次性导入,等价于几十条按需包导入。它解决的是 import 噪音,不是模块化:不改变 requires,不打开封装,也不能导入 classpath 上的未命名模块。

25 分钟核心
05

Flexible Constructor Bodies:把校验放到 super() 之前

JDK 25 正式允许在 super(...) / this(...) 之前写语句:可以先校验参数、计算参数、初始化本类字段,再调用父构造器。代价是这些语句处于「早期构造上下文」,不能读取正在构造的对象。

25 分钟核心
06

从 21 迁移到 25

21 → 25 的升级难点不在语法,而在「预览转正」与「默认值没变」:Scoped Values 与模块导入去掉预览参数,结构化并发换了 API 却仍是预览,紧凑对象头与分代 Shenandoah 转正但默认关闭,32 位 x86 端口被移除。

30 分钟进阶

深钻模块 · 3 个主题

版本上下文JDK 25

JDK 25 于 2025-09-16 发布,class 文件版本 69。它是 21 之后的 LTS,也是未来几年新的生产基线:Scoped Values 正式(JEP 506),紧凑源文件(JEP 512)、模块导入(JEP 511)、灵活构造器体(JEP 513)正式,紧凑对象头(JEP 519)与分代 Shenandoah(JEP 521)转为产品特性。结构化并发仍是预览(JEP 505,第五次预览),且 API 在 25 发生了不兼容调整。

Scoped Values 转正紧凑对象头转正紧凑源文件与实例 main灵活构造器体模块导入声明转正Stable Values(预览)
版本边界提醒:本课程代码以本机 JDK 25(Corretto 25+36-LTS)编译/运行验证。Scoped Values 是正式 API;结构化并发是预览,必须 --release 25 --enable-preview 编译并 --enable-preview 运行。紧凑对象头虽已转正,但 JEP 519 明确不改变默认布局:25 上仍需 -XX:+UseCompactObjectHeaders。分代 Shenandoah 同样转正,但默认仍是 satb 模式。

查看 JDK 25 完整版本档案(全部 JEP、移除项)→ · 查看跨版本演进矩阵 →

JDK 学习手册 · JDK / Java 专用学习站 · 纯静态 · 双击 index.html 即可使用

本站专注 JDK 版本演进与 Java 教学,非 Oracle / OpenJDK 官方站点。版本数据来自 OpenJDK 官方 Features 表;课程示例已在对应本机 JDK 实测。构建日期 2026-11-12。