当前位置: 首页 > 科技观察

JDK15:Java15的新特性

时间:2023-03-13 07:16:30 科技观察

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