您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java15的新特性

时间:2020-09-17 09:18:13  来源:  作者:

本文主要讲述一下JAVA15的新特性

Java15的新特性

 

版本号

java -versionopenjdk version "15" 2020-09-15OpenJDK Runtime Environment (build 15+36-1562)OpenJDK 64-Bit Server VM (build 15+36-1562, mixed mode, sharing)

从version信息可以看出是build 15+36

特性列表

339:Edwards-Curve Digital Signature Algorithm (EdDSA)

新增rfc8032描述的Edwards-Curve Digital Signature Algorithm (EdDSA)实现 使用示例

// example: generate a key pair and signKeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519");KeyPair kp = kpg.generateKeyPair();// algorithm is pure Ed25519Signature sig = Signature.getInstance("Ed25519");sig.initSign(kp.getPrivate());sig.update(msg);byte[] s = sig.sign();// example: use KeyFactory to contruct a public keyKeyFactory kf = KeyFactory.getInstance("EdDSA");boolean xOdd = ...BigInteger y = ...NamedParameterSpec paramSpec = new NamedParameterSpec("Ed25519");EdECPublicKeySpec pubSpec = new EdECPublicKeySpec(paramSpec, new EdPoint(xOdd, y));PublicKey pubKey = kf.generatePublic(pubSpec);

360:Sealed Classes (Preview)

JDK15引入了sealed classes and interfaces.用于限定实现类,限定父类的使用,为后续的pattern matching的exhaustive analysis提供便利 示例

package com.example.geometry;​public abstract sealed class Shape    permits Circle, Rectangle, Square {...}​public final class Circle extends Shape {...}​public sealed class Rectangle extends Shape     permits TransparentRectangle, FilledRectangle {...}public final class TransparentRectangle extends Rectangle {...}public final class FilledRectangle extends Rectangle {...}​public non-sealed class Square extends Shape {...}

这里使用了3个关键字,一个是sealed,一个是permits,一个是non-sealed;permits的这些子类要么使用final,要么使用sealed,要么使用non-sealed修饰;针对record类型,也可以使用sealed,因为record类型暗示这final

package com.example.expression;​public sealed interface Expr    permits ConstantExpr, PlusExpr, TimesExpr, NegExpr {...}​public record ConstantExpr(int i)       implements Expr {...}public record PlusExpr(Expr a, Expr b)  implements Expr {...}public record TimesExpr(Expr a, Expr b) implements Expr {...}public record NegExpr(Expr e)           implements Expr {...}

371:Hidden Classes

JDK15引入了Hidden Classes,同时废弃了非标准的sun.misc.Unsafe::defineAnonymousClass,目标是为frameworks提供在运行时生成内部的class

372:Remove the Nashorn JavaScript Engine

JDK15移除了Nashorn JavaScript Engine及jjs tool,它们在JDK11的被标记为废弃;具体就是jdk.scripting.nashorn及jdk.scripting.nashorn.shell这两个模块被移除了

373:Reimplement the Legacy DatagramSocket API

该特性使用更简单及更现代的方式重新实现了java.net.DatagramSocket及java.net.MulticastSocket以方便更好的维护及debug,新的实现将会更容易支持virtual threads

374:Disable and Deprecate Biased Locking

该特性默认禁用了biased locking(-XX:+UseBiasedLocking),并且废弃了所有相关的命令行选型(BiasedLockingStartupDelay, BiasedLockingBulkRebiasThreshold, BiasedLockingBulkRevokeThreshold, BiasedLockingDecayTime, UseoptoBiasInlining, PrintBiasedLockingStatistics and PrintPreciseBiasedLockingStatistics)

375:Pattern Matching for instanceof (Second Preview)

instanceof的Pattern Matching在JDK15进行Second Preview,示例如下:

public boolean equals(Object o) {     return (o instanceof CaseInsensitiveString cis) &&         cis.s.equalsIgnoreCase(s); }

377:ZGC: A Scalable Low-Latency Garbage Collector

ZGC在JDK11被作为experimental feature引入,在JDK15变成Production,但是这并不是替换默认的GC,默认的GC仍然还是G1;之前需要通过-XX:+UnlockExperimentalVMOptions -XX:+UseZGC来启用ZGC,现在只需要-XX:+UseZGC就可以 相关的参数有ZAllocationSpikeTolerance、ZCollectionInterval、ZFragmentationLimit、ZMarkStackSpaceLimit、ZProactive、ZUncommit、ZUncommitDelay ZGC-specific JFR events(ZAllocationStall、ZPageAllocation、ZPageCacheFlush、ZRelocationSet、ZRelocationSetGroup、ZUncommit)也从experimental变为product

378:Text Blocks

Text Blocks在JDK13被作为preview feature引入,在JDK14作为Second Preview,在JDK15变为最终版

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

