期待已久的Java SE 9.0将于2017年9月21日发布,并将带来一些重要变化。
JDK
9的核心变化是引入新的Java编程组件,即模块。据Oracle称,是可命名的自我说明代码和数据集合。模块技术的核心目标是降低Java应用程序和Java核心运行时环境的大小和复杂性。为此,JDK本身是模块化的,Oracle希望通过这种方式提高性能、安全性和可维护性。
为了支持Java,
9中的模块引入了新的模块化JAR文件格式,在根目录中包含模块文件。Oracle还提供了用于组合和优化模块集的工具,以形成不需要包含完整Java运行时的自定义运行时镜像(image)。模块化引起的其他更改包括从Java运行时镜像中删除rt.jar和其他更改。
InfoQ和Ben
Evans进行了交流,以了解他对Java社区进程(JCP)执行委员会成员Java 9.0模块系统的看法。
Evans:我认为最迫切需要重新配置的应用程序是最适合模块化的应用程序。如果您已经收到了Lava Flow/God
Class/Stovepipe
如果System地狱的折磨,以及你的利益相关者清楚地知道这一点,就更容易说服他们通过循序渐进的努力进行完整的基本重构,而不是简单的重构和Javaro的迁移。(约翰f肯尼迪)。
8)值得做。
Oracle宣布,Java 8将是到2022年为止支持的长期发行版本。因此,Evans预计许多应用程序将保留在Java中
8完全不会升级到Java 9。Evans表示,一些应用程序可以在开发和部署工具链中使用Java 8版本,在生产环境中使用Java 9运行时。
这对特定类型的应用很有帮助。例如,我见过一个电子商务网站,它有非常大的堆空间,包含大约40G的字符串数据。ompact for Java 9
Strings技术可以将这种类型的内存使用量减少一半。这反过来将对GC的性能产生积极影响。对于大型Solr安装环境和某些可能包含类似方案的应用程序来说,仅这些优点就值得将运行时升级到Java。
9.
Java 9使用G1作为默认垃圾收集器,替换以前默认使用的Parallel
GC。埃文斯对这一变化的评论:
这一更改很重要,因为与Parallel相比,G1在应用程序线程上做得更多,而Parallel在应用程序线程上几乎什么都不做,因此基本上依赖GC线程来执行所有内存管理。换句话说,切换到G1会对应用程序线程产生额外的工作,从而直接影响应用程序性能。
在许多(大多数)场景中,这些额外的性能损失不是问题。但是,在这方面,我们看到过从Parallel过渡到G1时,一定比例的工作负载会导致性能下降。这些应用程序不允许这种性能下降,因此无法切换到G1收集器。当G1成为主收集器时,将影响到Java的升级
9的每个应用程序。
关于是否需要将大型代码库重组为模块,InfoQ向Martijn Verburg询问了JClarity公司首席执行官兼伦敦Java用户组(JAVA USER)Martijn Verburg的意见。
集团)的共同组织者。
Verburg:不仅要这样做,我还希望你要处理的大型代码库可以采用OSGi、Maven模块、JBoss模块或简单的内部规则,将包和接口的结构划分成明确的界限。大卫亚设(David Assell),Northern Exposure(美国电视新闻)。
Verburg提出了典型的模块化建议,并指出了开发人员在采用Java 9模块系统时应注意的一些事项。
保罗和桑德的书《Java 9
Modularity”:这是一个权威指南,提到需要注意的所有部分,并说明模块、软件包和JAR之间的相关性。
在模块边界使用定义明确的接口,并对该接口进行编程。
请不要拆分软件包。换句话说,不要将一个包分布在两个模块中。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是否依然能够在服务端技术中占据领导者地位尚有待观察。
查看英文原文:Long Awaited Java 9.0 Releasing This Week
1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。
2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加群。
3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加群。
4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加群。
5. 群号:高级架构群 283943715 备注好信息!
6.阿里Java高级架构师免费直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!