序本文主要讲述一下JAVA15的新特性
![Java15的新特性](http://img.jiangsulong.com/220422/03360342a-0.jpg)
文章插图
版本号
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 ClassesJDK15引入了Hidden Classes,同时废弃了非标准的sun.misc.Unsafe::defineAnonymousClass,目标是为frameworks提供在运行时生成内部的class372: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 threads374: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 CollectorZGC在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变为product378: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即可启用
推荐阅读
- 客厅茶几的摆放风水禁忌
- 客厅的颜色搭配有什么宜忌?
- 客厅采光的方向与颜色的搭配
- 不同朝向住宅的客厅用什么颜色好?
- 客厅的沙发应当如何摆放?
- 客厅格局的影响不可小视
- 客厅风水:怎样布置客厅的方位格局?
- 客厅的屏风有什么风水用途?
- 客厅设置屏风的四大注意事项
- 客厅风水:如何布置客厅的财位?