不知道你有没有想过这些问题:
为什么 JDK1.4 与 JDK 5.0 的命名规则不一样?JDK 8 增加了哪些新特性?现在最新的 Java 版本是多少?
一直都是写业务代码,都没研究过 Java 的曾经与现在。为了提高下自己的职业素养,查了资料:
JDK 1995 年 发布了 Beta 版,1996 年 1 月 发布了 1.0 版本,直到 2019 年 9 月发布了 JDK 13,JDK 13 是当前最新的版本。
Java 开发团队计划在 2020 年 3 月 17 日之前发布 JDK 14。透露更新内容可能包括:
- 包装工具,用于包装独立的Java应用程序
- 模式匹配
- 文本块的两项附加
- Z Garbage Collector
从 Java 1.4 开始,Java 语言的发展由 Java 社区流程(JCP)来控制,该流程使用 Java 规范请求(JSR)来建议和指定对 Java 功能的添加和更改。
JDK 5 开始引入了用于 Java 语言的新版本控制系统,旧版本控制系统继续用于开发人员库。版本号 "1.5.0" 和 "5.0" 都用于标识 Java 2 Platform Standard Edition 版本。产品版本为 "5.0",而开发人员版本为 "1.5.0",在以后的版本中(Java 6 = JDK 1.6,Java 7 = JDK 1.7...)。
Java 各版本特性
JDK 1.0(1996-01-23,codename Oak):
- 第一版 JDK,纯解释运行,外挂JIT,运行速度较慢
JDK 1.1(1997-02-19):
- AWT 事件模型
- 内部类
- JavaBeans
- JDBC(Java DataBase Connectivity)
- RMI(Remote Method Invocation)
- 反射(暂不支持实时修改对象属性)
- Windows 平台上的 JIT(Just In Time)编译器
- Taligent 的国际化和 Unicode 支持
J2SE 1.2(1998-12-08, codename Playground):
- 版本名称改为 "J2SE",区分 J2EE 和 J2ME
- 新增类达到 1520 个
- Java plug-in
- Collections 框架
- Swing 图形 API
- Java IDL
- Sun 的 JVM 首次搭载一台 JIT 编译器
J2SE 1.3(2000-05-08, codename Kestrel):
- 新增 HotSpot JVM
- 修改 RMI 支持与 CORBA 的可选兼容性
- JNDI (Java Naming and Directory Interface),Java 命名和目录接口
- 新增 JPDA(Java Platform Debugger Architecture),Java 平台调试器体系架构
- Java 声音
- 合成代理类
J2SE 1.4(2002-02-06, codename Merlin):
- 新增 assert 关键字
- 新增 Perl 正则表达式
- 提供了异常链,允许封装原始的低级的异常
- 支持 IPv6
- Logging API
- Image I/O API
- 集成 XML 解析器和 XSLT 处理器(JAXP)
- 集成安全性和加密扩展(JCE,JSSE,JAAS)
- Java Web Start
- Preferences API
J2SE 5.0(2004-09-30, codename Tiger):
- 泛型
- 注解(annotation)
- 自动装箱/拆箱
- 枚举
- Varargs,用类型名称和三个点来声明方法的最后一个参数,如 void drawtext(String... lines)
- 增强的 for each 循环
- 改进了多线程 Java 程序的执行语义,新的 Java 内存模型解决了先前规范的复杂性、有效性和性能问题
- 静态导入
- RMI 对象自动存根生成
- Swing 新的外观
- 并发包 java.util.concurrent
- 扫描程序类,用于解析输入流和缓冲区的数据
- 在 Apple Mac OS X 10.4 开始支持
Java SE 6(2006-12-11, codename Mustang):
- Sun 用 Java SE 替换了名称 J2SE,并从版本号中删除了".0",开发人员的内部编号仍然为1.6.0
- 不再支持较旧的 Win9x 版本
- 脚本语言支持
- 核心平台和 Swing 性能显着提高
- 通过 JAX-WS改进了 Web 服务支持
- JDBC 4.0 支持
- Java 编译器 API,允许 Java 程序以编程方式选择和调用 Java 编译器的 API
- JAXB 升级到 2.0 版,包括 StAX 解析器的集成
- 支持可插入注解
- GUI 的许多改进
- JVM 的改进:同步和编译器性能优化,新算法和对现有垃圾回收算法的升级以及应用程序启动性能
Java SE 7(2011-07-28, codename Dolphin):
- JVM 对动态语言的支持
- 压缩的 64 位指针(可在 Java 6 中使用 -XX:+UseCompressedOops )
- Switch 支持 String 类型
- try 语句中的自动资源管理
- 改进在创建泛型对象时应用类型推断
- 简化 varargs 方法声明
- 二进制字符串表示整数,允许在字符串表示中添加下划线
- 捕获多种异常类型并通过改进的类型检查重新抛出异常
- Java NIO 新增了对多个文件系统,文件元数据和符号链接的支持,对应软件包:java.nio.file、java.nio.file.attribute、java.nio.file.spi
- Timsort 用于对对象的集合和数组进行排序
- 类库对椭圆曲线密码算法的支持
- 适用于 Java 2D 的 XRender 管道,改善对 GPU 特定功能的处理
- 新协议 SCTP 和 Sockets Direct Protocol 的支持
- Upstream 对 XML 和 Unicode 的更新
- Java 部署规则集
Java SE 8(2014-03-18, codename Spider):
- 语言级支持 lambda 表达式、方法引用、默认方法、Stream API、Optional 类
- Nashorn, JavaScript 引擎
- Date and Time API
- 静态链接的 JNI 库
- 启动JavaFX应用程序
- 删除永久代
Java SE 9(2017-09-21):
- JDK 模块系统项目 Jigsaw
- REPL (JShell):交互式编程环境
- HTTP 2 客户端:新增 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性
- 改进 Javadoc:Javadoc 支持在 API 文档中的进行搜索;Javadoc 的输出符合兼容 HTML5 标准
- 多版本兼容 JAR 包:多版本兼容 JAR 功能能创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本
- 集合工厂方法:List,Set、Map 接口中,新增可以创建这些集合的不可变实例的静态工厂方法
- 支持接口中的私有方法
- 进程 API: 改进的 API 来控制和管理操作系统进程
- 改进 Stream API
- 改进 try-with-resources,final 变量的使用
- 改进注解 @Deprecated
- 匿名类可以使用钻石操作符(Diamond Operator)
- 改进 Optional 类:java.util.Optional 添加了很多新的有用方法,Optional 可以直接转为 stream
- 多分辨率图像 API
- 改进的 CompletableFuture API
- 内置了一个轻量级的 JSON API
- 引入了新的响应式流 API 来支持响应式编程
- HiDPI 图形:自动缩放和调整大小
- 提前编译
- jlink:Java链接器
Java SE 10(2018-03-21):
- var 局部变量类型推断
- 将原来用 Mercurial 管理的众多 JDK 仓库代码,合并到一个仓库中,简化开发和管理过程
- 基于时间的发行版本控制
- 统一的垃圾回收接口
- G1 垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟
- 应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间
- ThreadLocal 握手交互,在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停
- 移除 JDK 中附带的 javah 工具,使用 javac -h 代替
- 使用附加的 Unicode 语言标记扩展
- 能将堆内存占用分配给用户指定的备用内存设备
- 使用 Graal 基于 Java 的编译器,可以预先把 Java 代码编译成本地代码来提升性能
- 在 OpenJDK 中提供一组默认的根证书颁发机构证书
Java SE 11(2018-09-25):
- Nest-Based 访问控制
- 动态类文件常量
- 改善 Aarch64 intrinsic
- Epsilon:无操作垃圾收集器
- 消除 Java EE 和 CORBA 模块
- HTTP客户端(标准)
- 局部变量的语法λ参数
- Curve25519 和 Curve448 关键协议
- 支持 Unicode 10.0.0
- 飞行记录器
- ChaCha20 和 Poly1305 加密算法
- 发射一列纵队源代码程序
- 低开销堆分析
- 传输层安全性(Transport Layer Security,TLS)1.3
- 一个可伸缩的低延迟垃圾收集器 (实验)
- 不赞成使用 Nashorn JavaScript 引擎
- 不赞成使用 Pack200 工具和 API
Java SE 12(2019-03-19):
- Shenandoah: 低暂停时间的垃圾收集器
- Microbenchmark 套件
- 切换表达式
- JVM常数API
- One AArch64 Port, Not Two :删除与 arm64 端口相关的所有源码,保留 32 位 ARM 移植和 64 位 aarch64 移植
- 默认 CDS 存档
- 当 G1 垃圾回收器的回收超过暂停目标,则能中止垃圾回收过程
- 改进 G1 垃圾回收器,以便在空闲时自动将 Java 堆内存返回给操作系统
Java SE 13(2019-09-17):
- 动态 CDS 档案
- ZGC:取消提交未使用的内存
- 重新实现旧版套接字 API
- switch 表达式
- 文本块
参考:
https://blog.csdn.net/qq934235475/article/details/82220076
https://en.wikipedia.org/wiki/Java_version_history