Java18(2022.3)

  1. 将 UTF-8 指定为标准 Java API 的默认字符集
  2. 提供支持静态文件的最小 Web 服务器命令行工具jwebserver
  3. 定义了一个全新的 SPI(service-provider interface),用于主要名称和地址的解析
  4. 弃用 Finalization

Java17(2021.9)(LTS版本)

  1. Free Java License
  2. JDK 17 将取代 JDK 11 成为下一个长期支持版本
  3. Spring 6 和 Spring Boot 3需要JDK17
  4. 移除实验性的 AOT 和 JIT 编译器
  5. 恢复始终执行严格模式 (Always-Strict) 的浮点定义
  6. 正式引入密封类sealed class,限制抽象类的实现
  7. 统一日志异步刷新,先将日志写入缓存,然后再异步刷新

虽然JDK17也是一个LTS版本,但是并没有像JDK8和JDK11一样引入比较突出的特性,主要是对前几个版本的整合和完善。

Java16(2021.3)

  1. 允许在 JDK C ++源代码中使用 C ++ 14功能
  2. ZGC性能优化,去掉ZGC线程堆栈处理从安全点到并发阶段
  3. 增加 Unix 域套接字通道
  4. 弹性元空间能力
  5. 提供用于打包独立 Java 应用程序的 jpackage 工具

JDK16相当于是将JDK14、JDK15的一些特性进行了正式引入,如instanceof模式匹配(Pattern matching)、record的引入等最终到JDK16变成了final版本。

Java15(2020.9)

  1. EdDSA 数字签名算法
  2. Sealed Classes(封闭类,预览),通过sealed关键字修饰抽象类限定只允许指定的子类才可以实现或继承抽象类,避免抽象类被滥用。
  3. Hidden Classes(隐藏类)
  4. 移除 Nashorn JavaScript引擎
  5. 改进java.net.DatagramSocket 和 java.net.MulticastSocket底层实现

Java14(2020.3)

  1. instanceof模式匹配,instanceof类型匹配语法简化,可以直接给对象赋值,如if(obj instanceof String str),如果obj是字符串类型则直接赋值给了str变量
  2. 引入Record类型,类似于Lombok 的@Data注解,可以向Lombok一样自动生成构造器、equals、getter等方法;
  3. Switch 表达式-标准化
  4. 改进 NullPointerExceptions提示信息,打印具体哪个方法抛的空指针异常,避免同一行代码多个函数调用时无法判断具体是哪个函数抛异常的困扰,方便异常排查;
  5. 删除 CMS 垃圾回收器

Java13(2019.9)

  1. Switch 表达式扩展(引入 yield 关键字);switch表达式增加yield关键字用于返回结果,作用类似于return,如果没有返回结果则使用break。
  2. 文本块升级 """;引入了文本块,可以使用"""三个双引号表示文本块,文本块内部就不需要使用换行的转义字符。
  3. SocketAPI 重构;(Socket的底层实现优化,引入了NIO)
  4. FileSystems.newFileSystem新方法
  5. 增强 ZGC 释放未使用内存;(ZGC优化,将标记长时间空闲的堆内存空间返还给操作系统,保证堆大小不会小于配置的最小堆内存大小,如果堆最大和最小内存大小设置一样,则不会释放内存还给操作系统。)

重要特性:ZGC优化,释放内存还给操作系统、socket底层实现引入NIO。

Java12(2019.3)

  1. Switch 表达式扩展,可以有返回值
  2. 新增NumberFormat对复杂数字的格式化
  3. 字符串支持transform、indent操作
  4. 新增方法Files.mismatch(Path, Path)
  5. Teeing Collector
  6. 支持unicode 11
  7. Shenandoah GC,新增的GC算法
  8. G1收集器的优化,将GC的垃圾分为强制部分和可选部分,强制部分会被回收,可选部分可能不会被回收,提高GC的效率

重要特性:switch表达式语法扩展、G1收集器优化、新增Shenandoah GC垃圾回收算法。

Java11(2018.9)(LTS版本)

  1. 增加一些符串处理方法
  2. 用于 Lambda 参数的局部变量语法
  3. Http Client重写,支持HTTP/1.1和HTTP/2 ,也支持 websockets
  4. 可运行单一Java源码文件,如:java Test.java
  5. ZGC:可伸缩低延迟垃圾收集器,(ZGC可以看做是G1之上更细粒度的内存管理策略。由于内存的不断分配回收会产生大量的内存碎片空间,因此需要整理策略防止内存空间碎片化,在整理期间需要将对于内存引用的线程逻辑暂停,这个过程被称为"Stop the world"。只有当整理完成后,线程逻辑才可以继续运行。(并行回收))
  6. 支持 TLS 1.3 协议
  7. Flight Recorder(飞行记录器),基于OS、JVM和JDK的事件产生的数据收集框架
  8. 对Stream、Optional、集合API进行增强

