Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare une entreprise Scribd logo
Java 11 -> 17
Quoi d’neuf entre les 2 LTS ?
JÉRÔME TAMBORINI
EQUIPE LEASA
Qui c’est lui !?
 Jérôme Tamborini
 10+ XP Dev (Backend – Java SE/EE)
 Leasa
 Archi – Team Manager
 LorraineJUG
 Fin 2021 – Début 2022
Java 11 -> 17 - Quoi d’neuf entre les
2 LTS ?
 Plan
 Le « nouveau » mode de release de Java
 Pourquoi ?
 Comment ?
 Les distributions du JDK
 Java 11 -> Java 17
 Pour nous, les devs
 A savoir
 Java en production en 2021
 Le code source des exemples
 https://github.com/jerometambo
Le « nouveau » mode de release de
Java
 1 version de Java / 6 mois
 Updates mineures pendant 6 mois
 Une version LTS toutes les 6 versions
 11, 17, 23, etc.
 Tous les 3 ans
Le « nouveau » mode de release de
Java
 Répond à plusieurs problématiques du langage
 Une release toutes les X années
 Dur de prévoir les évolutions
 Surtout pour les créateurs de libs / frameworks
 Permet de mettre des features en mode « beta »
 Avant de les changer de package et de les valider
 Ou de les supprimer !
Le « nouveau » mode de release de
Java
Mode « beta »
 Des features/évolutions du langage en mode
 Preview
 Incubating (incubator modules)
 Experimental
 Permet de tester et/ou préparer ses évolutions
 Développeurs
 Frameworks / libs
 Feedback des utilisateurs pour les équipes JDK
 Développeurs
Mode « beta »
 Preview
 A activer via un flag à la compil’
Mode « beta »
 Incubator
 Evolutions d’APIs
 Outils
 Dans un module (au sens Java 9) à explicitement ajouter
Mode « beta »
 Experimental
 Evolutions de la JVM
 A activer via des flags JVM
 Les releasers de JDKs sont libres d’activer / désactiver arbitrairement des
features expérimentales
Mode « beta »
 https://blogs.oracle.com/javamagazine/post/the-role-of-preview-features-
in-java-14-java-15-java-16-and-beyond
Les distributions du JDK
 OracleJDK
 Gratuit en dev.
 Payant en production
 News du 15/09/2021
 https://blogs.oracle.com/cloud-infrastructure/post/introducing-free-java-license
 OpenJDK
 AdoptOpenJDK  Adoptium
 Azul Zulu
 Microsoft
 Oracle
 Redhat
 Etc.
Les distributions du JDK
Les distributions du JDK
 C’est quoi Oracle OpenJDK ?
 Code source du JDK
 Ne propose pas de builds du JDK
 Quoi choisir ?
 Adoptium (ex AdoptOpenJDK)
Java 11
 Pour les devs
 Nouvelles méthodes de String, Files et Optional
 HTTP Client
 Lancer un .java en une commande
 Java Flight Recorder & Java Mission Control
 A savoir
 Moteur JS Nashorn déprécié
 ZGC
 Crypto : ChaCha20 and Poly1305
Java 11 – String, Files et Optional
Java 11 – HTTP Client
 Une des features les plus utilisées
 Les classes dataient de … Java 1.0 !
 (Très) verbeux
 Dépendances
 Apache HTTP Client, OkHttp, etc.
Java 11 – HTTP Client
Java 11 – JFR & JMC
 Java Flight Recorder
 Outil de profiling
 Au runtime
 Exploitation à froid
 Collecte des infos sur l’environnement l’appli et la JVM
 Stocke tout dans un fichier .jfr
 Java Mission Control
 Ouvre les fichiers JFR
 Semblable à VisualVM et consorts
Java 12
 Pour les devs
 On continue les news sur String
 Compact number formatting
 A savoir
 Teeing collector
 Microbenchmark
 Changements de la JVM
