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. 各版本支持时间路线图

JDK的版本迭代(JDK9 - JDK20)

4. 各版本介绍

JDK的版本迭代(JDK9 - JDK20)

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 Git OpenJDK源码的版本控制从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/

JDK的版本迭代(JDK9 - JDK20)

6. 应该如何学习新特性

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

  • 语法层面:

    • 比如JDK5中的自动拆箱、自动装箱、enum、泛型
    • 比如JDK8中的lambda表达式、接口中的默认方法、静态方法
    • 比如JDK10中局部变量的类型推断
    • 比如JDK12中的switch
    • 比如JDK13中的文本块
  • API层面:

    • 比如JDK8中的StreamOptional、新的日期时间、HashMap的底层结构
    • 比如JDK9中String的底层结构
    • 新的 / 过时的 API
  • 底层优化

    • 比如JDK8中永久代被元空间替代、新的JS执行引擎

    • 比如新的垃圾回收器、GC参数、JVM的优化文章来源地址https://www.toymoban.com/news/detail-438024.html

到了这里,关于JDK的版本迭代(JDK9 - JDK20)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CentOS 各版本的对应内核表和发行时间表【全】

    目前 CentOS Linux 已经停止更新了,剩下 CentOS Stream 还在维护。在这里统一记录 CentOS 各版本的 内核对应表 和 发行时间表 。 版本时间从新到旧排列。 CentOS version Architectures RHEL base Kernel CentOS release date RHEL release date 8.0-1905 x86-64, ppc64le, AArch64 8.0 4.18.0-80 2019-09-24[14] 2019-05-07[142][1

    2024年04月10日
    浏览(25)
  • JDK17新特性之--JDK9到JDK17 String 新增的新方法

    JDK9之后对String底层存储数据结构进行了重大的修改 1 ,同步也增加了许多新的方法,主要有Text Blocks、chars()、codePoints()、describeConstable()、formatted()、indent()、isBlank()、isEmpty()、lines()、repeat()、strip()、stripLeading()、stripIndent()、stripTrailing()、translateEscapes(),接下来就逐一看看每个

    2024年02月04日
    浏览(31)
  • JDK9~17+Springboot3 @Resource常见问题和解决方案

    因为JDK版本升级的改动,在Jdk9~17环境下,搭建Springboot项目,会出现原有@Resource(javax.annotation.Resource)不存在的问题,导致项目从Jdk8迁移到高版本时遇到的问题 原因 你可能会问,为什么javax.annotation.Resource注解不存在呢?  从Jdk9开始,JavaEE从Jdk中分离,jdk就移除掉了javax.a

    2024年02月04日
    浏览(43)
  • JVM工作原理与实战(十四):JDK9及之后的类加载器

    JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、JDK8及之前的类加载器 二、JDK9及之后的类加载器 1.启动类加载器 2.平台类加载器(扩展类加载器) 总结 JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程

    2024年01月22日
    浏览(58)
  • jenkins 发布job切换不同的jdk版本/ maven版本

    因为有个新的项目需要使用jdk17 而旧的项目需要jdk1.8 这就需要jenkins在发布项目的时候可以指定jdk版本 jenkins全局工具配置页面 配置新的jdk 路径 系统管理- 全局工具配置 如上新增个jdk 名称叫 jdk-17 然后配置jdk-17的根路径即可(这个需要我们自己下载jdk 然后把下载解压后jdk 放

    2024年02月10日
    浏览(29)
  • Ubuntu20.04 系统安装多个版本的 JDK【多版本jdk切换:sudo update-alternatives --config java】

    目前Java版本更新很快,每半年推出一个版本,因此我们可能需要在自己的电脑上安装不同版本的JDK,以便于我们学习使用,本文主要介绍了在Ubuntu18.04系统上安装JDK(OpenJDK 、 Oracle JDK)以及管理不同版本JDK(JDK1.8、JDK9、JDK10等)的方法。 第一种:安装系统自带的 OpenJDK 因为

    2024年02月09日
    浏览(54)
  • 【后端】Core框架版本和发布时间以及.net 6.0启动文件的结构

    2023年,第35周,第1篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! .NET Core 是一个跨平台的开源框架,用于构建现代化的应用程序。它在不同版本中有一些重要的区别和发布时间 下面是主要版本的简要概述: 于2016年发布。 它是.NET Core 的最初版本,提供了跨

    2024年02月11日
    浏览(27)
  • J2EE项目部署与发布(Linux版本)->jdk&tomcat安装,MySQL安装,后端接口部署,linux单体项目前端部署

    jdktomcat安装 MySQL安装 后端接口部署 linux单体项目前端部署 1.jdktomcat安装 上传jdk、tomcat安装包 解压两个工具包 #解压tomcat tar -zxvf apache-tomcat-8.5.20.tar.gz #解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 配置并且测试jdk安装 #配置环境变量 vim /etc/profile #java environment export JAVA_HOME=/javaxl/softwar

    2024年02月06日
    浏览(31)
  • 最全Android版本API对应表,Android1.0-Android 14.0发布时间列表详细说明

    Android版本    Api Level  SDK Android 14  (Developer Preview) Android 13.0(T)    33 Android 12.0(S)    31,32 Android 11.0(R)    30 Android 10.0(Q)    29 Android 9.0(Pie)    28 Android 8.1(Oreo)    27 Android 8.0(Oreo)    26 Android 7.1(Nougat)    25 Android 7.0(Nougat)    24 Android 6.0(Marshmallow)    23 Android 5.1(Loll

    2024年02月05日
    浏览(41)
  • java: 错误: 不支持发行版本 5 java: 错误: 不支持发行版本8 java: 错误: 不支持发行版本17

    该错误表示你使用的Java编译器不支持Java 5版本的发行。Java版本的发行是根据不同的功能和语言变化来区分的。 要解决这个问题,你可以尝试以下几种方法: 检查编译器配置:确保你的IDE或编译器已正确配置为使用正确的Java版本。可以在IDE的设置或项目属性中查找并更改J

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包