Java 15 其他增强功能
JEP 383 – 外部内存访问 API
Java 14 允许 Java 程序安全高效地访问 Java 堆之外的外部内存。早期的 mapDB、memcached、ignite Java 库提供了外部内存访问。这是一个更清洁的 API,可以无缝地操作所有类型的外部内存(本地内存、持久化内存、管理堆内存等)。它还负责 JVM 的安全性,无论外部内存类型如何,都需要显式地提到垃圾回收/内存释放操作。
这个 API 基于三个主要的抽象 MemorySegment、MemoryAddress 和 MemoryLayout,并且是一种安全的方式来访问堆内存和非堆内存。
Java 15 将这一功能作为孵化功能继续,并对 API 进行了新的改进。
- 引入了 VarHandle API 来自定义内存访问 var handles。
-
使用 Spliterator 接口支持内存段的并行处理。
-
增强了映射内存段的支持。
-
可以操纵和解引用 Native 调用地址。
JEP 339 − Edwards-Curve Digital Signature Algorithm (EdDSA)
Edwards-Curve 数字签名算法(EdDSA)是一种先进的椭圆曲线方案,比 JDK 中现有的签名方案更好。与其他签名方案相比,它具有改进的安全性和性能。它受到流行的加密库(如 OpenSSL、BoringSSL 等)的支持。EdDSA 仅在 SunEC 提供程序中实现于 Java 15。
JEP 373 − 重新实现遗留的 DatagramSocket API
java.net.DatagramSocket 和 java.net.MulticastSocket API 的旧实现被更简单、更现代化的实现所取代,这样更容易维护和调试。
java.net.datagram.Socket 和 java.net.MulticastSocket 的当前实现是在 JDK 1.0 中引入的,而IPv6仍在开发中。这个 JEP 的目标是替换当前的 MulticastSocket 实现,该实现以难以维护的方式调和了IPv4和IPv6。
文本块作为标准
Java 15 的文本块不再是预览版。现在它们是标准 JDK 的一部分。
NullPointerException 的改进
在 Java 15 中,默认启用了更友好的 NullPointerException。