Publication de Java SE 17

AprĂšs six mois de dĂ©veloppement, Oracle a lancĂ© la plateforme Java SE 17 (Java Platform, Standard Edition 17), dont l'implĂ©mentation de rĂ©fĂ©rence est le projet open-source OpenJDK. À l'exception de la suppression de certaines fonctionnalitĂ©s obsolĂštes, Java SE 17 maintient la rĂ©trocompatibilitĂ© avec les versions antĂ©rieures de la plateforme Java — la plupart des projets Java Ă©crits prĂ©cĂ©demment fonctionneront sans modifications avec la nouvelle version. Des builds prĂȘtes Ă  installer de Java SE 17 (JDK, JRE et Server JRE) sont disponibles pour Linux (x86_64, AArch64), Windows (x86_64) et macOS (x86_64, AArch64). L'implĂ©mentation de rĂ©fĂ©rence de Java 17 dĂ©veloppĂ©e dans le cadre du projet OpenJDK est entiĂšrement ouverte sous la licence GPLv2 avec des exceptions GNU ClassPath, permettant le lien dynamique avec des produits commerciaux.

Java SE 17 est classĂ© parmi les versions Ă  long terme de support (LTS), avec des mises Ă  jour qui seront publiĂ©es jusqu'en 2029. La publication des mises Ă  jour pour la version intermĂ©diaire prĂ©cĂ©dente, Java 16, a Ă©tĂ© interrompue. L'ancienne branche LTS, Java 11, sera supportĂ©e jusqu'en 2026. La prochaine version LTS est prĂ©vue pour septembre 2024. Rappelons qu'Ă  partir de la version Java 10, le projet a adoptĂ© un nouveau processus de dĂ©veloppement, avec un cycle de publication de nouvelles versions plus court. Les nouvelles fonctionnalitĂ©s sont dĂ©sormais dĂ©veloppĂ©es dans une branche master en constante mise Ă  jour, qui intĂšgre les modifications prĂȘtes et Ă  partir de laquelle des branches pour la stabilisation de nouvelles versions sont créée tous les six mois.

Parmi les nouveautés de Java 17, on peut noter :

  • Une implĂ©mentation expĂ©rimentale de l'appariement de modĂšles dans les expressions «switch» a Ă©tĂ© proposĂ©e, permettant l'utilisation de modĂšles flexibles dans les Ă©tiquettes «case» au lieu de valeurs prĂ©cises, englobant immĂ©diatement une sĂ©rie de valeurs, ce qui nĂ©cessitait auparavant des chaĂźnes d'expressions «if
