JDK各版本内容和新特性
InfoQ https://www.infoq.cn/article/is-java-out-of-date
Java 是一个庞大的生态圈,全世界的软件和互联网公司绝大多数都是 Java 用户,同时也可以参与推动 Java 语言的发展。任何组织或者个人都可以加入 JCP(Java Community Process),并提交 JSR 来给 JavaSE,JavaEE,JavaME 等提交新的 API 或者服务定义。Java 拥有当今最完备的语言生态,几乎所有能想到的应用范围,都有软件厂商提出过标准化的构想,其中很多已经被接纳为 JSR 提案。如今 JSR 总数已经都 400 多个。
JCP 是发展 Java 的国际组织,其中的执行委员会(EC)以投票的形式对 JSR 提案进行表决。目前 EC 包括 16 个合约 (Ratified) 席位,6 个选举 (Elected) 席位和 2 个合伙 (Associate) 席位,以及 Oracle 作为所有者的永久席位。非永久席位每两年重新选举一次,每次选举为 24 个席位的一半,即为 12 个。
当前 EC 委员会中,对于 Java 起到最重要作用的,无疑是 Oracle,IBM 和 Redhat 三家公司。Oracle 自然不用说;Redhat 领导着 JavaEE8 中两项 JSR,并且在操作系统,Linux,虚拟化,云计算等基础软件方面是产品领导者;IBM 是软硬件最大的厂商,拥有自己的 Unix 操作系统和 JDK 版本。这三家软件厂商也是中间件厂商的强者,它们对于 Java 的影响是至关重要的。前不久投票被否决的 JSR 376(JPMS) 模块化提案,就是 Redhat 和 IBM 先后表示要投反对票,最后才没有通过的。
另外的几个重要的 Java 参与方分别包括:巨型互联网公司,以 Twitter 为代表;大型金融公司,以高盛,瑞信为代表;强大的硬件产商,Intel,NXP,Gemalto 等;大型系统方案厂商,HP, Fijitsu;当然还有掌握先进 Java 技术的公司,如 Azul,Hazelcast,Tomitribe,Jetrains 等等。这些公司共同对 Java 的发展起到关键作用。
5.GC 方面的进展
JDK 中主要的 GC 分类有:
-
Serial,单线程进行 GC,在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。
-
Parallel,相比 Serial 收集器,Parallel 最主要的优势在于使用多线程去完成垃圾清理工作,这样可以充分利用多核的特性,大幅降低 GC 时间。
-
CMS(Concurrent Mark-Sweep),是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。实现 GC 线程和应用线程并发工作,不需要暂停所有应用线程。
-
G1(Garbage First Garbage Collector),G 设计初衷是为了尽量缩短处理超大堆(大于 4GB)时产生的停顿。相对于 CMS 的优势而言是内存碎片的产生率大大降低。
目前在 JDK8 中以上 4 种 GC 都可以使用,而在 JDK9 中 G1 GC 会成为默认的垃圾收集器。
在 OpenJDK 方面,Redhat 开源并贡献了 Shenandoah GC。这是一种新的 Java 虚拟机 GC 算法,目标是利用现代多核 CPU 的优势,减少大堆内存在 GC 处理时产生的停顿时间。在使用大内存的应用上使用,如 >20G 堆空间。Fedora24 以后,官方源中的 OpenJDK 即带有 Shenandoah 算法,不过 JDK9 中还不会被加入。
无停顿的高性能 GC 就是 Azul 公司的 C4(Continuously Concurrent Compacting Collector) GC 了,但只提供商业版本使用。
另外 IBM J9 中 Balanced GC,表现也很出色,能够保证相对一致的暂停时间而避免破坏性的长时间停顿。Balanced GC 应用在各类 IBM 中间件产品之中。
6.Java 9 目前已经可以确认的特性介绍
Java9 中,最受人关注的新特性就是 Jigsaw 项目带来的模块化技术特性。
Java 语言一直缺乏语言级别的模块化能力,目前模块化技术通过 OSGi, JBoss Modules 等项目,已经在服务端程序得到了广泛的应用。Java 在语言级别引入模块化能力,将极大的促进 Java 应用程序组件化,模块化的改变。应用程序通过模块化拆分,可以做到更灵活的引入,加载,移除组件,占用更少的内存,更适合云计算时代的要求。在 JDK9 EA(预览版)中,原有的 rt.jar 已经被划分为若干了 jmod,通过模块内的 module-info.java 文件来声明模块间的引用关系。
然而,模块化改造是个渐进而适度的过程,Java9 为了可兼容 Java8 以前应用程序的运行,做出很多的让步,模块定义严格性没有那么苛刻。各个厂商也有对自己现有系统可无缝运行在 Java9 上的商业诉求。Java 模块化提案还得花更多的时间去讨论和修改。
Java9 中的 jshell 工具实现了 REPL,即读取,求值,打印,循环。这个工具可以使得开发者交互式的使用 Java,方便于系统管理,调试,使用。可以想像到有了 jshell 后,Java 语言更加适合初学者入门学习。
Jlink 工具和 AOT(预先编译技术)。一直以来,Java 运行方式是把程序编译成 class 文件,然后通过 jvm 运行的。这种工作方式可以做到跨平台移植,在互联网时代初期,各种 Unix 繁荣和 Windows 在桌面的一统局面下,对于占据市场起到决定性作用。
然而到了今天,无论是大型互联网公司还是企业内部,x86 平台 64 位服务器已经成为主要的选择。从运行效率考虑,可以把 java 程序编译成可执行的二进制文件,更加适应云计算和容器技术发展的需要。
利用 jlink/jaotc 工具,可以把一个 Java 程序编译成可执行文件,在 Java9 推出时,可能只有 java.base 模块支持 AOT。
安全方面的加强。引入新的摘要算法 SHA-3,内置 ALPN 使得更好的支持 HTTP/2 协议,提供 DTLS(数据包传输层安全性协议),可以保证 UDP 数据传输的安全,PKCS12 格式替代原有的 JKS 成为 keystore 的默认格式。
此外,统一 JVM 日志 (Unified JVM Logging),多版本共存 jar(Multi-release jar files),接口内部的私有方法 (Interface provate method) 等也是非常重要的新特性。
JavaMilk/JDKHistory: Show the history of JDK. https://github.com/JavaMilk/JDKHistory
一些术语
- 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平台中任务依赖的部分。这可以更好地适应云端的开发。
具体的特性包括:
- JEP 102: 改善了控制和管理操作系统进程的 API。
- JEP 110: 定义了一个新的 Http 客户端 API,它实现了
HTTP/2
和WebSocket
,并且可以替代遗留的HttpURLConnection
API。该 API 将会以一个 incubator 模块的形式进行交付。 - JEP 143: 提高竞争 Java 对象的监视性能。
- JEP 158: 统一 JVM 的日志。
- JEP 165: 通过支持运行时管理来增加对 JVM 编译器的管理。
- JEP 193: 对变量处理的改进。
- JEP 197: 将代码缓存划分成不同的段。
- JEP 200: 采用 Java 平台模块化系统(Java Platform Module System,JPMS)对JDK进行模块化。
- JEP 201: 源代码模块化。
- JEP 211: 在 import 语句中 省略
deprecation
的警告。 - JEP 212: 解决 lint 和 doclint 警告。
- JEP 213: Project Coin 的改变
- JEP 214: 移除 JDK 8 中 GC 组合器的废弃说明。
- JEP 215: 在 javac 中实现了一个新的类型检测策略。
- JEP 216: 正确地处理导入声明。
- JEP 217: 注解流水线 2.0。
- JEP 219: 定义了数据传输层安全(Datagram Transport Layer Security, DTLS)API。
- JEP 220: 模块化运行时镜像。
- JEP 221: 简化
Doclet
API。 - JEP 222: jshell - Java 中的交互式命令行。
- JEP 223: 新的版本字符串模式。
- JEP 224: 增强了 javadoc 工具来生成 HTML5 标记。
- JEP 225: 增加了 javadoc 搜索。
- JEP 226: UTF-8 属性文件资源的Bundle相关变化。
- JEP 227: Unicode 7.0。
- JEP 228: 增加更多可诊断的命令。
- JEP 229: 将默认的秘钥库从 JKS 替换为 PKCS12。
- JEP 231: 移除运行时 JRE 版本选择。
- JEP 232: 增强了安全相关应用的性能。
- JEP 233: 开发了一个工具来自动测试运行时编译器。
- JEP 235: 增加关于 javac 生成类文件属性的 测试。
- JEP 236: 定义了解析 API 来支持 Nashorn 的 ECMAScript 抽象语法树。
- JEP 237: Linux/AArch64 端口相关。
- JEP 238: 多版本 JAR 文件。
- JEP 240: 移除 JVM 的 TI hprof 客户端。
- JEP 241: 移除 jhat 工具。
- JEP 243: 提供 Java 语言级的 JVM 编译接口。
- JEP 244: TLS 应用层协议协商。
- JEP 245: 验证 JVM 命令行标志参数。
- JEP 246: 利用 CPU 指令提升 GHASH 和 RSAd 的性能。
- JEP 247: 对老平台版本的编译支持。
- JEP 248: G1 作为默认的垃圾回收器。
- JEP 249: 基于 TLS 实现 OCSP Stapling。
- JEP 250: 在类数据分享(CDS)归档中存储 interned 字符串。
- JEP 251: 多方案镜像。
- JEP 252: 默认使用 CLDR Locale Data。
- JEP 253: 为 JavaFX UI 控制 和 CSS API 的模块化做准备。
- JEP 254: 采用一个空间更加高效的 String 内部表示。
- JEP 255: 合并 Xerces 2.11.0 中的更新。
- JEP 256: BeanInfo 注解调整。
- JEP 257: 更新 JavaFX/Media 中 GStreamer 的版本。
- JEP 258: 使用 HarfBuzz 作为字体布局引擎。
- JEP 259: 定义了一个高效标准的 Stack-Walking API。
- JEP 260: 封装大部分的内部 API。
- JEP 261: 实现模块化系统。
- JEP 262: 支持 TIFF 图像 I/O。
- JEP 263: 实现 Windows 和 Linux 高分辨率图像接口。
- JEP 264: 平台日志 API 和 服务。
- JEP 265: Java 2D 使用 Marlin Graphics Renderer。
- JEP 266: 并发相关的一些更新。
- JEP 267: 支持 Unicode 8.0。
- JEP 268: 支持 XML 目录。
- JEP 269: 增加一些集合类创建的工厂方法。
- JEP 270: 为临界区预留栈的某些区域。
- JEP 271: 统一 GC 日志。
- JEP 272: 增加特定平台的桌面特性。
- JEP 273: Deterministic Random Bit Generator (DRBG) 的实现。
- JEP 274: 增强方法处理器。
- JEP 275: Java 应用模块化打包。
- JEP 276: 语言定义对象模型的动态链接。
- JEP 277: 改善 Deprecation。
- JEP 278: 为 G1 中的巨大对象增加测试。
- JEP 279: 改进测试故障排除。
- JEP 280: 指示字符串串联。
- JEP 281: HotSpot C++ 单元测试框架。
- JEP 282: Java连接器 jlink。
- JEP 283: 在 Linux 上支持 GTK 3。
- JEP 284: 新的 HotSpot 构建系统。
- JEP 285: 自旋等待提示。
- JEP 287: 实现 SHA-3 Hash 算法。
- JEP 288: 禁止 SHA-1 验证。
- JEP 289: 废弃 Applet API。
- JEP 290: 过滤输入的序列化数据。
- JEP 291: 废弃 Concurrent Mark Sweep (CMS) 垃圾收集器。
- JEP 292: 在 Nashorn 中支持 ECMAScript 6 特征。
- JEP 294: Linux/s390x 端口。
- JEP 295: 提前编译。
- JEP 297: 统一 arm32/arm64 端口。
- JEP 298: 移除过时的例子。
- JEP 299: 重新组织文档。
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 更加适应海量云计算的需要。
具体的特性包括:
- JEP 117: 移除注解处理工具(Annotation-Processing Tool,apt)。
- JEP 124: 增强证书撤销检查 API。
- JEP 130: 实现 SHA-224 消息摘要算法。
- JEP 131: 在 64-bit Windows 中支持 PKCS#11。
- JEP 112: Charset 实现改善。
- JEP 129: 实现 NSA Suite B 加密算法。
- JEP 105: DocTree API。
- JEP 106: 扩展
javax.tools
API 来支持 javadoc 的访问。 - JEP 113: 在 JDK 的 Kerberos 5 中添加 MS-SFU 扩展。
- JEP 114: TLS Server Name Indication (SNI) 扩展。
- JEP 121: 提供更强的 Password-Based-Encryption (PBE) 算法实现。
- JEP 122: 移除永久带(Permanent Generation)。
- JEP 127: 改善 Locale Data Packaging,并且采用 Unicode CLDR Data。
- JEP 128: Unicode BCP 47 本地匹配。
- JEP 133: 支持 Unicode 6.2。
- JEP 136: 增强错误验证。
- JEP 153: 启动 JavaFX 应用。
- JEP 177: 优化
java.text.DecimalFormat.format
。 - JEP 103: 并行数组排序。
- JEP 135: Base64 编码和解码。
- JEP 138: 基于 Autoconf 的自动构建系统。
- JEP 139: 增强 javac 来提高构建速度。
- JEP 142: 减少对于特定域的高速缓存的争夺。
- JEP 147: 减少类元数据占用。
- JEP 148: 支持小虚拟机(不超过3M)的创建。
- JEP 149: 减少核心库的内存使用。
- JEP 150: 新的 Date 和 Time API。
- JEP 160: lambda 函数表达式。
- JEP 164: 利用 CPU 指令进行 AES 加密。
- JEP 166: 针对JKS、JCEKS、PKCS12秘钥存储的修改。
- JEP 170: JDBC 4.2。
- JEP 172: DocLint。
- JEP 173: 放弃一些很少使用的 GC 组合。
- JEP 101: 泛华目标类型接口。
- JEP 104: 在 Java 类型上加注解。
- JEP 107: 增加集合的批量数据操作。
- JEP 109: 在核心库中增加 Lambda 表达式。
- JEP 115: 认证加密的密码套件。
- JEP 118: 在运行时访问参数名称。
- JEP 119: 通过反射实现
javax.lang.model.*
API。 - JEP 120: 重复注解。
- JEP 123: 可配置的安全随机数生成。
- JEP 126: lambda 表达式和虚拟扩展方法。
- JEP 140: 限制的 doPrivileged。
- JEP 155: 并发库更新。
- JEP 161: 紧凑版本。
- JEP 162: 为模块化做准备。
- JEP 171: 在
sun.misc.Unsafe
中增加三个内存排序相关的指令。 - JEP 174: Nashorn JavaScript 引擎。
- JEP 176: 提供调用者敏感的检测机制。
- JEP 178: 静态链接的 jni 库。
- JEP 179: JDK API 的文档的支持和稳定。
- JEP 180: 对于频繁冲突的 HashMap 使用平衡树。
- JEP 184: HTTP URL的权限。
- JEP 185: 限制外部 XML 资源的获取。
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"的口号。
2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布。
目前,JDK官网上已经可以看到JDK 13的进展,最新版的JDK 13将于2019年9月17日发布。
JDK各版本内容和新特性 - yanlzhl - 博客园 https://www.cnblogs.com/yanlzhl/articles/5694470.html
版本JDK1.0:1995年初发布了Java语言,1996年初发布JDK1.0版本,这个版本包括两个部分:运行环境(即 Java Runtime Environment,JRE)和开发环境(即 Java Development Kit,IDK)。运行环境包括核 心API,集成API、用户界面API、发布技术、Java虚拟机(即 Java Virtual Machine,JVM)五个部分;其中开发环境包括编译Java程序的编译器(即 javac 命令)。
版本JDK1.1:1997年2月18发布了jdk1.1版本;增加了JIT(Just In Time,即时编译)编译器。相对于传统编译器,它会将经常用到的指令保存到内存中。当下次调用的时候不需要重新编译了,此方式让JDK在效 率上有了较大优势。
版本JDK1.2:1998年12月发布,此版本是Java历史上最重要的JDK版本,伴随JDK1.2一同发布的还有JSP/SERVLET、EJB等规范,并将Java分成了J2EE、J2SE和J2ME三个版本。
J2ME:主要用于控制移动设备和信息家电等有限存储的设备。
J2SE:整个Java技术的核心和基础,它是J2ME和J2EE编程的基础。
J2EE:Java技术中最广泛的部分,它提供了企业应用开发相关的完整解决方案。
这标志着Java已经吹响向企业、桌面、移动三个领域进军的号角,标志Java已经进入Java2时代,这个时期也是Java飞速发展的时期。
版本JDK1.4:2002年2月发布此版本,是JDK历史上最为成熟的版本。此时犹豫Compaq,Fujitsu、SAS、Symbian、IBM等公司的参与,使JDK1.4成为发展最快的一个JDK版本。JDK1.4已经可以使用Java实现 大多数的应用了。
在此期间,Java语言在企业应用领域大放异彩,涌现大量基于Java语言的开源框架:Struts、WebWork、Hibernate、Spring等;大量企业应用服务器也开始涌现:WebLogic、WebSphere、 JBoss等。
版本JDK1.5:2004年10月发布了万众期待的JDK1.5,同时,Sun将JDK1.5改为Java5.0,J2EE、J2SE和J2ME也相应的改为Java SE、Java ME、Java EE。增加了泛型、增强for循环、可变数量的形参、注释 (Annotations)、自动拆箱和装箱等功能;发布新的企业级平台规范,如通过注释等新特性来简化EJB的复杂性,并推出EJB3.0规范,还推出了自己的MVC框架规范:JSF。
版本JDK6:2006年12月发布。引入了一个支持脚本引擎的新框架、UI的增强、对WebService支持的增强(JAX-WS2.0和JAXB2.0)、一系列新的安全相关的增强、JDBC4.0、Compiler API、通用的 Annotations支持。
版本JDK7:2011年7月28日Oracle公司发布,引入了二进制整数、支持字符串的switch语句、菱形语法、多异常捕捉、自动关闭资源的try语句等新特性。
版本JDK8:2014年3月18日,oracle公司发布了Java1.8,带来了全新的Lambda表达式,函数式接口、Lambda 表达式、集合的流式操作、注解的更新、安全性的增强、IO\NIO 的改进、完善的全球化功能等。
OpenJDK: JDK Updates Project http://openjdk.java.net/projects/jdk-updates/
JDK 9 & Later
Oracle's OpenJDK JDK binaries for Windows, macOS, and Linux are available on release-specific pages of jdk.java.net as .tar.gz
or .zip
archives.
As an example, the archives for JDK 13 may be found on jdk.java.net/13 and may be extracted on the command line using
$ tar xvf openjdk-13*_bin.tar.gz
or
$ unzip openjdk-13*_bin.zip
depending on the archive type.