【JDK版本变化】【新特性】

简介: 【JDK版本变化】【新特性】

正文


简介Java1.0~~~Java11的变迁史


一些术语#


  • JCP 是 Java Community Process(Java社区进程)的简称,社会各界Java组成的社区,规划和领导Java的发展。
  • JEP 是 JDK Enhancement Proposals (Java 增强提案)的简称,JDK的版本变化将从这些提案中选取。
  • JSR 是 Java Specification Requests(Java规范请求)的简称,是 JCP 成员向委员会提交的 Java 发展议案,经过一系列流程后,如果通过会成为 JEP,最终会体现在未来的Java中。
  • TCK 是 Technology Compatibility Kit(技术兼容性测试)的简称, 如果一个平台型程序想要宣称自己兼容Java,就必须通过TCK测试


JDK 11#


JDK 11 目前出现了4个JEP,计划于 2018 年 9 月发布。


JEP 309: 动态类文件常量。
JEP 318: 低开销垃圾收集器 Epsilon。
JEP 320: 移除 Java EE 和 CORBA 模块。
JEP 323: Lambda 参数的本地变量语法。


JDK 10#


JDK 10 按计划将于2018年3月20日发布。新特性有:


JEP 286: 局部变量的类型推导。该特性在社区讨论了很久并做了调查,可查看 JEP 286 调查结果。
JEP 296: 将 JDK 的多个代码仓库合并到一个储存库中。
JEP 304: 垃圾收集器接口。通过引入一个干净的垃圾收集器(GC)接口,改善不同垃圾收集器的源码隔离性。
JEP 307: 向 G1 引入并行 Full GC。
JEP 310: 应用类数据共享。为改善启动和占用空间,在现有的类数据共享(“CDS”)功能上再次拓展,以允许应用类放置在共享存档中。
JEP 312: 线程局部管控。允许停止单个线程,而不是只能启用或停止所有线程。
JEP 313: 移除 Native-Header Generation Tool (javah)
JEP 314: 额外的 Unicode 语言标签扩展。包括:cu (货币类型)、fw (每周第一天为星期几)、rg (区域覆盖)、tz (时区) 等。
JEP 316: 在备用内存设备上分配堆内存。允许 HotSpot 虚拟机在备用内存设备上分配 Java 对象堆。
JEP 317: 基于 Java 的 JIT 编译器(试验版本)。
JEP 319: 根证书。开源 Java SE Root CA 程序中的根证书。
JEP 322: 基于时间的版本发布模式。“Feature releases” 版本将包含新特性,“Update releases” 版本仅修复 Bug 。


JDK 9#


JDK 9 于2017年9月21日发布。新特性有:


模块化 —— Jigsaw
交互式命令行 —— JShell
默认的垃圾回收器 —— G1
进程操作改进
竞争锁的性能优化
分段代码缓存
优化字符串占用空间


这个版本中最引人注目的时候模块化,通过这个工作,可以构建更小的运行时环境,只需要包括Java平台中任务依赖的部分。这可以更好地适应云端的开发。


JDK 8#


JDK 8 于2014年3月14号发布。从 Java 8 开始开发代号已经弃用了。新特性有:


Lambda 表达式
Pipelines 和 Streams
Date 和 Time API
Default 方法
Type 注解
Nashhorn JavaScript 引擎
并发计数器
Parallel 操作
移除 PermGen Error
TLS SNI


第三个有里程碑意义的 Java 版本。其中最引人注目的便是 Lambda 表达式了,从此 Java 语言原生提供了函数式编程能力。Java 8 更加适应海量云计算的需要。


JDK 7#


开发代号是 Dolphin(海豚),于2011年7月28日发行。新特性有:


switch 语句块中允许以字符串作为分支条件;
在创建泛型对象时应用类型推断;
在一个语句块中捕获多种异常;
支持动态语言;
支持 try-with-resources;
引入 Java NIO.2 开发包;
数值类型可以用2进制字符串表示,并且可以在字符串表示中添加下划线;
钻石型语法;
null 值的自动处理。


这个版本中的主要的特性是 NIO2 和 Fork/Join 并发包,Java 虚拟机的稳定性真正做到的工业级,成为一个计算平台而服务于全世界。


JDK 6#


开发代号为 Mustang(野马),于2006年12月11日发行。新特性有:


支持脚本语言;
引入 JDBC 4.0 API;
引入 Java Compiler API;
可插拔注解;
增加对 Native PKI(Public Key Infrastructure)、Java GSS(Generic Security Service)、Kerberos 和 LDAP(Lightweight Directory Access Protocol) 的支持;
继承 Web Services;
做了很多优化。


这个语言语法改进不多,但在虚拟机内部做了大量的改进,成为一个相当成熟稳定的版本,时至今日国内的很多公司依然以 Java6 作为主要 Java 开发版本来使用。

同年 Sun 公司做出一个伟大的决定,将 Java 开源。OpenJDK 从 Sun JDK 1.7 版本分支出去,成为今天 OpenJDK 的基础。


JDK 5#


开发代号为Tiger(老虎),于2004年9月30日发行。新特性包有:


引入泛型;
增强循环,可以使用迭代方式;
自动装箱与自动拆箱;
类型安全的枚举;
可变参数;
静态引入;
元数据(注解);
引入 Instrumentation。
Sun 不再采用 J2SE, J2EE 这种命名方式,而使用 Java SE 5, Java EE 5 这样的名称。