重要特性:对于JDK9和JDK10的完善,主要是对于Stream、集合等API的增强、新增ZGC垃圾收集器。

Java10(2018.3)

  1. 局部变量类型推断,(类似JS可以通过var来修饰局部变量,编译之后会推断出值的真实类型)
  2. 不可变集合的改进
  3. 并行全垃圾回收器 G1,来优化G1的延迟
  4. 线程本地握手,(允许在不执行全局VM安全点的情况下执行线程回调,可以停止单个线程,而不需要停止所有线程或不停止线程)
  5. Optional新增orElseThrow()方法
  6. 类数据共享
  7. Unicode 语言标签扩展
  8. 根证书

重要特性:通过var关键字实现局部变量类型推断,使Java语言变成弱类型语言、JVM的G1垃圾回收由单线程改成多线程并行处理,降低G1的停顿时间。

Java9(2017.9)

  1. 模块化
  2. 提供了List.of()、Set.of()、Map.of() 和 Map.ofEntries() 等工厂方法
  3. 接口支持私有方法
  4. Optional 类改进
  5. 多版本兼容Jar包
  6. JShell工具
  7. try-with-resources的改进
  8. Stream API的改进
  9. 设置G1为JVM默认垃圾收集器
  10. 支持http2.0和websocket的API

重要特性:主要是API的优化,如支持HTTP2的Client API、JVM采用G1为默认垃圾收集器。

Java8(2014.3)(LTS版本)

  1. lambada表达式
  2. 函数式接口
  3. 方法引用
  4. 默认方法
  5. Stream API 对元素流进行函数式操作
  6. Optional 解决NullPointerException
  7. Date Time API
  8. 重复注解 @Repeatable
  9. Base64
  10. 使用元空间Metaspace代替持久代(PermGen space)

Java7(2011.7)(LTS版本)

  1. switch 支持String字符串类型
  2. try-with-resources,资源自动关闭
  3. 整数类型能够用二进制来表示
  4. 数字常量支持下划线
  5. 泛型实例化类型自动推断,即”<>”
  6. catch捕获多个异常类型,用(|)分隔开
  7. 全新的NIO2.0 API
  8. Fork/join 并行执行任务的框架

Java6(2006)

  1. java.awt新增Desktop类和SystemTray类
  2. 使用JAXB2来实现对象与XML之间的映射
  3. 轻量级 Http Server API
  4. 插入式注解处理API(lombok使用该特性来实现的)
  5. STAX,处理XML文档的API
  6. Compiler API
  7. 对脚本语言的支持(ruby, groovy, javascript)

Java 5(2004)

  1. 泛型(本质是参数化类型,解决不确定具体对象类型的问题)
  2. 增强的for循环(for-each)
  3. 自动装箱和自动拆箱(包装类型有:Integer,Double,Float,Long,Short,Character和Boolean)
  4. 类型安全的枚举(enum)
  5. 可变长度参数
  6. 静态引入(import static)
  7. 元数据(注解)
  8. 线程并发库(java.util.concurrent)

java1.4(2004)

  1. XML解析器
  2. Java打印服务
  3. Logging API(日志功能)
  4. Java Web Start
  5. JDBC 3.0 API(jdbc高级)
  6. 断言
  7. Preferences API
  8. 链式异常处理
  9. 支持IPV6
  10. 支持正则表达式
  11. 引入Imgae I/O API (图片流);
  12. NIO(高级流)
  13. XSLT转换器

java1.3 (2000)

  1. Timer API(时间)
  2. Java Sound API(声音)
  3. RMI通信协议
  4. jar文件索引
  5. 优化和增强

java1.2 (1998)

  1. J2SE/J2EE/J2ME
  2. EJB
  3. Java IDL(平台对象请求代理体系结构)
  4. 集合框架
  5. JIT(Just In Time)编译器
  6. 数字签名
  7. JFC(Java Foundation Classes), 包括Swing1.0, 拖放和Java2D类库
  8. Java Plug-In(运行插件)
  9. JDBC中引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型
  10. Applet中添加声音支持
  11. 字符串常量做内存映射
  12. 控制授权/访问系统资源的策略工具

java1.1 (1997)

  1. JAR
  2. JDBC
  3. JavaBean
  4. RMI(远程调用)
  5. Inner Class(内部类)
  6. Reflection(反射)

java1.0 (1996 初代版本)

  1. Classic VM(虚拟机)
  2. Applet(java小应用程序)
  3. AWT(java图形设计)

下图是 Oracle 官方给出的 Oracle JDK 支持的时间线。

LTS:是 Long Term Support,Oracle官宣可以免费商用的LTS版本,也就是官方保证会长期支持的版本。

参考链接:

https://blog.oxings.com/article/31.html

https://mp.weixin.qq.com/s/YPJ-sfx04-fOGt4WuPDwIQ