Java 12 – String
Java 12 – Compact number formatting
Java 12 – Compact number formatting
 Pratique
 Lié aux Locales
 Evite les utilitaires maison douteux
Java 12 – A savoir
 Teeing Collector
Java 12 – A savoir
 Microbenchmark Suite
 Génère un .jar
 Exécutable pour bencher
Java 12 – A savoir
 Class Data Sharing
Java 13
 Pas mal d’évols en « preview »
 Switch expression
 Text blocs
 A savoir
 Dynamic CDS
 Nouvelle implem’ de la Legacy Socket API
 ZGC: Uncommit Unused Memory
 Unicode support mis à jour vers 12.1
 Support de « Kerberos principal name canonicalization and cross-realm
referrals »
 etc.
Java 14
 Pour les devs
 Switch expression
 Parle-moi NPE, parle-moi !
 En preview
 Pattern matching for instanceof
 Records
 Text block (2nd)
 A savoir
 ZGC
 JFR Event Streaming
 etc.
Java 14 – switch expression
 Structure de contrôle existante depuis Java 1.0
 Pas évoluée depuis Java 1.0
 Souvent répétitive
 Fall through par défaut
 Pour permettre d’exécuter un même traitement pour plusieurs valeurs
 Origine de nombreux bugs : oubli de break
Java 14 – switch expression
 Simplification de l’écriture
 Utilisation de -> en lieu et place de :
 Plus de Fall through
 Plus de break
 Utilisée pour
 Structure de contrôle (comme avant)
 Une expression (nouveauté)
 Valeurs multiples dans les clauses case
 Avec les 2 méthodes d’écriture
Java 14 – Switch Expression
Java 14 – Switch Expression
 switch comme structure de contrôle
avec la syntaxe historique
 « vieux switch »
 Fall-throught par défaut
 default facultatif
 switch comme structure de contrôle
avec la nouvelle syntaxe
 Chaque case doit avoir une instruction
ou un bloc de code
 Pas de fall-through
 default facultatif
 switch comme expression avec la syntaxe
historique
 Fall-throught par défaut
 Exhaustivité des cas obligatoire
 yield pour retourner une valeur
 default obligatoire
 switch comme expression avec la nouvelle
syntaxe
 Chaque case doit retourner une valeur ou lever
une exception, yield pour retourner une valeur
dans un bloc de code
 Pas de fall-through
 Exhaustivité des cas obligatoire
 default obligatoire
Java 14 – Parle-moi NPE !
Java 15
 Pour les devs
 Text Blocks
 En preview
 Sealed classes
 Pattern matching for instanceof (2nd)
 Records (2nd)
 A savoir
 Hidden classes
 Le moteur JS Nashorn est supprimé
 Shenandoah GC
 RMI Activation déprécié et taggué forRemoval
 etc.
Java 15 – Text blocks
Java 16
 Pour les devs
 Evol’ Stream
 Pattern Matching for instanceof
 Records
 En preview
 Sealed classes (2nd)
 A savoir
 JPackage
 Evols ZGC
 Elastic Metaspace
 etc.
Java 16 – Evol’ Stream
Java 16 – Pattern Matching for
instanceof
Java 16 – Records
 Le pourquoi de ce nouveau type ?
 Encapsulation de données en java
 Beaucoup de code
 Constructeur (avec les paramètres de tous les attributs)
 Getters & setters
 Equals
 Hashcode
 toString
 Le dev non auteur de la classe
 Doit lire toute la classe pour comprendre que c’est juste une encapsulation de données
 Ou lit la javadoc,… mais comme pas certain qu’elle soit à jour
 Doit lire toute la classe pour comprendre que c’est juste une encapsulation de données
Java 16 – Records
Java 16 – Records
 Compilé par le compilateur comme tout autre type
 Génération d’une classe final
 Hérite de java.lang.Record
 Composant : champ private final
 Getters
 equals(), hashCode() et toString()
 Possible
 Redéfinition des accesseurs
 Méthodes statiques (Factories)
 Méthodes d’instances
 Pas possible
 Ajouter un champ dans le corps
 Ne peut hériter d’une classe
 Abstract ou classe mère
