Java 9的JDK中值得期待的:不单单是模块化

在屡次延期后,Java 9将于9月21日以Java开发工具包9的形式出现,这是自2014年3月以来,Java标准版的第一次重大升级。官方列出了JDK 9的大约90个新特性,模块化是最主要的一个。将Java从新配置成模块化格式,这项任务已经持续了多年,但在编译、代码缓存和JavaScript部署等领域也会有其余改进。java

JDK 9的Java平台模块系统c++

Java 9最宝贵的特性,即模块化——以Java平台模块系统的形式——旨在将JDK分为运行、编译或构建时的一组模块。模块化被称为“可传递”的变化,这能够更好地理解跨模块的依赖关系。浏览器

Java 9的模块化方面包括应用程序打包、模块化JDK以及将源代码从新组织到模块中。在构建时,构建系统将强化编译模块并增强模块边界。JDK和Java运行环境(JRE)的镜像将被重构,以此来处理模块。同时,JavaFX UI控件和CSS API也将被模块化。缓存

JDK 9将支持许多配置,可伸缩性、安全性和应用程序性能也会获得改进。将Java简化为小型设备是模块化工做的关键。Java平台模块系统,是Jigsaw项目的一个组件,也将被实现。安全

经过模块化,开发人员可以更好地为Java SE(标准版)和EE(企业版)构建和维护大型应用程序。但Oracle、IBM、Red Hat和其余公司关于如何在平台上作出完全改变的问题上存在分歧。该模块系统在5月曾被否认,但在6月进行了第二次投票后,才得到批准。服务器

关于模块化是否会对Java开发人员有着很大的好处,还存在争议,一些专家表示同意,而另外一些专家则不赞同。但无论怎样,Oracle一直在努力实现模块化平台。app

为了实现模块化,已经屡次延迟了Java 9的发布,由于Oracle一直在尝试更简单地迁移到Java 9,而且计划容许对类路径上的代码进行非法的反向访问,同时JRE会使用它来搜索类和资源文件。此功能将在Java 9以后被禁用。框架

在Java 9的JDK中编译模块化

Java 9为编译代码提供了几种新功能,其中最主要的功能是提早编译。这个功能仍然处于实验阶段,此功能容许在虚拟机启动以前将Java类编译为本机代码。该特性旨在提升小型和大型应用程序的启动时间,同时对峰值性能几乎没有影响。工具

即时(JIT)编译器速度很快,可是Java程序已经变得如此之大,以致于JIT须要很长时间才能彻底启动,这使得一些Java方法没法编译,性能也愈来愈弱。提早进行编译是为了解决这些问题。

但Java技术供应商Excelsior的市场总监Dmitry Leskov担忧,这种时间上的编译技术还不够成熟,并但愿Oracle能在Java 10后再推出更可靠的版本。

Java 9还实现了Oracle智能编译部署的第二阶段。这个特性包括改进javac工具的稳定性和可移植性,以便在JVM(Java虚拟机)能默认使用它。该工具也将被推广,所以它能够用于JDK以外的大型项目。

另外一个新的实验,编译特性是java级别的JVM编译器接口(JVMCI)。这个接口容许用Java编写的编译器被JVM用做动态编译器。JVMCI的API提供了访问VM结构、安装编译代码和插入JVM编译系统的机制。

用Java编写的JVM编译器应该须要一个高质量的编译器,它比用C或c++编写的现有编译器更容易维护和改进。另外,现有支持Java编译器的项目有Graal和Metropolis。

新的编译器控制功能旨在控制JVM编译器的细粒度和方法依赖,让开发人员在运行时更改编译器控制选项,而又不会形成性能降低。该工具还能够为JVM编译器错误提供工做区。

Java 9的JDK还将更新javac编译器,这样它就能够编译Java 9程序,以运行在一些Java的旧版本上。

Java 9实现了REPL

Java 9将会有一个read-eval-print loop(REPL)工具——这是Java的另外一个长期目标,通过多年的Kulia项目开发以后,在这个版本中它将变得真实。