else» encombrantes. De plus, des capacitĂ©s de traitement des valeurs NULL ont Ă©tĂ© ajoutĂ©es Ă  l'intĂ©rieur de «switch». Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Le support des classes et interfaces scellĂ©es a Ă©tĂ© stabilisĂ©, qui ne peuvent pas ĂȘtre utilisĂ©es par d'autres classes et interfaces pour l'hĂ©ritage, l'extension ou la redĂ©finition de l'implĂ©mentation. Les classes scellĂ©es fournissent Ă©galement une maniĂšre plus dĂ©clarative de restreindre l'utilisation du super-classe, par rapport aux modificateurs d'accĂšs, qui reposent sur l'Ă©numĂ©ration explicite des sous-classes autorisĂ©es Ă  ĂȘtre Ă©tendues. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {
}
  • Une deuxiĂšme mise en Ɠuvre prĂ©liminaire de l'API Vector a Ă©tĂ© proposĂ©e, fournissant des fonctions pour les calculs vectoriels qui s'exĂ©cutent en utilisant des instructions vectorielles des processeurs x86_64 et AArch64 et permettant d'appliquer simultanĂ©ment des opĂ©rations Ă  plusieurs valeurs (SIMD). Contrairement aux capacitĂ©s d'auto-vectorisation des opĂ©rations scalaires fournies par le compilateur JIT HotSpot, la nouvelle API permet de gĂ©rer explicitement la vectorisation pour le traitement parallĂšle des donnĂ©es.
  • Une mise en Ɠuvre prĂ©liminaire de l'API Foreign Function & Memory a Ă©tĂ© ajoutĂ©e, permettant aux applications d'interagir avec le code et les donnĂ©es qui se trouvent en dehors de l'environnement d'exĂ©cution Java. La nouvelle API permet d'appeler efficacement des fonctions exĂ©cutĂ©es en dehors de la JVM et d'accĂ©der Ă  la mĂ©moire non gĂ©rĂ©e par la JVM. Par exemple, il est possible d'appeler des fonctions Ă  partir de bibliothĂšques partagĂ©es externes et d'accĂ©der aux donnĂ©es d'un processus sans utiliser JNI.
  • Le moteur de rendu pour macOS, qui prend en charge l'API Java 2D, qui Ă  son tour est utilisĂ©e dans l'API Swing, a Ă©tĂ© adaptĂ© pour utiliser l'API graphique Metal. Par dĂ©faut, OpenGL est toujours utilisĂ© sur la plateforme macOS, et pour activer le support de Metal, vous devez dĂ©finir le paramĂštre « -Dsun.java2d.metal=true » et disposer d'au moins macOS 10.14.x.
  • Un port pour la plateforme macOS/AArch64 (ordinateurs Apple basĂ©s sur les nouvelles puces Apple M1) a Ă©tĂ© ajoutĂ©. La caractĂ©ristique du port est le support du mĂ©canisme de protection de la mĂ©moire W^X (Write XOR Execute), oĂč les pages de mĂ©moire ne peuvent pas ĂȘtre accessibles simultanĂ©ment en Ă©criture et en exĂ©cution. (Le code ne peut ĂȘtre exĂ©cutĂ© qu'aprĂšs l'interdiction de l'Ă©criture, et une Ă©criture dans une page de mĂ©moire n'est possible qu'aprĂšs l'interdiction de l'exĂ©cution).
  • L'utilisation d'une sĂ©mantique strictement stricte (strictfp) pour les expressions Ă  virgule flottante a Ă©tĂ© rĂ©tablie. Le support de la sĂ©mantique 'default', introduite avec Java 1.2, qui simplifiait le fonctionnement sur des systĂšmes avec de trĂšs anciens coprocesseurs mathĂ©matiques x87 (avec l'arrivĂ©e des instructions SSE2, la nĂ©cessitĂ© d'une sĂ©mantique supplĂ©mentaire a disparu), a Ă©tĂ© abandonnĂ©.
  • De nouveaux types d'interfaces pour les gĂ©nĂ©rateurs de nombres pseudo-alĂ©atoires ont Ă©tĂ© implĂ©mentĂ©s, ainsi que des algorithmes supplĂ©mentaires pour une gĂ©nĂ©ration de nombres alĂ©atoires de meilleure qualitĂ©. Les applications ont dĂ©sormais la possibilitĂ© de choisir l'algorithme de gĂ©nĂ©ration des nombres pseudo-alĂ©atoires. Le support pour la gĂ©nĂ©ration de flux d'objets alĂ©atoires a Ă©tĂ© amĂ©liorĂ©.
  • L'encapsulation stricte de tous les Ă©lĂ©ments internes du JDK est devenue obligatoire, Ă  l'exception des API critiques, telles que sun.misc.Unsafe. L'encapsulation stricte empĂȘche les tentatives d'accĂšs depuis le code aux classes internes, mĂ©thodes et champs. Auparavant, le mode d'encapsulation stricte pouvait ĂȘtre dĂ©sactivĂ© avec l'option '—illegal-access=permit', mais cette option a maintenant Ă©tĂ© dĂ©clarĂ©e obsolĂšte. Les applications nĂ©cessitant 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 peuvent dĂ©sormais dĂ©finir des filtres pour dĂ©sĂ©rialiser des donnĂ©es, qui peuvent dĂ©pendre du contexte et ĂȘtre sĂ©lectionnĂ©es dynamiquement lier Ă  des opĂ©rations spĂ©cifiques de dĂ©sĂ©rialisation. Les filtres ainsi dĂ©finis sont applicables Ă  l'ensemble de la une machine virtuelle JVM, c'est-Ă -dire qu'ils couvrent non seulement l'application elle-mĂȘme, mais aussi les bibliothĂšques tierces utilisĂ©es dans l'application.
  • Un nouveau mĂ©thode javax.swing.filechooser.FileSystemView.getSystemIcon a Ă©tĂ© ajoutĂ© Ă  Swing pour charger des icĂŽnes de grande taille, permettant d'amĂ©liorer l'interface utilisateur sur les Ă©crans Ă  haute densitĂ© de pixels (HighDPI).
  • L'API java.net.DatagramSocket a Ă©tĂ© amĂ©liorĂ©e pour supporter la connexion Ă  des groupes Multicast sans avoir besoin d'utiliser l'API distincte java.net.MulticastSocket.
  • L'utilitaire IGV (Ideal Graph Visualizer) a Ă©tĂ© perfectionnĂ©, offrant une visualisation interactive de la reprĂ©sentation intermĂ©diaire du code dans le compilateur JIT HotSpot VM C2.
  • Dans JavaDoc, de maniĂšre similaire au compilateur javac, le numĂ©ro de la ligne problĂ©matique dans le fichier source ainsi que l'emplacement de l'erreur sont dĂ©sormais indiquĂ©s lors de l'affichage d'une erreur.
  • Ajout de la propriĂ©tĂ© native.encoding, reflĂ©tant le nom de l'encodage de caractĂšres systĂšme (UTF-8, koi8-r, cp1251, etc.).
  • Ajout de l'interface java.time.InstantSource, permettant de manipuler le temps sans lien avec un fuseau horaire.
  • Ajout de l'API java.util.HexFormat pour convertir en reprĂ©sentation hexadĂ©cimale et vice versa.
  • Le compilateur a ajoutĂ© le mode blackhole, dĂ©sactivant les opĂ©rations d'exception de code inutilisĂ© (elimination de code mort), ce qui peut ĂȘtre utilisĂ© pour des tests de performance.
  • Une option « -Xlog:async » a Ă©tĂ© ajoutĂ©e au Runtime pour enregistrer les journaux en mode asynchrone.
  • Pour les connexions sĂ©curisĂ©es, TLS 1.3 est utilisĂ© par dĂ©faut (auparavant, TLS 1.2 Ă©tait utilisĂ©).
  • L'API Applet (java.applet.Applet*, javax.swing.JApplet), anciennement utilisĂ©e pour lancer des applications Java dans le navigateur, a Ă©tĂ© classĂ©e parmi celles prĂ©vues pour suppression (elle est devenue obsolĂšte aprĂšs l'arrĂȘt du support du plugin Java pour les navigateurs).
  • Le Security Manager, qui est devenu obsolĂšte et a Ă©tĂ© abandonnĂ© aprĂšs l'arrĂȘt du support du plugin de navigateur, a Ă©tĂ© classĂ© parmi ceux prĂ©vus pour suppression.
  • Le mĂ©canisme RMI Activation, obsolĂšte depuis Java 8 et presque jamais utilisĂ© dans les pratiques modernes, a Ă©tĂ© supprimĂ©.
  • Le compilateur expĂ©rimental prenant en charge JIT (just-in-time) pour la compilation dynamique du code Java pour HotSpot JVM, ainsi que le mode de compilation anticipĂ©e (AOT, ahead-of-time) des classes en code machine avant le dĂ©marrage de la machine virtuelle, a Ă©tĂ© supprimĂ© du SDK. Le compilateur, Ă©crit en Java, Ă©tait basĂ© sur les travaux du projet Graal. Il est Ă  noter que l'entretien de ce compilateur demande des efforts importants qui ne se justifient pas dans un contexte de dĂ©sintĂ©rĂȘt des dĂ©veloppeurs.

Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster