JDK15 正式发布,划时代的 ZGC 同时宣布转正
你发任你发,我用Java8。本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈、MyBatis、JVM、中间件等小而美的专栏供以免费学习。关注公众号【BAT的乌托邦】逐个击破,深入掌握,
✍前言
2020年9月15日,JDK15正式发布,可谓如约而至。按照Java SE的发展路线图,JDK14自此停止更新。值得注意的是JDK15并非LTS版本,Oracle官方对Java SE的支持路线图如下:
JDK8的扩展支持时间超过了JDK11,Oracle你是认真的吗?开个玩笑~
那么自Java11之后,哪个版本才是LTS版本呢?Oracle官方并没给出具体参考路线图,但可参考OpenJDK的这张:
可以看到JDK17将是下一个LTS版本,预计发版日期是2021年9月份。当然喽这只是OpenJDK的发版线路图,并不代表Oracle官方,因此仅供参考,不过一般八九不离十。
小贴士:OpenJDK和Oracle JDK自从JDK11后,就共享了绝大部分代码了,节奏基本保持一致。
从JDK9之后,Oracle采用了新的发布周期:每6个月发布一个版本,每3年发布一个LTS版本。JDK14是继JDK9之后发布的第四个版本, 该版本为非LTS版本,最新的LTS版本为JDK11。因为是小鹿快跑,快速迭代,因此此处解释下这两个词:孵化器模块(Incubator)和预览特性(Preview)。
孵化器模块(孵化版/实验版)
尚未定稿的API/工具,主要用于从Java社区收集使用反馈,稳定性无保障,后期有较大可能性移除
预览特性(预览版)
规格已成型,实现已确定,但还未最终定稿。这些特性还是存在被移除的可能性,但一般来说最后都会被固定下来。
✍正文
JDK15是Java SE平台的第15个版本,由JSR 390在Java社区进程中指定。
OpenJDK 15是9-15发布的,Oracle同步跟上。其它厂商的对应JDK版本也会随后跟上
该版本共提供14个新特性,通过这些JEP来表示,截图如下:
下面针对其中对开发者日常编程关系较大的特性拉出来解释,并给出对应的使用示例(其实就是JEP 378喽)。
JDK14新特性回顾
老规矩,在进行JDK15的新特性介绍之前,先回顾下JDK14的主要特性有哪些。JDK 14于2020年3月17日发布。
一、Switch表达式
新的Switch表达式其实早在JDK 12、13中都已存在了,但只是预览版,到了JDK 14就彻底变为稳定版了,可以放心商用。
小贴士:预览版特性是有可能在后续版本中被移除的,但稳定版后几乎不可能被移除
switch新的表达式有两个显著的特点:
支持箭头表达式返回
支持yield和return返回值。
1、箭头表达式返回
JDK14之前写法:
要点:break可千万别忘记写,否则就是个大bug,并且还比较隐蔽,定位起来稍显困难。
JDK14等效的新写法:
可明显看到新写法不需要一个个break了,从语法层面规避了我们犯错的可能性。
2、yield返回
JDK14之前写法:
JDK14等效的新写法:
使用箭头操作符操作效果立竿见影。当然,你还可以使用yield
关键字返回:
二、instanceof的模式匹配(预览)
该功能在JDK14中处理预览版。
JDK14之前写法:
JDK14等效的新写法:
如果你运行时有如下错误:
那是因为此功能是预览特性,需要你主动开启,如下:
注意:此特性在JDK15中依旧为预览版。
三、实用的NullPointerException
略。
四、Record(预览)
Java年纪太大,语法不够新潮,有时候确实太麻烦,因此有了Record的出现:干掉那些get/set、toString、equals等方法。
运行程序,结果打印:
注意:此特性在JDK15中依旧为预览版。
五、文本块Text Blocks(二次预览)
这个特性可是非常好用,它属于二次预览:已在JDK 13预览过一次。
在JDK13中,这种是有换行的。在JDK14中,可以加上一个符号让其不让换行:
运行程序,输出(可以看到展示为一行了):
注意:此特性在JDK15中已经为正式版。
六、删除CMS垃圾收集器
这款著名的垃圾回收器从这个版本就彻底被删除了。JDK9开始使用G1作为默认的垃圾回收器(JDK11中ZGC开始崭露头角),就已经把CMS标记为过期了,在此版本正式删除。
七、ZGC垃圾回收器(实验)
革命性的ZGC:任意堆大小(TB级别)都能保证延迟在10ms以内,是以低延迟为首要目标的一款垃圾回收器。
在JDK14之前,ZGC只能用于Linux上,现在也可使用在windows上了
注意:此特性在JDK15中已经为正式版(JDK11开始出现)。
JDK15新特性
有了JDK14新特性回顾做铺垫,再来了解JDK15的新特性就方便很多了。
特别说明:运行JDK15需要IDEA 2020.2才能支持哦(JDK14要求IDEA 2020.1),然后关于IDEA 2020.2的使用教程(新特性),请移步我公众号前面发的这篇文章:IntelliJ IDEA 2020.2正式发布,诸多亮点总有几款能助你提效
一、文本块Text Blocks
Text Blocks首次是在JDK 13中以预览功能出现的,然后在JDK 14中又预览了一次,终于在JDK 15中被确定下来,可放心使用了(使用示例请参考文上)。
二、ZGC转正
ZGC是Java 11引入的新的垃圾收集器(JDK9以后默认的垃圾回收器是G1),经过了多个实验阶段,自此终于成为正式特性。
ZGC是一个重新设计的并发的垃圾回收器,可以极大的提升GC的性能。支持任意堆大小而保持稳定的低延迟(10ms以内),性能非常可观。
打开方式:使用-XX:+UseZGC命令行参数打开,相信不久的将来它必将成为默认的垃圾回收器。
三、Shenandoah转正
怎么形容Shenandoah和ZGC的关系呢?异同点大概如下:
相同点:性能几乎可认为是相同的
不同点:ZGC是Oracle JDK的,根正苗红。而Shenandoah只存在于OpenJDK中,因此使用时需注意你的JDK版本
打开方式:使用-XX:+UseShenandoahGC命令行参数打开。
四、删除Nashorn JavaScript Engine
Nashorn是在JDK提出的脚本执行引擎,早在JDK11就已经把它标记为过期了,JDK15完全移除。
在JDK11中取以代之的是GraalVM。GraalVM是一个运行时平台,它支持Java和其他基于Java字节码的语言,但也支持其他语言,如JavaScript,Ruby,Python或LLVM。性能是Nashorn的2倍以上。
五、CharSequence新增isEmpty默认方法
啥都不说,源码一看便知:
String实现了CharSequence接口的,这应该地球人都知道吧。
升级建议
自己玩玩就行,毕竟不是LTS版本。
但是,虽然说仅限于自己玩玩就行,但不代表就没有关注的意义哈。还是那个道理,如果JDK12、13、14、15...都不关注些的话,到时候突然来个JDK17的LTS版本,接受起来就会稍显困难。
✍总结
JDK15整体来看新特性方面并不算很亮眼,它主要是对之前版本预览特性的功能做了确定,如文本块、ZGC等,这么一来我们就可以放心大胆的使用啦。
半年一次的发版速度真心学不动了,不过还好我有我的坚持:你发任你发,我用Java8。
公众号后台回复:JDK15,一键打包获取IDEA2020.2.2 + JDK15安装包(mac + windows)
✔推荐阅读:
---------
♥关注A哥♥
Author | A哥(YourBatman)
-------- | -----
个人站点 | www.yourbatman.cn
E-mail | yourbatman@qq.com
微 信 | fsx641385712
公众号 | BAT的乌托邦(ID:BAT-utopia)
知识星球 | BAT的乌托邦
每日文章推荐 | 每日文章推荐
版权声明: 本文为 InfoQ 作者【YourBatman】的原创文章。
原文链接:【http://xie.infoq.cn/article/6c994ac50c732d8c235f0fa8c】。文章转载请联系作者。
评论