Java 9的REPL被称为jShell,它交互式地评估声明语句和表达式。开发人员只需输入一些代码,就能够在编译以前得到对程序的反馈。

命令行工具的功能包括结束标签和自动添加所需的终端分号。jShell API容许在IDE和其余工具中使用jShell功能,尽管工具自己并非IDE。

人们认为,缺少REPL工具是院校愈来愈不肯授课Java的一个缘由(Python和Scala等语言早就有REPL了)。Scala语言的创始人Martin Odersky质疑Java的REPL的实用性,他说Java是面向语句的,而REPL是面向表达式的。

JDK 9中实行代码缓存分段

JDK 9容许将代码缓存分红几个部分,以提升性能,并容许扩展(好比细粒度的锁)。因为专门的迭代器会跳过非方法代码,因此扫描时间须要被提升。分离非方法、异形和非异形码,提升一些基准测试的执行时间。

Java 9支持更多的标准

Java 9增长了对几个标准的支持。

新的HTTP/2 client API实现了HTTP/2协议,同时升级到Web的核心HTTP协议和WebSocket协议,基于浏览器的交互式通讯。新的API能够替代HttpURLConnection API,HttpURLConnection API的问题是它包含已经失效的协议predating HTTP/1,这个太抽象,很难使用。可是,在JDK 9发布时,新的HTTP/2 API仍然处于beta测试阶段。

JDK 9还增长了对HTML5的支持。Javadoc API文档工具功能已经被加强,能够生成HTML5标记。

Java 9还将支持Unicode 8.0编码标准,该标准增长了8000个字符、10个模块和6个脚本。

对于安全性,Java 9为DTLS(数据包传输层安全性协议)添加了一个API。该协议的设计目的是防止在client/server通讯中出现窃听、篡改和消息伪造,这将为客户端和服务器模式提供一个安全模式。

JDK 9得到了更多的JavaScript支持(Nashorn项目)

Nashorn项目是为了能让JavaScript在Java上进行高性能且轻量级的运行,这是在Rhino项目后的Netscape开始进行的。Nashorn项目负责在Java应用程序中嵌入JavaScript。其实在JDK 8中已经为Java提供了一个JavaScript引擎。

JDK 9将包括一个用于ECMAScript语法树的解析器API。API将经过IDE和服务器框架实现ECMAScript代码分析,而不依赖于Nashorn项目的内部实现类。

Java 9弃用和移除了哪些功能

Java 9弃用和移除一些再也不流行的特性。其中最主要的是Applet API,它将被弃用。如今,安全浏览器已经取消了对Java浏览器插件的支持,由于这些已通过时了,HTML5的出现也加速了它们的灭亡。开发人员将转向到诸如Java Web Start这样的替代方案,用于在浏览器中启动应用程序或者安装应用程序。同时,appletviewer工具也被弃用了。

Java 9将弃用Concurrent Mark Sweep (CMS)垃圾收集器,并在将来的版本中中止支持它。其目的是加速在HotSpot虚拟机中的其余垃圾收集器的开发。低暂停G1垃圾收集器将是CMS的长期替代品。

与此同时,JDK 8中被弃用的垃圾收集组合将在JDK 9中删除。这之中包括不多使用的组合,如增量CMS、ParNew + SerialOld和DefNew + CMS,由于它们增长了垃圾收集器代码库的额外复杂度。

Java 9还将对import语句进行省略Java警告,以帮助大型代码库清除lint警告。在这些代码库中,对被弃用的功能,还会支持一段时间,并且若是是有目的地要使用一个被弃用的构造,那么导入弃用的构造就不须要发出警告消息。

在启动时经过多个JRE(mJRE)特性选择JRE的功能也被弃用。这种功能不多被使用,由于这会使Java启动器的实现变得更加复杂,而且在JDK 5中首次出现时,它从未被彻底地实现。

Oracle正在删除JVM TI(工具接口)hprof(堆分析)代理,它已被JVM取代。jhat工具也被删除了,它已经被高级的堆可视化工具和分析器淘汰了。

相关文章
相关标签/搜索