博学谷 > 资讯 > Java > Java14发布有哪些更新?

原创 Java14发布有哪些更新?

发布时间:2020-04-03 13:00:20 浏览 1112 来源:博学谷 作者:照照

    今年三月份,Java发布了最新的版本Java14。本次发布的Java14更新了大量的内容,包括了JEP364JEP365JEP366JEP367、打包功能、NullPointerException异常信息、File APIswitch语句、NUMAJFRRecordSolarisSPARC端口、CMS垃圾收集器和instanceof。下面我们一起来看看这些更新的特性吧!

     

    Java14发布更新

     

    1JEP364

     

    JEP 364针对MacOS提供了ZGC垃圾收集器。它将ZGC垃圾收集器移植到了macOS。正如JEP351中的描述,该JEP的功能还包括使用收集器释放未使用的设备内存。自Java13开始就支持此功能。ZGCmacOS实现包含两个部分:在macOS上支持多重映射(multi-mapping)内存;ZGC支持不连续预留内存。

     

    2JEP365

     

    JEP 365实际上和JEP 364一样。JEP 365针对Windows提供了ZGC垃圾收集器支持。大多数ZGC代码都与平台无关,不需要为Windows修改。由于早期版本没有预留内存必须的API,因此不支持Windows 10Windows Server 1803之前的版本。ZGCWindows实现进行了以下工作:支持多重映射内存、堆内存任意区域映射与取消映射操作和堆内存任意区域提交和撤销提交操作等等。

     

    3JEP366

     

    JEP366包含垃圾收集器,它的目标是弃用Parallel ScavengeSerial Old垃圾收集算法的组合。除了弃用-XX:+UseParallelGC-XX :- UseParallelOldGC组合之外,-XXUseParallelOld GC选项也被弃用,因为它的作用是取消老年代并行GC,支持老年代串行GC。因此,任何与UseUseParallelOldGC选项有关的用法都会输出警告。

     

    4 JEP367

     

    Pack 200JavaSE 5.0JSR 200实现的JAR文件压缩方案。Java14java.util.jar包中移除了pack200unpack200工具以及pack200 API。这些工具和APIJavaSE 11中已废弃,会在随后的版本中移除。该JEP最终会从JDK主版本中移除3种类型。即之前标记 @Deprecated(forRemoval = true) 注解的基础模块:java.util.jar.Pack200java.util.jar.Pack200.Packerjava.util.jar.Pack200.Unpacker

     

    5JEP368

     

    Java中,想要把HTMLXMLSQLJSON代码片段嵌入到代码中通常难以阅读和保留。并且为了克服此问题,Java14 引入了文本块(Text Block)。文本块包含零个或多个字符,这些字符由开始分隔符和结束分隔符包围。

     

    6JEP370

     

    许多流行的Java库和程序都支持访问外部存储器,例如IgniteMapDBMemcachedNettyByteBuf API。这样可以避免垃圾回收(比如维护大型缓存)、跨进程共享内存、通过将文件内存映射进行序列化和反序列化带来的开销以及引入的不可预测性。然而,Java API没有提供适合的外存访问解决方案。Java14通过JEP 370引入了高效的Java API,使得Java应用程序能够安全有效地访问Java堆外内存。外部存储API提出了三个重要的抽象:MemorySegmentMemoryAddressMemoryLayout 

     

    7、打包功能

     

    该特性是一种能够简化安装过流程的打包功能,能解决应用所需的各种依赖项。有时仅提供一个JAR文件是不够的,还需要提供原生安装包。打包工具还可以作为其它技术的补充。jpackage工具把Java应用打包成平台特定格式的包,其中包含应用所有的依赖项。即一组普通JAR文件或模块的集合。支持的包格式: LinuxdebrpmmacOSpkgdmgWindowsMSIEXE

     

    8NullPointerException异常信息

     

    Java14JVM生成的NullPointerException异常信息进行了改进。程序提前终止时,新特性将为开发者和技术支持人员提供有用的信息。由于NPE几乎可以出现在程序中的任何位置,尝试捕获它们并从中恢复通常不太可行。开发人员只能靠JVM确认NPE实际的发生时间。

     

    9File API

     

    Java 14MappedByteBuffer进行了更新,将部分文件数据加载到非易失性存储器(NVM)中。NVM非易失性存储是指类似ROM(只读存储器)、闪存、硬盘等存储器,即使关闭电源数据也不会丢失。易失性存储器比如RAM,如果关闭电源则无法保存数据。API唯一的变化是加入了一个新枚举供FileChannel客户端使用。表示请求映射位于NVM支持的文件系统而非传统文件系统。

     

    10switch语句

     

    Java14扩展了switch语句的功能,可以把switch作为表达式使用。支持箭头(->)操作符生成或返回值。该特性在JDK12JDK13中是预览功能。

     

    11NUMA

     

    非一致性内存访问是一种将微处理器集群配置为多处理系统的方式,因此可以在本地共享内存、提高性能并扩展系统能力。Java14实现了NUMA内存分配优化,提升G1在大型计算机上表现。G1中的堆是一组固定大小区域。虽然指定-XX:+UseLargePages选项可以使用大页面,多个区域可以组成一个物理页面,但是一个区域通常是一组物理页面。如果指定+XX:+UseNUMA选项,初始化JVM时上述将把区域平均分布在所有可用NUMA节点上。

     

    12JFR

     

    Java14提供了一个新的APIJDK Flight RecorderJFR)可以通过它持续监视进程内与进程外部应用程序。使用非Stream方式记录相同的事件集,开销可能甚至小于1%。事件流将与非Stream方式同时执行。jdk.jfr.consumer包位于 jdk.jfr模块中,扩展了异步订阅事件的功能。

     

    13Record

     

    这是JDK14中一个预览功能。使用record精简类声明代码。定义一个数据类需要编写很多低效重复的模板代码:构造函数、accessorequals()hashCode()toString()等。Java计划使用record精简这些重复代码。

     

    14SolarisSPARC端口

     

    Java14弃用了Solaris/SPARCSolaris/x64Linux/SPARC端口,未来可能将它们移除。取消对这些端口的支持,能让OpenJDK社区的贡献者加速开发新功能,推动平台向前发展。

     

    15CMS垃圾收集器

     

    Java14删除了CMS垃圾收集器。不仅停用CMS编译,从源代码中删除了gc/cms目录中的内容,而且删除了仅限CMS的选项。

     

    16instanceof

     

    instanceof操作符用来检查对象引用是否为指定的Type实例,检查的结果使用boolean返回。Java14instanceof操作符进行了改进,加入了模式匹配。改进后的instanceof让实现逻辑变得清晰,不用在条件判断后再为对象强制类型转换。

     

    if (!(obj instanceof String str)) {
       

    .. str.contains(..)..// 不必再声明str对象进行强制类型转换

     

    } else {
       

    .. str....

     

    }

     

    关于Java14发布的更新内容,想必大家看到这里已经有了一定的了解了。更多关于Java的最新资讯尽在博学谷,欢迎大家关注博学谷资讯栏目~

    申请免费试学名额    

在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!

领取成功
领取失败
上一篇:JSP基础语法学习笔记总结 下一篇:Java和C语言哪个学习难度更大?

相关推荐 更多

最新文章

扫描二维码,回复"Java"获取180G资料包