、工具、协议、缓存等新特性,还提到了这个版本中移除的功能,供Java爱好者阅读参考。以下为译文:经过多次推迟,Java9将于9月21日作为JavaDevelopmentKit9出现,这是自2014年3月以来对Java标准版的首次重大升级。官方列出了JDK9约90项新功能,模块化是最重要的一个。将Java重新配置为模块化格式的任务已经进行了多年,但在编译、代码缓存和JavaScript部署等领域还会有其他改进。JDK9的Java平台模块系统Java9最有价值的特性,模块化——以Java平台模块系统的形式——旨在在运行、编译或构建时将JDK分成一组模块。模块化被称为“传递性”变化,它允许更好地理解模块之间的依赖关系。Java9的模块化方面包括应用程序打包、模块化JDK以及将源代码重组为模块。在构建时,构建系统强制编译模块并强制模块边界。JDK和Java运行时环境(JRE)图像将被重构以处理模块。同时JavaFXUI控件和CSSAPI也将模块化。JDK9将支持许多配置,并在可伸缩性、安全性和应用程序性能方面有所改进。将Java简化为小型设备是模块化工作的关键。Java平台模块系统,ProjectJigsaw的一个组件,也将被实现。通过模块化,开发人员能够更好地为JavaSE(标准版)和EE(企业版)构建和维护大型应用程序。但甲骨文、IBM、红帽和其他公司在如何对该平台进行彻底变革的问题上存在分歧。模块化系统在5月被拒绝,但在6月的第二次投票后才获得批准。关于模块化是否对Java开发人员有很大好处存在争论,一些专家同意而另一些专家则不同意。但无论如何,甲骨文一直在努力实现模块化平台。为了实现模块化,Java9的发布被推迟了数次,因为Oracle一直在努力使向Java9的迁移变得更容易,并计划允许非法反向访问类路径上的代码,而JRE将利用它来搜索类和资源文件。Java9之后将禁用此功能。在Java9的JDK中编译Java9提供了几个用于编译代码的新功能,其中最主要的是提前编译。仍处于实验阶段,此功能允许在启动虚拟机之前将Java类编译为本机代码。此功能旨在改善小型和大型应用程序的启动时间,同时对峰值性能的影响很小。Just-in-time(JIT)编译器速度很快,但是Java程序变得如此庞大以至于JIT需要很长时间才能完全启动,导致一些Java方法无法编译并且性能越来越差。提前编译就是为了解决这些问题。但Java技术提供商Excelsior的营销总监DmitryLeskov担心这种基于时间的编译技术还不够成熟,希望甲骨文在Java10之后发布一个更可靠的版本。Java9也实现了第二阶段的OracleSmartCompile部署。此功能包括提高javac工具的稳定性和可移植性,使其可以在JVM(Java虚拟机)中默认使用。该工具也将得到推广,以便它可以用于JDK之外的大型项目。另一个新的实验性编译功能是Java级JVM编译器接口(JVMCI)。该接口允许JVM将用Java编写的编译器用作动态编译器。JVMCI的API提供了访问VM结构、安装编译代码和插入JVM编译系统的机制。用Java编写的JVM编译器应该需要一个比现有的用C或C++编写的编译器更容易维护和改进的高质量编译器。此外,支持Java编译器的现有项目包括Graal和Metropolis。新的编译器控制功能旨在控制JVM编译器的细粒度和方法依赖性,允许开发人员在运行时更改编译器控制选项而不会降低性能。该工具还可以为JVM编译器错误提供解决方法。Java9的JDK还将更新javac编译器,以便它可以编译Java9程序以在某些旧版本的Java上运行。Java9实现REPLJava9将拥有一个读取-求值-打印循环(REPL)工具——Java的另一个长期目标,经过Kulia项目多年的开发,它将在这个版本中成为现实。Java9的REPL称为jShell,它以交互方式计算语句和表达式。开发人员只需要输入一些代码并在程序编译之前得到对程序的反馈。命令行工具的功能包括关闭标记和自动添加所需的终端分号。jShellAPI允许在IDE和其他工具中使用jShell功能,尽管这些工具本身不是IDE。缺乏REPL工具被认为是机构越来越不愿意教授Java的原因之一(Python和Scala等语言已经有了REPL)。Scala语言的创始人MartinOdersky质疑Java的REPL的用处,说Java是面向语句的,而REPL是面向表达式的。JDK9中实现的代码缓存分段JDK9允许将代码缓存分为几个部分以提高性能并允许缩放(例如细粒度锁定)。由于专用迭代器跳过非方法代码,因此需要改进扫描时间。非方法、外来代码和非外来代码的分离改进了一些基准测试的执行时间。Java9支持更多标准Java9增加了对多种标准的支持。新的HTTP/2客户端API实现了HTTP/2协议,同时升级为Web的核心HTTP协议和WebSocket协议,基于浏览器交互通信。新的API可以替代HttpURLConnectionAPI。HttpURLConnectionAPI的问题在于它包含早于HTTP/1的已失效协议,该协议过于抽象且难以使用。然而,当JDK9发布时,新的HTTP/2API仍处于beta测试阶段。JDK9还增加了对HTML5的支持。JavadocAPI文档工具已得到增强,可以生成HTML5标记。Java9还将支持Unicode8.0编码标准,增加了8000个字符、10个模块和6个脚本。为了安全起见,Java9添加了一个用于DTLS(数据报传输层安全性)的API。该协议旨在防止客户端/服务器通信中的窃听、篡改和消息伪造,这将为客户端和服务器模式提供安全模型。JDK9获得了更多的JavaScript支持(Nashorn项目)Nashorn项目是让JavaScript以高性能和轻量级的方式运行在Java上,它是由Netscape在Rhino项目之后开始的。Nashorn项目负责在Java应用程序中嵌入JavaScript。事实上,JDK8中已经为Java提供了一个JavaScript引擎。JDK9将包含一个用于ECMAScript语法树的解析器API。该API将通过IDE和服务器框架启用ECMAScript代码分析,而不依赖于Nashorn项目的内部实现类。Java9中弃用和删除了哪些功能Java9弃用并删除了一些不再流行的功能。其中最主要的是AppletAPI,它将被弃用。现在,安全浏览器已经取消了对Java浏览器插件的支持,因为它们已经过时,而HTML5的出现加速了它们的消亡。开发人员将转向JavaWebStart等替代方案来启动应用程序或在浏览器中安装应用程序。同时,appletviewer工具也被弃用了。Java9将弃用ConcurrentMarkSweep(CMS)垃圾收集器,并在未来的版本中停止支持它。其目的是加快HotSpot虚拟机中其他垃圾收集器的开发。低暂停G1垃圾收集器将是CMS的长期替代品。同时,在JDK8中弃用的垃圾收集组合将在JDK9中删除。这包括很少使用的组合,例如增量CMS、ParNew+SerialOld和DefNew+CMS,因为它们增加了垃圾收集器代码的复杂性根据。Java9还将省略import语句的Java警告,以帮助消除大型代码库的lint警告。在这些代码库中,已弃用的功能将在一段时间内得到支持,如果有意使用已弃用的构造,则导入已弃用的构造不需要警告消息。通过多个JRE(mJRE)功能在启动时选择JRE的功能也已弃用。这个特性很少被使用,因为它会使Java启动器的实现变得更加复杂,而且它在JDK5中首次出现时从未完全实现。Oracle正在删除JVMTI(工具接口)hprof(堆分析)代理,已被JVM取代。还删除了jhat工具,它已被高级堆可视化器和分析器淘汰。
