本篇内容主要讲解“Java15有什么新特性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java15有什么新特性”吧!

创新互联建站于2013年开始,是专业互联网技术服务公司,拥有项目成都网站设计、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元汤阴做网站,已为上家服务,为汤阴各地企业和个人服务,联系电话:18980820575
java -version openjdk version "15" 2020-09-15 OpenJDK Runtime Environment (build 15+36-1562) OpenJDK 64-Bit Server VM (build 15+36-1562, mixed mode, sharing)
从version信息可以看出是build 15+36
新增rfc8032描述的Edwards-Curve Digital Signature Algorithm (EdDSA)实现 使用示例
// example: generate a key pair and sign
KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519");
KeyPair kp = kpg.generateKeyPair();
// algorithm is pure Ed25519
Signature sig = Signature.getInstance("Ed25519");
sig.initSign(kp.getPrivate());
sig.update(msg);
byte[] s = sig.sign();
// example: use KeyFactory to contruct a public key
KeyFactory 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);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 {...}JDK15引入了Hidden Classes,同时废弃了非标准的sun.misc.Unsafe::defineAnonymousClass,目标是为frameworks提供在运行时生成内部的class
JDK15移除了Nashorn JavaScript Engine及jjs tool,它们在JDK11的被标记为废弃;具体就是jdk.scripting.nashorn及jdk.scripting.nashorn.shell这两个模块被移除了
该特性使用更简单及更现代的方式重新实现了java.net.DatagramSocket及java.net.MulticastSocket以方便更好的维护及debug,新的实现将会更容易支持virtual threads
该特性默认禁用了biased locking(
-XX:+UseBiasedLocking),并且废弃了所有相关的命令行选型(BiasedLockingStartupDelay, BiasedLockingBulkRebiasThreshold, BiasedLockingBulkRevokeThreshold, BiasedLockingDecayTime, UseOptoBiasInlining, PrintBiasedLockingStatistics and PrintPreciseBiasedLockingStatistics)
instanceof的Pattern Matching在JDK15进行Second Preview,示例如下:
public boolean equals(Object o) {
return (o instanceof CaseInsensitiveString cis) &&
cis.s.equalsIgnoreCase(s);
}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
Text Blocks在JDK13被作为preview feature引入,在JDK14作为Second Preview,在JDK15变为最终版
Shenandoah在JDK12被作为experimental引入,在JDK15变为Production;之前需要通过
-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC来启用,现在只需要-XX:+UseShenandoahGC即可启用
Solaris and SPARC Ports在JDK14被标记为废弃,在JDK15版本正式移除
Foreign-Memory Access API在JDK14被作为incubating API引入,在JDK15处于Second Incubator
Records在JDK14被作为preview引入,在JDK15处于Second Preview
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有什么新特性”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!