Java16がリリースされました

JavaSEプラットフォーム16番目のバージョンがリリースされました。このリリースには、約2.5万のクローズされた問題と17のJEPが含まれています。APIの変更はここで確認できますここでリリースノート







Oracle JDKおよびOpenJDKディストリビューションは、すでにダウンロード可能です。









Java 16に組み込まれたJEPは、言語、API、JVM、およびインフラストラクチャの4つのカテゴリに分類されます。









instanceof演算子のパターンマッチング(JEP 375)



instanceof



たパターンマッチングオペレータ、導入ジャワ14とに移動させる第二のプレビューのJava 15には、今安定した構文で、もはやフラグを必要--enable-preview



この記事ではパターンマッチングについて詳しく説明しましたが、それ以降、2つの変更が加えられました。







まず、パターン変数は暗黙的に最終的なものではなくなりました。







if (obj instanceof String s) {
    s = "Hello"; // OK  Java 16,   Java 15
}
      
      





次に、コンパイル時に認識されている式のタイプが、チェックされているタイプのサブタイプである場合、コンパイルエラーになります。







String str = ...
if (str instanceof String s) { // O  Java 16, OK  Java 15
}
      
      







エントリー(JEP 395)



, – . preview Java 14 Java 15. . Java 16 : :







public class Outer {
    public class Inner {
        // OK  Java 16,   Java 15
        static void main(String[] args) {
        }

        // OK  Java 16,   Java 15
        record Point(int x, int y) {
        }
    }
}
      
      







sealed



( preview) (JEP 397)



«» , Java 15 preview, . . :







  • Java contextual keyword restricted keyword restricted identifier, contextual keywords sealed



    , non-sealed



    permits



    .
  • , sealed



    :
    sealed interface Sealed {
    }
    
    final class Impl implements Sealed {
        void f(Runnable r) {
            Sealed s = (Sealed) r; // error: incompatible types
        }
    }
          
          



  • Class.permittedSubclasses()



    Class.getPermittedSubclasses()



    .




JVM



JDK (JEP 396)



API JDK, Java 9, : Java 9-15 --illegal-access



permit



, Java 16 deny



. , API (sun.*



, com.sun.*



, jdk.internal.*



..) .







JDK , Java 16, JVM:







  • --illegal-access=permit/warn/debug



    : JDK
  • --add-opens=module/package=target-module



    :
  • --add-exports=module/package=target-module



    : ( )


--illegal-access



. Java 16, : Option --illegal-access is deprecated and will be removed in a future release



.







API jdk.unsupported



: sun.misc



sun.reflect



.









Warnings for Value-Based Classes (JEP 390)



- (Integer



, Double



, Character



..) value-based , , deprecated Java 9, deprecated for removal.







value-based API Java 8. , , , identity: ==



, , identityHashCode()



.. Value-based Valhalla, .







value-based :







Double d = 0.0;
synchronized (d) { // warning: [synchronization] attempt to synchronize on an instance of a value-based class
}
      
      





value-based JVM:







  • -XX:+UnlockDiagnosticVMOptions -XX:DiagnoseSyncOnValueBasedClasses=1



    : .
  • -XX:+UnlockDiagnosticVMOptions -XX:DiagnoseSyncOnValueBasedClasses=2



    : .




ZGC: Concurrent Thread-Stack Processing (JEP 376)



ZGC safepoints . .









Unix-Domain Socket Channels (JEP 380)



Unix socket channel server-socket channel API. , , . Unix Windows 10 Windows Server 2019.









Elastic Metaspace (JEP 387)



Metaspace ( JVM, ) . , .









Alpine Linux Port (JEP 386)



JDK Alpine Linux Linux, musl C. Alpine Linux , . JDK .









Windows/AArch64 Port (JEP 388)



JDK Windows/AArch64. Java Windows on ARM, .









API



Stream





java.util.stream.Stream



JEP, , .







Stream.toList()



. Stream



. , Collectors.toUnmodifiableList()



, , Stream.toList()



, null



-.







Stream.mapMulti()



( ). Stream.flatMap()



: flatMap()



, Stream



, mapMulti()



, – , – Consumer, . :







IntStream.rangeClosed(1, 10).mapMulti((i, consumer) -> {
    for (int j = 1; j <= i; j++) {
        consumer.accept(j);
    }
}); //  1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, ...
      
      







(JEP 392)



jpackage



, Java 14 , .









Vector API (Incubator) (JEP 338)



SIMD- (x64 AArch64). API , JVM . , , .







API jdk.incubator.vector



.









Foreign Linker API (Incubator) (JEP 389)



API, PanamaForeign Linker API. Java, JNI: , .







Foreign API Oracle.









Foreign-Memory Access API (Third Incubator) (JEP 393)



API Java, Java 14, .











Enable C++14 Language Features (JEP 347)



JDK Java 16 C++98/03. Java 11 , C++11/14. : HotSpot C++11/14, .









Migrate from Mercurial to Git (JEP 357) Migrate to GitHub (JEP 369)



JDK Git GitHub. 2020 , Java 16 .







GitHub . -, . Skara.







Git JDK: jdk11u , , jdk8u.









Java 16 STS-, .









Javaに関するニュースを見逃したくない場合は、miniJUGTelegramチャネルに登録してください。








All Articles