1. 首页
  2. >
  3. 编程技术
  4. >
  5. Java

JDK 15:Java 15中的新功能

JDK 15:Java 15中的新功能

标准Java的下一版本将具有文本块,垃圾收集器,隐藏的类以及模式匹配和记录的预览。

随着Java 14于3月17日全面上市,将在2020年9月15日推出Java 15的后续产品。到目前为止,已经计划对该版本进行八次正式更改。 另外两个提案-加密签名和记录的第二个预览-可能很快就会成为正式提案。

Java开发工具包(JDK)15为下一版本的Java SE(标准版)提供了基础。 在9月全面上市之前,将在6月和7月进行缩减阶段,然后在8月发布两个候选版本。

OpenJDK 15提案的详细信息:

  • Records, 是充当不可变数据的透明载体的类,将在JDK 14中作为早期预览首次亮相后,将包含在JDK 15的第二个预览版本中。该计划的目标包括设计一个表示对象的构造,以表达 简单的值聚合,帮助程序员专注于对不可变数据建模而不是扩展行为,自动实现数据驱动的方法(例如equals和评估者),并保留长期的Java原则,例如标称类型和迁移兼容性。
  • 基于爱德华兹曲线数字签名算法(EdDSA)的密码签名。 EdDSA是一种现代的椭圆曲线方案,具有优于JDK中现有签名方案的优势。 EdDSA仅在SunEC提供者中实施。 与其他签名方案相比,EdDSA具有更高的安全性和性能,因此需求旺盛。 加密库(例如OpenSSL和BoringSSL)已经支持该功能。
  • 通过使用更简单,更现代的实现来替换java.net.datagram.Socket和java.net.MulticastSocket API的基础实现,从而重新实现传统的DatagramSocket API,该实现1.易于调试和维护,并且2.可与当前正在使用的虚拟线程一起使用 在Project Loom中进行了探索。 新计划是对JDK增强建议353的后续,该建议重新实现了旧版Socket API。 java.net.datagram.Socket和java.net.MulticastSocket的当前实现可以追溯到JDK 1.0,而IPv6仍在开发中。 因此,MulticastSocket的当前实现尝试以难以维护的方式协调IPv4和IPv6。
  • 默认情况下禁用偏向锁定,并弃用所有相关的命令行选项。 目标是确定是否需要继续支持代价昂贵的,具有维护成本的有偏锁定的传统同步优化,该优化在HotSpot虚拟机中用于减少无竞争锁定的开销。 尽管某些Java应用程序可能会在禁用偏置锁定的情况下看到性能下降的趋势,但是偏置锁定的性能提升通常不如从前那样明显。
  • 在JDK 14中的先前预览之后,是instanceof的模式匹配的第二次预览。模式匹配使程序中的通用逻辑(主要是从对象中有条件地提取组件)得以更简洁地表达。 Haskell和C#等语言因其简洁性和安全性而接受了模式匹配。
  • 隐藏类,即不能被其他类的字节码直接使用的类,是供在运行时生成类并通过反射间接使用它们的框架使用的。可以将隐藏类定义为访问控制嵌套的成员,并且可以独立于其他类进行卸载。该提案将通过启用标准API来定义无法发现且生命周期有限的隐藏类,从而提高JVM上所有语言的效率。 JDK内部和外部的框架将能够动态生成可以代替定义隐藏类的类。基于JVM构建的许多语言都依靠动态类生成来提高灵活性和效率。该提案的目标包括:允许框架将类定义为框架的不可发现的实现细节,因此它们不能被其他类链接,也不能通过反射来发现;支持使用不可发现的类扩展访问控制嵌套;并支持主动卸载不可发现的类,因此框架可以灵活地定义所需的数量。另一个目标是弃用非标准API misc.Unsafe::defineAnonymousClass,以弃用将来的发行版。另外,由于此提议,Java语言也不会更改。
  • 根据该提议,Z垃圾收集器(ZGC)将从实验功能升级为产品。 ZGC已集成到2018年9月发布的JDK 11中,是一个可扩展的低延迟垃圾回收器。 引入ZGC是一项实验功能,因为Java的开发人员决定应谨慎且逐步地引入这种规模和复杂性的功能。 从那时起,添加了许多改进,从并发类卸载,未使用内存的未提交,对数据类共享的支持到改进的NUMA感知和多线程堆预触。 此外,最大堆大小已从4 TB增加到16 TB。 支持的平台包括Linux,Windows和MacOS。
  • 在JDK 14和JDK 13中都预览过的文本块旨在通过简化表示跨几行源代码的字符串的表达,同时避免在常见情况下的转义序列,从而简化了编写Java程序的任务。 文本块是一种多行字符串文字,它避免了大多数转义序列的需要,以可预测的方式自动设置字符串格式,并在需要时为开发人员提供了对该格式的控制权。 文本块建议的目标是提高Java程序中字符串的可读性,这些字符串表示用非Java语言编写的代码。 另一个目标是通过规定任何新构造都可以表示与字符串文字相同的字符串集,解释相同的转义序列并以与字符串文字相同的方式进行操作来支持从字符串文字的迁移。 OpenJDK开发人员希望添加转义序列来管理显式空白和换行控件。
  • Shenandoah的低暂停时间垃圾收集器将成为生产功能并退出实验阶段。 一年前已将其集成到JDK中。
  • 移除Nashorn,该功能于2014年3月在JDK 8中首次亮相,但此后已被诸如GraalVM之类的技术淘汰。 OpenJDK 15提案要求删除Nashorn API和用于调用Nashorn的jjs命令行工具。