JDK的版本迭代特性(JDK9 - JDK20)

简介: JDK的版本迭代特性(JDK9 - JDK20)

1. 发布特点

发行版本 发行时间 备注
Java 1.0 1996.01.23 Sun公司发布了Java的第一个开发工具包
Java 5.0 2004.09.30 ①版本号从1.4直接更新至5.0;②平台更名为JavaSE、JavaEE、JavaME
Java 8.0 2014.03.18 此版本是继Java 5.0以来变化最大的版本。是长期支持版本(LTS
Java 9.0 2017.09.22 此版本开始,每半年更新一次
Java 10.0 2018.03.21
Java 11.0 2018.09.25 JDK安装包取消独立JRE安装包,是长期支持版本(LTS
Java 12.0 2019.03.19
Java17.0 2021.09 发布Java 17.0,版本号也称为21.9,是长期支持版本(LTS
Java19.0 2022.09 发布Java19.0,版本号也称为22.9。

从Java 9 这个版本开始,Java 的计划发布周期是 6个月

这意味着Java的更新从传统的以特性驱动的发布周期,转变为以时间驱动的发布模式,并且承诺不会跳票。通过这样的方式,开发团队可以把一些关键特性尽早合并到 JDK 之中,以快速得到开发者反馈,在一定程度上避免出现像 Java 9 两次被迫延迟发布的窘况。

针对企业客户的需求,Oracle 将以三年为周期发布长期支持版本(long term support)。

Oracle 的官方观点认为:与 Java 7->8->9 相比,Java 9->10->11的升级和 8->8u20->8u40 更相似。

新模式下的 Java 版本发布都会包含许多变更,包括语言变更JVM 变更,这两者都会对 IDE、字节码库和框架产生重大影响。此外,不仅会新增其他 API,还会有 API被删除(这在 Java 8 之前没有发生过)。

目前看这种发布策略是非常成功的,解开了 Java/JVM 演进的许多枷锁,至关重要的是,OpenJDK 的权力中心,正在转移到开发社区和开发者手中。 在新的模式中,既可以利用 LTS 满足企业长期可靠支持的需求,也可以满足各种开发者对于新特性迭代的诉求。因为用 2-3 年的最小间隔粒度来试验一个特性,基本是不现实的。

2. 名词解释

Oracle JDK和Open JDK

这两个JDK最大不同就是许可证不一样。但是对于个人用户来讲,没区别。

Oracle JDK Open JDK
来源 Oracle团队维护 Oracle和Open Java社区
授权协议 Java 17及更高版本 Oracle Java SE 许可证
Java16及更低版本甲骨文免费条款和条件 (NFTC) 许可协议
GPL v2许可证
关系 由Open JDK构建,增加了少许内容
是否收费 2021年9月起Java17及更高版本所有用户免费。 16及更低版本,个人用户、开发用户免费。 2017年9月起,所有版本免费
对语法的支持 一致 一致

JEP

JEP(JDK Enhancement Proposals):jdk 改进提案,每当需要有新的设想时候,JEP可以提出非正式的规范(specification),被正式认可的JEP正式写进JDK的发展路线图并分配版本号。

LTS

LTS(Long-term Support)即 长期支持 。Oracle官网提供了对Oracle JDK个别版本的长期支持,即使发发行了新版本,比如目前最新的JDK19,在结束日期前,LTS版本都会被长期支持。(出了bug,会被修复,非LTS则不会再有补丁发布)所以,一定要选一个LTS版本,不然出了漏洞没人修复了。

版本 开始日期 结束日期 延期结束日期
7(LTS) 2011年7月 2019年7月 2022年7月
8(LTS) 2014年3月 2022年3月 2030年12月
11(LTS) 2018年9月 2023年9月 2026年9月
17(LTS) 2021年9月 2026年9月 2029年9月
21(LTS) 2023年9月 2028年9月 2031年9月

如果要选择Oracle JDK,目前可选的LTS版本为8、11、17三个。

3. 各版本支持时间路线图

4. 各版本介绍

jdk 9

Java 9 提供了超过150项新功能特性,包括备受期待的模块化系统、可交互的 REPL 工具:jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安全增强、扩展提升、性能管理改善等。

特性太多,查看链接:

https://openjdk.java.net/projects/jdk9/

jdk 10

https://openjdk.java.net/projects/jdk/10/

286: Local-Variable Type Inference 局部变量类型推断

296: Consolidate the JDK Forest into a Single Repository JDK库的合并

304: Garbage-Collector Interface 统一的垃圾回收接口

307: Parallel Full GC for G1 为G1提供并行的Full GC

310: Application Class-Data Sharing 应用程序类数据(AppCDS)共享

312: Thread-Local Handshakes ThreadLocal握手交互

313: Remove the Native-Header Generation Tool (javah) 移除JDK中附带的javah工具

314: Additional Unicode Language-Tag Extensions 使用附加的Unicode语言标记扩展

316: Heap Allocation on Alternative Memory Devices 能将堆内存占用分配给用户指定的备用内存设备

317: Experimental Java-Based JIT Compiler 使用Graal基于Java的编译器

319: Root Certificates 根证书

322: Time-Based Release Versioning 基于时间定于的发布版本

jdk 11

https://openjdk.java.net/projects/jdk/11/

181: Nest-Based Access Control 基于嵌套的访问控制

309: Dynamic Class-File Constants 动态类文件常量

315: Improve Aarch64 Intrinsics 改进 Aarch64 Intrinsics

318: Epsilon: A No-Op Garbage Collector Epsilon — 一个No-Op(无操作)的垃圾收集器

320: Remove the Java EE and CORBA Modules 删除 Java EE 和 CORBA 模块

321: HTTP Client (Standard) HTTPClient API

323: Local-Variable Syntax for Lambda Parameters 用于 Lambda 参数的局部变量语法

324: Key Agreement with Curve25519 and Curve448 Curve25519 和 Curve448 算法的密钥协议

327: Unicode 10

328: Flight Recorder 飞行记录仪

329: ChaCha20 and Poly1305 Cryptographic Algorithms ChaCha20 和 Poly1305 加密算法

330: Launch Single-File Source-Code Programs 启动单一文件的源代码程序

331: Low-Overhead Heap Profiling 低开销的 Heap Profiling

332: Transport Layer Security (TLS) 1.3 支持 TLS 1.3

333: ZGC: A Scalable Low-Latency Garbage Collector(Experimental) 可伸缩低延迟垃圾收集器

335: Deprecate the Nashorn JavaScript Engine 弃用 Nashorn JavaScript 引擎

336: Deprecate the Pack200 Tools and API 弃用 Pack200 工具和 API

jdk 12

https://openjdk.java.net/projects/jdk/12/

189:Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) 低暂停时间的GC

230: Microbenchmark Suite 微基准测试套件

325: Switch Expressions (Preview) switch表达式

334: JVM Constants API JVM常量API

340: One AArch64 Port, Not Two 只保留一个AArch64实现

341: Default CDS Archives 默认类数据共享归档文件

344: Abortable Mixed Collections for G1 可中止的G1 Mixed GC

346: Promptly Return Unused Committed Memory from G1 G1及时返回未使用的已分配内存

jdk 13

https://openjdk.java.net/projects/jdk/13/

350: Dynamic CDS Archives 动态CDS档案

351: ZGC: Uncommit Unused Memory ZGC:取消使用未使用的内存

353: Reimplement the Legacy Socket API 重新实现旧版套接字API

354: Switch Expressions (Preview) switch表达式(预览)

355: Text Blocks (Preview) 文本块(预览)

jdk 14

https://openjdk.java.net/projects/jdk/14/

305: Pattern Matching for instanceof (Preview) instanceof的模式匹配

343: Packaging Tool (Incubator) 打包工具

345: NUMA-Aware Memory Allocation for G1 G1的NUMA-Aware内存分配

349: JFR Event Streaming JFR事件流

352: Non-Volatile Mapped Byte Buffers 非易失性映射字节缓冲区

358: Helpful NullPointerExceptions 实用的NullPointerExceptions

359: Records (Preview)

361: Switch Expressions (Standard) Switch表达式

362: Deprecate the Solaris and SPARC Ports 弃用Solaris和SPARC端口

363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector 删除并发标记扫描(CMS)垃圾回收器

364: ZGC on macOS

365: ZGC on Windows

366: Deprecate the ParallelScavenge + SerialOld GC Combination 弃用ParallelScavenge + SerialOld GC组合

367: Remove the Pack200 Tools and API 删除Pack200工具和API

368: Text Blocks (Second Preview) 文本块

370: Foreign-Memory Access API (Incubator) 外部存储器访问API

jdk 15

https://openjdk.java.net/projects/jdk/15/

339: Edwards-Curve Digital Signature Algorithm (EdDSA) EdDSA 数字签名算法

360: Sealed Classes (Preview) 密封类(预览)

371: Hidden Classes 隐藏类

372: Remove the Nashorn JavaScript Engine 移除 Nashorn JavaScript 引擎

373: Reimplement the Legacy DatagramSocket API 重新实现 Legacy DatagramSocket API

374: Disable and Deprecate Biased Locking 禁用偏向锁定

375: Pattern Matching for instanceof (Second Preview) instanceof 模式匹配(第二次预览)

377: ZGC: A Scalable Low-Latency Garbage Collector ZGC:一个可扩展的低延迟垃圾收集器

378: Text Blocks 文本块

379: Shenandoah: A Low-Pause-Time Garbage Collector Shenandoah:低暂停时间垃圾收集器

381: Remove the Solaris and SPARC Ports 移除 Solaris 和 SPARC 端口

383: Foreign-Memory Access API (Second Incubator) 外部存储器访问 API(第二次孵化版)

384: Records (Second Preview) Records(第二次预览)

385: Deprecate RMI Activation for Removal 废弃 RMI 激活机制

jdk 16

https://openjdk.java.net/projects/jdk/16/

338: Vector API (Incubator) Vector API(孵化器)

347: Enable C++14 Language Features JDK C++的源码中允许使用C++14的语言特性

357: Migrate from Mercurial to GitOpenJDK源码的版本控制从Mercurial (hg) 迁移到git

369: Migrate to GitHub OpenJDK源码的版本控制迁移到github上

376: ZGC: Concurrent Thread-Stack Processing ZGC:并发线程处理

380: Unix-Domain Socket Channels Unix域套接字通道

386: Alpine Linux Port 将glibc的jdk移植到使用musl的alpine linux上

387: Elastic Metaspace 弹性元空间

388: Windows/AArch64 Port 移植JDK到Windows/AArch64

389: Foreign Linker API (Incubator) 提供jdk.incubator.foreign来简化native code的调用

390: Warnings for Value-Based Classes 提供基于值的类的警告

392: Packaging Tool jpackage打包工具转正

393: Foreign-Memory Access API (Third Incubator)

394: Pattern Matching for instanceof Instanceof的模式匹配转正

395: Records Records转正

396: Strongly Encapsulate JDK Internals by Default 默认情况下,封装了JDK内部构件

397: Sealed Classes (Second Preview) 密封类

jdk 17

https://openjdk.java.net/projects/jdk/17/

306: Restore Always-Strict Floating-Point Semantics 恢复始终严格的浮点语义

356: Enhanced Pseudo-Random Number Generators 增强型伪随机数生成器

382: New macOS Rendering Pipeline 新的macOS渲染管道

391: macOS/AArch64 Port macOS/AArch64端口

398: Deprecate the Applet API for Removal 弃用Applet API后续将进行删除

403: Strongly Encapsulate JDK Internals 强封装JDK的内部API

406: Pattern Matching for switch (Preview) switch模式匹配(预览)

407: Remove RMI Activation 删除RMI激活机制

409: Sealed Classes 密封类转正

410: Remove the Experimental AOT and JIT Compiler 删除实验性的AOT和JIT编译器

411: Deprecate the Security Manager for Removal 弃用即将删除的安全管理器

412: Foreign Function & Memory API (Incubator) 外部函数和内存API(孵化特性)

414: Vector API (Second Incubator) Vector API(第二次孵化特性)

415: Context-Specific Deserialization Filters 上下文特定的反序列化过滤器

jdk 18

https://openjdk.org/projects/jdk/18/

400: UTF-8 by Default 默认为UTF-8

408: Simple Web Server 简单的Web服务器

413: Code Snippets in Java API Documentation Java API文档中的代码片段

416: Reimplement Core Reflection with Method Handles 用方法句柄重新实现核心反射

417: Vector API (Third Incubator) Vector API(第三个孵化器)

418: Internet-Address Resolution SPI internet地址解析SPI

419: Foreign Function & Memory API (Second Incubator) 外部函数与内存API(第二孵化器)

420: Pattern Matching for switch (Second Preview) 开关模式匹配(第二次预览)

421: Deprecate Finalization for Removal 不赞成删除最终化

jdk 19

https://openjdk.org/projects/jdk/19/

405: Record Patterns (Preview) 记录模式(预览)

422: Linux/RISC-V Port Linux / RISC-V端口

424: Foreign Function & Memory API (Preview) 外部函数和内存API(预览)

425: Virtual Threads (Preview) 虚拟线程(预览版)

426: Vector API (Fourth Incubator) Vector API(第四个孵化器)

427: Pattern Matching for switch (Third Preview) 开关模式匹配(第三次预览)

428: Structured Concurrency (Incubator) 结构化并发(孵化器)

jdk 20

https://openjdk.org/projects/jdk/20/

429: Scoped Values (Incubator) 范围值(孵化器)

432: Record Patterns (Second Preview) 记录模式(第二次预览)

433: Pattern Matching for switch (Fourth Preview) 开关模式匹配(第四次预览)

434: Foreign Function & Memory API (Second Preview) 外部函数和内存API(第二次预览)

436: Virtual Threads (Second Preview) 虚拟线程(第二次预览版)

437: Structured Concurrency (Second Incubator) 结构化并发(第二个孵化器)

438: Vector API (Fifth Incubator) 载体API(第五孵化器)

5. JDK各版本下载链接

https://www.oracle.com/java/technologies/downloads/archive/

6. 应该如何学习新特性

对于新特性,应该从哪几个角度学习新特性呢?

  • 语法层面:
  • 比如JDK5中的自动拆箱、自动装箱、enum、泛型
  • 比如JDK8中的lambda表达式、接口中的默认方法、静态方法
  • 比如JDK10中局部变量的类型推断
  • 比如JDK12中的switch
  • 比如JDK13中的文本块
  • API层面:
  • 比如JDK8中的StreamOptional、新的日期时间、HashMap的底层结构
  • 比如JDK9中String的底层结构
  • 新的 / 过时的 API
  • 底层优化
  • 比如JDK8中永久代被元空间替代、新的JS执行引擎
  • 比如新的垃圾回收器、GC参数、JVM的优化
相关文章
|
6月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
6月前
|
安全 架构师 Java
Java LTS版本进化秀:从8到21的欢乐升级之旅
困惑于Java版本选择?轻松幽默地穿越Java LTS版本时光隧道,掌握从Java 8到21的关键特性。通过一家初创公司的系统升级故事,直观了解每个版本如何解决代码冗余、性能瓶颈等开发痛点,助你在技术选型中做出明智决策。
371 7
Java API 开发者
191 0
|
7月前
|
Cloud Native Java API
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
1344 0
|
7月前
|
Ubuntu Java Android开发
在Ubuntu 18.04上安装与JDK 8兼容的Eclipse版本的步骤。
安装过程结束后,您就可以开始使用Eclipse来开发您的Java项目了,并且确保它与JDK 8兼容无误。这个过程涉及的是一个基本的安装流程,针对使用Java 8的用户,Eclipse的其他配置和插件安装根据个人开发环境和需求来定制。
482 0
|
8月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
367 1
|
8月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
881 1
|
8月前
|
缓存 安全 Java
Java 并发新特性实战教程之核心特性详解与项目实战
本教程深入解析Java 8至Java 19并发编程新特性,涵盖CompletableFuture异步编程、StampedLock读写锁、Flow API响应式流、VarHandle内存访问及结构化并发等核心技术。结合电商订单处理、缓存系统、实时数据流、高性能计数器与用户资料聚合等实战案例,帮助开发者高效构建高并发、低延迟、易维护的Java应用。适合中高级Java开发者提升并发编程能力。
345 0
|
8月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
355 1
|
8月前
|
IDE Java API
Java 17 新特性与微服务开发的实操指南
本内容涵盖Java 11至Java 17最新特性实战,包括var关键字、字符串增强、模块化系统、Stream API、异步编程、密封类等,并提供图书管理系统实战项目,帮助开发者掌握现代Java开发技巧与工具。
390 0