JDK15正式发布(新增功能预览)
JDK15在2020年9月15号正式发布了,这次发布的主要功能有:
- JEP339:EdDSA数字签名算法
- JEP360:密封类(预览)
- JEP371:隐藏类
- JEP372:删除NashornJavaScript引擎
- JEP373:重新实现LegacyDatagramSocketAPI
- JEP374:重新实现DatagramSocketAPI
- JEP375:实例模式匹配(第二次预览)
- JEP377:ZGC:一个可扩展的低延迟垃圾收集器
- JEP378:文本块
- JEP379:低暂停时间垃圾收集器
- JEP381:移除Solaris和SPARC端口
- JEP383:外部存储器访问API(第二个内置程序)
- JEP384:Records(第二次预览)
- JEP385:不推荐的RMI激活去除
JEP:JDKEnhancementProposals,JDK增强建议,也就是JDK的特性新增和改进提案。
这些年发布的版本对应的JEPs数量如下图所示:
发布版本说明
根据发布的规划,这次发布的JDK15将是一个短期的过度版,只会被Oracle支持(维护)6个月,直到明年3月的JDK16发布此版本将停止维护。而Oracle下一个长期支持版(LTS版)会在明年的9月份候发布(Java17),LTS版每3年发布一个,上一次长期支持版是18年9月发布的JDK11。
JDK15新功能说明
JDK15为用户提供了十四项主要的增强/更改,包括一个孵化器模块,三个预览功能,两个不推荐使用的功能以及两个删除功能。
1、EdDSA数字签名算法
新加入Edwards-Curve数字签名算法(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、文本块功能转正
文本块由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、外部存储器访问API(预览)
目的是引入一个API,以允许Java程序安全有效地访问Java堆之外的外部内存。这同样是Java14的一个预览特性。
11、其它功能
其它功能里面还有一些弃用和不建议使用的功能,比如移除了NashornJavaScript引擎,同时也移除了删除Solaris和SPARC端口,并标记了一些弃用功能。
参考&鸣谢
码农小胖哥:https://mp.weixin.qq.com/s/rhfSLW0wfe73xgbRVvX46Q
官方日志:https://openjdk.java.net/projects/jdk/15/
到此这篇关于JDK15正式发布(新增功能预览)的文章就介绍到这了,更多相关JDK15发布内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。