JDK15正式发布,新增功能预览!

Wesley13
• 阅读 775

JDK15正式发布,新增功能预览!

作者 | 王磊

来源 | Java中文社群(ID:javacn666)

转载请联系授权(微信ID:GG_Stone)

JDK 15 在 2020 年 9 月 15 号正式发布了,这次发布的主要功能有:

  • JEP 339:EdDSA 数字签名算法

  • JEP 360:密封类(预览)

  • JEP 371:隐藏类

  • JEP 372:删除 Nashorn JavaScript 引擎

  • JEP 373:重新实现 Legacy DatagramSocket API

  • JEP 374:重新实现 DatagramSocket API

  • JEP 375:实例模式匹配(第二次预览)

  • JEP 377:ZGC:一个可扩展的低延迟垃圾收集器

  • JEP 378:文本块

  • JEP 379:低暂停时间垃圾收集器

  • JEP 381:移除 Solaris 和 SPARC 端口

  • JEP 383:外部存储器访问 API(第二个内置程序)

  • JEP 384:Records(第二次预览)

  • JEP 385:不推荐的 RMI 激活去除

JEP:JDK Enhancement Proposals,JDK 增强建议,也就是 JDK 的特性新增和改进提案。

这些年发布的版本对应的 JEPs 数量如下图所示:JDK15正式发布,新增功能预览!

发布版本说明

根据发布的规划,这次发布的 JDK 15 将是一个短期的过度版,只会被 Oracle 支持(维护)6 个月,直到明年 3 月的 JDK 16 发布此版本将停止维护。而 Oracle 下一个长期支持版(LTS 版)会在明年的 9 月份候发布(Java 17),LTS 版每 3 年发布一个,上一次长期支持版是 18 年 9 月发布的 JDK 11。

JDK 15 新功能说明

JDK 15 为用户提供了十四项主要的增强/更改,包括一个孵化器模块,三个预览功能,两个不推荐使用的功能以及两个删除功能。

1、EdDSA 数字签名算法

新加入 Edwards-Curve 数字签名算法(EdDSA)实现加密签名。在许多其它加密库(如 OpenSSL 和 BoringSSL)中得到支持。与 JDK 中的现有签名方案相比,EdDSA 具有更高的安全性和性能。这是一个新的功能。

2、隐藏类

此功能可帮助需要在运行时生成类的框架。框架生成类需要动态扩展其行为,但是又希望限制对这些类的访问。隐藏类很有用,因为它们只能通过反射访问,而不能从普通字节码访问。此外,隐藏类可以独立于其他类加载,这可以减少框架的内存占用。这是一个新的功能。

3、重新实现 DatagramSocket API

重新实现旧版 DatagramSocket API,更简单、更现代的实现来代替java.net.DatagramSocketjava.net.MulticastSocketAPI 的基础实现,提高了 JDK 的可维护性和稳定性。

4、ZGC 功能转正

ZGC 已由JEP 333集成到JDK 11 中,其目标是通过减少 GC 停顿时间来提高性能。借助 JEP 377,ZGC 从预览功能转变为生产功能。

5、文本块功能转正

文本块由JEP 355在 2019 年提出,文本块是一种多行字符串文字,它避免了大多数转义序列的需要,以一种可预测的方式自动设置字符串的格式,并在需要时使开发人员可以控制格式。借助 JEP 378,文本块已成为 Java 语言的永久功能。

6、Shenandoah 垃圾回收算法转正

Shenandoah 垃圾回收从实验特性变为产品特性。这是一个从 JDK 12 引入的回收算法,该算法通过与正在运行的 Java 线程同时进行疏散工作来减少 GC 暂停时间。Shenandoah 的暂停时间与堆大小无关,无论堆栈是 200 MB 还是 200 GB,都具有相同的一致暂停时间。

7、密封类(预览)

通过密封的类和接口来增强 Java 编程语言,用于限制超类的使用,密封的类和接口限制其它可能继承或实现它们的其它类或接口。

8、instanceof 自动匹配模式(预览)

旧写法:

// 先判断类型if (obj instanceof String) {    // 然后转换    String s = (String) obj;    // 然后才能使用}

新写法:

