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中提供的支持
一.简介 观察者设计模式有如下四个角色 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象 ...
随机推荐
- Elastic App Search 入门
官方文档地址:https://swiftype.com/documentation/app-search/getting-started Elastic App Search 架构图: 它的特点是帮助 ...
- Fluent插件管理
官方文档地址:https://docs.fluentd.org/deployment/plugin-management 命令fluent-gem是Fluentd用来安装插件的,它是gem命令的包装器 ...
- 搞透 IOC,Spring IOC 看这篇就够了!
IOC与AOP属于Spring的核心内容,如果想掌握好Spring你肯定需要对IOC有足够的了解 @mikechen IOC的定义 IOC是Inversion of Control的缩写,多数书籍翻译 ...
- NSIS自定义目录选择页面制作之安装…
在nsis制作自定义界面中,目录选择页面个人感觉最为繁琐,因为该界面不仅涉及到界面控件的创建,还要涉及到控件消息传递和状态改变时的回调函数通告. 迅雷界面为例: 其中安装目录中的8盘符,在本机中并不存 ...
- 洛谷P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles (DP入门)
考虑逆推就行了. 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 int a[1010][1010]; 5 int ...
- 华为云ubunbu部署.NetCore3.1项目(DDD商城)
提前项目打包发布,文件传输工具Filezilla,注意是选择sftp协议,将publish文件传到/home文件夹下 第一步 .NetCoreSDK安装 微软官方的文档https://docs.mi ...
- 通过openlayers加载dwg格式的CAD图并与互联网地图叠加
Openlayers介绍 Openlayers是一个基于Javacript开发,免费.开源的前端地图开发库,使用它,可以很容易的开发出WebGIS系统.目前Openlayers支持地图瓦片.矢量数 ...
- Linux实战笔记_CentOS7_yum相关配置
配置yum源优先级 配置优先级 yum -y install yum-plugin-priorities.noarch vi /etc/yum.repos.d/localISO.repo priori ...
- Linux基础_7_文本显示
注:实质是针对标准输出文本的各种骚操作! 简单查看 注:初略加工后进行显示. cat -n 文件名 #查看文件内容并显示行号 tac 文件名 #逆序查看 more 文件名 less 文件名 #按?搜索 ...
- 44.drf缓存
DRF原有缓存 Django缓存.配置:https://www.cnblogs.com/Mickey-7/p/15792083.html Django为基于类的视图提供了一个 method_dec ...