Java/JDK各版本主要特性汇总的更多相关文章

  1. Java JDK 版本的区别

    jdk6和jdk5相比的新特性有: 1.instrumentation 在 Java SE 6 里面,instrumentation 包被赋予了更强大的功能:启动后的 instrument.本地代码 ...

  2. 如何在官网下载java JDK的历史版本

    如何在官网下载java JDK的历史版本 http://jingyan.baidu.com/article/9989c746064d46f648ecfe9a.html 如何在官网下载java JDK的 ...

  3. 问题002:我们要使用的Java是哪个版本的?什么是JVM、JRE、JDK、IDE、API?

    三个版本:1.java SE 标准版 2.java EE企业版 3.Java ME 小型版本 JVM (java virtual machine) java虚拟机 JRE(java runtime e ...

  4. 在CentOS 7/6.5/6.4 中安装Java JDK 8(转载)

    转载在CentOS 7/6.5/6.4 中安装Java JDK 8 首先,在你的服务器上运行一下更新. yum update 然后,在您的系统上搜索,任何版本的已安装的JDK组件. rpm -qa | ...

  5. Linux(Centos)之安装Java JDK及注意事项

    1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下: uname -a 解释:如果有x86_64就是64位的,没有 ...

  6. JDK各个版本的新特性jdk1.5-jdk8

    JDK各个版本的新特性 对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.今天先为大家介绍一 ...

  7. Java JDK配置环境变量

    JDK的配置环境变量. 1.下载JDK,然后安装(点下一步). 2.右键单击  "计算机" ,选择  "属性".   3.单击 "高级系统设置&quo ...

  8. Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/ma ven/cli/Maven/java与javac版本不一致问题

    编译的时候 中出现如下异常: Exception in thread "main" Java.lang.UnsupportedClassVersionError: org/apac ...

  9. java与javac版本不一致问题

    问题描述:    设置了环境变量JAVA_HOME为jdk1.5.0_14的安装目录,并且在PATH变量中加入了%JAVA_HOME%\bin,但在Windows命令行下,执行java -versio ...

  10. 观察者模式--java jdk中提供的支持

    一.简介 观察者设计模式有如下四个角色 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象 ...

随机推荐

  1. MES会成为象ERP一样的标准产品吗?

    首先ERP不是完全的标准产品,只是标准化程度高低的问题,即使是头部ERP品牌产品也一样,包括SAP对每个企业都有客制,并且随着企业的成长变化也会跟着变,所以SAP就有"Rise With S ...

  2. POJ3311 Hie with the Pie(状压DP,Tsp)

    本题是经典的Tsp问题的变形,Tsp问题就是要求从起点出发经过每个节点一次再回到起点的距离最小值,本题的区别就是可以经过一个节点不止一次,那么先预处理出任意两点之间的最短距离就行了,因为再多走只会浪费 ...

  3. ARC144 D - AND OR Equation

    ARC144 D - AND OR Equation Solution 首先可以猜测和答案仅和每一个二进制位以及\(f(0)\)有关系,不妨把按位\(\operatorname{AND}\)和按位\( ...

  4. MPI实现并行奇偶排序

    奇偶排序 odd-even-sort, using MPI 代码在 https://github.com/thkkk/odd-even-sort 使用 MPI 实现奇偶排序算法, 并且 MPI 进程 ...

  5. Linux基础_3_文件/文件夹权限管理

    注:权限遮罩码: 控制用户创建文件和文件夹的默认安全设置,文件默认权限为666-umask的值,文件夹默认权限为777-umask的值. root默认0022,普通用户默认0002. 文件的默认权限不 ...

  6. python深拷贝、浅拷贝

      .copy() 浅拷贝 如上图 定义列表A指向一个元素,列表A里面嵌套两层列表分布指向两个元素,定义列表B,列表B=A,列表C浅拷贝列表A 从图上可以看出,列表A和列表B指向的是同一个列表元素,而 ...

  7. element-ui v-table 复选框默认选中

    <el-table ref="refTable" :data="list" v-loading="listLoading" eleme ...

  8. 题解 P6745 『MdOI R3』Number

    前言 不知道是不是正解但是觉得挺好理解. 科学计数法 将一个数表示为\(a\times 10^x\) 的形式.其中\(a\leq10\),\(x\) 为整数. \(\sf Solution\) 其实这 ...

  9. OpenMP 教程(一) 深入人剖析 OpenMP reduction 子句

    OpenMP 教程(一) 深入人剖析 OpenMP reduction 子句 前言 在前面的教程OpenMP入门当中我们简要介绍了 OpenMP 的一些基础的使用方法,在本篇文章当中我们将从一些基础的 ...

  10. Kubeadm搭建kubernetes集群

    Kubeadm搭建kubernetes集群 环境说明 | 角色 | ip | 操作系统 |组件 | | – | – | – | | master | 192.168.203.100 |centos8 ...