Java語言特性系列
本文主要講述一下Java16的新特性html
java -version openjdk version "16" 2021-03-16 OpenJDK Runtime Environment (build 16+36-2231) OpenJDK 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)
從version信息能夠看出是build 16+36
提供了jdk.incubator.vector來用於矢量計算,實例以下
static final VectorSpecies<Float> SPECIES = FloatVector.SPECIES_256; void vectorComputation(float[] a, float[] b, float[] c) { for (int i = 0; i < a.length; i += SPECIES.length()) { var m = SPECIES.indexInRange(i, a.length); // FloatVector va, vb, vc; var va = FloatVector.fromArray(SPECIES, a, i, m); var vb = FloatVector.fromArray(SPECIES, b, i, m); var vc = va.mul(va). add(vb.mul(vb)). neg(); vc.intoArray(c, i, m); } }
在JDK C++的源碼中容許使用C++14的語言特性
OpenJDK源碼的版本控制從Mercurial (hg) 遷移到git
將OpenJDK源碼的版本控制遷移到 github上
實現了併發thread-stack處理來下降GC safepoints的負擔
對socket channel及server socket channel的api提供對unix domain socket的支持
將glibc的jdk移植到使用musl的alpine linux上
支持再也不使用的class metadata歸還內存給操做系統,下降內存佔用
移植JDK到Windows/AArch64
提供jdk.incubator.foreign來簡化native code的調用
提供@jdk.internal.ValueBased來用於標註做爲value-based的類,實例以下
@jdk.internal.ValueBased public final class SomeVbc { public SomeVbc() {} final String ref = "String"; void abuseVbc() { synchronized(ref) { // OK synchronized (this) { // WARN } } } } final class AuxilliaryAbuseOfVbc { void abuseVbc(SomeVbc vbc) { synchronized(this) { // OK synchronized (vbc) { // WARN } } } }
jpackage在JDK14引入,JDK15做爲incubating工具,在JDK16轉正,從jdk.incubator.jpackage
轉爲jdk.jpackage
。它支持Linux: deb and rpm、macOS: pkg and dmg、Windows: msi and exe
Foreign-Memory Access API在JDK14首次引入做爲incubating API,在JDK15處於第二輪incubating,在JDK16處於第三輪incubating
instanceof的模式匹配在JDK14做爲preview,在JDK15做爲第二輪的preview,在JDK16轉正
Record類型在JDK14做爲preview,在JDK15處於第二輪preview,在JDK16轉正
對內部的api進行更多的封裝,鼓勵開發者從使用內部的方法遷移到標準的API,可是
sun.misc.Unsafe
仍是繼續保留
Sealed Classes在JDK15做爲preview引入,在JDK16做爲第二輪preview
上面列出的是大方面的特性,除此以外還有一些api的更新及廢棄,主要見JDK 16 Release Notes,這裏舉幾個例子。java
給InvocationHandler添加invokeDefault方法
java.time支持Day Period
Stream新增toList方法
針對G1提供了併發歸還內存給操做系統
移除jaotc工具
使用-Xlog:class+load=info
替代-XX:+TraceClassLoading
;使用-Xlog:class+unload=info
替代-XX:+TraceClassUnloading
;使用-Xlog:exceptions=info
替代-XX:+TraceExceptions
廢棄ThreadGroup的stop, destroy, isDestroyed, setDaemon, isDaemon方法
廢棄了java.security.cert.X509Certificate的getIssuerDN()、getSubjectDN()方法
Unix Domain Sockets對Windows 2019 Server的支持還不完善
TreeMap.computeIfAbsent方法針對null的處理與規範有誤差
對Proxy Class進行了加強,支持
jdk.serialProxyInterfaceLimit
屬性
對compareToIgnoreCase、equalsIgnoreCase、regionMatches方法的Case Insensitive語義進行了加強
HttpClient.newHttpClient及HttpClient.Builder.build方法可能拋出UncheckedIOException
默認的HttpClient實現返回Cancelable Futures
Java16主要有以下幾個特性linux