Java 17 – Tout frais : 14/09/2021
 Qui a contribué ?
Java 17 – Tout frais : 14/09/2021
 Pour les devs
 Sealed classes
 Preview & Incubator
 Pattern Matching for switch
 Foreign Function and Memory API
 Vector API (2nd)
 A savoir
 macOS AArch 64 Port
 Enhanced Pseudo-Random Number Generator
 Context-Specific Deserialization Filters
 Security Manager déprécié (taggué for Removal)
 RMI supprimé
Java 17 – Sealed classes
 Héritage
 Depuis quelques années  Composition over Heritage
 Aucun contrôle des classes filles
 Exemple : dans mon domaine business : pas de téléphone
Java 17 – Sealed classes
 Aujourd’hui, rien ne m’empêche d’hériter d’Appareil
 Et de créer ma classe Telephone dans mon domaine
 Et d’insérer la gestion d’un concept interdit par mon business dans mon appli
Java 17 – Sealed classes
 C’est tout le pourquoi des Sealed classes
 Ajouter de la lisibilité du code en connaissant les sous classes
 Car la réutilisation du code c’est top, mais c’es pas toujours ce qu’on veut faire
 En deux mots
 Les classes sealed permettent de définir les sous types autorisés
Java 17 – Sealed classes
Java 17 – Sealed classes
 A retenir
 Compatible avec les records
 Toutes les sous classes autorisées doivent être dans le même module (au sens Java 9)
 Toutes les classes autorisées
 Doivent explicitement étendre la sealed class
 Doivent définir un modifier
 final
 sealed
 non-sealed
Java en production en 2021
 https://snyk.io/jvm-ecosystem-report-2021/
 + 60% -> JDK 11
Java en production en 2021
Java en production en 2021
Java en production en 2021
Merci pour votre attention

Contenu connexe

