Java 9终于发布了,Java 开发工具包(JDK) 也已经可供开发者下载。 

Java 9 终于有了 REPL

Java 9 的另一个特性是拥有了 REPL(read-eval-print loop)工具,这是另一个 Java 的长期目标,在 Kulia 项目中经过多年研发后终于在 Java 9 中得以实现。

Java 9 的 REPL 名为 jShell,以交互式的方式对语句和表达式进行求值。开发者只需要输入一些代码,就可以在编译前获得对程序的反馈。

命令行工具的功能包含 tab 自动补全和自动添加分号。jShell API 支持在 IDE 和其他工具中使用 jShell 功能,虽然这个工具本身不是 IDE。

REPL 的缺失是高校想要把 Java 从学校课程中剔除的一个原因(像 Python 和 Scala 之类的语言早就有 REPL 了)。但 Scala 语言的创始人 Martin Odersky 质疑 Java 中 REPL 的作用,他说 Java 是面向语句的,而 REPL 是面向表达式的。

Java 9 引入 HTTP/2 客户端 API

Java 9 引入了 beta 版的 HTTP/2 客户端 API,升级了 Web 核心 HTTP 协议,这个 API 同时也支持 WebSocket。

HTTP/2 API 可以用来代替 HttpURLConnection API,后者存在一些缺点,包括当初是为现在已经失效的协议所设计,早于 HTTP/1,接口定义太抽象以及使用起来不容易。

Java 9 改进了对 HTML5 和 Unicode 的支持

在 JDK 9 中,Javadoc 文档工具经过增强现在支持生成 HTML5 标记文档。Unicode 8.0 编码标准也得到支持,该标准新增 8000 个字符,10 个块和 6 个脚本。

Java 9 新增 DTLS 安全 API

为了安全,Java 9 新增支持 DTLS(Datagram Transport Layer Security) 的 API。这个协议用来在客户端服务器通信中防止窃听,篡改,消息伪造等。客户端和服务端模式都提供了实现。

Java 9 增强了 Steam API 

Java 的 Steam 让开发者能够快速运算,从而能够有效的利用数据并行计算。Java 8 提供的 Steam 能力能够利用多核架构实现声明式的数据处理。

在 Java 9 中,Stream API 通过新增方法, 实现有限制的从 Stream 中添加或者移除元素,遍历 Stream 中的元素,以及通过扩展 Java SE API 集合实现从空值创建流的功能。

Java 9 支持代码缓存的分割

JDK 9 支持将代码缓存分割成段,从而提高性能并实现扩展功能,例如细粒度锁。由于使用专门的迭代器忽略非方法代码,分离非方法,剖析和非剖析代码,结果扫描时间将得到改进。某些基准的执行时间也得到改进。 

Java 9 中还有很多承上启下的特性,为未来创新打下基础或者整合、规范现有碎片化的功能,我会介绍一些有代表性的新特性。

在 Java 虚拟机领域,JEP 271: Unified GC Logging 和 JEP 158:Unified JVM Logging,对各种 JVM 日志进行了统一,大家终于不用为各种碎片化的日志选项苦恼了。

在 JDK 9 中, AOT(JEP 295: Ahead-of-Time Compilation)作为实验特性被引入进来,开发者可以利用新的 jaotc 工具将重点代码转换成类似类库一样的文件,这样会大大降低启动开销。