Java SE 17 Verëffentlechung

No sechs Méint Entwécklung huet Oracle d'Java SE 17 (Java Platform, Standard Edition 17) Plattform verëffentlecht, déi den OpenJDK Open Source Projet als Referenzimplementatioun benotzt. Mat Ausnam vun der Entfernung vun e puer deprecéierten Features, hält Java SE 17 Réckkompatibilitéit mat fréiere Verëffentlechungen vun der Java Plattform - déi meescht virdru geschriwwe Java Projete funktionnéieren nach ëmmer ouni Ännerung wann se ënner der neier Versioun lafen. Installéierbar Builds vu Java SE 17 (JDK, JRE a Server JRE) si virbereet fir Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Entwéckelt vum OpenJDK Projet, d'Java 17 Referenz Implementatioun ass voll Open Source ënner der GPLv2 Lizenz mat GNU ClassPath Ausnahmen fir dynamesch Verknëppung mat kommerziellen Produkter z'erméiglechen.

Java SE 17 ass klasséiert als Long Term Support (LTS) Verëffentlechung, déi weider Updates bis 2029 kréien. Updates fir déi fréier Java 16 Meilesteen Verëffentlechung goufen ofgeschaaft. Déi viregt LTS Branche vu Java 11 gëtt bis 2026 ënnerstëtzt. Déi nächst LTS Verëffentlechung ass geplangt fir September 2024. Loosst eis Iech drun erënneren datt ugefaang mat der Verëffentlechung vu Java 10, de Projet op en neien Entwécklungsprozess gewiesselt ass, wat e méi kuerzen Zyklus fir d'Bildung vun neie Verëffentlechungen implizéiert. Nei Funktionalitéit ass elo an enger stänneg aktualiséierter Master-Branche entwéckelt, déi fäerdeg Ännerunge enthält an aus deenen d'Branchen all sechs Méint verzweifelt ginn fir nei Verëffentlechungen ze stabiliséieren.

