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

JDK15正式发布,新特性预览!

时间:2023-03-19 15:14:34 科技观察

本文转载自微信公众号“Java中文社区”,作者雷哥。转载本文请联系Java中文社区公众号。JDK15于2020年9月15日正式发布。本次发布的主要功能有:JEP339:EdDSA数字签名算法JEP360:密封类(预览版)JEP371:隐藏类JEP372:删除NashornJavaScript引擎JEP373:重新实现遗留DatagramSocketAPIJEP374:重新实现DatagramSocketAPIJEP375:实例模式匹配(第二次预览)JEP377:ZGC:可扩展的低延迟垃圾收集器JEP378:文本块JEP379:低暂停时间垃圾收集器JEP381:SolarisandSPARCportsremovedJEP383:ExternalMemoryAccessAPI(secondbuiltin)JEP384:Records(secondpreview)JEP385:DeprecatedRMIActivationremovedyearsofreleases当前版本对应的JEP数量如下图:发布版本说明根据发布计划,本次发布的JDK15为短期过渡版本,仅由Oracle支持(维护)6个月至3月发布明年。JDK16将在该版本发布时停止维护。Oracle的下一个长期支持版本(LTS版本)将于明年9月发布(Java17)。LTS版本每3年发布一次。最后一个长期支持版本是2018年9月发布的JDK11。JDK15新特性说明JDK15为用户提供了十四个主要增强/更改,包括一个孵化器模块、三个预览功能、两个弃用功能和两个已删除功能。1、EdDSA数字签名算法新增爱德华兹曲线数字签名算法(EdDSA),实现加密签名。支持许多其他加密库,例如OpenSSL和BoringSSL。与JDK中现有的签名方案相比,EdDSA提高了安全性和性能。这是一项新功能。2.隐藏类这个特性可以帮助需要在运行时生成类的框架。框架生成的类需要动态扩展它们的行为,但又想限制对这些类的访问。隐藏类很有用,因为它们只能通过反射访问,而不能从普通字节码访问。此外,隐藏类可以独立于其他类加载,从而减少框架的内存占用。这是一项新功能。3.重新实现DatagramSocketAPI重新实现旧版本的DatagramSocketAPI,更简单、更现代的实现来替代java.net.DatagramSocket和java.net.MulticastSocketAPI的基本实现,提高了可维护性和稳定性JDK。4、ZGC功能已转正ZGC已被JEP333集成到JDK11中,其目标是通过减少GC停顿时间来提高性能。借助JEP377,ZGC从预览功能转变为生产功能。5.Textblockfunctiontotext该块由JEP355于2019年提出。文本块是多行字符串文字,避免了大多数转义序列的需要,并以可预测的方式自动设置字符串,并让开发人员控制如果需要,请格式化。在JEP378中,文本块已成为Java语言的永久特性。6.Shenandoah垃圾收集算法将Shenandoah垃圾收集从实验功能转换为产品功能。这是一种从JDK12引入的收集算法,它通过与运行的Java线程同时进行疏散工作来减少GC暂停时间。Shenandoah的暂停时间与堆大小无关,无论堆栈是200MB还是200GB,暂停时间都是一致的。7.密封类(预览版)通过密封类和接口增强了Java编程语言,用于限制超类的使用。密封的类和接口限制了可能继承或实现它们的其他类或接口。8.instanceof自动匹配方式老办法(预览版)://先判断类型if(objinstanceofString){//然后转换Strings=(String)obj;//然后就可以用了}新写法:if(objinstanceofStrings){//如果类型匹配直接使用}else{//如果类型不匹配,则不能直接使用}这是该功能的第二次预览,我们在Java14中第一次预览了该功能.9.RecordsClass(预览)RecordsClass也是第二个预览功能。在JDK14中也出现过一次。使用Record可以更方便的创建常量类。使用前后的代码对比如下。旧的写法:classPoint{privatefinalintx;privatefinalinty;Point(intx,inty){this.x=x;this.y=y;}intx(){returnx;}inty(){returny;}publicbooleanequals(Objecto){if(!(oinstanceofPoint))returnfalse;Pointother=(Point)o;returnother.x==x&&other.y=y;}publicinthashCode(){returnObjects.hash(x,y);}publicStringtoString(){returnString.format("Point[x=%d,y=%d]",x,y);}}新的写法:recordPoint(intx,inty){}也就是说使用record之后,可以写一个常量一行代码的类,而且这个常量类还包括构造方法、toString()、equals()、hashCode()等方法。10.ExternalMemoryAccessAPI(Preview)的目的是引入一个API,让Java程序可以安全高效地访问Java堆外的外部内存。这也是Java14的一个预览特性。11.其他功能其他功能中还有一些deprecated和deprecated的功能,比如移除NashornJavaScript引擎,移除Solaris和SPARC端口,标记一些deprecated功能。参考&致谢码农小胖:https://mp.weixin.qq.com/s/rhfSLW0wfe73xgbRVvX46Q官方日志:https://openjdk.java.net/projects/jdk/15/