Java 11 to 17 : What's new !?

  • 1. Java 11 -> 17 Quoi d’neuf entre les 2 LTS ? JÉRÔME TAMBORINI EQUIPE LEASA
  • 2. Qui c’est lui !?  Jérôme Tamborini  10+ XP Dev (Backend – Java SE/EE)  Leasa  Archi – Team Manager  LorraineJUG  Fin 2021 – Début 2022
  • 3. Java 11 -> 17 - Quoi d’neuf entre les 2 LTS ?  Plan  Le « nouveau » mode de release de Java  Pourquoi ?  Comment ?  Les distributions du JDK  Java 11 -> Java 17  Pour nous, les devs  A savoir  Java en production en 2021  Le code source des exemples  https://github.com/jerometambo
  • 4. Le « nouveau » mode de release de Java  1 version de Java / 6 mois  Updates mineures pendant 6 mois  Une version LTS toutes les 6 versions  11, 17, 23, etc.  Tous les 3 ans
  • 5. Le « nouveau » mode de release de Java  Répond à plusieurs problématiques du langage  Une release toutes les X années  Dur de prévoir les évolutions  Surtout pour les créateurs de libs / frameworks  Permet de mettre des features en mode « beta »  Avant de les changer de package et de les valider  Ou de les supprimer !
  • 6. Le « nouveau » mode de release de Java
  • 7. Mode « beta »  Des features/évolutions du langage en mode  Preview  Incubating (incubator modules)  Experimental  Permet de tester et/ou préparer ses évolutions  Développeurs  Frameworks / libs  Feedback des utilisateurs pour les équipes JDK  Développeurs
  • 8. Mode « beta »  Preview  A activer via un flag à la compil’
  • 9. Mode « beta »  Incubator  Evolutions d’APIs  Outils  Dans un module (au sens Java 9) à explicitement ajouter
  • 10. Mode « beta »  Experimental  Evolutions de la JVM  A activer via des flags JVM  Les releasers de JDKs sont libres d’activer / désactiver arbitrairement des features expérimentales
  • 11. Mode « beta »  https://blogs.oracle.com/javamagazine/post/the-role-of-preview-features- in-java-14-java-15-java-16-and-beyond
  • 12. Les distributions du JDK  OracleJDK  Gratuit en dev.  Payant en production  News du 15/09/2021  https://blogs.oracle.com/cloud-infrastructure/post/introducing-free-java-license  OpenJDK  AdoptOpenJDK  Adoptium  Azul Zulu  Microsoft  Oracle  Redhat  Etc.
  • 14. Les distributions du JDK  C’est quoi Oracle OpenJDK ?  Code source du JDK  Ne propose pas de builds du JDK  Quoi choisir ?  Adoptium (ex AdoptOpenJDK)
  • 15. Java 11  Pour les devs  Nouvelles méthodes de String, Files et Optional  HTTP Client  Lancer un .java en une commande  Java Flight Recorder & Java Mission Control  A savoir  Moteur JS Nashorn déprécié  ZGC  Crypto : ChaCha20 and Poly1305
  • 16. Java 11 – String, Files et Optional
  • 17. Java 11 – HTTP Client  Une des features les plus utilisées  Les classes dataient de … Java 1.0 !  (Très) verbeux  Dépendances  Apache HTTP Client, OkHttp, etc.
  • 18. Java 11 – HTTP Client
  • 19. Java 11 – JFR & JMC  Java Flight Recorder  Outil de profiling  Au runtime  Exploitation à froid  Collecte des infos sur l’environnement l’appli et la JVM  Stocke tout dans un fichier .jfr  Java Mission Control  Ouvre les fichiers JFR  Semblable à VisualVM et consorts
  • 20. Java 12  Pour les devs  On continue les news sur String  Compact number formatting  A savoir  Teeing collector  Microbenchmark  Changements de la JVM
  • 21. Java 12 – String
  • 22. Java 12 – Compact number formatting
  • 23. Java 12 – Compact number formatting  Pratique  Lié aux Locales  Evite les utilitaires maison douteux
  • 24. Java 12 – A savoir  Teeing Collector
  • 25. Java 12 – A savoir  Microbenchmark Suite  Génère un .jar  Exécutable pour bencher
  • 26. Java 12 – A savoir  Class Data Sharing
  • 27. Java 13  Pas mal d’évols en « preview »  Switch expression  Text blocs  A savoir  Dynamic CDS  Nouvelle implem’ de la Legacy Socket API  ZGC: Uncommit Unused Memory  Unicode support mis à jour vers 12.1  Support de « Kerberos principal name canonicalization and cross-realm referrals »  etc.
  • 28. Java 14  Pour les devs  Switch expression  Parle-moi NPE, parle-moi !  En preview  Pattern matching for instanceof  Records  Text block (2nd)  A savoir  ZGC  JFR Event Streaming  etc.
  • 29. Java 14 – switch expression  Structure de contrôle existante depuis Java 1.0  Pas évoluée depuis Java 1.0  Souvent répétitive  Fall through par défaut  Pour permettre d’exécuter un même traitement pour plusieurs valeurs  Origine de nombreux bugs : oubli de break
  • 30. Java 14 – switch expression  Simplification de l’écriture  Utilisation de -> en lieu et place de :  Plus de Fall through  Plus de break  Utilisée pour  Structure de contrôle (comme avant)  Une expression (nouveauté)  Valeurs multiples dans les clauses case  Avec les 2 méthodes d’écriture
  • 31. Java 14 – Switch Expression
  • 32. Java 14 – Switch Expression  switch comme structure de contrôle avec la syntaxe historique  « vieux switch »  Fall-throught par défaut  default facultatif  switch comme structure de contrôle avec la nouvelle syntaxe  Chaque case doit avoir une instruction ou un bloc de code  Pas de fall-through  default facultatif  switch comme expression avec la syntaxe historique  Fall-throught par défaut  Exhaustivité des cas obligatoire  yield pour retourner une valeur  default obligatoire  switch comme expression avec la nouvelle syntaxe  Chaque case doit retourner une valeur ou lever une exception, yield pour retourner une valeur dans un bloc de code  Pas de fall-through  Exhaustivité des cas obligatoire  default obligatoire
  • 33. Java 14 – Parle-moi NPE !
  • 34. Java 15  Pour les devs  Text Blocks  En preview  Sealed classes  Pattern matching for instanceof (2nd)  Records (2nd)  A savoir  Hidden classes  Le moteur JS Nashorn est supprimé  Shenandoah GC  RMI Activation déprécié et taggué forRemoval  etc.
  • 35. Java 15 – Text blocks
  • 36. Java 16  Pour les devs  Evol’ Stream  Pattern Matching for instanceof  Records  En preview  Sealed classes (2nd)  A savoir  JPackage  Evols ZGC  Elastic Metaspace  etc.
  • 37. Java 16 – Evol’ Stream
  • 38. Java 16 – Pattern Matching for instanceof
  • 39. Java 16 – Records  Le pourquoi de ce nouveau type ?  Encapsulation de données en java  Beaucoup de code  Constructeur (avec les paramètres de tous les attributs)  Getters & setters  Equals  Hashcode  toString  Le dev non auteur de la classe  Doit lire toute la classe pour comprendre que c’est juste une encapsulation de données  Ou lit la javadoc,… mais comme pas certain qu’elle soit à jour  Doit lire toute la classe pour comprendre que c’est juste une encapsulation de données
  • 40. Java 16 – Records
  • 41. Java 16 – Records  Compilé par le compilateur comme tout autre type  Génération d’une classe final  Hérite de java.lang.Record  Composant : champ private final  Getters  equals(), hashCode() et toString()  Possible  Redéfinition des accesseurs  Méthodes statiques (Factories)  Méthodes d’instances  Pas possible  Ajouter un champ dans le corps  Ne peut hériter d’une classe  Abstract ou classe mère
  • 42. Java 17 – Tout frais : 14/09/2021  Qui a contribué ?
  • 43. Java 17 – Tout frais : 14/09/2021  Pour les devs  Sealed classes  Preview & Incubator  Pattern Matching for switch  Foreign Function and Memory API  Vector API (2nd)  A savoir  macOS AArch 64 Port  Enhanced Pseudo-Random Number Generator  Context-Specific Deserialization Filters  Security Manager déprécié (taggué for Removal)  RMI supprimé
  • 44. Java 17 – Sealed classes  Héritage  Depuis quelques années  Composition over Heritage  Aucun contrôle des classes filles  Exemple : dans mon domaine business : pas de téléphone
  • 45. Java 17 – Sealed classes  Aujourd’hui, rien ne m’empêche d’hériter d’Appareil  Et de créer ma classe Telephone dans mon domaine  Et d’insérer la gestion d’un concept interdit par mon business dans mon appli
  • 46. Java 17 – Sealed classes  C’est tout le pourquoi des Sealed classes  Ajouter de la lisibilité du code en connaissant les sous classes  Car la réutilisation du code c’est top, mais c’es pas toujours ce qu’on veut faire  En deux mots  Les classes sealed permettent de définir les sous types autorisés
  • 47. Java 17 – Sealed classes
  • 48. Java 17 – Sealed classes  A retenir  Compatible avec les records  Toutes les sous classes autorisées doivent être dans le même module (au sens Java 9)  Toutes les classes autorisées  Doivent explicitement étendre la sealed class  Doivent définir un modifier  final  sealed  non-sealed
  • 49. Java en production en 2021  https://snyk.io/jvm-ecosystem-report-2021/  + 60% -> JDK 11
  • 53. Merci pour votre attention