Nei Features am Java 17 enthalen:

  • Eng experimentell Implementatioun vu Mustermatching an "Schalter" Ausdréck gëtt proposéiert, wat et erlaabt net exakt Wäerter an "Fall" Etiketten ze benotzen, awer flexibel Templates déi eng Serie vu Wäerter gläichzäiteg ofdecken, fir déi virdru gebraucht gouf fir ëmständlech ze benotzen Ketten vun "wann ... soss" Ausdréck. Zousätzlech, "Schalter" huet d'Fähegkeet NULL Wäerter ze verschaffen. Objekt o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("lang %d", l); case Double d -> String.format("duebel %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Stabiliséiert Ënnerstëtzung fir versiegelt Klassen an Schnëttplazen, déi net vun anere Klassen an Schnëttplazen benotzt kënne ginn fir d'Ëmsetzung ze ierwen, ze verlängeren oder ze iwwerschreiden. Versiegelte Klassen bidden och e méi deklarativen Wee fir d'Benotzung vun enger Superklass ze beschränken wéi Zougangsmodifikateur, baséiert op explizit Oplëschtung vun den Ënnerklassen, déi fir d'Verlängerung erlaabt sinn. Package com.example.geometrie; ëffentlech versiegelt Klass Form erlaabt com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {...}
  • Eng zweet Virschau vun der Vector API gëtt proposéiert, déi Funktiounen fir Vecteure Berechnungen ubitt, déi mat Vektorinstruktiounen op x86_64 an AArch64 Prozessoren ausgefouert ginn an et erlaben Operatiounen gläichzäiteg op verschidde Wäerter (SIMD) applizéiert ze ginn. Am Géigesaz zu de Fäegkeeten, déi am HotSpot JIT Compiler zur Auto-Vektoriséierung vu scalar Operatiounen zur Verfügung gestallt ginn, mécht déi nei API et méiglech explizit Vektoriséierung fir parallel Datenveraarbechtung ze kontrolléieren.
  • Eng Virschau vun der Foreign Function & Memory API bäigefüügt, déi Uwendungen erlaabt mat Code an Daten ausserhalb der Java Runtime ze interagéieren. Déi nei API erlaabt Iech effizient Net-JVM Funktiounen ze ruffen an Zougang zu Net-JVM-verwalte Erënnerung. Zum Beispill kënnt Dir Funktiounen aus externen gemeinsame Bibliothéiken ruffen an Zougang zu Prozessdaten ouni JNI benotzen.
  • De macOS Rendering-Motor deen d'Java 2D API dréit, deen am Tour de Swing API dréit, gouf ugepasst fir d'Metal Grafik API ze benotzen. D'macOS Plattform benotzt weider OpenGL als Standard, a fir Metal Support z'aktivéieren erfuerdert Astellung "-Dsun.java2d.metal=true" an op d'mannst macOS 10.14.x lafen.
  • En Hafen bäigefüügt fir d'macOS/AArch64 Plattform (Apple Computer baséiert op den neien Apple M1 Chips). Eng speziell Feature vum Hafen ass Ënnerstëtzung fir de W^X (Write XOR Execute) Erënnerungsschutzmechanismus, an deem d'Erënnerungssäiten net gläichzäiteg fir Schreiwen an Ausféierung zougänglech sinn. (Code kann nëmmen ausgefouert ginn nodeems d'Schreiwen behënnert ass, a Schreiwen op eng Erënnerungssäit ass nëmme méiglech nodeems d'Ausféierung behënnert ass).
  • Zréckgaang fir nëmmen strictfp Semantik fir Floating Point Ausdréck ze benotzen. Ënnerstëtzung fir d'"Standard" Semantik, déi zanter der Verëffentlechung vu Java 1.2 verfügbar ass, ass gestoppt ginn, dorënner Vereinfachunge fir op Systemer mat ganz alen x87 Mathematik-Koprozessoren ze schaffen (no der Entstoe vun SSE2 Instruktiounen ass de Besoin fir zousätzlech Semantik verschwonnen).
  • Nei Zorte vu Schnëttplazen zu pseudorandom Zuel Generatoren goufen ëmgesat, an zousätzlech algorithms goufen fir eng besser Generatioun vun zoufälleg Zuelen ëmgesat. D'Applikatioune ginn d'Méiglechkeet en Algorithmus ze wielen fir pseudorandom Zuelen ze generéieren. Verbesserte Ënnerstëtzung fir zoufälleg Objetstroum ze generéieren.
  • Gezwongen strikt Verschlësselung vun all JDK interns, mat Ausnam vun kritescher API wéi sun.misc.Unsafe. Strikt Encapsulation blockéiert Versuche vum Code fir Zougang zu intern Klassen, Methoden a Felder ze kréien. Virdrun konnt de strenge Encapsuléierungsmodus mat der "--illegal-access=permit" Optioun ausgeschalt ginn, awer dëst gouf elo ofgeschaaft. Uwendungen déi Zougang zu intern Klassen, Methoden a Felder erfuerderen, solle se explizit definéieren mat der --add-opens Optioun oder dem Add-Opens Attribut an der Manifestdatei.
  • D'Applikatioune kréien d'Fäegkeet fir Date-Deserialiséierungsfilter ze definéieren, déi kontextempfindlech an dynamesch ausgewielt kënne ginn op Basis vu spezifesche Deserialiséierungsoperatiounen. Déi spezifizéiert Filtere sinn applicabel fir déi ganz virtuell Maschinn (JVM-breet), d.h. deckt net nëmmen d'Applikatioun selwer, awer och d'Drëtt-Partei-Bibliothéiken, déi an der Applikatioun benotzt ginn.
  • Swing huet d'javax.swing.filechooser.FileSystemView.getSystemIcon Method derbäigesat fir grouss Ikonen ze lueden fir d'UI op High DPI Schiirme ze verbesseren.
  • D'java.net.DatagramSocket API bitt Ënnerstëtzung fir d'Verbindung mat Multicast Gruppen ouni de Besoin fir eng separat java.net.MulticastSocket API.
  • D'IGV (Ideal Graph Visualizer) Utility gouf verbessert, bitt interaktiv Visualiséierung vun der mëttlerer Code Representatioun am HotSpot VM C2 JIT Compiler.
  • Am JavaDoc, duerch Analogie mam javac Compiler, wann e Feeler erausgeet, ginn d'Zuel vun der problematescher Linn an der Quelldatei an d'Location vum Feeler elo uginn.
  • D'native.encoding Eegeschafte bäigefüügt, wat den Numm vum System Charakter Kodéierung reflektéiert (UTF-8, koi8-r, cp1251, etc.).
  • D'java.time.InstantSource Interface gouf bäigefüügt, wat Zäitmanipulatioun erlaabt ouni Referenz op eng Zäitzone.
  • Derbäigesat java.util.HexFormat API fir d'Konvertéierung op hexadezimal Representatioun a vice versa.
  • E Blackhole Modus gouf zum Compiler bäigefüügt, deen dout-Code Eliminatiounsoperatioune deaktivéiert, déi kënne benotzt ginn wann Dir Leeschtungstester ausféiert.
  • D'Optioun "-Xlog:async" op Runtime bäigefüügt fir Logbicher am asynchrone Modus opzehuelen.
  • Wann Dir sécher Verbindungen opstellt, ass TLS 1.3 als Standard aktivéiert (virdrun TLS 1.2 gouf benotzt).
  • Déi virdru deklaréiert verouderd Applet API (java.applet.Applet*, javax.swing.JApplet), déi benotzt gouf fir Java Uwendungen am Browser ze lafen, gouf an d'Kategorie geplënnert fir d'Entfernung (verluer Relevanz nom Enn vun der Ënnerstëtzung) fir den Java Plugin fir Browser).
  • De Sécherheetsmanager, deen zënter laangem seng Relevanz verluer huet a sech no der Enn vun der Ënnerstëtzung fir de Browser Plugin net ugefrot huet, ass an d'Kategorie vun de geplangten Entfernung geplënnert.
  • De RMI Aktivéierungsmechanismus gouf ofgeschaaft, deen al ass, an d'Kategorie vun enger Optioun am Java 8 ofgestig ass a bal ni an der moderner Praxis benotzt gëtt.
  • En experimentellen Compiler deen JIT (just-in-time) ënnerstëtzt fir dynamesch Kompiléierung vum Java Code fir HotSpot JVM, souwéi de Modus vun der antizipativer Kompiléierung (AOT, viraussiichtlech) vu Klassen a Maschinncode ier Dir déi virtuell Maschinn ufänkt , gouf aus der SDK geläscht. De Compiler gouf op Java geschriwwen a baséiert op der Aarbecht vum Graal Projet. Et gëtt bemierkt datt Compiler Ënnerhalt vill Aarbecht erfuerdert, wat net gerechtfäerdegt ass wann et keng Nofro vun Entwéckler ass.

Source: opennet.ru

Setzt e Commentaire