人们期待已久的Java SE 9.0将在2017年9月21日发布,它会带来一些重要的变化。
JDK 9的核心变化就是引入了一种新的Java编程组件,也就是模块,按照Oracle的说法,它是一个可命名的、自描述的代码和数据集合。模块技术的核心目标是减少Java应用和Java核心运行时环境的大小与复杂性。为此,JDK本身进行了模块化,Oracle希望通过这种方式提升性能、安全性和可维护性。
为了支持Java 9的模块,引入一种新的模块化JAR文件形式,按照这种形式会在其根目录中包含一个module-info.class文件。Oracle同时提供了工具,允许我们组合和优化一组模块,形成自定义的运行时镜像(image),这样的镜像不必将整个Java运行时包含进来。模块化所带来的其他变化包括从Java运行时镜像中移除了rt.jar和tools.jar。
InfoQ与Ben Evans进行了交流,以了解他对Java 9.0模块系统的看法,他是Java社区进程(JCP)执行委员会的成员。
Evans:我认为最急需重构的应用恰好就是最适合进行模块化的应用。如果你已经备受Lava Flow / God Class / Stovepipe System地狱的折磨,而且你的利益相关方明确知道这一点,那么你可能更容易说服他们进行一次完整的底层重构,通过渐进式的努力形成一个完成的模块解决方案(而不是简单重构并迁移至Java
是值得去做的。
Oracle宣布Java 8会是一个长期支持的发布版本,会一直支持到2022年,因此Evans认为很多的应用将会停留在Java 8上,根本不会升级到Java 9。Evans补充说,有些应用可能会让开发和构建工具链使用Java 8版本,而在生产环境使用Java 9的运行时。
对特定类型的应用来说,这是很有帮助的。例如,我曾经见到有的电子商务网站具有非常大的堆空间,其中包含了大约40G的字符串数据。Java 9的ompact Strings技术能够将这种类型的内存使用减半。这反过来又会对GC的性能带来积极的影响。对于有些应用来说(这可能就包括大型的Solr安装环境及类似场景),单单这一项收益就值得将运行时升级到Java 9。
Java 9使用G1作为默认的垃圾收集器,替代了之前默认使用的Parallel GC。Evans对这项变化的评论:
这项变更是很重要的,因为相对于Parallel来说,G1会在应用线程上做更多的事情,而Parallel几乎没有在应用线程上做任何事情,它基本上完全依赖GC线程完成所有的内存管理。这意味着切换到G1将会为应用线程带来额外的工作,从而直接影响到应用的性能。
在很多(甚至可以说大多数)场景中,这种额外的性能损耗都不是什么问题。但是,在这方面,我确实也曾经见过从Parallel切换到G1时,有一定比例的工作负载会引起性能的下降。对于这些应用来说,这种性能下降是无法接受的,所以他们无法切换至G1收集器。随着G1成为默认的收集器,这将会影响到升级至Java 9的每个应用。
对于大型的代码库是否需要重构为模块的形式,InfoQ询问了Martijn Verburg的意见,他是JClarity的CEO,也是伦敦Java用户组(Java User Group)的联合组织者。
Verburg:需要这样做,另外,我还希望你要处理的大型代码库已经按照一定的模块化结构语义进行了拆分,不管你采用的是OSGi、Maven模块、JBoss模块,还是采用简单的内部规则,将包和接口的结构划分出清晰的边界都可以。
Verburg给出了一些通用的模块化建议,并且指出了开发人员在采用Java 9模块系统时,需要注意的一些事情:
阅读Paul和Sander的图书“Java 9 modularity”:它是本权威指南,提到了所有需要注意的地方,阐述了模块、包以及JAR之间如何运行的关联关系;
在模块边界的地方,使用定义良好的接口并且针对这些接口编程;
不要拆分包(split package),也就是说一个包不要分散到两个模块中。Adopt OpenJDK有个探测工具,我们可以用它来探测已有的代码;
确保不要存在循环依赖(Jigsaw不允许这样);
模块在源码的布局上与我们已习惯的方式有所不同,需要确保构建工具能够进行对应的处理;
Jigsaw不支持多版本。
按照Verburg的说法,核心要点在于处理循环依赖、拆分包的问题,并确保针对接口进行编码。在尝试使用Jigsaw模块化重构之前,针对已有的代码库,这些工作需要预先完成。他还澄清了一个误解,那就是只有模块化的应用才能在Java 9上运行。
由于误解,在这方面有一种FUD(恐惧、不确定和怀疑)情绪,有人误认为在Java 9上运行的必须是模块化的应用。事实并非如此,我们可以将已有的基于类路径的应用直接在Java 9上运行。这里会有一些新的安全限制,因此我们需要设置一些特定的运行时标记(除非你重构代码,使用更安全的方式来访问Java的内部资源),即便如此,默认的行为也只是警告,而不是完全阻止我们(Java 10的限制会更严格)。
Verburg认为Jigsaw会是一个基石,会让Java的演进更快,这要归功于Mark Reinhold、Alan Bateman、Mandy Chung以及Jigsaw团队的其他成员多年来不知疲倦的工作,正是他们的努力使这一切得以实现。
Java 9还引入了jshell工具。这个命令行环境为Java平台带来了读入-求值-打印-循环(Read-Eval-Print-Loop,REPL)功能。它的目的在于以即时结果和反馈的形式,简化原型的实现并帮助我们探索语言在编码时的可选项。
Verburg和Evans看到Java 9中包含了jShell都非常兴奋,但令他们失望的是,HTTP/2只是作为Java 9的一个孵化模块(incubator module)提供的。鉴于社区对这项特性的兴趣和提供的帮助,Evans认为Oracle应该投入足够的工程资源,将HTTP/2交付为GA版本。
JDK 9完整的变更列表可以在Oracle的站点上查阅。Oracle宣布会按照每六个月一次的节奏进行发布,意味着Java 9是最后一次“keystone”特性驱动的版本发布,这反映出了Oracle目前管理Java的特点。Java下一阶段的演化将会按照更短的发布周期并且会按照更加面向特性的方式来发布。Java是否依然能够在服务端技术中占据领导者地位尚有待观察。
文章来源:http://www.china-guan.com/
分享到:
相关推荐
Java SE Runtime Environment 9.0u165 官方安装版(JRE含中文) 运行JAVA程序不可缺少的环境Java SE Runtime。一旦拥有 Java 软件,您即会进入一个全新的jre8互动世界。 Java语言恐怕是稳居网路应用程序语言的...
Tomcat 9.0.x 系列是基于Java SE 8的,这意味着它支持最新的Java语言特性和API。这个版本的Tomcat提供了对Servlet 4.0、JSP 2.3以及EL 3.0规范的支持,这些规范带来了许多增强功能,如异步处理、HTTP/2支持以及对...
作为Java EE Web容器,Tomcat是Apache软件基金会 Jakarta项目的一部分,它提供了对Java标准版(Java SE)的轻量级实现,特别强调了与Java Web应用程序相关的规范。以下是关于Tomcat 9.0的一些关键知识点: 1. **...
其中可能包括对Java版本的支持升级,比如支持Java SE 8、9、10、11和12等。此外,新版本通常会修复已知的漏洞,以增强服务器的安全性,防止恶意攻击。 在Windows环境下安装和配置Apache Tomcat 9.0.50,首先需要...
8. **兼容性**:尽管Tomcat 9主要支持Java EE 8,但它通常也能很好地与Java SE 8及更高版本配合工作,这意味着你可以使用较新的Java语言特性。 9. **配置文件**:Apache Tomcat的配置主要通过一系列XML文件完成,如...
Java SE的最新版本是8.0,并且它的更新版本9.0即将发布。版本的更新意味着在功能、性能和安全性方面都会有提升,因此建议使用最新版本。值得注意的是,Java SE 8.0不支持Windows XP系统,需要在Windows XP系统上使用...
10. **版本兼容性**:Tomcat 9.0.64支持Java SE 8到17,但请注意,不同的Java版本可能会影响应用的兼容性和性能。 以上是关于"apache-tomcat-9.0.64"在Linux环境下的安装、配置和使用的关键知识点。了解并掌握这些...
3. **兼容性**:Tomcat 9支持最新的Java版本,比如Java SE 8和9。这使得开发者可以利用最新的Java特性来编写Web应用。 4. **配置改进**:可能提供了更方便的配置选项或者新的默认设置,以简化部署和管理过程。 5. ...
Java运行环境(JRE,Java Runtime Environment)是Java应用程序运行的基础,它包含了Java虚拟机(JVM,Java Virtual Machine)和Java平台标准版(Java SE,Java Platform, Standard Edition)的类库。JRE 9.0.4是...
Tomcat 9.x系列支持Java SE 8及更高版本,因此9.0.60版本很可能是为了适应Java的最新发展,比如Java 11或17。这使得开发人员能够利用最新的语言特性和库来构建现代Web应用。 在部署和配置方面,9.0.60可能会提供新...
3. **兼容性提升**:此版本可能提升了与不同Java版本的兼容性,特别是Java SE 8和9。这使得用户可以在各种Java环境中顺利部署Tomcat。 4. **API更新**:可能包含了Java EE的最新API实现,比如Servlet 4.0,JSP 2.3...
其次,JDK 1.8,全称为Java Development Kit 1.8,是Oracle公司发布的Java编程语言和Java平台标准版(Java SE)的一部分。"jdk-8u301-windows-x64.exe"是JDK 1.8更新301的64位Windows安装程序。JDK包含了开发和运行...
8. **兼容性**:虽然Tomcat 9支持最新的Java EE标准,但它也兼容Java SE 8及更高版本,这意味着即使在没有完整Java EE环境的系统上,也可以运行基于Servlet和JSP的应用。 在解压这个名为“tomcat”的压缩包后,你将...
3. **兼容性**:Tomcat 9支持Java SE 8及更高版本,确保与最新的Java技术兼容。 4. **配置更新**:可能有新的配置选项或现有选项的行为调整,以便更好地控制服务器行为。 5. **Bug修复**:修复了之前版本中报告的...
标题中的"jdk9 java9"指的是Java 9版本,这是Java平台标准版(Java SE)的一个重大更新,发布于2017年。Java 9引入了模块系统(Project Jigsaw),这是一个主要的改进,旨在提高系统的可维护性、安全性和性能。模块...
6. **JDBC**:JDBC是Java标准版(Java SE)的一部分,提供了一组API,使Java程序能够与各种类型的数据库进行通信。在本项目中,开发者会用到JDBC来连接到SQLServer2000,执行SQL语句,从而实现数据的增删改查。 7. ...
在JDK 9.0版本之前,JAXB是Java标准版(Java SE)的一部分,但在JDK 9开始,JAXB被移除了核心库,转而成为Java EE(Java Enterprise Edition)的一部分。这导致在JDK 9及更高版本中使用依赖于JAXB的库,如Hibernate...
在环境准备方面,开发网上书店系统需要使用Java SE 5或更高版本,以及NetBeans IDE 5.5.1中文版,包括其Visual Web Pack中文版。此外,还需要Sun Java Application Server PE 9.0 Update Release 1或更高版本。在IDE...
4. **Sun Java Application Server PE 9.0 Update Release 1或更高版本**:Java EE 5兼容的应用服务器,用于部署和运行应用程序。 **配置Sun Java System Application Server** 如果NetBeans IDE已经捆绑了应用...