在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
今年三月份,Java发布了最新的版本Java14。本次发布的Java14更新了大量的内容,包括了JEP364、JEP365、JEP366、JEP367、打包功能、Nul、lPointerException异常信息、File API、switch语句、NUMA、JFR、Record、Solaris和SPARC端口、CMS垃圾收集器和instanceof。下面我们一起来看看这些更新的特性吧!

1、JEP364
JEP 364针对MacOS提供了ZGC垃圾收集器。它将ZGC垃圾收集器移植到了macOS。正如JEP351中的描述,该JEP的功能还包括使用收集器释放未使用的设备内存。自Java13开始就支持此功能。ZGC的macOS实现包含两个部分:在macOS上支持多重映射(multi-mapping)内存;ZGC支持不连续预留内存。
2、JEP365
JEP 365实际上和JEP 364一样。JEP 365针对Windows提供了ZGC垃圾收集器支持。大多数ZGC代码都与平台无关,不需要为Windows修改。由于早期版本没有预留内存必须的API,因此不支持Windows 10和Windows Server 1803之前的版本。ZGC的Windows实现进行了以下工作:支持多重映射内存、堆内存任意区域映射与取消映射操作和堆内存任意区域提交和撤销提交操作等等。
3、JEP366
JEP366包含垃圾收集器,它的目标是弃用Parallel Scavenge和Serial Old垃圾收集算法的组合。除了弃用-XX:+UseParallelGC-XX :- UseParallelOldGC组合之外,-XX:UseParallelOld GC选项也被弃用,因为它的作用是取消老年代并行GC,支持老年代串行GC。因此,任何与UseUseParallelOldGC选项有关的用法都会输出警告。
4、 JEP367
Pack 200是JavaSE 5.0中JSR 200实现的JAR文件压缩方案。Java14从java.util.jar包中移除了pack200和unpack200工具以及pack200 API。这些工具和API在JavaSE 11中已废弃,会在随后的版本中移除。该JEP最终会从JDK主版本中移除3种类型。即之前标记 @Deprecated(forRemoval = true) 注解的基础模块:java.util.jar.Pack200、java.util.jar.Pack200.Packer、java.util.jar.Pack200.Unpacker
5、JEP368
在Java中,想要把HTML、XML、SQL或JSON代码片段嵌入到代码中通常难以阅读和保留。并且为了克服此问题,Java14 引入了文本块(Text Block)。文本块包含零个或多个字符,这些字符由开始分隔符和结束分隔符包围。
6、JEP370
许多流行的Java库和程序都支持访问外部存储器,例如Ignite、MapDB、Memcached和Netty的ByteBuf API。这样可以避免垃圾回收(比如维护大型缓存)、跨进程共享内存、通过将文件内存映射进行序列化和反序列化带来的开销以及引入的不可预测性。然而,Java API没有提供适合的外存访问解决方案。Java14通过JEP 370引入了高效的Java API,使得Java应用程序能够安全有效地访问Java堆外内存。外部存储API提出了三个重要的抽象:MemorySegment、MemoryAddress和MemoryLayout。
7、打包功能
该特性是一种能够简化安装过流程的打包功能,能解决应用所需的各种依赖项。有时仅提供一个JAR文件是不够的,还需要提供原生安装包。打包工具还可以作为其它技术的补充。jpackage工具把Java应用打包成平台特定格式的包,其中包含应用所有的依赖项。即一组普通JAR文件或模块的集合。支持的包格式: Linux:deb和rpm、macOS:pkg和dmg、Windows:MSI和EXE。
8、NullPointerException异常信息
Java14对JVM生成的NullPointerException异常信息进行了改进。程序提前终止时,新特性将为开发者和技术支持人员提供有用的信息。由于NPE几乎可以出现在程序中的任何位置,尝试捕获它们并从中恢复通常不太可行。开发人员只能靠JVM确认NPE实际的发生时间。
9、File API
Java 14对MappedByteBuffer进行了更新,将部分文件数据加载到非易失性存储器(NVM)中。NVM非易失性存储是指类似ROM(只读存储器)、闪存、硬盘等存储器,即使关闭电源数据也不会丢失。易失性存储器比如RAM,如果关闭电源则无法保存数据。API唯一的变化是加入了一个新枚举供FileChannel客户端使用。表示请求映射位于NVM支持的文件系统而非传统文件系统。
10、switch语句
Java14扩展了switch语句的功能,可以把switch作为表达式使用。支持箭头(->)操作符生成或返回值。该特性在JDK12和JDK13中是预览功能。
11、NUMA
非一致性内存访问是一种将微处理器集群配置为多处理系统的方式,因此可以在本地共享内存、提高性能并扩展系统能力。Java14实现了NUMA内存分配优化,提升G1在大型计算机上表现。G1中的堆是一组固定大小区域。虽然指定-XX:+UseLargePages选项可以使用大页面,多个区域可以组成一个物理页面,但是一个区域通常是一组物理页面。如果指定+XX:+UseNUMA选项,初始化JVM时上述将把区域平均分布在所有可用NUMA节点上。
12、JFR
Java14提供了一个新的API,JDK Flight Recorder(JFR)可以通过它持续监视进程内与进程外部应用程序。使用非Stream方式记录相同的事件集,开销可能甚至小于1%。事件流将与非Stream方式同时执行。jdk.jfr.consumer包位于 jdk.jfr模块中,扩展了异步订阅事件的功能。
13、Record
这是JDK14中一个预览功能。使用record精简类声明代码。定义一个数据类需要编写很多低效重复的模板代码:构造函数、accessor、equals()、hashCode()、toString()等。Java计划使用record精简这些重复代码。
14、Solaris和SPARC端口
Java14弃用了Solaris/SPARC、Solaris/x64和Linux/SPARC端口,未来可能将它们移除。取消对这些端口的支持,能让OpenJDK社区的贡献者加速开发新功能,推动平台向前发展。
15、CMS垃圾收集器
Java14删除了CMS垃圾收集器。不仅停用CMS编译,从源代码中删除了gc/cms目录中的内容,而且删除了仅限CMS的选项。
16、instanceof
instanceof操作符用来检查对象引用是否为指定的Type实例,检查的结果使用boolean返回。Java14对instanceof操作符进行了改进,加入了模式匹配。改进后的instanceof让实现逻辑变得清晰,不用在条件判断后再为对象强制类型转换。
if (!(obj instanceof String str)) {
.. str.contains(..)..// 不必再声明str对象进行强制类型转换
} else {
.. str....
}
关于Java14发布的更新内容,想必大家看到这里已经有了一定的了解了。更多关于Java的最新资讯尽在博学谷,欢迎大家关注博学谷资讯栏目~
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
一文解析六大设计模式及其应用场景
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案,是经过多年开发语言发展由众多的程序员积累总结出来的。掌握设计模式的应用,可以大大提高程序员的编程效率。本文将和大家分享我们常见的六种设计模式以及其应用场景。
10269
2019-08-08 14:08:39
Java课程设计题目有哪些?Java课程设计题目汇总
在学习Java的路上,多多练习项目实践是很有必要的。因此,本文整理了20道Java课程设计题目,希望大家总结、回顾和实践学过的所有面向对象的编程思想以及编程方法。
21975
2019-07-29 11:34:42
英语不好能学好Java开发吗?
学好Java开发对英语的要求并不高,编程常用的高频词并不多,有的单词是程序员随便写的不要求是完整的英文单词()变量名可以用部分英文,拼音,数字组成。系统已有的成员方法的名字,有的英文还挺长,可以借助开发工具输入提醒功能进行自动录入,不需要你记住很长的方法名字。
6394
2019-12-04 10:56:53
html5和Java发展前景如何?
目前,许多想要学习IT技术的朋友都在考虑这样一个问题,html5和Java发展前景如何?简单来讲,html5是新兴的前端开发技术,发展前景自不必多说。而Java是老牌的后端开发语言,一直以来都备受程序员的青睐和追捧,就业岗位的选择也十分广泛。要想知道html5和Java发展前景,我们下面来详细分析一下。
5603
2020-06-15 17:05:43
Java程序的开发与运行原理解析
可能刚刚接触编程的初学者会发现,编写一个Java程序其实很简单,但是Java程序的运行过程却是非常复杂的。关于Java程序工作原理这部分知识,虽然不要求编程学习者完全掌握,你但是至少需要了解它的大致过程。下面小编将好好介绍一下Java程序的开发与运行原理,大致分为以下三步:编写源文件、编译以及运行。
6237
2020-08-12 16:59:55
