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) 等也是非常重要的新特性。