Java 15 正式发布, 14 个新特性,刷新你的认知!!

简介: JDK 15 2020/09/15 如期而至!这个时间牛啊,和苹果发布会同天?

OracleJDK 15 发布地址:


https://www.oracle.com/java/technologies/javase/15all-relnotes.html


OpenJDK 15 发布地址:


https://openjdk.java.net/projects/jdk/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 {

   ...


}

1

2

3

4

类 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 之前:

image.png

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 之前:

image.png

去掉那些无用的换行和拼接,是不是太爽了。。这个详细教程计划再出一篇,关注公众号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) {}

实际生成:

image.png

看完是不是有点 Lombok 的感觉?具体可以点击这里查看栈长之前写的详细教程。


385:Deprecate RMI Activation for Removal

废除 RMI 激活,以便在将来进行删除。


需要说明的是,RMI 激活是 RMI 中一个过时的组件,自 Java 8 以来一直是可选的。


总结

本文主要介绍了 JDK/Java 15 的 14 个新特性,后面栈长有时间也会继续出一些 JDK 15 详细教程,关注公众号Java技术栈第一时间推送哦。如果你想看历史 Java 8 - 14 新特性教程,也可以在公众号菜单中进行阅读。


最后,来看下 Oracle Java 支持路线图:

image.png

JDK 15 并不是一个长期支持的版本,只支持 6 个月到 2021 年 3 月,上一个长期支持版本还是 JDK 11,所以千万不要把非长期支持版本用在生产。


JDK 15 下载地址:


https://www.oracle.com/java/technologies/javase-downloads.html


有兴趣的可以下载尝鲜了!!


写了大半天,点个在看、转发支持下哦,分享给你的更多朋友们~


关注Java技术栈,持续分享最新、最主流的Java技术~

目录
相关文章
|
1天前
|
Java API
Java 8新特性之Lambda表达式与Stream API实践指南
【5月更文挑战第15天】 随着Java语言的不断发展,Java 8作为一个重要的版本,引入了许多令人兴奋的新特性。其中,Lambda表达式和Stream API是Java 8最受关注的两个特性。本文将深入探讨Lambda表达式的基本概念、语法和使用场景,以及如何结合Stream API实现更加简洁、高效的代码编写。通过实例演示,帮助读者快速掌握这两个新特性,提高Java编程能力。
|
1天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的深度解析
【5月更文挑战第12天】本文将深入探讨Java 8中的两个重要新特性:Lambda表达式和Stream API。我们将从基本概念入手,逐步深入到实际应用场景,帮助读者更好地理解和掌握这两个新特性,提高Java编程效率。
41 2
|
1天前
|
Java 编译器 开发者
Java一分钟之-继承:复用与扩展类的特性
【5月更文挑战第9天】本文探讨了Java中的继承机制,通过实例展示了如何使用`extends`创建子类继承父类的属性和方法。文章列举了常见问题和易错点,如构造器调用、方法覆盖、访问权限和类型转换,并提供了解决方案。建议深入理解继承原理,谨慎设计类结构,利用抽象类和接口以提高代码复用和扩展性。正确应用继承能构建更清晰、灵活的代码结构,提升面向对象设计能力。
15 0
|
1天前
|
安全 Java 程序员
Java 8新特性之Lambda表达式
【5月更文挑战第5天】 本文将介绍Java 8中的一个重要新特性——Lambda表达式。Lambda表达式是Java 8引入的一种简洁、易读的函数式编程语法,它允许我们将函数作为参数传递给方法,或者作为返回值。通过使用Lambda表达式,我们可以编写更简洁、更易读的代码,提高开发效率。
|
1天前
|
分布式计算 Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第1天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的函数式编程语法,可以简化代码并提高可读性。Stream API是一种用于处理集合的新工具,可以方便地进行数据操作和转换。通过结合Lambda表达式和Stream API,我们可以更加简洁高效地编写Java代码。
|
1天前
|
供应链 Java API
Java 8新特性解析及应用区块链技术在供应链管理中的应用与挑战
【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API和Optional类等。通过对这些新特性的详细解析和应用实例,帮助读者更好地理解和掌握Java 8的新技术。
|
1天前
|
安全 Java API
Java 8新特性概述及其对编程实践的影响
【4月更文挑战第30天】本文将详细讨论Java 8的新特性,包括Lambda表达式、Stream API以及Optional类等,并探讨这些新特性如何改变了Java编程的实践。我们将通过实例代码展示这些新特性的用法,并分析其对提高代码可读性和编写效率的影响。
|
1天前
|
安全 Java API
Java 8新特性深度解析
【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API、Optional类等,以及这些新特性如何改变我们编写Java代码的方式。
|
Java API Apache
Java 9都有哪些新特性?
Java 9都有哪些新特性?
101 0
|
JavaScript 前端开发 Java
Java 10都有哪些新特性?
Java 10都有哪些新特性?
122 0