Java 15 正式发布, 14 个新特性,刷新你的认知!!
JDK 15 2020/09/15 如期而至!
这个时间牛逼啊,和苹果发布会同天?
OracleJDK 15 发布地址:
https://www.oracle.com/java/technologies/javase/15all-relnotes.html
OpenJDK 15 发布地址:
OracleJDK 和 OpenJDK 两者的区别这里不撰述了,不清楚的请点击这里进行查看。
现在的 JDK 真变成了“版本帝”,无力吐槽啊,版本发到 15,大部分人却都还在用着 JDK 7/8,甚至 6。不过没关系,多了解一下,多掌握一点新东西,对你来说没有坏处。
新特性
JDK 15 新特性一览表:
ID | JEP | Feature |
---|---|---|
1 | 339 | Edwards-Curve Digital Signature Algorithm (EdDSA) |
2 | 360 | Sealed Classes (Preview) |
3 | 371 | Hidden Classes |
4 | 372 | Remove the Nashorn JavaScript Engine |
5 | 373 | Reimplement the Legacy DatagramSocket API |
6 | 374 | Disable and Deprecate Biased Locking |
7 | 375 | Pattern Matching for instanceof (Second Preview) |
8 | 377 | ZGC: A Scalable Low-Latency Garbage Collector |
9 | 378 | Text Blocks |
10 | 379 | Shenandoah: A Low-Pause-Time Garbage Collector |
11 | 381 | Remove the Solaris and SPARC Ports |
12 | 383 | Foreign-Memory Access API (Second Incubator) |
13 | 384 | Records (Second Preview) |
14 | 385 | Deprecate RMI Activation for Removal |
JDK 15 一次发布了 14 个新特性,下面栈长带大家来解读下这些新特性!
339:Edwards-Curve Digital Signature Algorithm (EdDSA)
Edwards-Curve
数据签名算法(EdDSA),一种根据 RFC 8032
规范所描述的 Edwards-Curve
数字签名算法(EdDSA)实现加密签名,实现了一种 RFC 8032
标准化方案,但它不能代替 ECDSA。
EdDSA 是一种现代的椭圆曲线签名方案,与 JDK 中现有的签名方案相比,它有很多优势。
360:Sealed Classes (Preview)
封闭类(预览特性),可以是封闭类和或者封闭接口,用来增强 Java 编程语言,防止其他类或接口扩展或实现它们。
这个牛逼啊,有了这个特性,意味着以后不是你想继承就继承,想实现就实现了,你得经过允许才行。
来看这个示例:
public abstract sealed class Student
permits ZhangSan, LiSi, ZhaoLiu {
...
}
类 Student 被 sealed
修饰,说明它是一个封闭类,并且只允许指定的 3 个子类继承。
371:Hidden Classes
隐藏类,这一看也是个很有意思的特性。
隐藏类是为框架(frameworks)所设计的,隐藏类不能直接被其他类的字节码使用,只能在运行时生成类并通过反射间接使用它们。
372:Remove the Nashorn JavaScript Engine
移除了 Nashorn
JavaScript 脚本引擎、APIs,以及 jjs
工具。这些早在 JDK 11 中就已经被标记为 deprecated
了,JDK 15 被移除就很正常了。
Nashorn 是 JDK 1.8 引入的一个 JavaScript 脚本引擎,用来取代 Rhino 脚本引擎。Nashorn 是
ECMAScript-262 5.1
的完整实现,增强了 Java 和 JavaScript 的兼容性,并且大大提升了性能。
为什么要移除?
官方的描述是,随着 ECMAScript
脚本语言的结构、API 的改编速度越来越快,维护 Nashorn
太有挑战性了,所以……。
373:Reimplement the Legacy DatagramSocket API
重新实现了老的 DatagramSocket
API 接口,更改了 java.net.DatagramSocket
和 java.net.MulticastSocket
为更加简单、现代化的底层实现,更易于维护和调试。
新的底层实现将很容易使用虚拟线程,目前正在 Loom
项目中进行探索。这也是 JEP 353
的后续更新版本,JEP 353
已经重新实现了 Socket API。
374:Disable and Deprecate Biased Locking
准备禁用和废除偏向锁,在 JDK 15 中,默认情况下禁用偏向锁,并弃用所有相关的命令行选项。
后面再确定是否需要继续支持偏向锁,国为维护这种锁同步优化的成本太高了。
375:Pattern Matching for instanceof (Second Preview)
模式匹配(第二次预览),第一次预览是 JDK 14 中提出来的,点击这里查看栈长之前写的详细教程。
Java 14 之前:
if (object instanceof Kid) {
Kid kid = (Kid) object;
// ...
} else if (object instanceof Kiddle) {
Kid kid = (Kid) object;
// ...
}
Java 14+:
if (object instanceof Kid kid) {
// ...
} else if (object instanceof Kiddle kiddle) {
// ...
}
Java 15 并没有对此特性进行调整,继续预览特性,只是为了收集更多的用户反馈,可能还不成熟吧。
377:ZGC: A Scalable Low-Latency Garbage Collector
ZGC:一个可伸缩、低延迟的垃圾回收器。
ZGC
最早是在 JDK 11 中集成进来的,JDK 15 只是将 ZGC
垃圾收集器从预览特性变更为正式特性而已,没错,转正了。
这个 JEP
不会更改默认的 GC,默认仍然是 G1
。
378:Text Blocks
文本块,是一个多行字符串,它可以避免使用大多数转义符号,自动以可预测的方式格式化字符串,并让开发人员在需要时可以控制格式。
文本块最早准备在 JDK 12 添加的,但最终撤消了,然后在 JDK 13 中作为预览特性进行了添加,然后又在 JDK 14 中再次预览,在 JDK 15 中,文本块终于转正,暂不再做进一步的更改。
来看下这个示例你就懂了:
Java 13 之前:
String html = "<html>\n" +
" <body>\n" +
" <p>Hi, Java技术栈</p>\n" +
" <p>欢迎关注,分享更多干货</p>\n" +
" </body>\n" +
"</html>\n";
Java 13+:
String html = """
<html>
<body>
<p>Hi, Java技术栈</p>
<p>欢迎关注,分享更多干货</p>
</body>
</html>
""";
去掉那些无用的换行和拼接,是不是太爽了。。这个详细教程计划再出一篇,关注公众号Java技术栈第一时间推送。
379:Shenandoah: A Low-Pause-Time Garbage Collector
Shenandoah:一个低停顿时间的垃圾回收器。
Shenandoah
最早是在 JDK 12 中集成进来的,JDK 15 只是将 Shenandoah
垃圾收集器从预览特性变更为正式特性而已,没错,又是转正了。
381:Remove the Solaris and SPARC Ports
移除了 Solaris
和 SPARC
端口。
移除了 Solaris/SPARC
、Solaris/x64
和 Linux/SPARC
端口的源代码及构建支持。这些端口在 JDK 14 中就已经被标记为 deprecated
了,JDK 15 被移除也不奇怪。
383:Foreign-Memory Access API (Second Incubator)
外存访问 API(二次孵化),可以允许 Java 应用程序安全有效地访问 Java 堆之外的外部内存。
这个最早在 JDK 14 中成为孵化特性,JDK 15 继续二次孵化并对其 API 有了一些更新。
384:Records (Second Preview)
Records 最早在 JDK 14 中成为预览特性,JDK 15 继续二次预览。
Records 在某些场合可以干掉 Lombok
的存在,能自动生成了类构造器、toString()、hashCode()、equals(),以及类似 getter 的变量访问方法。
使用方式:
public record Student(String name, int id, int age) {}
实际生成:
看完是不是有点 Lombok 的感觉?具体可以点击这里查看栈长之前写的详细教程。
385:Deprecate RMI Activation for Removal
废除 RMI 激活,以便在将来进行删除。
需要说明的是,RMI 激活是 RMI 中一个过时的组件,自 Java 8 以来一直是可选的。
总结
本文主要介绍了 JDK/Java 15 的 14 个新特性,后面栈长有时间也会继续出一些 JDK 15 详细教程,关注公众号Java技术栈第一时间推送哦。如果你想看历史 Java 8 - 14 新特性教程,也可以在公众号菜单中进行阅读。
最后,来看下 Oracle Java 支持路线图:
JDK 15 并不是一个长期支持的版本,只支持 6 个月到 2021 年 3 月,上一个长期支持版本还是 JDK 11,所以千万不要把非长期支持版本用在生产。
JDK 15 下载地址:
https://www.oracle.com/java/technologies/javase-downloads.html
有兴趣的可以下载尝鲜了!!
写了大半天,点个在看、转发支持下哦,分享给你的更多朋友们~
关注Java技术栈,持续分享最新、最主流的Java技术~
近期热文推荐:
1.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!
2.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。
觉得不错,别忘了随手点赞+转发哦!
Java 15 正式发布, 14 个新特性,刷新你的认知!!的更多相关文章
- Java 9的14个新特性总结
Java 9 包含了丰富的特性集.虽然Java 9没有新的语言概念,但是有开发者感兴趣的新的API和诊断命令. 我们将快速的,着重的浏览其中的几个新特性: 模块化系统–Jigsaw 项目 模块化是一 ...
- Java9发布回顾Java 8的十大新特性
java9已经在北京时间9月22日正式发布,开发者可以在oracle jdk官网上下载到最新的jdk9. 今天,我们先来一起复习一下2014年发布的Java 8的十大新特性.先来喝杯java~~~ 按 ...
- JDK 14的新特性:更加好用的NullPointerExceptions
JDK 14的新特性:更加好用的NullPointerExceptions 让99%的java程序员都头痛的异常就是NullPointerExceptions了.NullPointerExceptio ...
- JDK 14的新特性:instanceof模式匹配
JDK 14的新特性:instanceof模式匹配 JDK14在2020年的3月正式发布了.可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks ...
- Java 各个版本中的新特性
新特性你知道多少? Java 8 Lambda 表达式 接口增加默认方法等 方法引用 流 Stream Java 9 模块系统 交互式工具jshell .of() 创建不可变集合 接口支持私有方法 更 ...
- Java高新技术 JDK1.5之新特性
Java高新技术 JDK1.5的新特性 知识概要: (1)静态导入 (2)可变参数 (3)增强for循环 (4)基本数据类型的自动拆箱和装箱 静态导入 ...
- Angular4.0.0正式发布,附新特性及升级指南
本文首发地址:Angular4.0.0正式发布,附新特性及升级指南 作者|孙薇 编辑|尾尾 经历了6个RC版本之后,Angular项目组终于发布了新版,即正式版 Angular 4.0.0.新版的 A ...
- Java学习:JDK8的新特性
Java学习:JDK8的新特性 一.十大特性 Lambda表达式 Stream函数式操作流元素集合 接口新增:默认方法与静态方法 方法引用,与Lambda表达式联合使用 引入重复注解 类型注解 最新的 ...
- Java基础20:Java8新特性终极指南
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
随机推荐
- ubuntu 绝望事件
@ubuntu.com hi!大家好,早上发生了很有意思的事情 显示器分辨率(x2) 系统 2560x1440 Ubuntu 20.04.1 LTS 上面的表格是现在的环境 开机进入锁屏页面,正常显示 ...
- Redis设计与实现——多机数据库的实现
复制 旧版Redis的复制功能分为同步(sync)和命令传播两个操作. sync:是一个非常耗费资源的操作 命令传播 ...
- 【Spring】看了这篇Spring事务原理,我才知道我对Spring事务的误解有多深!
写在前面 有很多小伙伴们留言说,冰河,你能不能写一篇关于Spring事务的文章呢?我:可以啊,安排上了!那还等什么呢?走起啊!! 事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有 ...
- jqgrid 获取选中用户的数据插入
因为查询出的表和被插入的表不是在同一个数据库,所以先从前台jqgrid表格中获取到数据后,再插入表中. 实现: 获取到jqgrid选中 的每行数据之后,发ajax请求把数据以json格式传入后台,后台 ...
- 【Spring注解驱动开发】自定义组件如何注入Spring底层的组件?看了这篇我才真正理解了原理!!
写在前面 最近,很多小伙伴出去面试都被问到了Spring问题,关于Spring,细节点很多,面试官也非常喜欢问一些很细节的技术点.所以,在 Spring 专题中,我们尽量把Spring的每个技术细节说 ...
- Vue管理系统前端系列四组件拆分封装
目录 组件封装 首页布局拆分后结构 拆分后代码 状态管理中添加 app 模块 组件封装 在上一篇记录中,首页中有太多的代码,为了避免代码的臃肿,需要对主要的功能模块拆分,来让代码看起来更简洁,且能进行 ...
- openVswitch(OVS)源代码分析之工作流程(flow流表查询)
原文链接: openVswitch(OVS)源代码分析之工作流程(flow流表查询)
- 牛客网数据库SQL实战解析(31-40题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- P1227 【[JSOI2008]完美的对称】
这道题,先讲一下我的做题思路 这道题的最主要的目的就是算出中心,我下面称为中点.这个中点其实很好算的,我们只需要算出最左下角的坐标和最右上角的坐标,然后用中点坐标公式算出来就ok了,那么这道题就做完了 ...
- 读取手机中的联系人信息(android.provider.ContactsContract)
本篇开始讲如何从Android中得到本机联系人的信息.由于Android较快的版本升级,部分API已经发生了变化.本篇探究的通过ContentProvider机制获取联系人的API从Android2. ...