Java 10 核心特性与发布模型详解
Java 10 发布背景
Java 10 于 2018 年 3 月 20 日发布,是 Java 发布节奏变革的里程碑版本。Oracle 确立了 6 个月一次的特性发布节奏 与 LTS(长期支持)模型:
- 特性发布:每 3 月、9 月发布,包含新语言特性、JVM 改进、API 增强等。
- 更新发布:每季度(1、4、7、10 月)发布,仅含错误修复、安全补丁、回归修复。
- LTS 发布:每 3 年(从 2018 年 9 月 Java 11 开始),提供 3 年商业支持,面向生产环境。
Java 9 与 10 为非 LTS 版本,Java 11 为首个 LTS 版本。
Oracle JDK 与 OpenJDK 的关系变化
- Java 10 前:Oracle JDK 为主流,含商业特性,分发受限。
- Java 10 起:Oracle 推动 OpenJDK 为主流 JDK,每 6 个月发布 OpenJDK 二进制;Oracle JDK 延后 3 年随 LTS 发布。
- OpenJDK 免费、可自由分发,云原生、容器化部署友好。
Java 10 核心新特性(JEP)
| JEP | 特性 | 说明 |
|---|---|---|
| JEP 286 | 局部变量类型推断 | 引入 var 关键字,编译器根据初始值推断类型,简化冗长声明。 |
| JEP 322 | 基于时间的发布版本控制 | 版本号格式 $FEATURE.$INTERIM.$UPDATE.$PATCH,明确发布节奏。 |
| JEP 304 | 垃圾收集器接口 | 定义统一 GC 接口,便于替换/隔离不同 GC 实现。 |
| JEP 307 | G1 并行 Full GC | G1 回退到全量 GC 时使用并行标记-清理-压缩,降低最坏延迟。 |
| JEP 316 | 堆分配在替代内存设备 | 支持 -XX:AllocateHeapAt 指定 NV-DIMM 等非易失性内存路径。 |
| JEP 296 | 整合 JDK 森林为单一仓库 | 将 8 个模块仓库合并为单一仓库,简化开发流程。 |
| JEP 310 | 应用类数据共享 | 扩展 CDS,允许应用类放入共享归档,减少启动时间与内存占用。 |
| JEP 314 | 扩展 Unicode 语言标签 | 新增货币、周首日、区域覆盖、时区等扩展。 |
| JEP 319 | 根证书 | OpenJDK 内置 Oracle Java SE Root CA 证书,开箱即用 TLS。 |
| JEP 317 | 实验性 Java 版 JIT 编译器 | 引入 Graal 编译器,基于 JVMCI,可动态插拔,支持多语言。 |
| JEP 312 | 线程局部握手 | x64/SPARC 上允许单独暂停线程,无需全局安全点,提升 VM 性能。 |
| JEP 313 | 移除 javah 工具 | 原生头文件生成工具被移除,功能由 javac -h 替代。 |
API 增强与清理
- 新增 70+ API 与选项,如
Optional.orElseThrow()、List/Set/Map.copyOf()、Collectors.toUnmodifiableList/Set/Map()、javadoc --add-stylesheet等。 - 移除多项废弃 API:Nimbus/Aqua 旧 LookAndFeel 类名、
Runtime.getLocalizedInputStream、RMI 多路复用协议、FlatProfiler、旧-X选项、javah、-d32/-d64等。
版本号解析示例
public class Tester {
public static void main(String[] args) {
Runtime.Version version = Runtime.version();
System.out.printf("feature: %d%n interim: %d%n update: %d%n patch: %d%n",
version.feature(), version.interim(), version.update(), version.patch());
}
}
// 输出示例(Java 10.0.2):
// feature: 10
// interim: 0
// update: 2
// patch: 0
java