Version Java SE 17

Après six mois de développement, Oracle a publié Java SE 17 (Java Platform, Standard Edition 17), qui utilise le projet open source OpenJDK comme implémentation de référence. À l'exception de la suppression de certaines fonctionnalités obsolètes, Java SE 17 conserve une compatibilité ascendante avec les versions précédentes de la plate-forme Java : la plupart des projets Java précédemment écrits fonctionneront sans modification lorsqu'ils seront exécutés sous la nouvelle version. Des versions prêtes à l'installation de Java SE 17 (JDK, JRE et Server JRE) sont préparées pour Linux (x86_64, AArch64), Windows (x86_64) et macOS (x86_64, AArch64). Développée par le projet OpenJDK, l'implémentation de référence Java 17 est entièrement open source sous licence GPLv2, avec des exceptions GNU ClassPath permettant une liaison dynamique avec des produits commerciaux.

Java SE 17 est classé comme version LTS (Long Term Support), qui continuera à recevoir des mises à jour jusqu'en 2029. Les mises à jour de la version précédente de Java 16 ont été interrompues. La précédente branche LTS de Java 11 sera prise en charge jusqu'en 2026. La prochaine version LTS est prévue pour septembre 2024. Rappelons qu'à partir de la sortie de Java 10, le projet est passé à un nouveau processus de développement, impliquant un cycle plus court pour la formation des nouvelles versions. Les nouvelles fonctionnalités sont désormais développées dans une branche principale constamment mise à jour, qui comprend des modifications prêtes à l'emploi et à partir de laquelle des branches sont créées tous les six mois pour stabiliser les nouvelles versions.

