Java 14 来了!

来自:CSDN 2天前

整理 | 弯月,责编 | 郭芮

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

近日,Oracle 发布了 Java 14 版,这是自从 Java 采用六个月一次的发布周期之后的第五次发布。

此次的发布与之前的 Java 11、12 和 13 一样,离不开 OpenJDK 社区无数个人和组织的无私奉献。JDK 14 修正了 1986 个 JIRA 问题,其中 1458 个来自 Oracle 的员工,另外 528 个来自独立开发者和其他公司的开发者的提交。

Java 14 的新功能和改动

Java 14 提供了 16 个主要的改进和变更,包括两个孵化器模块、三个预览特性、两个弃用的功能以及两个删除的功能。其中 " 孵化器模块 " 的意思是将尚未定稿的 API 和工具先交给开发者使用,以获得反馈,并用这些反馈进一步改进 Java 平台的质量。而 " 预览特性 " 则是规格已经成型、实现已经确定,但还未最终定稿的功能。它们出现在 Java 中的目的是收集在真实世界中使用后的反馈信息,促进这些功能的最终定稿。

最后,一些功能通过 " 弃用 " 的方式从 JDK 中移除,也就是说,开发者不应该继续使用这些功能,应当将使用这些功能的现有代码迁移到其他 API 上。使用 Java 9 引入的 jdeprscan 工具可以对 jar 文件进行静态扫描,找出使用了被弃用 API 的功能,从而方便开发者修改这些 API 调用。

JDK 14 中的 16 项改动包括:

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 堆之外的外部内存。

工具支持

下列 IDE 支持 Java 14:

JetBrains IDEA

Apache NetBeans

Eclipse IDE

一些流行的自动化构建工具也正在积极准备支持 Java 14,比如 Apache Maven 及其 Gradle 6.3 插件开始支持 Java 14。

参考链接://blogs.oracle.com/java-platform-group/the-arrival-of-java-14