Shenandoah在JDK12被作为experimental引入,在JDK15变为Production;之前需要通过-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC来启用,现在只需要-XX:+UseShenandoahGC即可启用

381:Remove the Solaris and SPARC Ports

Solaris and SPARC Ports在JDK14被标记为废弃,在JDK15版本正式移除

383:Foreign-Memory Access API (Second Incubator)

Foreign-Memory Access API在JDK14被作为incubating API引入,在JDK15处于Second Incubator

384:Records (Second Preview)

Records在JDK14被作为preview引入,在JDK15处于Second Preview

385:Deprecate RMI Activation for Removal

JDK15废弃了RMI Activation,后续将被移除

细项解读

上面列出的是大方面的特性,除此之外还有一些api的更新及废弃,主要见JDK 15 Release Notes,这里举几个例子。

添加项

  • Support for Unicode 13.0 (JDK-8239383)

升级了Unicode,支持Unicode 13.0

  • Added isEmpty Default Method to CharSequence (JDK-8215401)

给CharSequence新增了isEmpty方法 java.base/java/lang/CharSequence.java

    /**     * Returns {@code true} if this character sequence is empty.     *     * @implSpec     * The default implementation returns the result of calling {@code length() == 0}.     *     * @return {@code true} if {@link #length()} is {@code 0}, otherwise     * {@code false}     *     * @since 15     */    default boolean isEmpty() {        return this.length() == 0;    }
  • Added Support for SO_INCOMING_NAPI_ID Support (JDK-8243099)

jdk.net.ExtendedSocketOptions新增了SO_INCOMING_NAPI_ID选型

  • Specialized Implementations of TreeMap Methods (JDK-8176894)

JDK15对TreeMap提供了putIfAbsent, computeIfAbsent, computeIfPresent, compute, merge方法提供了overriding实现

  • New Option Added to jcmd for Writing a gzipped Heap Dump (JDK-8237354)

jcmd的GC.heap_dump命令现在支持gz选型,以dump出gzip压缩版的heap;compression level从1(fastest)到9(slowest, but best compression),默认为1

  • New System Properties to Configure the TLS Signature Schemes (JDK-8242141)

新增了jdk.tls.client.SignatureSchemes及jdk.tls.server.SignatureSchemes用于配置TLS Signature Schemes

  • Support for certificate_authorities Extension (JDK-8206925)

支持certificate_authorities的扩展

移除项

  • Obsolete -XX:UseAdaptiveGCBoundary (JDK-8228991)

淘汰了-XX:UseAdaptiveGCBoundary

废弃项

  • Deprecated -XX:ForceNUMA Option (JDK-8243628)

废弃了ForceNUMA选项

  • Disable Native SunEC Implementation by Default (JDK-8237219)

默认禁用了Native SunEC Implementation

已知问题

  • java.net.HttpClient Does Not Override Protocols Specified in SSLContext Default Parameters (JDK-8239594)

HttpClient现在没有覆盖在SSLContext Default Parameters中指定的Protocols

其他事项

  • DatagramPacket.getPort() Returns 0 When the Port Is Not Set (JDK-8237890)

当DatagramPacket没有设置port的时候,其getPort方法返回0

  • Improved Ergonomics for G1 Heap Region Size (JDK-8241670)

优化了默认G1 Heap Region Size的计算

小结

Java15主要有如下几个特性

  • 339:Edwards-Curve Digital Signature Algorithm (EdDSA)
  • 360:Sealed Classes (Preview)
  • 371:Hidden Classes
  • 372:Remove the Nashorn JavaScript Engine
  • 373:Reimplement the Legacy DatagramSocket API
  • 374:Disable and Deprecate Biased Locking
  • 375:Pattern Matching for instanceof (Second Preview)
  • 377:ZGC: A Scalable Low-Latency Garbage Collector
  • 378:Text Blocks
  • 379:Shenandoah: A Low-Pause-Time Garbage Collector
  • 381:Remove the Solaris and SPARC Ports
  • 383:Foreign-Memory Access API (Second Incubator)
  • 384:Records (Second Preview)
  • 385:Deprecate RMI Activation for Removal

doc

  • JDK 15 Features
  • JDK 15 Release Notes
  • Oracle JDK 15 Release Notes
  • Java SE deprecated-list
  • The Arrival of Java 15
  • Java 15 and IntelliJ IDEA


Tags:Java15   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
序本文主要讲述一下Java15的新特性 版本号java -versionopenjdk version "15" 2020-09-15OpenJDK Runtime Environment (build 15+36-1562)OpenJDK 64-Bit Server VM (build...【详细内容】
2020-09-17  Tags: Java15  点击:(78)  评论:(0)  加入收藏
▌简易百科推荐
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(11)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(12)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(10)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(10)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(14)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(17)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(21)  评论:(0)  加入收藏
一、概述观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察...【详细内容】
2021-12-13  唯一浩哥    Tags:Java   点击:(16)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条