JDK(Java Development Kit)从发布至今所有主要版本 的详细差异、新增特性及关键更新的总结,按时间顺序排列
以下是 JDK(Java Development Kit)从发布至今所有主要版本 的详细差异、新增特性及关键更新的总结,按时间顺序排列:

1. JDK 1.0 (1996)
- 发布年份:1996年1月23日
- 关键特性:
- Java首次正式发布。
- 核心语言特性:类、接口、异常处理。
- 核心API:
java.lang、java.io、java.awt(图形界面库)。
2. JDK 1.1 (1997)
- 发布年份:1997年2月19日
- 关键特性:
- 内省(Reflection):允许运行时检查类和方法。
- JDBC(Java Database Connectivity):数据库连接API。
- 匿名内部类:简化事件监听器等场景。
java.util扩展:新增Hashtable、Vector等集合类。
3. JDK 1.2 (1998)
- 发布年份:1998年12月8日
- 关键特性:
- 命名改为JDK 1.2(原计划为JDK 2.0,但版本号保留1.x)。
- Collections Framework:引入
ArrayList、HashMap等通用集合类。 strictfp关键字:确保浮点运算的平台一致性。Thread类增强:join()、sleep()等方法。
4. JDK 1.3 (2000)
- 发布年份:2000年5月8日
- 关键特性:
- HotSpot JVM:取代原来的JIT编译器,显著提升性能。
javax包扩展:javax.sound(音频处理)javax.management(JMX管理)javax.swing(改进的GUI库)。
- 增强的I/O(NIO前身):初步支持非阻塞I/O。
5. JDK 1.4 (2002)
- 发布年份:2002年2月6日
- 关键特性:
- 正则表达式(Regex):
java.util.regex包。 assert关键字:断言机制(调试工具)。- 日志API:
java.util.logging。 - 改进的I/O(NIO前身):
RandomAccessFile、FileChannel。 - 图像处理增强:
java.awt.image包。
- 正则表达式(Regex):
6. JDK 5 (2004)
- 发布年份:2004年9月30日
- 关键特性:
- 泛型(Generics):类型参数化(如
List<String>)。 - 注解(Annotations):
@Override、@Deprecated等元数据标记。 - 自动装箱/拆箱:基本类型与包装类自动转换。
- 枚举(Enums):类型安全的枚举类型。
- 可变参数(Varargs):方法参数可接受可变数量的参数(如
method(int... args))。 - 静态导入:通过
import static直接导入静态方法或常量。
- 泛型(Generics):类型参数化(如
7. JDK 6 (2006)
- 发布年份:2006年12月11日
- 关键特性:
- 脚本引擎(Scripting Engine):支持JavaScript等脚本语言嵌入Java应用。
- Java DB(Derby):内置数据库。
- JVM改进:性能优化(如垃圾回收算法改进)。
- 注解扩展:
@SafeVarargs、@FunctionalInterface(后移至JDK 8)。 - XML数字签名:增强安全性。
8. JDK 7 (2011)
- 发布年份:2011年7月28日
- 关键特性:
-
try-with-resources:自动关闭资源(如
FileInputStream)。try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {// 自动关闭br } -
钻石操作符(Diamond Operator):简化泛型实例化。
List<String> list = new ArrayList<>(); // 无需重复指定类型 -
字符串切换(String in Switch):允许
switch语句使用字符串。 -
NIO.2:增强的文件系统API(路径操作、文件监控)。
-
Fork/Join框架:支持分治算法的并行计算。
-
9. JDK 8 (2014)
- 发布年份:2014年3月18日
- 关键特性:
-
Lambda表达式:引入函数式编程支持。
list.forEach(item -> System.out.println(item)); -
Stream API:对集合进行声明式数据处理。
List<String> filtered = list.stream().filter(s -> s.length() > 3).collect(Collectors.toList()); -
默认方法(Default Methods):接口中可定义默认实现。
-
新的日期时间API(java.time包):替代
Date和Calendar。 -
Optional类:避免空指针异常。
-
并行数组排序:
Arrays.parallelSort()。
-
10. JDK 9 (2017)
- 发布年份:2017年9月21日
- 关键特性:
-
模块化系统(JPMS):通过
module-info.java定义模块。module com.example {requires java.logging;exports com.example.service; } -
私有化JDK内部API:减少对
sun.misc等包的依赖。 -
HTTP Client(Preview):内置HTTP客户端(
java.net.http包)。 -
JShell:交互式Java REPL(Read-Eval-Print Loop)。
-
集合工厂方法:简化不可变集合创建。
List<String> list = List.of("a", "b", "c");
-
11. JDK 10 (2018)
- 发布年份:2018年3月20日
- 关键特性:
-
局部变量类型推断(var):通过
var声明局部变量。var list = new ArrayList<String>(); // 类型由初始化表达式推断 -
应用类数据共享(AppCDS):减少JVM内存占用。
-
垃圾回收器改进:并行垃圾回收器(Parallel GC)默认替换CMS。
-
实验性特性:
String的indent()、describeConstable()等。
-
12. JDK 11 (2018, LTS)
- 发布年份:2018年9月25日
- 关键特性:
- HTTP Client正式版:从Preview升级为稳定版本。
- Windows上的Flight Recorder(JFR):性能分析工具。
- 新的垃圾回收器ZGC:低延迟垃圾回收器(实验性)。
- 删除Java EE模块:移除
java.xml.bind等模块。 - 文本块(Text Blocks):多行字符串支持。
String html = """<div><p>Hello World</p></div>""";
13. JDK 12 (2019)
- 发布年份:2019年3月19日
- 关键特性:
- Switch表达式(Preview):支持
yield和表达式形式。 - 垃圾回收器改进:
G1垃圾回收器的-XX:ZapUnusedHeapArea参数。 - Shenandoah GC(实验性):低暂停时间垃圾回收器。
- 字符串压缩(Compact Strings):优化字符串存储。
- Switch表达式(Preview):支持
14. JDK 13 (2019)
- 发布年份:2019年9月17日
- 关键特性:
- 文本块(Text Blocks)正式版:从Preview升级为稳定版本。
- Switch表达式改进:支持
yield和case合并。 - 记录类(Records,Preview):简化数据载体类的定义。
public record Person(String name, int age) { }
15. JDK 14 (2020)
- 发布年份:2020年3月17日
- 关键特性:
-
记录类(Records):从Preview升级为稳定版本。
-
模式匹配(Pattern Matching):初步支持
instanceof后直接解构对象(Preview)。if (obj instanceof Person p) {System.out.println(p.name); } -
可变参数的私有方法:允许私有方法使用可变参数。
-
文本分段(Text Blocks改进):支持转义字符。
-
16. JDK 15 (2020)
- 发布年份:2020年9月15日
- 关键特性:
-
密封类(Sealed Classes):限制哪些类可以继承当前类(Preview)。
public sealed class Shape permits Circle, Rectangle { } -
隐藏类(Hidden Classes):用于生成临时类(如代理类)。
-
增强的
switch表达式:返回值并支持yield。 -
Text Blocks改进:支持转义字符和更灵活的语法。
-
17. JDK 16 (2021)
- 发布年份:2021年3月16日
- 关键特性:
- 弃用
removeIf的并发修改:修复ConcurrentModificationException。 - 虚拟线程(Virtual Threads):实验性轻量级线程(Preview)。
- 简化的
switch语法:允许yield和表达式形式。 - 强封装(Strong Encapsulation):强制限制对内部API的访问。
- 弃用
18. JDK 17 (2021, LTS)
- 发布年份:2021年9月14日
- 关键特性:
- 密封类(Sealed Classes):从Preview升级为稳定版本。
- 文本块改进:支持转义字符和更灵活的语法。
- 强封装(Strong Encapsulation):默认禁用内部API访问。
- 新的垃圾回收器Shenandoah:低暂停时间GC(实验性)。
- 移除
javaws和applet:淘汰旧版浏览器插件技术。
19. JDK 18 (2022)
- 发布年份:2022年3月15日
- 关键特性:
- 虚拟线程(Virtual Threads):从Preview升级为稳定版本。
- 结构化并发(Structured Concurrency):通过
StructuredTaskScope管理线程。 - 向量API(Vector API):支持SIMD指令优化计算密集型代码(Preview)。
- 模式匹配改进:支持
instanceof后直接解构嵌套对象。
20. JDK 19 (2022)
- 发布年份:2022年9月19日
- 关键特性:
- 虚拟线程改进:支持
Stack Walking和Thread.startVirtual()。 - 模式匹配for
switch:支持switch表达式匹配记录类。 - 精确的ARC(Accurate Race Conditions):改进竞争条件检测。
- 记录模式(Record Patterns):解构记录类字段。
if (obj instanceof Person(String name)) { ... }
- 虚拟线程改进:支持
21. JDK 20 (2023)
- 发布年份:2023年3月21日
- 关键特性:
- 模式匹配for
switch正式版:从Preview升级为稳定版本。 - 记录模式增强:支持嵌套记录的解构。
- 虚拟线程改进:支持
Thread.startVirtual()。 - 强封装增强:进一步限制内部API访问。
Vector API改进:支持更多硬件指令集。
- 模式匹配for
22. JDK 21 (2023)
- 发布年份:2023年9月19日
- 关键特性:
- 虚拟线程改进:支持
Stack Walking和Thread.startVirtual()。 Vector API改进:支持更多CPU指令集(如AVX512)。JFR增强:更详细的性能分析事件。String分割优化:String.split()支持正则表达式改进。Record类改进:支持private构造函数。
- 虚拟线程改进:支持
23. JDK 22 (2024)
- 发布年份:2024年3月19日
- 关键特性:
Vector API改进:支持更多CPU指令集(如AVX512)。Record类改进:支持private构造函数。JFR增强:更详细的性能分析事件。String拼接优化:+操作符的性能提升。
LTS版本推荐
- 长期支持(LTS)版本:每3年发布一次,提供更长时间的维护和支持。
- JDK 8(2014,支持至2030)
- JDK 11(2018,支持至2029)
- JDK 17(2021,支持至2029)
- JDK 21(2023,支持至2030)
版本差异总结表
| 版本 | 关键特性 | LTS | 发布年份 |
|---|---|---|---|
| JDK 5 | 泛型、注解、枚举 | 否 | 2004 |
| JDK 7 | try-with-resources、NIO.2、Fork/Join | 否 | 2011 |
| JDK 8 | Lambda、Stream API、新日期API | 是 | 2014 |
| JDK 11 | HTTP Client正式版、文本块、移除Java EE模块 | 是 | 2018 |
| JDK 17 | 密封类、虚拟线程、强封装 | 是 | 2021 |
| JDK 21 | 虚拟线程优化、Vector API、JFR增强 | 是 | 2023 |
注意事项
- 版本兼容性:升级JDK版本时需检查依赖库的兼容性(如Spring Boot对JDK版本的限制)。
- 性能调优:新版本通常包含GC和JIT编译器优化,需重新调整JVM参数。
- 实验性特性:带有Preview或Incubating标签的特性可能在后续版本中变更或移除。
通过选择合适的JDK版本,可以更好地平衡功能需求、性能优化和长期维护成本。
相关文章:
JDK(Java Development Kit)从发布至今所有主要版本 的详细差异、新增特性及关键更新的总结,按时间顺序排列
以下是 JDK(Java Development Kit)从发布至今所有主要版本 的详细差异、新增特性及关键更新的总结,按时间顺序排列: 1. JDK 1.0 (1996) 发布年份:1996年1月23日关键特性: Java首次正式发布。核心语言特性…...
Vue 3 和 Vue 2 的区别及优点
Vue.js 是一个流行的 JavaScript 框架,广泛用于构建用户界面和单页应用。自 Vue 3 发布以来,很多开发者开始探索 Vue 3 相较于 Vue 2 的新特性和优势。Vue 3 引入了许多改进,优化了性能、增强了功能、提升了开发体验。本文将详细介绍 Vue 2 和…...
Linux 入门五:Makefile—— 从手动编译到工程自动化的蜕变
一、概述:Makefile—— 工程编译的 “智能指挥官” 1. 为什么需要 Makefile? 手动编译的痛点:当工程包含数十个源文件时,每次修改都需重复输入冗长的编译命令(如gcc file1.c file2.c -o app),…...
通过websocket给服务端发送订单催单提醒消息
controller层 GetMapping("/reminder/{id}")public Result Remainder(PathVariable("id") Long id){orderService.remainder(id);return Result.success();} 实现类 Overridepublic void remainder(Long id) {Orders ordersDB orderMapper.getById(id);…...
【NumPy科学计算:高性能数组操作核心指南】
目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现运行结果验证 三、性能对比测试方法论量化数据对比结果分析 四、最佳实践推荐方案 ✅常见错误 ❌调试技…...
c++ 表格控件 UltimateGrid 控件实例
控件区域: 使用效果: 代码如下: void MyUGCtrl::OnSetup() { m_nButtonIndex AddCellType(&m_button); SetNumberCols(6); AppendRow(); CUGCell cell; int rows, cols; int row 0; // 头部 int nHeaderRow -1; …...
从单机版到超级APP:MCP如何解锁AI的超能力
MCP:AI界的“万能充电宝”——让AI从此告别“语言不通”的尴尬! 开篇:AI咖啡馆的尴尬日常 想象一下这样的场景: 一位AI助手在咖啡馆里手忙脚乱——它想帮用户点杯咖啡,但需要先写代码调用天气API(“今天下…...
【算法】 欧拉函数与欧拉降幂 python
欧拉函数 欧拉函数 ϕ ( n ) \phi(n) ϕ(n) 表示小于等于 n 的正整数中与 n 互质的数的个数。即: ϕ ( n ) ∣ { k ∈ Z ∣ 1 ≤ k ≤ n , gcd ( k , n ) 1 } ∣ \phi(n) \left| \{ k \in \mathbb{Z}^ \mid 1 \leq k \leq n, \gcd(k, n) 1 \} \right| ϕ(n)…...
【Python] pip制作离线包
制作离线安装包是一种非常实用的方法,尤其是在网络环境受限或需要在多台机器上部署相同环境时。以下是详细的步骤,帮助您创建一个包含所有依赖项的离线安装包,并在后续环境中复用。 步骤 1:准备工具和环境 确保您有一台可以访问互…...
什么是回表?哪些数据库存在回表?
目录 一、什么是回表1. 回表的核心流程2. 示例说明3. 回表的性能问题4. 总结 二、哪些数据库会有回表1. MySQL(InnoDB)2. Oracle3. 其他数据库(如 SQL Server、PostgreSQL)4. 总结 三、非聚集索引与聚集索引的区别及产生原因1. 聚…...
linux 内存踩踏导致的空指针问题分析纪要
1,查看日志信息打印 我们看到日志发现发包的skb模块有NULL pointer情况,我们看代码分析skb指针不可能出现是空指针,这个时候我们怀疑可能是出现了踩内存导致的空指针情况,所以我们首先需要找到系统PANIC的条件,也就是…...
使用 VcXsrv 在 Windows 10 上运行 Ubuntu 图形界面
VcXsrv 是一款用于 Windows 的开源 X 服务器,它允许在 Windows 系统上显示 Linux 的图形应用程序。当在 Windows 10 上安装并正确配置 VcXsrv 后,通过设置 WSL2 中的DISPLAY环境变量,使其指向运行 VcXsrv 的 Windows 主机的 IP 地址ÿ…...
LSTM-SVM长短期记忆神经网络结合支持向量机组合模型多特征分类预测/故障诊断,适合新手小白研究学习(Matlab完整源码和数据)
LSTM-SVM长短期记忆神经网络结合支持向量机组合模型多特征分类预测/故障诊断,适合新手小白研究学习(Matlab完整源码和数据) 目录 LSTM-SVM长短期记忆神经网络结合支持向量机组合模型多特征分类预测/故障诊断,适合新手小白研究学习…...
Autoware源码总结
Autoware源码网站 项目简介 教程 Autoware的整体架构如下图,主要包括传感器sensing、高精地图map data、车辆接口vehicle interface、感知perception(动态障碍物检测detection、跟踪tracking、预测prediction;交通信号灯检测detection、分类c…...
QT聊天项目DAY01
1.新建初始项目 2.修改UI格式 运行效果 3.创建登录界面 设计登录界面UI 设计布局 调整布局间距 往水平布局中拖入标签和文本输入框 更换控件名称并固定高度 添加窗口部件 往现有的资源文件中导入图片 添加水平布局 4.设置登陆界面为主窗口的核心组件 #pragma once#include &l…...
【NumPy科学计算引擎:从基础操作到高性能实践】
目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析关键技术模块说明技术选型对比 二、实战演示环境配置核心代码实现运行结果验证 三、性能对比测试方法论量化数据对比结果分析 四、最佳实践推荐方案 ✅常见错误 ❌调试技巧 五、应用…...
MySQL InnoDB 索引与B+树面试题20道
1. B树和B+树的区别是什么? 数据存储位置: B树:所有节点(包括内部节点和叶子节点)均存储数据。 B+树:仅叶子节点存储数据,内部节点仅存储键值(索引)。 叶子节点结构: B+树:叶子节点通过双向链表连接,支持高效的范围查询。 查询稳定性: B+树:所有查询必须走到叶子…...
论文精度:基于LVNet的高效混合架构:多帧红外小目标检测新突破
论文地址:https://arxiv.org/pdf/2503.02220 目录 一、论文背景与结构 1.1 研究背景 1.2 论文结构 二、核心创新点解读 2.1 三大创新突破 2.2 创新结构原理 2.2.1 多尺度CNN前端 2.2.2 视频Transformer设计 三、代码复现指南 3.1 环境配置 3.2 数据集准备 3.3 训…...
ORM查询的补充
一,ORM查询的补充: 1,连接查询: 反向查询: 先介绍一下什么是正向查询,比如我们之前的数据表之间建立的一对多的关系,我们通过文章找到相应的作者是属于正向查询的(由多到一)&…...
【C语言-全局变量】
【C语言-全局变量】 1.能局部就局部,别啥都往全局塞2.尽量用结构体对零散变量封装3.函数传参4.静态变量模块化5 单例模式, 限制全局实例数量6. 配置化全局参数——集中管理可调参数7. 事件驱动架构:消息队列通信策略选择建议 参考https://mp.weixin.qq.c…...
mysql 商城商品属性开发的动态解决方案
终极方案:动态属性解决方案 推荐使用 JSON 字段 虚拟列索引 的组合方案 结合灵活存储与查询优化,平衡扩展性与性能 完整实现步骤 步骤 1:创建基础表结构 CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NO…...
python利用open-cv和SSIM和特征值比较两个图片的相似性
以下是关于 **SSIM(结构相似性指数)** 和 **特征匹配** 的详细解释及实际示例,帮助理解它们的区别和应用场景: --- ### **1. SSIM(结构相似性指数)** #### **含义**: - **SSIM** 是一种衡量两…...
蔚来汽车智能座舱接入通义大模型,并使用通义灵码全面提效
为加速AI应用在企业市场落地,4月9日,阿里云在北京召开AI势能大会。阿里云智能集团资深副总裁、公共云事业部总裁刘伟光发表主题演讲,大模型的社会价值正在企业市场释放,阿里云将坚定投入,打造全栈领先的技术࿰…...
QT 老版本下载地址被禁 如何下载
前提: 想用老版本的QT 5.12 系列,但是QT官方已经封禁了国内IP 访问,5.15之前的版本,而且5.14.2是最后一个离线exe版本 ; Index of /official_releases/qt 基本不可用;全部改为在线安装; 收集了一下地址&am…...
VMWare Workstation Pro17.6最新版虚拟机详细安装教程(附安装包教程)
目录 前言 一、VMWare虚拟机下载 二、VMWare虚拟机安装 三、运行虚拟机 前言 VMware 是全球领先的虚拟化技术与云计算解决方案提供商,通过软件模拟计算机硬件环境,允许用户在一台物理设备上运行多个独立的虚拟操作系统或应用。其核心技术可提升硬件…...
【数据结构】红黑树超详解 ---一篇通关红黑树原理(含源码解析+动态构建红黑树)
一.什么是红黑树 红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构。1972年出现,最初被称为平衡二叉B树。1978年更名为“红黑树”。是一种特殊的二叉查找树,红黑树的每一个节点上都有存储表示节点的颜色。每一个节点可以是…...
uni-app初学
文章目录 1. pages.json 页面路由2. 图标3. 全局 CSS4. 首页4.1 整体框架4.2 完整代码4.3 轮播图 swiper4.3.1 image 4.4 公告4.4.1 uni-icons 4.5 分类 uni-row、uni-col4.6 商品列表 uni-row、uni-col 小程序开发网址: 注册小程序账号 微信开发者工具下载 uniapp …...
PHP多维数组
在 PHP 中,多维数组是数组的数组,允许你存储和处理更复杂的数据结构。多维数组可以有任意数量的维度,但通常我们最常用的是二维数组(数组中的数组)。 首先来介绍一下一维数组, <?php//一维数组 $strAr…...
数学建模:针对汽车行驶工况构建思路的延伸应用
前言: 汽车行驶工况构建的思简单理解为将采集的大量数据进行“去除干扰、数据处理,缩减至1800S的数据”,并可达到等效替换的目的,可以使在试验室快速复现;相应的解决思路、办法可应用在 “通过能量流采集设备大量采集…...
go语言内存泄漏的常见形式
go语言内存泄漏 子字符串导致的内存泄漏 使用自动垃圾回收的语言进行编程时,通常我们无需担心内存泄漏的问题,因为运行时会定期回收未使用的内存。但是如果你以为这样就完事大吉了,哪里就大错特措了。 因为,虽然go中并未对字符串…...