Java 5 是第二个里程碑式的版本。Java 语言语法发生很大的变化,如注解 (Annotation),装箱 (Autoboxing),泛型 (Generic),枚举 (Enum),foreach 等被加入,提供了 java.util.concurrent 并发包。

Java 5 对于 Java 语言的推动是巨大的,特别是注解的加入,使得语言定义灵活了很多,程序员可以写出更加符合领域定义的描述性程序。


JDK 1.4#


开发代号为 Merlin(隼),于2004年2月06日发行(首次在JCP下发行)。新特性有:


XML 处理;
Java 打印服务;
引入 Logging API;
引入 Java Web Start;
引入 JDBC 3.0 API;
引入断言;
引入 Preferences API;
引入链式异常处理;
支持 IPv6;
支持正则表达式;
引入 Image I/O slot machine API。
Java 语言真正走向成熟,提供了非常完备的语言特性,如 NIO,正则表达式,XML 处理器等。


同年微软的.NET 框架发布,两者开始了为期十几年的暗自竞争。从语言特性上来说,.NET 后发先至,一直处于优势。但 Java 依赖良好的开发者生态,绝大多数大型软件公司的使用者众多和不断贡献,以及对 Linux 操作系统良好的支持,渐渐的在服务器端获得优势地位。


JDK 1.3#


开发代号为 Kestrel(红隼),于2000年5月08日发行。新特性有:


引入Java Sound API;
jar 文件索引;
对 Java 的各个方面都做了大量优化和增强。


J2EE 中的 Servlet 规范获得了极大的成功,伴随着互联网的兴起,和浏览器直接通过 HTTP 协议交互的 Servlet,和众多的 MVC 框架,成为 Web1.0 的网红。


JDK 1.2#


开发代号为 Playground(操场),于1998年12月8日发行。新特性有:


引入集合(Collection)框架;
对字符串常量做内存映射;
引入 JIT(Just In Time) 编译器;
引入对打包的 Java 文件进行数字签名;
引入控制授权访问系统资源的策略工具;
引入 JFC(Java Foundation Classes),包括 Swing 1.0、拖放和 Java 2D 类库;
引入 Java 插件;
在 JDBC 中引入可滚动结果集、BLOB、CLOB、批量更新和用户自定义类型;
在 Applet 中添加声音支持。


Java 第一个里程碑式的版本。JIT(Just in time)编译器技术,使得语言的可迁移性和执行效率达到最优的平衡,同时 Collections 集合类设计优良,在企业应用开发中迅速得到了广泛使用。

Sun 公司把 Java 技术体系分成三个方向,分别是 J2SE(面向桌面和通用应用开发),J2EE(面向企业级应用开发),J2ME(面向移动终端开发)。这个分类影响非常久远,体现出主流语言设计者的思想:针对于不同的应用领域,在形态,API 集合等进行划分。


JDK 1.1#


于 1997年2月19日发行,新特性有:


引入JDBC(Java Database Connectivity);
支持内部类;
引入Java Bean;
引入RMI(Remote Method Invocation);
引入反射(仅用于内省)。


Java 语言的基本形态基本确定了,比如反射 (reflection), JavaBean, 接口和类的关系等等,一直到今天都保持一致。然而,Java 最初的一些目标,如在浏览器中执行 Applet,以及跨平台的图形界面 Awt 很快遭遇到负面的评价。


JDK 1.0#


开发代号为Oak(橡树),于1996年1月23发行。特点有:


提供了一个解释执行的 Java 虚拟机;
Applet 能在 Mozilla 浏览器中运行。
Java 的 Applet 能在 Mozilla 浏览器中运行,被看作是未来的互联网语言。


起源#


Java 语言源于 1991 年 Sun 公司 James Gosling 领导的的 Ork 项目,1995 年 Sun 公司正式起名为 Java,并提出“Write once, Run anywhere"的口号。

相关文章
|
5天前
|
Java 测试技术 调度
JDK21有没有什么稳定、简单又强势的特性?
这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。
JDK21有没有什么稳定、简单又强势的特性?
|
3月前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
74 7
|
5月前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
127 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
5月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
465 1
|
5月前
|
Java 关系型数据库 开发工具
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
本文提供了解决方案,如何在IDEA中创建Spring 2.X版本的项目并使用JDK8,尽管Spring 2.X已停止维护且IDEA不再直接支持,通过修改pom.xml或使用阿里云的国内源来创建项目。
261 0
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
|
6月前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
64 3
|
7月前
|
Java 开发工具
开发工具系列 之 同一个电脑上安装多个版本的JDK
这篇文章介绍了如何在一台电脑上安装和配置多个版本的JDK,包括从官网下载所需JDK、安装过程、配置环境变量以及如何查看和切换当前使用的JDK版本,并提到了如果IDEA和JDK版本不兼容时的解决方法。
开发工具系列 之 同一个电脑上安装多个版本的JDK
|
5月前
|
存储 安全 Java
JDK1.8 新的特性
JDK1.8 新的特性
49 0
|
5月前
|
Oracle Java 关系型数据库
jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?
本文提供了详细的JDK 17安装教程,包括下载、安装、配置环境变量的步骤,并解释了在已有其他版本JDK的情况下如何管理多个JDK环境。
3647 0
|
6月前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理