Sortie de Java 16

La 16e version de la plate-forme Java SE a été publiée. Cette version contient environ deux mille cinq cents problèmes fermés et 17 JEP. Les modifications de l'API peuvent être consultées ici . Notes de version ici .







Les distributions Oracle JDK et OpenJDK sont déjà disponibles au téléchargement .









Les JEP qui en ont fait Java 16 seront divisés en quatre catégories: langage, API, JVM et infrastructure.







Langue



Correspondance de modèle pour l'opérateur instanceof (JEP 375)



L' instanceof



opérateur de correspondance de modèle, qui a été introduit dans Java 14 et déplacé vers le deuxième aperçu de Java 15, est désormais une syntaxe stable et ne nécessite plus d'indicateur --enable-preview



. Nous avons discuté de la correspondance de modèles en détail dans cet article , et depuis lors, deux modifications y ont été apportées:







Premièrement, les variables de modèle ne sont plus implicitement finales:







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





Deuxièmement, si le type de l'expression connu au moment de la compilation est un sous-type du type en cours de vérification, il s'agit maintenant d'une erreur de compilation:







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







Entrées (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-, .









Si vous ne voulez pas manquer les actualités de Java, abonnez-vous à la chaîne miniJUG Telegram








All Articles