编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

Java15的新特性 java15官网

gowuye 2024-04-03 16:13 11 浏览 0 评论

Java语言特性系列

  • Java5的新特性
  • Java6的新特性
  • Java7的新特性
  • Java8的新特性
  • Java9的新特性
  • Java10的新特性
  • Java11的新特性
  • Java12的新特性
  • Java13的新特性
  • Java14的新特性
  • Java15的新特性
  • Java16的新特性

本文主要讲述一下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

相关推荐

嵌入式C语言中常量的应用实例(嵌入式c语言中常量的应用实例是什么)

常量,我们都知道,就是数值保持不变的量。在C语言中,常量一旦初始化了,它的值将在整个程序运行周期内,不允许发生任何变化。常量与变量是相对的,我们实际项目中经常会用到它。定义常量的两种方式C语言中主要有...

C语言编程基础知识汇总学习,适合初学者!更新常量知识

(二)整型常量整型常量有3种形式:十进制整型常量、八进制整型常量和十六进制整型常量。(注意:c语言中没有直接表示二进制的整型常量,在c语言源程序中不会出现二进制。)书写方式如下:十进制整型常量:123...

【C语言】第二章第六节:字符串常量

第二章第六节:字符串常量。下表C语言中的常用转义字符。·字符形式功能:ASCIl码(十进制形式)。→\t水平制表(横向跳格:跳到下一个tab位置)。→\b退格8。→\r回车(不换行,光标移到本行行首)...

「GCTT 出品」Go 系列教程——5. 常量

这是我们Golang系列教程的第五篇。定义在Go语言中,术语”常量”用于表示固定的值。比如5、-89、IloveGo、67.89等等。看看下面的代码:varaint=50v...

每日C语言-常量指针、指针常量、指向常量的指针常量

一、常量指针1)什么是常量指针?通过该指针不可以修改其所指向存储单元中的值指针本身即地址可以被修改2)定义:类型说明符const*指针变量;类型说明符表示指针所指向存储单元中的值得数据类型指针...

C语言-符号常量、常变量、变量之我见

更新内容:新增音频。音频和文章一起更配oHello,大家好,又和大家见面了~~相信很多朋友们听了C语言的“符号常量”、“常变量”、“变量”后还是对这三者一脸懵逼吧。不管老师怎么歇斯底里地讲解,同学们迷...

零基础带你学习C语言:四:探索常量与变量

前言常量与变量学习;一:分析:short、float、long类型#include<stdio.h>intmain(){shortage=18;floatweight=12...

C语言中是如何定义常量的?那定义字符串呢?

常量有整型常量、浮点型常量、字符型常量及字符串常量。‘常量定义是指定义符号常量,用一个标识符来代表一个常量,通过宏定义预处理指令来实现。常量的定义:#definecount60这就定义了一个常量...

C语言符号常量的优点,会是那几点?

符号常量是一个常量,是不变量,所以,在编译的时候,就把符号常量出现的地方,替换为符号常量对应的常量。符号常量一般用户定义一个全局使用的数据,而且要改变该数据的时候,只需要改变符号常量的值,代码中引用符...

嵌入式开发- C语言数据类型-常量(c语言嵌入式是干嘛的)

基本数据类型的常量-掌握**整型常量:**常量是指在程序运行期间其数值不发生变化的数据。整型常量通常简称为整数整数可以是十进制数、八进制数、十六进制数八进制06334十六进制0xd1...

c语言解剖课:只读变量、常量、字面量傻傻分不清?

写在前面本篇主题的缘起,是因为一个计算机专业的大学生在和我讨论c语言问题时,说const常量如何如何,我说变量被const修饰了,还是变量,不是“常量”。他给了我一个截图:他说大模型都是这样回答的,变...

C/C++编程笔记:C数组、字符串常量和指针!三分钟弄懂它

想弄懂C语言中数组和指针的关系吗?这篇文章就占据你三分钟时间,看完你肯定会有收获!数组数组声明为数据类型名称[constant-size],并将一个数据类型的一个或多个实例分组到一个可寻址的位...

C语言入门到精通【第008讲】——C语言常量

C语言常量常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。常量就像是常规的变量,只不过常...

这是C语言无法修改得东西,C语言基础教程之常量解析

常量是指程序在执行期间不会改变的固定值。这些固定值也称为文字。常量可以是任何基本数据类型,如整数常量,浮点常量,字符常量或字符串文字,还有枚举常量。常量被视为常规变量,除了它们的值在定义后无法修改。整...

C语言中的单精度、双精度、常量等都有什么意思?

刚接触C语言时,对于常量,变量,浮点,单精度,双精度等问题的理解,大都很模糊不清,其实在程序运行过程中,其值不能改变的量称为常量。如12、0、-3为整型常量,4.6、-1.23为实型常量,'a'、'...

取消回复欢迎 发表评论: