继 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。
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论