Java版本演化

JDK Version 1.0(Oak橡树,1996-01-23 )
–纯解释运行,使用外挂JIT

JDK Version 1.1(Coffce咖啡,1997-02-19)
–JDBC(Java DataBase Connectivity)
–支持内部类
–RMI(Remote Method Invocation)
–反射
–Java Bean

JDK Version 1.2 (Playground操场,1998-12-08)
–集合框架
–JIT(Just In Time)编译器
–对打包的Java文件进行数字签名
–JFC(Java Foundation Classes), 包括Swing 1.0, 拖放和Java2D类库
–Java插件
–JDBC中引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型
–Applet中添加声音支持

JDK Version 1.3 (Kestrel红隼,2000-05-08)
–Java Sound API
–jar文件索引
–对Java的各个方面都做了大量优化和增强

JDK Version 1.4 (Merlin隼,2002-02-13)
–XML处理
–Java打印服务
–Logging API
–Java Web Start
–JDBC 3.0 API
–断言
–Preferences API
–链式异常处理
–支持IPV6
–支持正则表达式
–引入Imgae I/O API

JDK 5(Tiger老虎,2004-09-30)
–泛型
–增强循环,可以使用迭代方式
–自动装箱与自动拆箱
–类型安全的枚举
–可变参数
–静态引入
–元数据(注解)
–Instrumentation

JDK 6 (Mustang野马,2006-12-11)
–支持脚本语言
–JDBC 4.0API
–Java Compiler API
–可插拔注解
–增加对Native PKI(Public Key Infrastructure), Java GSS(Generic Security Service),Kerberos和LDAP(Lightweight Directory Access Protocol)的支持
–继承Web Services

JDK 7 (Dolphin海豚,2011-07-28)
–switch语句块中允许以字符串作为分支条件,支持字符串、枚举类型和数值型数据
–支持动态语言,包括 InvokeDynamic 指令和 JSR 292 等
–支持try-with-resources(在一个语句块中捕获多种异常),在一个语句块中捕获多种异常
–引入Java NIO.2开发包,支持异步 I/O 操作和文件系统操作
–数值类型可以用二进制字符串表示,且可以在字符串表示中添加下划线,即数字字面量可以使用下划线来分隔数字
–钻石型语法(在创建泛型对象时应用类型推断)
–null值得自动处理
–新增了 Fork/Join 框架,用于并行计算

