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. docker -v 和Dockerfile 中VOLUME 区别

    在学习Dockerfile的过程中有个VOLUME命令,很多教程或书中说的是用来定义匿名卷的,其作用如下: 容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文 ...

  2. MongoDB 的用户和角色权限

    副本和分片集群的安全设置参考这个:高级:https://files.cnblogs.com/files/sanduzxcvbnm/mongodb_advance.pdf 默认情况下,MongoDB实例 ...

  3. Spring Boot 项目转容器化 K8S 部署实用经验分享

    转载自:https://cloud.tencent.com/developer/article/1477003 我们知道 Kubernetes 是 Google 开源的容器集群管理系统,它构建在目前流 ...

  4. PAT (Basic Level) Practice 1010 一元多项式求导 分数 25

    设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为nxn−1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数).数字间以空格分隔. 输出格式: ...

  5. 云原生下基于K8S声明式GitOps持续部署工具ArgoCD实战-上

    @ 目录 概述 定义 工作原理 主要组件 核心概念 环境准备 概述 安装Kubekey 创建K8S 安装K9S OpenLB 安装ArgoCD 安装 ArgoCD CLI 从Git库中创建一个应用程序 ...

  6. 浅谈 Golang 插件机制

    我们知道类似 Java 等半编译半解释型语言编译生成的都是类似中间态的字节码,所以在 Java 里面我们想要实现程序工作的动态扩展,可以通过 Java 的字节码编辑技术([[动态代理#ASM]]/[[ ...

  7. python解释器下载及注意事项

    python解释器 python解释器下载 python解释器下载官网:https://www.python.org/downloads/windows/ 目前比较常用的python版本有python ...

  8. HDU3507 print article (斜率优化DP)

    状态表示:dp[i]表示打印前i个单词的最小成本:s[i]维护前缀和. 状态转移:dp[i]=min(dp[j]+(s[i]-s[j])2)+m , 0<=j<i. 换成y=kx+b的形式 ...

  9. GitLab CI/CD 自动化部署入门

    前言:因为找了B站内推,测试开发,正好知道内部使用GitLab做自动化测试,所以简单学了一下,有错误的地方请指正. 入门 初始化 cp: 无法获取'/root/node-v12.9.0-linux-x ...

  10. 动词时态=>4.将来时态和过去将来时态构成详解

    将来时态构成详解 使用助动词will构成的将来时态 一般将来时态 与一般过去时态相反(时间上) 如果说 一般过去,我们将其当做一张照片 从这张照片当中,我们无法得知 动作什么时候开始 什么时候结束 只 ...