if (obj instanceof String s) {    // 如果类型匹配 直接使用} else {    // 如果类型不匹配则不能直接使用}

这是第二次预览该功能,我们已经在 Java 14 中首次预览过该特性。

9、Records Class(预览)

Records Class 也是第二次出现的预览功能,它在 JDK 14 中也出现过一次了,使用 Record 可以更方便的创建一个常量类,使用的前后代码对比如下。

写法

class Point {    private final int x;    private final int y;    Point(int x, int y) {         this.x = x;        this.y = y;    }    int x() { return x; }    int y() { return y; }    public boolean equals(Object o) {         if (!(o instanceof Point)) return false;        Point other = (Point) o;        return other.x == x && other.y = y;    }    public int hashCode() {        return Objects.hash(x, y);    }    public String toString() {         return String.format("Point[x=%d, y=%d]", x, y);    }}

写法

record Point(int x, int y) { }

也就是说在使用了 record 之后,就可以用一行代码编写出一个常量类,并且这个常量类还包含了构造方法、toString()、equals() 和 hashCode() 等方法。

10、外部存储器访问 API(预览)

目的是引入一个 API,以允许 Java 程序安全有效地访问 Java 堆之外的外部内存。这同样是 Java 14 的一个预览特性。

11、其它功能

其它功能里面还有一些弃用和不建议使用的功能,比如移除了 Nashorn JavaScript 引擎,同时也移除了删除 Solaris 和 SPARC 端口,并标记了一些弃用功能。

参考 & 鸣谢

码农小胖哥:https://mp.weixin.qq.com/s/rhfSLW0wfe73xgbRVvX46Q

官方日志:https://openjdk.java.net/projects/jdk/15/

JDK15正式发布,新增功能预览!

              往期推荐 
              
             
            
           
          
         
       
   
      
      
      
  
     
     
     
 
    
    
    

   
   
   

[

漫画:什么是红黑树?(整合版)

2020-09-15

JDK15正式发布,新增功能预览!

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU1NTkwODE4Mw%3D%3D%26mid%3D2247489058%26idx%3D2%26sn%3D25f7f7f9419389b74e27e5cc29992e1e%26chksm%3Dfbcc7b1accbbf20c35b2b037ac38b9f62303a14812071308bce8974b6738a699dfdadd97d56d%26scene%3D21%23wechat_redirect)

[

图解|查找数组中最大值的5种方法!

2020-09-16

JDK15正式发布,新增功能预览!

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU1NTkwODE4Mw%3D%3D%26mid%3D2247489092%26idx%3D1%26sn%3D85f52254a0a7e6fde5158b5dd13094d5%26chksm%3Dfbcc7b7cccbbf26aee9133964645b7f15c3f54d1dc9ced16e9d07d9b6c6331ca90bafe894c96%26scene%3D21%23wechat_redirect)

[

万字详解|手撕 9大排序算法!

2020-09-11

JDK15正式发布,新增功能预览!

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU1NTkwODE4Mw%3D%3D%26mid%3D2247489022%26idx%3D2%26sn%3Db49743fa0014b4a05bdc21642d688a15%26chksm%3Dfbcc78c6ccbbf1d0470dc1ddf75aa9b21fbec65adb9be14321b0da0f7d11e37a1211bd7d5075%26scene%3D21%23wechat_redirect)

[

字符串操作的12个小技巧!

2020-09-10

JDK15正式发布,新增功能预览!

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU1NTkwODE4Mw%3D%3D%26mid%3D2247488988%26idx%3D2%26sn%3Dbc4571ad7b63acbbaca4a8cc45cd325f%26chksm%3Dfbcc78e4ccbbf1f26f7a54e64bbfb31d17bedf3fb096d966ee4d618905c9828d93cca76f9647%26scene%3D21%23wechat_redirect)

关注下方二维码,收获更多干货!

JDK15正式发布,新增功能预览!

本文分享自微信公众号 - Java中文社群(javacn666)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
JDK 竟然是这样实现栈的?
!(https://oscimg.oschina.net/oscnet/b2e60191f9d143e3a4899c717aa4cd2f.jpg)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)前面的文章《动图演示:手撸堆栈的两种实现方法!》(https://w
Wesley13 Wesley13
2年前
MySQL开源工具推荐,有了它我卸了珍藏多年Nactive!
!(https://oscimg.oschina.net/oscnet/6d37ed1e91ea4607a92fd8fda95dab9f.jpg)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)最近无意间发现了一款开源免费的MySQL客户端管理工具,磊哥
Wesley13 Wesley13
2年前
URL 去重的 6 种方案!(附详细代码)
!(https://oscimg.oschina.net/oscnet/424625a47398436aab01436e33af14d0.png)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)URL去重在我们日常工作中和面试中很常遇到,比如这些:!(ht
Stella981 Stella981
2年前
Socket粘包问题终极解决方案—Netty版(2W字)!
!(https://oscimg.oschina.net/oscnet/f7f8847276f74c4785a2bb44a2405092.png)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)上一篇我们写了《Socket粘包问题的3种解决方案(https://
Wesley13 Wesley13
2年前
Java中的5大队列,你知道几个?
!(https://oscimg.oschina.net/oscnet/413dba940d7047ee828abcda51d24e4a.jpg)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)本文已收录至https://github.com/vipstone
Wesley13 Wesley13
2年前
MySQL为Null会导致5个问题,个个致命!
!(https://oscimg.oschina.net/oscnet/fa2b44bdaa7047cca0929dd7bb6cb752.jpg)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)正式开始之前,我们先来看下MySQL服务器的配置和版本号信息,如下图
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_