参考文献

JRE Version

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
58 = Java 14
59 = Java 15
60 = Java 16
61 = Java 17
62 = Java 18
63 = Java 19
64 = Java 20
65 = Java 21

JDK各版本特性汇总(JDK1.0~JDK18)

JDK版本 发布时间 代号 备注
1 1996年1月23日 Oak(橡树) 初代版本,伟大的一个里程碑,但是是纯解释运行,使用JIT,性能比较差,速度慢
1.1 1997年2月19日 Sparkler(宝石) JDBC、支持内部类、RMI、反射等等
1.2 1998年12月8日 Playground(操场) 集合框架、JIT等等
1.3 2000年5月8日 Kestrel(红隼) 对Java的各个方面都做了大量优化和增强
1.4 2004年2月6日 Merlin(隼) XML处理、支持IPV6、正则表达式,引入nio和CMS垃圾回收器
5 2004年9月30日 Tiger(老虎) 泛型、增强for语句、自动拆装箱、可变参数、静态导入、注解
6 2006年12月11日 Mustang(野马) 支持脚本语言、JDBC4.0
7 2011年7月28日 Dolphin(海豚) switch支持String类型、泛型推断、nio 2.0开发包、数值类型可以用二进制字符串表示
8 2014年3月18日 Spider(蜘蛛) Lambda 表达式、接口默认方法、Stream API、新的日期API、Nashorn引擎 jjs,引入G1垃圾回收器
9 2017年9月22日 Modularity (模块化) 模块系统、HTTP 2 客户端、多版本兼容 JAR 包、私有接口方法、改进Stream API、响应式流(Reactive Streams) API
10 2018年3月21日 引入关键字 var 局部变量类型推断、统一的垃圾回收接口
11 2018年9月25日 HTTP客户端(标准)、无操作垃圾收集器,支持ZGC垃圾回收器,首个LTS版本
12 2019年3月19日 新增一个名为 Shenandoah 的垃圾回收器、扩展switch语句的功能、改进 G1 垃圾回收器
13 2019年9月17日 改进了CDS内存共享,ZGC归还系统内存,SocketAPI和switch语句以及文本块表示
14 继续对ZGC、G1改进,标记 ParallelScavenge + SerialOld组合为过时的 ,移除CMS垃圾回收器

JDK 1.0

  1. 基本的面向对象特性(类、继承、多态等)
  2. 异常处理机制
  3. 内部类
  4. 基本的 I/O 和网络支持
  5. AWT(抽象窗口工具包)
  6. Applet
  7. 基本的线程支持
  8. 数据库连接 API
  9. 基本的反射 API
  10. 基本的序列化和反序列化支持
  11. Classic VM(虚拟机)

JDK 1.1

  1. 内部类改进
  2. JavaBeans
  3. AWT 改进
  4. JDBC 1.0 API
  5. RMI(远程方法调用)
  6. JAR 文件格式
  7. 改进的垃圾收集器
  8. 改进的 Javadoc 工具
  9. Event 类型
  10. 改进的 I/O 和网络支持

JDK 1.2

  1. Collections 框架
  2. Swing
  3. Java Naming and Directory Interface(JNDI)
  4. Java Foundation Classes(JFC)
  5. JDBC 2.0 API
  6. Java Security Framework
  7. 改进的反射 API
  8. 改进的 I/O 和网络支持
  9. Java Web Start
  10. 改进的垃圾收集器
  11. JIT(Just In Time)编译器

JDK 1.3

  1. Java Sound API
  2. Timer API(时间)
  3. Java Platform Debugger Architecture(JPDA)
  4. Java Management Extensions(JMX)
  5. Java Authentication and Authorization Service(JAAS)
  6. Java Secure Socket Extension(JSSE)
  7. Java XML API(JAXP)
  8. HotSpot JVM
  9. Java Web Start 改进

JDK 1.4

  1. Java Web Services
  2. NIO(高级流)
  3. 支持正则表达式
  4. Java Print Service API
  5. Java Cryptography Extension(JCE)
  6. Logging API(日志功能)
  7. Java Web Start 改进
  8. Java Foundation Classes(JFC)改进
  9. 支持IPV6
  10. 引入Imgae I/O API(图片流)

JDK 5

  1. 自动装箱和拆箱
  2. 泛型
  3. 增强的 for 循环(for-each)
  4. 枚举类型
  5. 可变长度参数
  6. 静态导入(import static)
  7. 注解
  8. 线程并发库(java.util.concurrent)
  9. Formatter 类
  10. Scanner 类

