继 2014 年 3 月份 Java 8 发布之后,Open JDK 加快了开发速度, Java 9 的发布已经提上日程。预计在 2016 年发布 Java 9,同时公布了 JEP (JDK 改进提议)中的前期列表。任职于 Takipi 的 Alex Zhitnitsky 整理了 Java 9 中一些纳入 JSR (Java 规范提案)的新特性和大家一直期待但未确定的一些特性。这些特性有 Jigsaw 项目、新的智能编译工具、期待已久的 API (如简化了的进程 API、JSON API、货币处理 API 等)、代码分段缓存等。
现就对这些特性进行了一个全面的梳理。
已接受的特性
1、 Jigsaw 项目:模块化 JDK 源码
Jigsaw 项目即 JEP201是为了模块化 Java 代码,并将 JRE 分成相互协作的组件。JEP 是迈向 Jigsaw 四步中的第一步,它只是模块化 JDK 源代码,不会改变 JRE 和 JDK 的真实结构,从而使得编译系统能够模块编译并在构建时检查模块边界。这个项目原本是随着 Java 8 发布的,但由于推迟,所以将把它加到 Java 9 中。Jigsaw 项目一旦完成,将允许开发者根据项目的需要自定义组件,从而减少 rt.jar 的大小;还可以做到使 Java 能够更加容易的应用到小型计算设备(如网络设备)中,同时也能够使得开发者更加容易地构建和维护这些类库。更多相关信息参见 JEP201。
2、简化了的进程 API
目前,Java 控制与管理系统进程的能力是有限的,为了获得操作系统的一些信息需要调用本地程序或者其他变通方案。然而,在 Java 9 中将会新增一些新的、直接明了的方法来处理进程 ID、名字和状态以及枚举多个 JVM 和进程等,从而扩展 Java 与操作系统的交互能力。更多相关信息参见 JEP102。
3、 轻量级的 JSON API
尽管目前有多种处理 JSON 的 Java 工具(如 Google 的 Gson、阿里巴巴的 FastJson、IBM 的 Json4J 等),但 JSON API 是 Java 语言的一部分,轻量并且运用了 Java 8 的新特性。JSON API 将放在 java.util 包里一起发布,这样,开发者就可以直接使用 JDK 而无需再引入第三方 JSON 工具包了。更多相关信息参见 JEP198。
4、 钱和货币的相关 API
Java 9 引入了新的货币 API, 用来表示货币, 并支持币种之间的转换和各种复杂运算。更多的相关具体信息,参见 JavaMoney 项目和 JSR354。
5、 改善锁争用机制
锁争用限制了许多 Java 多线程应用性能,新的锁争用机制改善了 Java 对象监视器的性能,并得到了多种基准测试的验证(如 Volano),这类测试可以估算 JVM 的极限吞吐量。实际中, 新的锁争用机制在 22 种不同的基准测试中都得到了出色的成绩。如果新的机制能在 Java 9 中得到应用的话, 应用程序的性能将会大大提升。更多相关信息参见 JEP143。
6、代码分段缓存
Java 9 的另一个性能提升来自于 JIT (Just-in-time)编译器。当某段代码被大量重复执行的时候, 虚拟机会把这段代码编译成机器码(native code)并储存在代码缓存里面, 继而通过访问缓存中不同分段的代码来提升编译器的效率。代码分段缓存机制将会提升许多方面的性能,如当 JVM 进行垃圾回收扫描的时候,就可以直接跳过永驻代码,从而提升效率。更多相关信息参见 JEP197。
7、智能 Java 编译工具
智能 Java 编译工具(sjavac)的第一阶段始于 JEP139这个项目, 用于在多核处理器情况下提升 JDK 的编译速度。如今,这个项目已经进入第二阶段即 JEP199, 其目的是改进 Java 编译工具,并取代目前 JDK 编译工具 javac,继而成为 Java 环境默认的通用的智能编译工具。更多相关信息参见 JEP199。
期待但未确定的特性
1. HTTP 2.0客户端
虽然 HTTP 2.0 标准还没正式发布, 但是它已经进入了最终审查阶段,并预计将在 Java 9 发布之前审查完毕。HTTP 2.0 客户端即 JEP110将重新定义并实现一个全新的 Java HTTP 客户端, 用来取代现在的 HttpURLConnection, 同时还会实现 HTTP 2.0 和 WebSockets 等接口。另外,官方的 HTTP 2.0 RFC 预计于 2015 年 2 月发布, 它基于 Google 的 SPDY 协议。基于 SPDY 协议的网络相对于基于 HTTP 1.1 协议的网络有 11.81% 到 47.7% 的显著提速。更多相关信息参见 JEP110。
2. Kulla项目: Java 的 REPL 实现
现在,Java 官方并没有提供 REPL (读取-求值-打印-循环)的实现。当我们需要运行几行 Java 代码做一个快速测试时, 我们不得不把这几行代码封装在项目或者方法里,才可以完成测试,而 Kulla 弥补了这些不足。Kulla 将于 2015 年 4 月进行整合测试,如果 Kulla 进度比较快的话,或许能够加入到 Java 9 中,就有希望成为 Java 官方发布的 REPL 解决方案。更多关于 Kulla 的相关信息参见于 Kulla 的计划安排。
另外,请读者注意,JEP 和 JSR 来自 Java 发展的生态环境,包括对特定技术内容有共同兴趣的组织和个人组成的小组、至少由一个小组赞助和支持的项目(如最近的 Lambda 项目、Jigsaw 项目、Sumatra 项目)、被正式认可的 JEP 以及 JSR。