在线客服
扫描二维码
下载博学谷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的最新资讯尽在博学谷,欢迎大家关注博学谷资讯栏目~
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
具备JavaWeb开发能力需要掌握哪些知识?
具备JavaWeb开发能力需要掌握哪些知识?首先Java基础语法是基础,另外大家对于MySQL、JDBC、HTML和CSS、JavaScript、BootStrap、XML、Tomcat、Servlet和HTTP请求协议、Request和Response、Cookie和Session、JSP,EL和JSTL等等知识必须要熟练掌握,这样才能基本具备JavaWeb开发能力。
4453
2019-11-01 14:17:19
Java程序员常见并发编程问题集锦
Java语言从第一个版本就内置了对多线程的支持,但是从事Java开发工作的人都知道,编写优质的并发代码难度非常大。相信通过大量的时间之后,会对并发编程有更多的认识,甚至可以获取更多编发编程的方案与选择。这里与大家一起探讨一下Java程序员培训中经常遇到的并发编程的问题。
4438
2019-11-25 18:53:47
零基础开始学Java有什么建议?
Java近些年来一直稳坐编程语言排名的前三名,最为编程语言的老大,受到了全球范围内众多编程爱好者的追捧。再加上Java语言在各个领域的开发应用和极高于其他行业的薪资待遇,使它成为许多零基础学习者的首选编程语言。为了帮助更多的编程初学者,本文就来谈谈零基础开始学Java的一些建议。
4014
2020-06-22 13:29:23
Mybatis的核心组件是什么?
MyBatis是一个基于Java的持久层框架,所谓的持久层框架就是专门用来将数据进行持久化的框架,也就是说将数据存储到数据库中的框架。学习并掌握Mybatis,首先就要了解Mybatis的核心组件。下面我们一起来了解一下Mybatis四大核心组件:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession以及SQL Mapper。
4998
2020-08-17 12:21:16
Java开发可应用于什么领域?
Java的应用非常的广泛,可以用来在开发软件工具、嵌入式领域、交易系统、Android应用、大数据技术、服务器程序、网站开发、科学应用等诸多方面。在IT行业中Java编程语言有着非常重要的地位。
3768
2020-12-21 10:59:13