Java 16 dirilis

Versi 16 dari platform Java SE telah dirilis. Rilis ini berisi sekitar dua setengah ribu masalah tertutup dan 17 JEP. Perubahan API dapat dilihat di sini . Catatan rilis di sini .







Distribusi Oracle JDK dan OpenJDK sudah tersedia untuk diunduh .









JEP yang membuatnya menjadi Java 16 akan dipecah menjadi empat kategori: bahasa, API, JVM, dan infrastruktur.







Lidah



Pencocokan pola untuk operator instanceof (JEP 375)



The instanceof



Operator pencocokan pola, yang diperkenalkan di Jawa 14 dan pindah ke pratinjau kedua di Jawa 15, sekarang menjadi sintaks stabil dan tidak lagi memerlukan bendera --enable-preview



. Kami membahas pencocokan pola secara rinci dalam artikel ini , dan sejak itu dua perubahan telah dilakukan:







Pertama, variabel pola tidak lagi final secara implisit:







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





Kedua, jika tipe ekspresi yang diketahui pada waktu kompilasi adalah subtipe dari tipe yang diperiksa, maka sekarang menjadi kesalahan kompilasi:







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







Entri (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-, .









Jika tidak ingin ketinggalan berita tentang Java, maka subscribe channel MiniJUG Telegram








All Articles