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 编程语言,防止其他类或接口扩展或实现它们。

这个牛逼啊,有了这个特性,意味着以后不是你想继承就继承,想实现就实现了,你得经过允许才行。

来看这个示例:

  1. public abstract sealed class Student
  2. permits ZhangSan, LiSi, ZhaoLiu {
  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.DatagramSocketjava.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 之前:

  1. if (object instanceof Kid) {
  2. Kid kid = (Kid) object;
  3. // ...
  4. } else if (object instanceof Kiddle) {
  5. Kid kid = (Kid) object;
  6. // ...
  7. }

Java 14+:

  1. if (object instanceof Kid kid) {
  2. // ...
  3. } else if (object instanceof Kiddle kiddle) {
  4. // ...
  5. }

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

  1. String html = "<html>\n" +
  2. " <body>\n" +
  3. " <p>Hi, Java技术栈</p>\n" +
  4. " <p>欢迎关注,分享更多干货</p>\n" +
  5. " </body>\n" +
  6. "</html>\n";

Java 13+:

  1. String html = """
  2. <html>
  3. <body>
  4. <p>Hi, Java技术栈</p>
  5. <p>欢迎关注,分享更多干货</p>
  6. </body>
  7. </html>
  8. """;

去掉那些无用的换行和拼接,是不是太爽了。。这个详细教程计划再出一篇,关注公众号Java技术栈第一时间推送。

379:Shenandoah: A Low-Pause-Time Garbage Collector

Shenandoah:一个低停顿时间的垃圾回收器。

Shenandoah 最早是在 JDK 12 中集成进来的,JDK 15 只是将 Shenandoah 垃圾收集器从预览特性变更为正式特性而已,没错,又是转正了。

381:Remove the Solaris and SPARC Ports

移除了 SolarisSPARC 端口。

移除了 Solaris/SPARCSolaris/x64Linux/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 的变量访问方法。

使用方式:

  1. 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 写了一段逻辑,同事直呼看不懂,你试试看。。

3.吊打 Tomcat ,Undertow 性能很炸!!

4.国人开源了一款超好用的 Redis 客户端,真香!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

Java 15 正式发布, 14 个新特性,刷新你的认知!!的更多相关文章

  1. Java 9的14个新特性总结

    Java 9 包含了丰富的特性集.虽然Java 9没有新的语言概念,但是有开发者感兴趣的新的API和诊断命令. 我们将快速的,着重的浏览其中的几个新特性:  模块化系统–Jigsaw 项目 模块化是一 ...

  2. Java9发布回顾Java 8的十大新特性

    java9已经在北京时间9月22日正式发布,开发者可以在oracle jdk官网上下载到最新的jdk9. 今天,我们先来一起复习一下2014年发布的Java 8的十大新特性.先来喝杯java~~~ 按 ...

  3. JDK 14的新特性:更加好用的NullPointerExceptions

    JDK 14的新特性:更加好用的NullPointerExceptions 让99%的java程序员都头痛的异常就是NullPointerExceptions了.NullPointerExceptio ...

  4. JDK 14的新特性:instanceof模式匹配

    JDK 14的新特性:instanceof模式匹配 JDK14在2020年的3月正式发布了.可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks ...

  5. Java 各个版本中的新特性

    新特性你知道多少? Java 8 Lambda 表达式 接口增加默认方法等 方法引用 流 Stream Java 9 模块系统 交互式工具jshell .of() 创建不可变集合 接口支持私有方法 更 ...

  6. Java高新技术 JDK1.5之新特性

      Java高新技术  JDK1.5的新特性 知识概要:                 (1)静态导入 (2)可变参数 (3)增强for循环 (4)基本数据类型的自动拆箱和装箱 静态导入     ...

  7. Angular4.0.0正式发布,附新特性及升级指南

    本文首发地址:Angular4.0.0正式发布,附新特性及升级指南 作者|孙薇 编辑|尾尾 经历了6个RC版本之后,Angular项目组终于发布了新版,即正式版 Angular 4.0.0.新版的 A ...

  8. Java学习:JDK8的新特性

    Java学习:JDK8的新特性 一.十大特性 Lambda表达式 Stream函数式操作流元素集合 接口新增:默认方法与静态方法 方法引用,与Lambda表达式联合使用 引入重复注解 类型注解 最新的 ...

  9. Java基础20:Java8新特性终极指南

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

随机推荐

  1. hive命令大全

    1.等值比较: =语法:A=B操作类型:所有基本类型描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSEhive> select 1 from iteblog where 1=1; ...

  2. 【TTS】文本转语音?如何不调用第三方api来实现,使用pyttsx3

    @ 目录 前言 安装pyttsx3 实现TTS接口 后言 前言 本次的实现需求有点困难,所以也就记录下来,别到时候都忘了. 首先先不说正题,有兴趣的可以看一看: 1.目标是实现一个可以传一个文本就返回 ...

  3. 如何理解算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等?

    先从 来说,理论上哈希表就是O(1).因为哈希表是通过哈希函数来映射的,所以拿到一个关键字,用哈希函数转换一下,就可以直接从表中取出对应的值.和现存数据有多少毫无关系,故而每次执行该操作只需要恒定的时 ...

  4. 简单解析PAT、PMT的程序

    刚开始学习有关TS.PAT.PMT方面的内容,参考了别人的一些程序,然后写了一个简单的解析TS的小程序.如果有地方错误,请发邮件给我843036544@qq.com. #include<stdi ...

  5. YouCompleteMe unavailable: requires Vim compiled with Python 2.x support

    问题:YouCompleteMe unavailable: requires Vim compiled with Python 2.x support 解决:重新编译,加入--enable-pytho ...

  6. 微服务项目整合Ocelot+IdentityServer4

    项目搭建肯定少不了认证和授权,传统的单体应用基于cookie和session来完成的. 因为http请求是无状态的,每个请求都是完全独立的,服务端无法确认当前请求之前是否登陆过.所以第一次请求(登录) ...

  7. C++数的表示

    二进制B 八进制O 十进制D 十六进制H / 0x十六进制 十进制数转换成R进制数:整数部分除基取余,上右下左:小数部分乘基取整,上左下右.   浮点数的阶用一种称为移码的编码表示方法,方便对阶.阶的 ...

  8. python字典的概念与基本操作

    字典是非常常用的一种数据结构,它与json格式的数据非常相似,核心就是以键值对的形式存储数据,关于Python中的字典做如下四点说明: 1.构造字典对象需要用大括号表示 {},每个字典元素都是以键值对 ...

  9. 玩转Spring——Spring AOP

    什么是AOP?AOP(Aspect Oriented Programming )被称为面向切面编程AOP利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共 ...

  10. neighbor和neigh_modify(转载)

    (转载:http://blog.sina.com.cn/s/blog_b48a7ac30102w4mg.html###) 以下取自:http://simulation.haotui.com/viewt ...