Les nouvelles fonctionnalités de Java 17 incluent :

  • Une implémentation expérimentale de correspondance de modèles dans les expressions « switch » est proposée, qui permet d'utiliser non pas des valeurs exactes dans les étiquettes « case », mais des modèles flexibles couvrant une série de valeurs à la fois, pour lesquels il était auparavant nécessaire d'utiliser des méthodes encombrantes. des chaînes d’expressions « si ... sinon ». De plus, « switch » a la capacité de gérer les valeurs NULL. Objet o = 123L ; Chaîne formatée = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); cas Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); par défaut -> o.toString(); } ;
  • Prise en charge stabilisée des classes et interfaces scellées, qui ne peuvent pas être utilisées par d'autres classes et interfaces pour hériter, étendre ou remplacer l'implémentation. Les classes scellées fournissent également un moyen plus déclaratif de restreindre l'utilisation d'une superclasse que les modificateurs d'accès, basé sur une liste explicite des sous-classes autorisées pour l'extension. package com.example.geometry ; Classe publique scellée La forme autorise com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Un deuxième aperçu de l'API Vector est proposé, qui fournit des fonctions de calculs vectoriels exécutés à l'aide d'instructions vectorielles sur les processeurs x86_64 et AArch64 et permettant d'appliquer simultanément des opérations sur plusieurs valeurs (SIMD). Contrairement aux fonctionnalités fournies par le compilateur HotSpot JIT pour la vectorisation automatique des opérations scalaires, la nouvelle API permet de contrôler explicitement la vectorisation pour le traitement parallèle des données.
  • Ajout d'un aperçu de l'API Foreign Function & Memory, qui permet aux applications d'interagir avec le code et les données en dehors du runtime Java. La nouvelle API vous permet d'appeler efficacement des fonctions non-JVM et d'accéder à la mémoire non gérée par JVM. Par exemple, vous pouvez appeler des fonctions à partir de bibliothèques partagées externes et accéder aux données de processus sans utiliser JNI.
  • Le moteur de rendu macOS qui alimente l'API Java 2D, qui à son tour alimente l'API Swing, a été adapté pour utiliser l'API graphique Metal. La plate-forme macOS continue d'utiliser OpenGL par défaut et l'activation de la prise en charge de Metal nécessite le réglage "-Dsun.java2d.metal=true" et l'exécution au moins de macOS 10.14.x.
  • Ajout d'un port pour la plateforme macOS/AArch64 (ordinateurs Apple basés sur les nouvelles puces Apple M1). Une particularité du port est la prise en charge du mécanisme de protection de la mémoire W^X (Write XOR Execute), dans lequel les pages mémoire ne peuvent pas être consultées simultanément pour l'écriture et l'exécution. (le code ne peut être exécuté qu'une fois l'écriture désactivée, et l'écriture sur une page mémoire n'est possible qu'une fois l'exécution désactivée).
  • Nous sommes revenus à l'utilisation uniquement de la sémantique strictfp pour les expressions à virgule flottante. La prise en charge de la sémantique « par défaut », disponible depuis la sortie de Java 1.2, a été interrompue, y compris des simplifications pour travailler sur des systèmes avec de très anciens coprocesseurs mathématiques x87 (après l'avènement des instructions SSE2, le besoin de sémantique supplémentaire a disparu).
  • De nouveaux types d'interfaces vers les générateurs de nombres pseudo-aléatoires ont été implémentés, et des algorithmes supplémentaires ont été implémentés pour une meilleure génération de nombres aléatoires. Les applications ont la possibilité de choisir un algorithme pour générer des nombres pseudo-aléatoires. Prise en charge améliorée de la génération de flux d'objets aléatoires.
  • Encapsulation stricte appliquée de tous les composants internes du JDK, à l'exception des API critiques telles que sun.misc.Unsafe. L'encapsulation stricte bloque les tentatives du code pour accéder aux classes, méthodes et champs internes. Auparavant, le mode d'encapsulation stricte pouvait être désactivé à l'aide de l'option "--illegal-access=permit", mais cela est désormais obsolète. Les applications qui nécessitent un accès aux classes, méthodes et champs internes doivent les définir explicitement à l'aide de l'option --add-opens ou de l'attribut Add-Opens dans le fichier manifeste.
  • Les applications ont la possibilité de définir des filtres de désérialisation de données, qui peuvent être sensibles au contexte et sélectionnés dynamiquement en fonction d'opérations de désérialisation spécifiques. Les filtres spécifiés sont applicables à l'ensemble de la machine virtuelle (à l'échelle de la JVM), c'est-à-dire couvrent non seulement l'application elle-même, mais également les bibliothèques tierces utilisées dans l'application.
  • Swing a ajouté la méthode javax.swing.filechooser.FileSystemView.getSystemIcon pour charger de grandes icônes afin d'améliorer l'interface utilisateur sur les écrans High DPI.
  • L'API java.net.DatagramSocket prend en charge la connexion aux groupes de multidiffusion sans avoir besoin d'une API java.net.MulticastSocket distincte.
  • L'utilitaire IGV (Ideal Graph Visualizer) a été amélioré, offrant une visualisation interactive de la représentation du code intermédiaire dans le compilateur HotSpot VM C2 JIT.
  • Dans JavaDoc, par analogie avec le compilateur javac, lorsqu'une erreur est générée, le numéro de la ligne problématique dans le fichier source et l'emplacement de l'erreur sont désormais indiqués.
  • Ajout de la propriété native.encoding, reflétant le nom du codage de caractères du système (UTF-8, koi8-r, cp1251, etc.).
  • L'interface java.time.InstantSource a été ajoutée, permettant la manipulation de l'heure sans référence à un fuseau horaire.
  • Ajout de l'API java.util.HexFormat pour la conversion en représentation hexadécimale et vice versa.
  • Un mode trou noir a été ajouté au compilateur, qui désactive les opérations d'élimination de code mort, qui peuvent être utilisées lors des tests de performances.
  • Ajout de l'option « -Xlog:async » au Runtime pour enregistrer les journaux en mode asynchrone.
  • Lors de l'établissement de connexions sécurisées, TLS 1.3 est activé par défaut (auparavant, TLS 1.2 était utilisé).
  • L'API Applet précédemment déclarée obsolète (java.applet.Applet*, javax.swing.JApplet), qui était utilisée pour exécuter des applications Java dans le navigateur, a été déplacée vers la catégorie des éléments dont la suppression est prévue (perte de pertinence après la fin du support pour le plugin Java pour navigateurs).
  • Security Manager, qui a depuis longtemps perdu de sa pertinence et s'est avéré non réclamé après la fin du support du plugin de navigateur, a été déplacé dans la catégorie de ceux dont la suppression est prévue.
  • Le mécanisme d'activation RMI a été supprimé, ce qui est obsolète, relégué dans la catégorie des options dans Java 8 et n'est presque jamais utilisé dans la pratique moderne.
  • Un compilateur expérimental prenant en charge le JIT (juste à temps) pour la compilation dynamique du code Java pour HotSpot JVM, ainsi que le mode de compilation anticipée (AOT, advance-of-time) des classes en code machine avant de démarrer la machine virtuelle , a été supprimé du SDK. Le compilateur a été écrit en Java et basé sur les travaux du projet Graal. Il est à noter que la maintenance du compilateur nécessite beaucoup de main d'œuvre, ce qui n'est pas justifié lorsqu'il n'y a pas de demande de la part des développeurs.

Source: opennet.ru

Ajouter un commentaire