阅读更多

0顶
0踩

编程语言
引用
原文:What to expect in Java 9’s JDK: More than modularity
作者:Paul Krill
译者:Teixeira10

【译者注】在本文中,作者介绍了即将在9.21发布的Java 9新特性,除了最重要的模块化以外,还涉及到编译,工具,协议,缓存等新特点,也提及了在此次版本中移除的功能,供Java爱好者阅读和参考。
以下为译文:

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

JDK 9的Java平台模块系统

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一直在努力实现模块化平台。

为了实现模块化,已经多次延迟了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编译器的项目有GraalMetropolis

新的编译器控制功能旨在控制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工具也被删除了,它已经被高级的堆可视化工具和分析器淘汰了。
  • 大小: 110 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • spark不同模式下应用程序运行的日志存放位置

    spark不同运行模式下,应用程序运行的输出日志位置

  • Spark应用程序运行日志查看

    比如,Spark应用程序代码如下: defseq(a: Int, b: Int): Int = {   println("seq: " + a + "\t "+ b)   math.max(a, b) }  defcomb(a: Int, b: Int): Int = {   println("comb: " + a + "\t "+ b)   a + b  }    vardata11= sc.

  • Spark应用程序运行的日志存在哪里

    spark应用程序运行日志

  • spark学习-运行spark on yarn 例子和查看日志.

    要通过web页面查看运行日志,需要启动两个东西 hadoop启动jobhistoryserver和spark的history-server. 相关配置文件: etc/hadoop/mapred-site.xml <!--配置jobhistory的地址和web管理地址--> <property> <name>mapr...

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

    官方列出了JDK 9的大约90个新特性,模块化是最主要的一个。将Java重新配置成模块化格式,这项任务已经持续了多年,但在编译、代码缓存和JavaScript部署等领域也会有其他改进。 JDK 9的Java平台模块系统 Java 9最...

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

    【译者注】在本文中,作者介绍了即将在9.21发布的Java 9新特性,除了最重要的模块化以外,还涉及到编译,工具,协议,缓存等新特点,也提及了在此次版本中移除的功能,供Java爱好者阅读和参考。 以下为译文: 在多...

  • “支持Java 9的最实质性论点是JDK本身的模块化”

    JAXenter:Jigsaw项目向Java引入了模块化系统。 值得等待吗? Falk Sippach :Jigsaw的最重要原因是它模块化了JDK本身。 使用Jigsaw,现在可以在更小的,经过修改的运行时中交付Java应用程序。 对于嵌入式和移动...

  • 微服务 java9模块化_Java9系列第8篇-Module模块化编程

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注。期待您能关注我,我将把java 9 写成一系列的文章,大概十篇左右,本文...

  • spark日志查看

    找到application id进去 这里查看driver 或者进入spark的history 来这里可以同时查看所有的executor,包括driver。点开executor后可以看到你所有的executor,和一个driver。日志见右侧。stdout是自己定义println的输出日志,stderr是spark输出的规范日志。 对于driver日志而言,代码中的println()和show()等函数的输出,一般都在stdout里,大部分重要的报错信息都在stderr里。如果application

  • 完美解决Spark应用日志级别设置

    最近在研究Spark的相关知识,本地搭建了一个开发环境Windows7+Eclipse+JDK1.7。 一. 日志效率原因 开发时,控制台输出一大堆日志信息,严重影响查看日志效率。 从控制台输出日志我们可以看出,应用程序是默认加载Spark-core包下面的log4j-defaults.properties日志文件。查看log4j-defaults.properties文件 由上图可知,Spark-core包设置默认的日志级别为info,所以我们才看到一大堆日志信i息。 那针对以上问题,在开发过程中我

  • Java学习路线:day30 JDK9-11新特性

    Java11新特性Java 9 的新特性JDK 9 的发布jdk目录结构的改变java9新特性:模块化系统java9新特性:Java的REPL工具:jshellJShell相关命令java.lang.IllegalAccessException: class org.junit.runners.BlockJUnit4...

  • java 模块化 技术_Java 模块化系统初探

    Java 模块化系统自提出以来经历了很长的时间,直到 2014 年晚些时候才最终以 JSR(JSR-376) 定稿,而且这个部分有可能在 Java 9中出现。但是一直以来都没有可以使用的原型。9 月 11 日,OpenJDK 发布的早期构建版本...

  • JDK 9:模块系统状态的重点

    马克·雷因霍尔德 ( Mark Reinhold )的“模块系统状态 (SOMS)”已于本月初发布,它提供了信息丰富的可读性“对项目Jigsaw中原型的Java SE平台进行了增强的非正式概述,并被提议作为JSR 376的起点。” 在这篇文章...

  • java模块化系统实践_Java模块化系统初探

    对 Java 模块进行编译现在进行下一步:编译我们的模块,并关联源文件。为了做这项工作,我们将介绍一个新的 javac 编译参数:javac -modulesourcepath src -d mods $(find src -name '*.java')使用上面语句时,我们...

  • jdk 11 模块系统_JDK 9:模块系统状态的重点

    jdk 11 模块系统 马克·雷因霍尔德 ( Mark Reinhold )的“模块系统状态 (SOMS)”已于本月初发布,它提供了信息丰富的可读性“对Jigsaw项目中原型的Java SE平台进行了增强的非正式概述,并被提议作为JSR 376的...

  • java 8是什么_jdk8, jdk8u, jdk9, jdk10的侧重和区别是什么?

    题主问的是OpenJDK的代码...所以例如说当前的正式发布版JDK是JDK7u的时候,当前的最新开发版本就是JDK8,此时所有JDK的功能研发都是在JDK8分支上做的,只有少量功能会backport回到JDK7u上;早期会backport更多功能...

  • Java 8 要过时了?从JDK8飞升到JDK17,一次性给你讲明白

    这么多新版本的 JDK,而且2022年还会推出 JDK 18 和 JDK 19,为什么 Spring 选择了 JDK 17呢。主要是因为他是一个 Oracle官宣可以免费商用的LTS版本,所谓 LTS,是 Long Term Support,也就是官方保证会长期支持的...

  • Java中JDK的区别

    Java经历了这些年的发展,在JDK上有了各种各样的版本更新,在每个版本之间都有不一样的新功能,下面我们就一起来了解一下关于每个JDK之间的功能区别:JDK 1.51.自动装箱与拆箱: 2.枚举(常用来设计单例模式) 3....

Global site tag (gtag.js) - Google Analytics