近日,Oracle发布了Java 14版,这是自从Java采用六个月一次的发布周期之后的第五次发布。
此次的发布与之前的Java 11、12和13一样,离不开OpenJDK社区无数个人和组织的无私奉献。JDK 14修正了1986个JIRA问题,其中1458个来自Oracle的员工,另外528个来自独立开发者和其他公司的开发者的提交。
Java 14提供了16个主要的改进和变更,包括两个孵化器模块、三个预览特性、两个弃用的功能以及两个删除的功能。其中“孵化器模块”的意思是将尚未定稿的API和工具先交给开发者使用,以获得反馈,并用这些反馈进一步改进Java平台的质量。而“预览特性”则是规格已经成型、实现已经确定,但还未最终定稿的功能。它们出现在Java中的目的是收集在真实世界中使用后的反馈信息,促进这些功能的最终定稿。
最后,一些功能通过“弃用”的方式从JDK中移除,也就是说,开发者不应该继续使用这些功能,应当将使用这些功能的现有代码迁移到其他API上。使用Java 9引入的jdeprscan工具可以对jar文件进行静态扫描,找出使用了被弃用API的功能,从而方便开发者修改这些API调用。
1.JEP 305:instanceof的模式匹配(预览):该预览功能给instanceof带来了模式匹配功能。有了该功能,开发者就不需要写大量的样板代码,从而提高生产力,还能实现更精确的类型安全的代码。
2.JEP 343:打包工具(孵化器模块):这个孵化器工具为开发者带来了一种打包Java应用的方式,可以将Java应用打包成平台所需的格式。开发者可以使用该工具,将现代应用程序的运行时和应用程序打包成单一的交付物。
3.JEP 345:G1的NUMA-Aware的内存分配:该功能改进了G1垃圾回收器在非一致内存访问(NUMA)系统上的整体性能。
4.JEE 349:JFR事件流:该功能可以公开JDK Flight Recorder(JFR)的数据,用于持续监视,从而简化各种工具和应用程序访问JFR数据的方式。
5.JEP 352:非易失性映射字节缓冲区(Non-Volatile Mapped Byte Buffers):该特性为JDK增加了一种文件映射模式,用于访问非易失性内存。非易失性内存能够持久保持数据,因此可以利用该特性来改进性能。
6.JEP 358:非常实用的NullPointerException:该特性改进了NullPointerException的可读性,能更准确地给出null变量的信息。该特性可以帮助开发者提高生产力,以及改进各种开发工具和调试工具的质量。
7.JEP 359:Record(预览特性):该预览特性提供了一种更为紧凑的语法,用于定义浅层不可变的数据。值得一提的是,该特性可以大幅减少定义类似数据类型时所需的样板代码,但它的最终目的是提供更好的数据建模方式。
8.JEP 361:switch表达式:这是JDK 12和JDK 13中的预览特性,现在是完整特性了。该特性规定,switch可以当作语句使用,也可以当作表达式使用。这可以简化日常的编码方式,也为模式匹配(JEP 305)特性打下了基础。
9.JEP 362:弃用Solaris和SPARC的移植:该JEP中,Solaris和SPARC的移植版被弃用,以后将被移除。
10.JEP 363:删除并行标记清理(Concurrent Mark Sweep,简称CMS)垃圾回收器:CMS垃圾回收器在两年前JDK 6的时代就被弃用,建议转用CMS的后继者G1回收器,而现在G1回收器已成为默认回收器好几年了。
11.JEP 364:macOS上的ZGC:尽管许多使用ZGC的用户都使用类Linux的环境,但在Windows和macOS上,人们也需要ZGC进行开发和测试。许多桌面应用也可以从ZGC中得到好处。因此,ZGC特性被移植到了Windows和macOS上。
12.JEP 365:Windows上的ZGC:同上。
13.JEP 366:弃用ParallelScavenge和SerialOld GC组合:Parallel Scavenge和Serial Old垃圾回收算法的组合被弃用,这种组合极少被用到。
14.JEP 367:删除Pack200工具和API:删除了pack200和unpack200工具,以及java.util.jar包中的Pack200 API。这些工具和API从Java SE 11就被弃用了。
15.JEP 368:文本块(预览第二版):文本块(Text Block)在Java 13中收到了第一版预览的反馈(JEP 355)后,增加了两个新的转移序列,于Java 14中作为新的预览特性出现。文本块的好处包括:使用跨行文本简化代码编写,增强Java程序中用字符串表示的其他语言的代码的可读性,解析新的转义序列等等。
16.JEP 370:外部内存访问API(Foreign-Memory Access API,孵化器模块 ):该孵化器模块引入了一个新的API,允许Java程序有效、安全地访问位于Java堆之外的外部内存。
JetBrains IDEA
Apache NetBeans
Eclipse IDE
一些流行的自动化构建工具也正在积极准备支持Java 14,比如Apache Maven及其Gradle 6.3插件开始支持Java 14。
参考链接:https://blogs.oracle.com/java-platform-group/the-arrival-of-java-14