您好,登錄后才能下訂單哦!
本篇內容主要講解“Java15有什么新特性”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java15有什么新特性”吧!
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有什么新特性”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。