Java/JDK各版本主要特性汇总
- Java18(2022.3)
- Java17(2021.9)(LTS版本)
- Java16(2021.3)
- Java15(2020.9)
- Java14(2020.3)
- Java13(2019.9)
- Java12(2019.3)
- Java11(2018.9)(LTS版本)
- Java10(2018.3)
- Java9(2017.9)
- Java8(2014.3)(LTS版本)
- Java7(2011.7)(LTS版本)
- Java6(2006)
- Java 5(2004)
- java1.4(2004)
- java1.3 (2000)
- java1.2 (1998)
- java1.1 (1997)
- java1.0 (1996 初代版本)
Java18(2022.3)
- 将 UTF-8 指定为标准 Java API 的默认字符集
- 提供支持静态文件的最小 Web 服务器命令行工具jwebserver
- 定义了一个全新的 SPI(service-provider interface),用于主要名称和地址的解析
- 弃用 Finalization
Java17(2021.9)(LTS版本)
- Free Java License
- JDK 17 将取代 JDK 11 成为下一个长期支持版本
- Spring 6 和 Spring Boot 3需要JDK17
- 移除实验性的 AOT 和 JIT 编译器
- 恢复始终执行严格模式 (Always-Strict) 的浮点定义
- 正式引入密封类sealed class,限制抽象类的实现
- 统一日志异步刷新,先将日志写入缓存,然后再异步刷新
虽然JDK17也是一个LTS版本,但是并没有像JDK8和JDK11一样引入比较突出的特性,主要是对前几个版本的整合和完善。
Java16(2021.3)
- 允许在 JDK C ++源代码中使用 C ++ 14功能
- ZGC性能优化,去掉ZGC线程堆栈处理从安全点到并发阶段
- 增加 Unix 域套接字通道
- 弹性元空间能力
- 提供用于打包独立 Java 应用程序的 jpackage 工具
JDK16相当于是将JDK14、JDK15的一些特性进行了正式引入,如instanceof模式匹配(Pattern matching)、record的引入等最终到JDK16变成了final版本。
Java15(2020.9)
- EdDSA 数字签名算法
- Sealed Classes(封闭类,预览),通过sealed关键字修饰抽象类限定只允许指定的子类才可以实现或继承抽象类,避免抽象类被滥用。
- Hidden Classes(隐藏类)
- 移除 Nashorn JavaScript引擎
- 改进java.net.DatagramSocket 和 java.net.MulticastSocket底层实现
Java14(2020.3)
- instanceof模式匹配,instanceof类型匹配语法简化,可以直接给对象赋值,如if(obj instanceof String str),如果obj是字符串类型则直接赋值给了str变量
- 引入Record类型,类似于Lombok 的@Data注解,可以向Lombok一样自动生成构造器、equals、getter等方法;
- Switch 表达式-标准化
- 改进 NullPointerExceptions提示信息,打印具体哪个方法抛的空指针异常,避免同一行代码多个函数调用时无法判断具体是哪个函数抛异常的困扰,方便异常排查;
- 删除 CMS 垃圾回收器
Java13(2019.9)
- Switch 表达式扩展(引入 yield 关键字);switch表达式增加yield关键字用于返回结果,作用类似于return,如果没有返回结果则使用break。
- 文本块升级 """;引入了文本块,可以使用"""三个双引号表示文本块,文本块内部就不需要使用换行的转义字符。
- SocketAPI 重构;(Socket的底层实现优化,引入了NIO)
- FileSystems.newFileSystem新方法
- 增强 ZGC 释放未使用内存;(ZGC优化,将标记长时间空闲的堆内存空间返还给操作系统,保证堆大小不会小于配置的最小堆内存大小,如果堆最大和最小内存大小设置一样,则不会释放内存还给操作系统。)
重要特性:ZGC优化,释放内存还给操作系统、socket底层实现引入NIO。
Java12(2019.3)
- Switch 表达式扩展,可以有返回值
- 新增NumberFormat对复杂数字的格式化
- 字符串支持transform、indent操作
- 新增方法Files.mismatch(Path, Path)
- Teeing Collector
- 支持unicode 11
- Shenandoah GC,新增的GC算法
- G1收集器的优化,将GC的垃圾分为强制部分和可选部分,强制部分会被回收,可选部分可能不会被回收,提高GC的效率
重要特性:switch表达式语法扩展、G1收集器优化、新增Shenandoah GC垃圾回收算法。
Java11(2018.9)(LTS版本)
- 增加一些符串处理方法
- 用于 Lambda 参数的局部变量语法
- Http Client重写,支持HTTP/1.1和HTTP/2 ,也支持 websockets
- 可运行单一Java源码文件,如:java Test.java
- ZGC:可伸缩低延迟垃圾收集器,(ZGC可以看做是G1之上更细粒度的内存管理策略。由于内存的不断分配回收会产生大量的内存碎片空间,因此需要整理策略防止内存空间碎片化,在整理期间需要将对于内存引用的线程逻辑暂停,这个过程被称为"Stop the world"。只有当整理完成后,线程逻辑才可以继续运行。(并行回收))
- 支持 TLS 1.3 协议
- Flight Recorder(飞行记录器),基于OS、JVM和JDK的事件产生的数据收集框架
- 对Stream、Optional、集合API进行增强
重要特性:对于JDK9和JDK10的完善,主要是对于Stream、集合等API的增强、新增ZGC垃圾收集器。
Java10(2018.3)
- 局部变量类型推断,(类似JS可以通过var来修饰局部变量,编译之后会推断出值的真实类型)
- 不可变集合的改进
- 并行全垃圾回收器 G1,来优化G1的延迟
- 线程本地握手,(允许在不执行全局VM安全点的情况下执行线程回调,可以停止单个线程,而不需要停止所有线程或不停止线程)
- Optional新增orElseThrow()方法
- 类数据共享
- Unicode 语言标签扩展
- 根证书
重要特性:通过var关键字实现局部变量类型推断,使Java语言变成弱类型语言、JVM的G1垃圾回收由单线程改成多线程并行处理,降低G1的停顿时间。
Java9(2017.9)
- 模块化
- 提供了List.of()、Set.of()、Map.of() 和 Map.ofEntries() 等工厂方法
- 接口支持私有方法
- Optional 类改进
- 多版本兼容Jar包
- JShell工具
- try-with-resources的改进
- Stream API的改进
- 设置G1为JVM默认垃圾收集器
- 支持http2.0和websocket的API
重要特性:主要是API的优化,如支持HTTP2的Client API、JVM采用G1为默认垃圾收集器。
Java8(2014.3)(LTS版本)
- lambada表达式
- 函数式接口
- 方法引用
- 默认方法
- Stream API 对元素流进行函数式操作
- Optional 解决NullPointerException
- Date Time API
- 重复注解 @Repeatable
- Base64
- 使用元空间Metaspace代替持久代(PermGen space)
Java7(2011.7)(LTS版本)
- switch 支持String字符串类型
- try-with-resources,资源自动关闭
- 整数类型能够用二进制来表示
- 数字常量支持下划线
- 泛型实例化类型自动推断,即”<>”
- catch捕获多个异常类型,用(|)分隔开
- 全新的NIO2.0 API
- Fork/join 并行执行任务的框架
Java6(2006)
- java.awt新增Desktop类和SystemTray类
- 使用JAXB2来实现对象与XML之间的映射
- 轻量级 Http Server API
- 插入式注解处理API(lombok使用该特性来实现的)
- STAX,处理XML文档的API
- Compiler API
- 对脚本语言的支持(ruby, groovy, javascript)
Java 5(2004)
- 泛型(本质是参数化类型,解决不确定具体对象类型的问题)
- 增强的for循环(for-each)
- 自动装箱和自动拆箱(包装类型有:Integer,Double,Float,Long,Short,Character和Boolean)
- 类型安全的枚举(enum)
- 可变长度参数
- 静态引入(import static)
- 元数据(注解)
- 线程并发库(java.util.concurrent)
java1.4(2004)
- XML解析器
- Java打印服务
- Logging API(日志功能)
- Java Web Start
- JDBC 3.0 API(jdbc高级)
- 断言
- Preferences API
- 链式异常处理
- 支持IPV6
- 支持正则表达式
- 引入Imgae I/O API (图片流);
- NIO(高级流)
- XSLT转换器
java1.3 (2000)
- Timer API(时间)
- Java Sound API(声音)
- RMI通信协议
- jar文件索引
- 优化和增强
java1.2 (1998)
- J2SE/J2EE/J2ME
- EJB
- Java IDL(平台对象请求代理体系结构)
- 集合框架
- JIT(Just In Time)编译器
- 数字签名
- JFC(Java Foundation Classes), 包括Swing1.0, 拖放和Java2D类库
- Java Plug-In(运行插件)
- JDBC中引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型
- Applet中添加声音支持
- 字符串常量做内存映射
- 控制授权/访问系统资源的策略工具
java1.1 (1997)
- JAR
- JDBC
- JavaBean
- RMI(远程调用)
- Inner Class(内部类)
- Reflection(反射)
java1.0 (1996 初代版本)
- Classic VM(虚拟机)
- Applet(java小应用程序)
- 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各版本主要特性汇总的更多相关文章
- Java JDK 版本的区别
jdk6和jdk5相比的新特性有: 1.instrumentation 在 Java SE 6 里面,instrumentation 包被赋予了更强大的功能:启动后的 instrument.本地代码 ...
- 如何在官网下载java JDK的历史版本
如何在官网下载java JDK的历史版本 http://jingyan.baidu.com/article/9989c746064d46f648ecfe9a.html 如何在官网下载java JDK的 ...
- 问题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 ...
- 在CentOS 7/6.5/6.4 中安装Java JDK 8(转载)
转载在CentOS 7/6.5/6.4 中安装Java JDK 8 首先,在你的服务器上运行一下更新. yum update 然后,在您的系统上搜索,任何版本的已安装的JDK组件. rpm -qa | ...
- Linux(Centos)之安装Java JDK及注意事项
1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下: uname -a 解释:如果有x86_64就是64位的,没有 ...
- JDK各个版本的新特性jdk1.5-jdk8
JDK各个版本的新特性 对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.今天先为大家介绍一 ...
- Java JDK配置环境变量
JDK的配置环境变量. 1.下载JDK,然后安装(点下一步). 2.右键单击 "计算机" ,选择 "属性". 3.单击 "高级系统设置&quo ...
- Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/ma ven/cli/Maven/java与javac版本不一致问题
编译的时候 中出现如下异常: Exception in thread "main" Java.lang.UnsupportedClassVersionError: org/apac ...
- java与javac版本不一致问题
问题描述: 设置了环境变量JAVA_HOME为jdk1.5.0_14的安装目录,并且在PATH变量中加入了%JAVA_HOME%\bin,但在Windows命令行下,执行java -versio ...
- 观察者模式--java jdk中提供的支持
一.简介 观察者设计模式有如下四个角色 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象 ...
随机推荐
- logstash处理字段样例
- 如何从Django项目中删除或隐藏应用
1.项目的settings.py文件 INSTALLED_APPS中删除或者注释掉,这是针对数据库这一块儿的 2.项目的urls.py文件 删除或这注释掉应用的路径导入 urlpatterns中删除或 ...
- python 代码执行顺序
Python代码在执行过程中,遵循下面的基本原则: 普通语句,直接执行: 碰到函数,将函数体载入内存,并不直接执行 碰到类,执行类内部的普通语句,但是类的方法只载入,不执行 碰到if.for等控制语句 ...
- CentOS7配置nodejs环境
# 安装 wget https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz tar xf node-v12.18.3-linux ...
- 企业使用erp系统的好处及解决了什么问题?
不是所有的企业使用ERP都能带来好处的,尤其是对于一些小微企业,带来的可能是灾难,而实施不适用的系统同样也会带来意想不到的后果,所以在ERP的使用方面得根据自己企业实际做决定.不同规模的企业选用不同的 ...
- 关于vmware虚拟机的ova/ovf转换成aws上的AMI镜像
很多时候,我们会有这样的需求,需要将DC中vmware虚拟化的服务器,迁移到aws上,我们就得先将vmware虚拟机导出,然后转换 关于vmvare虚拟的导出备份,一般有ova(Open Virtua ...
- 个人音乐博客 h5、css和js等
浅说一下吧 这个小项目由h5和css还有js和jq写的 主题内容为个人音乐 博客等 首页一级导航栏 以及侧边栏 整合部分图标(侧边栏未添加收起操作 时间原因 会的朋友们可以自行添加一个动画就可以 在m ...
- 关于 Vue 中 h() 函数的一些东西
最近在项目上需要一个信息弹窗,来显示信息.一开始只让它弹出了文字,而且只有一条信息.而给我的需求是多条文字和图片,而后我使用了element ui中的 Notification 通知组件来显示.当然, ...
- C# 语法分析器(二)LR(0) 语法分析
系列导航 (一)语法分析介绍 (二)LR(0) 语法分析 (三)LALR 语法分析 (四)二义性文法 (五)错误恢复 (六)构造语法分析器 首先,需要介绍下 LALR 语法分析的基础:LR(0) 语法 ...
- <一>类,对象,this指针
C++ 类:实体的抽象类型 实体(属性,行为) ->ADT(abstract data type) 类(属性->成员变量,行为->成员方法) OOP语言4大特征 抽象 封装/隐藏(通 ...