JDK 6

  1. 脚本引擎
  2. JAXB API
  3. JDBC 4.0 API
  4. Pluggable Annotation Processing API
  5. Desktop API
  6. Console类
  7. 轻量级 Http Server API
  8. 改进的 GUI 工具集
  9. 可插拔类型系统(Pluggable Type System)
  10. 并发 API 改进

JDK 7

  1. switch支持String字符串类型

  2. 泛型实例化类型自动推断(<> Diamond操作符)

  3. Fork/Join 并行执行任务的框架

  4. 全新的NIO2.0 API

    1. 文件操作的 Path 接口、DirectoryStream、Files、WatchService
  5. try-with-resources语句

  6. 改进的异常处理,catch捕获多个异常类型,用"|"分隔开

  7. 数字字面量下划线

  8. 可变参数方法中的非可变参数(非严格限定的泛型参数类型)

  9. 改进的随机数生成器

  10. 改进的并发 API

JDK 8

  1. Lambda 表达式
  2. Stream API
  3. 接口默认方法(default)
  4. 方法引用(类::方法)
  5. 函数式接口
  6. 新的日期/时间 API
  7. Optional解决NullPointerException
  8. 并行流
  9. 重复注解@Repeatable
  10. 类型注解
  11. 使用元空间Metaspace代替持久代(PermGen space)
  12. 提升了 HashMaps 的性能(红黑树)

JDK 9

  1. JSR376 Java 平台模块系统
  2. JEP261 模块系统
  3. JShell
  4. G1 成为默认垃圾回收器
  5. GC Log 参数完全改变,且不兼容
  6. 私有接口方法
  7. JEP110 支持 HTTP2,同时改进 HttpClient 的 API,支持异步模式
  8. 多版本 JAR 包
  9. 集合工厂方法,提供了List.of()、Set.of()、Map.of()和Map.ofEntries()等工厂方法
  10. 多版本兼容Jar包
  11. 改进的 CompletableFuture 类
  12. 并行 Full GC
  13. 针对低延迟应用的改进

JDK 10

  1. 局部变量类型推断
  2. G1 垃圾收集器改进
  3. 线程本地握手(Thread-Local Handshake,线程停止机制)
  4. 不可变集合的改进
  5. 集合工厂方法改进
  6. Optional新增orElseThrow()方法
  7. 应用类数据共享
  8. 应用级别的 JVM 日志记录
  9. 启动时的加密支持
  10. 根证书

JDK 11

  1. Http Client API(标准化) Http Client重写,支持HTTP/1.1和HTTP/2 ,也支持 websockets
  2. 嵌套访问控制
  3. Java 语言运行时常量池中的动态常量
  4. 线程本地握手
  5. 实验性的 Epsilon GC
  6. ZGC(实验) 可伸缩低延迟垃圾收集器
  7. Flight Recorder
  8. Unicode 10 支持
  9. 应用类数据共享(动态)

JDK 12

  1. Switch 表达式扩展
  2. 字符串支持transform、indent操作
  3. 实验性的 AOT 编译器
  4. 新增NumberFormat对复杂数字的格式化
  5. 新的文件系统 API 新增方法Files.mismatch(Path, Path)
  6. Unicode 11 支持
  7. 改进的 G1 垃圾收集器
  8. 应用类数据共享(静态)

JDK 13

  1. Switch 表达式扩展(引入 yield 关键字)
  2. 文本块升级 “”"
  3. SocketAPI 重构
  4. FileSystems.newFileSystem新方法
  5. Unicode 12 支持
  6. 增强的 try-with-resources 语句(支持多个有效资源)
  7. 应用类数据共享(动态)
  8. 改进的 G1 垃圾收集器

JDK 14

  1. Switch 表达式-标准化
  2. instanceof模式匹配
  3. Record类型,类似于Lombok 的@Data注解
  4. Pattern Matching for instanceof
  5. 增强的 NullPointerException 信息
    • 改进 NullPointerExceptions提示信息,打印具体哪个方法抛的空指针异常,避免同一行代码多个函数调用时无法判断具体是哪个函数抛异常的困扰,方便异常排查
  6. 删除 CMS 垃圾回收器

JDK 15

  1. EdDSA 数字签名算法
  2. 新的Sealed类和Sealed接口(封闭类)
    • 通过sealed关键字修饰抽象类限定只允许指定的子类才可以实现或继承抽象类,避免抽象类被滥用
  3. Hidden Classes(隐藏类)
  4. 改进java.net.DatagramSocket 和 java.net.MulticastSocket底层实现
  5. 禁用 biased locking
  6. Shenandoah垃圾收集器稳定

JDK 16

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

JDK 17

  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. 统一日志异步刷新,先将日志写入缓存,然后再异步刷新

JDK18

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