Notes de l'éditeur

  1. En informatique, une version Long-term support ou LTS (en français Support à long terme) désigne une version spécifique d'un logiciel dont le support est assuré pour une période de temps plus longue que la normale.
  2. Je vais expliquer rapidement les différences
  3. En gros des features en mode beta, specs et implems terminées. Plus pour feedback pour ajustements.
  4. Pareil que preview mais Evolutions d’APIs Outils Dans un module (au sens Java 9) à explicitement ajouter
  5. Pas trop pour les devs, plus pour les archi voir les ingé systems.
  6. Beaucoup de features dont je vais parler ont été mise dans le JDK en preview une ou 2 versions avant !
  7. A Technology Compatibility Kit (TCK) is a suite of tests that at least nominally checks a particular alleged implementation of a Java Specification Request (JSR) for compliance. It is one of the three required pieces for a ratified JSR in the Java Community Process, which are: the JSR specification the JSR reference implementation the Technology Compatibility Kit (TCK)
  8. Pour faire simple !
  9. * JFR & JMC * Nashorn deprecation : moteur JS qui avait été mis en java 8 est déprécié * ZGC : un nouveau GC qui est développé par Oracle et qui promet des temps de pause très courts sur des heaps de plusieurs téraoctets des heaps de plusieurs téraoctets avec des temps de pause faibles (<10 ms) et un impact sur les performances globales des applications (<15% sur le throughput) : clairement fait pour des gens tel que AWS, pas nous. * Crypto : nouveaux algos
  10. But we already have trim(). Then what’s the need of strip()? strip() is “Unicode-aware” evolution of trim(). When trim() was introduced, Unicode wasn’t evolved. Now, the new strip() removes all kinds of whitespaces leading and trailing(check the method Character.isWhitespace(c) to know if a unicode is whitespace or not)
  11. Ce n’est pas un mot clé du langage, mais un nom de type réservé, c’est à dire que l’on ne peut plus appeler une classe var Variables locales (pas pour les arguments d’une méthode, ni son type de retour, ni un attribut de classe) Le mot clé var n’est pas une révolution, mais il permet tout comme l’opérateur <> d’améliorer la lisibilité de certains codes. inférence de type est faite à la compilation, le bytecode généré est exactement le même que lorsque le type est explicité, ce qui assure qu’il n’y a pas d’impact sur la performance.
  12. Evolution depuis Java 1 ! Dispo en mode incubation depuis Java 9 mais officiellement utilisable dans 11 La mode est plus à limiter et supprimer les dépendances
  13. Evolution depuis Java 1 ! Dispo en mode incubation depuis Java 9 mais officiellement utilisable dans 11 La mode est plus à limiter et supprimer les dépendances
  14. Optional<String> describeConstable() If you look at the String class documentation, it implements two new interfaces from Constants API – This method returns an Optional containing the nominal descriptor for this instance, which is the instance itself. String resolveConstantDesc​(MethodHandles.Lookup lookup) This method is part of Constants API and declared in ConstantDesc interface. It resolves this instance as a ConstantDesc, the result of which is the instance itself.
  15. Il s'agit d'un composite de deux collecteurs en aval. Chaque élément est traité par les deux collecteurs en aval. Ensuite, leurs résultats sont transmis à la fonction de fusion et transformés en résultat final.
  16. Le microbenchmark est l'art de mesurer la performance de petits morceaux de code Java. Implémenté de façon incorrecte, le microbenchmark peut produire des résultats non fiables et non représentatifs de la réalité.
  17. La fonctionnalité de Class Data Sharing (CDS) permet de réduire le temps de démarrage et l'empreinte mémoire entre plusieurs machines virtuelles Java. Il permet de partager les métadonnées de classe entre différentes JVM afin de réduire le temps de démarrage et l'empreinte mémoire. Le changement apporté avec Java 12 est que l'archive CDS est activée par défaut.
  18. On peut voir une certaine continuité dans les évols des versions de Java. Le Class Data Sharing a été activé par défaut en 12. Le processus d'archivage des classes d'application était fastidieux. Pour générer des fichiers d'archive, les développeurs devait faire des trial runs of their applications pour créer une liste de classes, puis la vider dans une archive. Après cela, cette archive pourrait être utilisée pour partager des métadonnées entre les JVM. Avec l'archivage dynamique, JDK 13 a simplifié ce processus. Nous pouvons maintenant générer une archive partagée au moment de la fermeture de l'application. Cela a éliminé le besoin trial runs of their applications, ZGC : rend la heap à l’OS (surtout pour l’IOT) FS : Trois nouvelles méthodes ont été ajoutées à la classe FileSystems pour faciliter l'utilisation des fournisseurs de systèmes de fichiers, qui traitent le contenu d'un fichier comme un système de fichiers.
  19. Les types utilisables dans une instruction switch sont toujours les mêmes int, short, byte, char (et leurs wrappers respectifs), énumération et String. La nouvelle syntaxe Une nouvelle syntaxe simplifie l’utilisation de l’instruction switch. Elle utilise l’opérateur arrow. Au-delà du simple remplacement de « : » par « -> », plusieurs simplifications sont introduites. A la droite de l’opérateur ->, il ne peut y avoir qu’une expression, une instruction unique ou un bloc de code. Contrairement à la syntaxe historique, si plusieurs instructions doivent être exécutées, il faut les regrouper dans un bloc de code. Cela est justifié par le fait qu’il n’y a pas de fall-through avec la nouvelle syntaxe.
  20. L’instruction switch n’est plus uniquement une structure de contrôle permettant d’exécuter du code selon la valeur de la variable passée en paramètre. Elle peut aussi être utilisé comme une expression et donc retourner une valeur. Avec la nouvelle syntaxe, c’est très simple, il suffit de fournir la valeur retournée à la droite de l’opérateur arrow. L’utilisation de l’instruction switch comme une expression implique plusieurs contraintes : Toutes les valeurs du type testé doivent être prises en compte : dans la pratique cela implique de toujours utiliser une clause default sauf pour une énumération dont toutes les valeurs sont prises en compte dans les cases Si le switch est la dernière instruction de la ligne, elle doit se terminer par un « ; » yield doit aussi être utilisé dans un bloc de code avec la nouvelle syntaxe pour préciser la valeur à retourner.
  21. Switch comme structure de contrôle avec la syntaxe historique C’est la forme historique bien connue Fall-throught par défaut default facultatif Switch comme structure de contrôle avec la nouvelle syntaxe Chaque case doit avoir une instruction ou un bloc de code Pas de fall-through default facultatif Switch comme expression avec la syntaxe historique Fall-throught par défaut Exhaustivité des cas obligatoire yield pour retourner une valeur Switch comme expression avec la nouvelle syntaxe Chaque case doit retourner une valeur ou lever une exception, yield pour retourner une valeur dans un bloc de code Pas de fall-through Exhaustivité des cas obligatoire
  22. -XX:+ShowCodeDetailsInExceptionMessages pour la 14 à partir de 15 option par défaut
  23. 1h15 - Hidden Classes : sont une fonctionnalité JVM qui est pertinente pour les développeurs de framework. Il permet de rendre les implémentations de classe non découvrables en les définissant à l'aide de Lookup::defineHiddenClass. Ce faisant, de telles classes ne peuvent être trouvées ni en utilisant Class.forName ni en les référant dans le bytecode. Shenandoah GC is the low pause time garbage collector that reduces GC pause times by performing more garbage collection work concurrently with the running Java program. Shenandoah does the bulk of GC work concurrently, including the concurrent compaction, which means its pause times are no longer directly proportional to the size of the heap. Garbage collecting a 200 GB heap or a 2 GB heap should have the similar low pause behavior. Nashorn Mis en jdk8, supprimé RMI Bien qu’utilisé massivement dans les années 2000 2020 signe le début de la mort de RMI (communication d’objets en 2 applis Java en utilisant la sérialisation).
  24. Cela rendait la saisie, la lecture et la maintenance de ces chaînes complexes et favorise les bugs. La syntaxe Le contenu d’un bloc de texte est entouré par un délimiteur de début : 3 double quotes qui se suivent : """ Zéro ou plusieurs caractères espaces Un retour chariot Et un délimiteur de fin : 3 double quotes qui se suivent : """ L’indentation accessoire qui est déterminée et supprimée sur toutes les lignes L’indentation significative qui est conservée Un bloc de texte est utilisable partout où une String peut être attendue puisque suite à leur compilation, ils sont transformés en objets de type String dans le bytecode.
  25. Jpackage Installeurs natifs Linux: deb, rpm: macOS: pkg, app in a dmg Windows: exe, msi Elastic Metaspace Return unused HotSpot class-metadata (i.e., metaspace) memory to the operating system more promptly, reduce metaspace footprint.
  26. Une différence toutefois : toList renvoie une immutable list donc la ma dernière ligne va planter
  27. Un record est compilé par le compilateur comme tout autre type. Comme pour les énumérations, le compilateur va exploiter les informations fournies dans le code pour générer une classe. Le compilateur va générer des membres à la classe à partir des informations de description du record : une classe final qui hérite de la classe java.lang.Record, chaque composant est défini sous la forme d’un champ private final, un constructeur public qui attend en paramètre les composants définis dans le record pour initialiser les valeurs de chaque composant, un accesseur en lecture pour chaque composant, une redéfinition des méthodes equals(), hashCode() et toString() héritées de la classe Object
  28. Un record est compilé par le compilateur comme tout autre type. Comme pour les énumérations, le compilateur va exploiter les informations fournies dans le code pour générer une classe. Le compilateur va générer des membres à la classe à partir des informations de description du record : une classe final qui hérite de la classe java.lang.Record, chaque composant est défini sous la forme d’un champ private final, un constructeur public qui attend en paramètre les composants définis dans le record pour initialiser les valeurs de chaque composant, un accesseur en lecture pour chaque composant, une redéfinition des méthodes equals(), hashCode() et toString() héritées de la classe Object
  29. Note: In JDK 16, there is a new HttpRequest.newBuilder(HttpRequest request, BiPredicate<String,​String> filter) method, which creates a Builder whose initial state is copied from an existing HttpRequest. This builder can be used to build an HttpRequest, equivalent to the original, while allowing amendment of the request state prior to construction – for example, removing headers: HttpRequest.newBuilder(request, (name, value) -> !name.equalsIgnoreCase("Foo-Bar"))
  30. 8 ans de LTS
  31. Enhanced Pseudo-Random Number Generator new RandomGeneratorFactory class. make it easy to request an algorithm based on requirements rather than hard coding a specific implementation. Vector API Second incubator - runtime to optimal vector instructions on supported CPU architectures Security Manager Datait de 1.0, plutôt côté client lourd
  32. Scellées Comment améliorer le DDD en continuant à utiliser l’héritage
  33. Scellées Comment améliorer le DDD en continuant à utiliser l’héritage
  34. Scellées Comment améliorer le DDD en continuant à utiliser l’héritage
  35. Scellées Comment améliorer le DDD en continuant à utiliser l’héritage
  36. Scellées Comment améliorer le DDD en continuant à utiliser l’héritage
  37. En informatique, une version Long-term support ou LTS (en français Support à long terme) désigne une version spécifique d'un logiciel dont le support est assuré pour une période de temps plus longue que la normale.
  38. En informatique, une version Long-term support ou LTS (en français Support à long terme) désigne une version spécifique d'un logiciel dont le support est assuré pour une période de temps plus longue que la normale.
  39. En informatique, une version Long-term support ou LTS (en français Support à long terme) désigne une version spécifique d'un logiciel dont le support est assuré pour une période de temps plus longue que la normale.
  40. En informatique, une version Long-term support ou LTS (en français Support à long terme) désigne une version spécifique d'un logiciel dont le support est assuré pour une période de temps plus longue que la normale.
  41. Prêt pour utiliser toutes les nouvelles features de Java Donner envie de monter en 17