今年三月份,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发布有哪些新的内容更新就分享到这里了,当然并不止以上和大家分析的办法,不过小编可以保证其准确性是绝对没问题的。希望以上内容可以对大家有一定的参考价值,可以学以致用。如果喜欢本篇文章,不妨把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。