21世纪技术官导读:Java 9 现在已经发布几个月,我们来看看应该了解的五个高层次的技术点,如果你还没有用它,更应该关注一下。
2017年9月,Java宣布发布最新版本的Java 9。它是在Java 8发布3年多以来的最新版本,它将一个更重要的 Java 交付给了开发者。
Java 9是 Java 发布周期的重要转折点。 在本文中,我们将讨论Java 9中的给开发者的新功能。从操作角度来看,性能和安全性有所变化与增强。 我们将讨论Java 9中最令人兴奋的五个特性,以鼓励更多开发者采用 Java 9。
模块化
这是我们从Java 9 得来的最重要特性:Java平台开始系统模块化。
Java最大的问题在于它的运行时库。 在一个大型平台上进行20年的开发会造成很大的问题甚至损失。许多类会冲突,相信你在大型代码库中所遇到的那样。 还有一点重要的是,没有办法在JDK中封装私有类,这导致了外部第三方库的激增,内部细节更复杂,这阻碍了Java平台的发展。
使用Java 9后,JDK本身已经是模块化的,并配有90个独立的模块。
一个模块将链接的数据包分组,其他模块只能访问从模块显式导出的软件包。最后,内部实现类可以实现真正封装。另外,模块可以设置对其它模块的显式依赖关系, 这些依赖关系在编译和执行期间由模块系统进行事先检查。
模块也可用于模块化应用程序,而不仅仅是JDK本身。
现在,你可以使用封装的包和显式的依赖关系来创建属于自己的模块,而不再使用脆弱的类路径。
这些模块为更多结构化与可靠的应用提供了一条途径。 当然,Java模块系统不会在一夜之间改变Java环境。 模块系统将影响应用程序的设计,并在开发的所有阶段均需要使用,包括开发,编译,打包和运行。目前广泛采用模块系统之前还需要一段时间。
值得Java开发者高兴的是,许多应用程序都支持迁移场景,可逐步演变为模块化应用程序与库。
生产率
除了模块系统之外,Java 9还交付了提高开发人员生产力的小功能。
比如,集合工厂方法允许你在单个语句中使用预定义元素创建不可变集合。不需要再用烦人的解决方法来创建小的预定义集合。
另外一个主要的生产力加速器叫做 JShell,一个用于Java代码的Read-Eval-Print-Loop。可以交互式地输入和评估JShell中的Java代码片段,而不用再编译代码来测试运行。 探索性编程在您从REPL获得即时反馈时具有新的含义。
JShel 已经与 IntelliJ IDEA 等主流IDE集成,允许开发者使用一个可以访问应用程序代码的交互式环境。
性能
运行新版本的Java 9,意味着你在不更改代码的情况下获得性能改进。
在Java 9中,Compact Strings功能就是这种改进的一个例子,使用ASCII字符集完全表示的任何字符串将以每字符每字节方式存储。
字符串在ASCII范围之外的字符串每个字符通常需要两个字节,大多数应用程序在运行中有大量的String对象,如果它们是简单的字符串,则可以大大减少内存使用量。
Java 9中的另一个重要变化是,默认情况下将Garbage Collector G1(垃圾优先)作为垃圾收集器。它提供可调整的休眠时间与目标,并可以执行增量式收集。
此更改的影响取决于你的应用程序的特性。通常来说,我们可以通过更少的GC休息来获得更低延迟的代码执行,而G1GC垃圾优先则使用稍高的CPU功率来实现这一点。在切换到Java 9时,测试此垃圾回收器在你的应用程序上的效果非常重要。在某些情况下,分配模式不一定适合G1GC方法,并且需要转移到另一个GC(或G1GC)。
安全性
开发人员的生产力特性远远不是采用Java 9的主要原因,Java 9平台 本身加入了众多新的增强安全性的功能。
Java 9 的大多数安全增强功能都与安全联网有关。如TLS的最新版本现在支持HTTPS连接,并支持证书。
另一个安全增强功能是过滤输入串行数据的功能。序列化一直是Java一直存在的问题,导致最近几年一直有一些安全漏洞。现在可以采用白名单或黑名单方法来过滤传入的序列化数据流,从而最大限度地减少Java序列化的攻击。
发布周期
到目前为止,我们已经关注了Java 9的技术特性,但Java 9 版本还有另一个重要原因,它标志着“功能驱动”的Java 时代结束。
过去,选择了一些重要的功能,当它们开发好时就创建了一个新的Java版本发布。 实际上,上一个主要Java版本的发布开发者等了三年多的时间。 这在现在的环境下是不可接受的,所以 Oracle 和 OpenJDK 项目正在转向基于时间来发布新版本。
现在,每6个月就会发布一个新版本的Java。它将包含当时准备好的所有功能。在这6个月的发布版本中,如有必要,可能会发布重要修复程序的更新。
这个新的发布时间表有几个含义。首先,Java版本变得更加频繁和可预测,目前的更新计划是在每年的3月和9月发布。 新的版本号计划每六个月增加一次主要版本,这就是说,2018年3月发布 的下一个版本将是Java 10。目前版本名称的方案还在讨论中。
对于许多公司团队来讲,每6个月更新一次的Java版本并不太具有吸引力。 因此,会在每三年指定一个长期版本(LTS),LTS的第一个版本将于2018年9月发布,这意味着Java 9 将不会支持长期版本。
小结
我们欣喜地看到,这些新的发布策略使Java比以往更加灵活。主要的功能分解为渐进式步骤,每6个月交付一次更新。 每次完成时都会发布功能,如果缺少一个版本,则在6个月内就会有另一个版本发布出来。
即使在20年以后,Java 仍然会以令人兴奋和快捷的速度继续前行。
作者:李刚
来源:21世纪技术官社区
领取专属 10元无门槛券
私享最新 技术干货