JDK 8(开发代号取消,2014-03-18)
计划JDK8的截止时间为2019年1月份,到期后Oracle将不再提供补丁及其它的更新服务。官网称可能会更久)
–Lambda 表达式:用于函数式编程,允许把函数作为一个方法的参数(函数作为参数传递进方法中
–方法引用:方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用, 可以使语言的构造更紧凑简洁,减少冗余代码
–默认方法:默认方法就是一个在接口里面有了一个实现的方法,包含接口默认方法和静态方法
–新工具:新的编译工具,如Nashorn引擎jjs、类依赖分析器jdeps,其中Nashorn JavaScript 引擎,替代了 Rhino 引擎, 它允许我们在JVM上运行特定的javascript应用
–Stream API:java.util.stream,把真正的函数式编程风格引入到Java中,用于处理集合和数组等数据流
–Date Time API:time取代了旧的 Date 和 Calendar 类;加强对日期与时间的处理
–Optional 类:Optional 类成为 Java 8 类库的一部分,用来解决空指针异常

JDK 9(2017-09-22,计划JDK9的截止时间是2018年3月)
–模块系统:Java 9 引入了模块系统(即Jigsaw 项目),模块是一个包的容器,提高了代码可重用性和安全性
–REPL (JShell):交互式编程环境,交互式命令行工具,用于快速测试和调试代码
–HTTP2客户端:HTTP/2标准是HTTP协议的新版本,新 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性
–改进的Javadoc:Javadoc支持在API文档中的进行搜索,另外Javadoc 的输出符合兼容HTML5标准
–多版本兼容JAR包:多版本兼容的JAR文件,使得在不同版本的Java中使用相同的JAR文件更加容易
–集合工厂方法:List,Set 和 Map 接口中,新的静态工厂方法可以创建这些集合的不可变实例
–私有接口方法:在接口中使用private私有方法,即可以使用 private 访问修饰符在接口中编写私有方法
–改进的进程 API:控制和管理操作系统进程,引进java.lang.ProcessHandle及其嵌套接口Info来让开发者避免时常因为要获取一个 本地进程的PID而不得不使用本地代码的窘境
–改进的 Stream API:添加了一些便利的方法,使流处理更容易,并使用收集器编写复杂的查询
–改进的try-with-resources:如果已经有一个资源是final或等效final变量,则可以在 try-with-resources语句中使用,而无需在 try-with-resources语句中声明一个新变量
–改进的弃用注解 @Deprecated:可以标记 Java API 状态,可以表示被标记的 API 将会被移除,或者已经破坏
–改进钻石操作符(Diamond Operator) :匿名类可以使用钻石操作符(Diamond Operator)
–改进 Optional 类:java.util.Optional 添加了新的有用方法,Optional可直接转为 stream
–多分辨率图像 API:定义多分辨率图像API,开发者可以很容易的操作和展示不同分辨率的图像了
–改进的CompletableFuture API:CompletableFuture 类的异步机制可以在ProcessHandle.onExit 方法退出时执行操作
–轻量级的 JSON API:内置了一个轻量级的JSON API
–响应式流(Reactive Streams) API: 引入了新的响应式流 API 来支持响应式编程
–改进的 GC,包括G1垃圾回收器

JDK 10(2018-03-20,计划JDK10的截止版本是2018年9月)
–局部变量类型推断,可以使用var关键字代替具体类型
–改进的ThreadLocalRandom类,用于生成伪随机数
–安全地存储公私钥对,提高了安全性
–将原来用 Mercurial 管理的众多 JDK 仓库代码,合并到一个仓库中,简化开发和管理过程
–统一的垃圾回收接口
–G垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟
–应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间
–ThreadLocal 握手交互:在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停
–移除 JDK 中附带的 javah 工具。可以使用 javac -h 代替。
–使用附加的 Unicode 语言标记扩展。
–将堆内存占用分配给用户指定的备用内存设备,使用Graal基于Java的编译器可预先把 Java 代码编译成本地代码来提升效能
–在OpenJDK中提供一组默认的根证书颁发机构证书,开源目前Oracle提供的的Java SE 的根证书,OpenJDK使用起来更方便
–基于时间定义的发布版本,即上述提到的发布周期。版本号为$FEATURE.$INTERIM.$UPDATE.$PATCH,分别是大版本,中间版本,升级包和补丁版本
–废弃了一些不安全的加密算法

JDK 11(2018-09-25,LTS (Long Term Support) 版本)
–HTTP/2 标准化,成为默认的 HTTP客户端实现
–改进的字符串API,包括 strip() 和 repeat() 等方法
–新增了本地变量语法,用于声明局部变量,局部变量的语法λ参数
–废弃了一些废弃的模块和类,消除Java EE和CORBA模块
–Nest-Based访问控制
–动态类文件常量
–改善Aarch64 intrinsic
–无操作垃圾收集器
–Curve25519和Curve448关键协议
–Unicode 10
–飞行记录器
–ChaCha20和Poly1305加密算法
–发射一列纵队源代码程序
–低开销堆分析
–传输层安全性(Transport Layer Security,TLS)1.3
–动作:一个可伸缩的低延迟垃圾收集器 (实验)
–反对Nashorn JavaScript引擎
–反对Pack200工具和API

JDK 12(2019-03-19)
–新增了一些 String 方法,包括 transform() 和 indent() 等
–新增Shenandoah垃圾回收器,用于优化小堆内存分配的应用程序,通过在 Java 线程运行的同时疏散工作来减少停顿时间
–新增一套微基准测试,使开发者能够基于现有的Java Microbenchmark Harness(JMH)轻松测试JDK 的性能,并创建新的基准测试
–对switch语句进行扩展,使其可以用作语句或表达式,简化日常代码,支持Lambda 表达式
–引入API 来对关键类文件 (key class-file) 和运行时工件的名义描述(nominal descriptions)进行建模
–删除与 arm64 端口相关的所有源码,保留 32 位 ARM 移植和 64 位 aarch64 移植
–默认生成类数据共享(CDS)存档
–当G1垃圾回收器的回收超过暂停目标,则能中止垃圾回收过程
–改进G1垃圾回收器,以便在空闲时自动将 Java 堆内存返回给操作系统

JDK 13(2019-09-17)
–Dynamic CDS Archives:对appCDS进行性了扩展,允许在Java应用执行结束时动态归档类,提高了AppCDS的可用性
–ZGC: Uncommit Unused Memory,对ZGC进行了增强,支持大内存、低延迟应用程序
–Reimplement the Legacy Socket API:使用新的实现来代替java.net.socket和java.net.serversocket API的底层实现,新版本中旧的API还未删除,可以通过配置系统属性"jdk.net.useplansocketimpl"来使用他们,但默认实现是最新版本的
–Switch Expressions (Preview):扩展开关,以便它可以用作语句或表达式,支持 Yield 语句,并且两种形式都可以使用传统的情况…:标签(带有贯穿线)或新案例…->标签(没有掉进去),还有一个新的语句,用于从开关表达式中产生值。这些变化将简化日常编码,并为在交换机中使用模式匹配做好准备
–Text Blocks (Preview):向Java语言添加文本块,文本块是一个多行字符串文本,它避免了大多数转义序列的需要,自动以可预测的方式格式化字符串,并在需要时让开发人员控制格式

JDK 14(2020-03-17)
–新增了Records类,用于定义不可变数据类
–改进的 NullPointerException 错误信息
–新增instanceof 的模式匹配(预览)
–打包工具(孵化)
–G1 的NUMA 内存分配优化
–JFR事件流
–非原子性的字节缓冲区映射
–非常有帮助的空指针异常
–Records(预览)
–Switch表达式(标准),持Pattern匹配
–弃用 Solaris 和S PARC 端口
–移除 CMS(Concurrent Mark Sweep)垃圾收集器
–macOS 系统上的 ZGC
–Windows 系统上的 ZGC
–弃用 ParallelScavenge + SerialOld GC 组合
–移除Pack200 Tools和API
–文本块(第二个预览版)
–外部存储器API(孵化)

JDK15(2020-09-15)
–蒙哥马利与扭曲爱德华曲线签名算法
–Sealed Classes (Preview):密封类(预览),用于限制继承和实现
–Hidden Classes 隐藏类
–移除nasorn JavaScript引擎
–重新实现旧的DatagramSocket API
–禁用和弃用偏置锁
–模式匹配的instanceof(第二次预览)
–ZGC:一个可扩展的低延迟垃圾收集器,改进的 GC,包括 ZGC 和 Shenandoah
–新增了 Text Blocks,用于处理多行字符串
–Shenandoah: 低暂停时间垃圾收集器
–移除Solaris和SPARC端口
–优化外部内存访问API(第二个孵化器)
–记录(第二次预览)
–移除RMI激活

JDK 16(2021-03-16)
–新增了 Vector API,用于并行计算
–启用C++ 14种语言特性
–从Mercurial迁移到Git
–迁移到GitHub
–ZGC:并发线程堆栈处理,改进的垃圾回收器,包括 ZGC 和 Shenandoah
–Unix-Domain 套接字通道
–Alpine Linux端口
–弹性Metaspace
–Windows / AArch64端口
–国外连接器API(孵化器)
–对基于值的类的警告
–包装工具
–优化外存储器访问API(第三孵化器)
–instanceof匹配模式
–新增了 Records 的扩展,包括 sealed 和 non-sealed 标注
–默认情况下对JDK内部进行强封装
–优化Sealed Classes (Second Preview):密封类(第二次预览)

JDK 17(2021-09-14,基于 OpenJDK 11 的长期支持(LTS)版本)
–服务提供者接口(SPAPI),取代了旧的类路径扩展机制
–基于 CDS 归档的应用程序快照(Application Class-Data Sharing)
–改进的ZGC和Shenandoah垃圾回收器,包括堆外内存分配和统一MappedByteBuffer等改进
–随机生成器增强、G1 GC的垃圾回收暂停时间预测等其他改进
–恢复总是严格的浮点语义
–增强型伪随机数发生器
–新的 macOS 渲染管道
–将JDK移植到macOS/AArch64
–删除 Applet API
–强封装 JDK 内部构件
–模式匹配开关(预览)
–删除RMI 激活
–封闭类:sealed class 密封类允许描述哪个类或接口可以扩展或实现这个类或接口。简而言之,可以限制谁可以使用这个类或接口。假设我们有一个学生抽象类,如果我们将其设为一个密封类,并且只允许ScienceStudent和CommerceSudent扩展该类,那么只有这些类才能扩展该Student,而其他类如果试图扩展该类,则会出错。
public abstract sealed class Student permits ScienceStudent , CommerceStudent { … }
这提供了一种比访问修饰符更具声明性的方法来限制超类的使用。
–删除实验 AOT 和 JIT 编译器
–请求删除安全管理器
–外部函数与内存 API (孵化器)
–矢量 API (第二孵化器)
–特定于上下文的反序列化过滤器

JDK 18(2022-03-22)
–默认UTF-8
–简单的网络服务器
–Code Snippets in Java API Documentation:代码片段
–重构Reflection
–计算向量的 API
–互联网地址解析 SPI
–让 JAVA 程序能够与其他非 JAVA 运行时的程序或数据进行交互
–开关模式匹配
–弃用finalize

JDK 19(2022-09-20)
–Virtual Threads (Preview) 虚拟线程:类似 Go 语言的协程,是轻量级线程,可显著减少编写、维护和观察高吞吐量并发应用程序的工作量。其目标包括以简单的请求线程样式编写的服务器应用程序,使得能够接近最佳的硬件利用率,现有代码能够以最小的更改采用虚拟线程,并启用故障排除、调试和使用现有JDK工具分析虚拟线程。
–记录模式
–Linux/RISC-V Port Linux/RISC-V 移植
–外部函数和内存 API
–向量 API
–Switch 模式匹配
–结构化并发

JDK 20(2023-03-21)
–作用域值 Scoped Value(孵化器)
–优化Record 模式(第二预览版)
–优化switch 模式匹配(第四预览版)
–优化外部函数内存 API(第2版)
–优化虚拟线程(第二个预览版)
–优化结构化并发(第二个孵化器版本)
–优化Vector API(第五个孵化器版本)

JDK 21(2023-09-19,LTS 版本)
–字符串模板
–序列集合
–分代式 ZGC
–记录模式
–switch模式匹配
–优化外部函数和内存API (第三次预览)
–无名模式和变量的预览
–虚拟线程
–无名类和实例 Main方法
–作用域值
–优化向量API (第六个孵化器)
–弃用 Win 32 x86端口
–禁止动态加载代理
–密钥封装机制API
–优化结构化并发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值