Java SE 17-release

Na zes maanden ontwikkeling heeft Oracle Java SE 17 (Java Platform, Standard Edition 17) uitgebracht, dat het OpenJDK open source-project als referentie-implementatie gebruikt. Met uitzondering van de verwijdering van enkele verouderde functies, behoudt Java SE 17 achterwaartse compatibiliteit met eerdere releases van het Java-platform - de meeste eerder geschreven Java-projecten werken nog steeds zonder aanpassingen wanneer ze onder de nieuwe versie worden uitgevoerd. Installeerbare builds van Java SE 17 (JDK, JRE en Server JRE) zijn voorbereid voor Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). De Java 17-referentie-implementatie, ontwikkeld door het OpenJDK-project, is volledig open onder de GPLv2-licentie met GNU ClassPath-uitzonderingen om dynamische koppelingen met commerciële producten mogelijk te maken.

Java SE 17 is gecategoriseerd als een Long Term Support (LTS)-release met updates tot 2029. Updates voor de afgelopen tussentijdse release van Java 16 zijn stopgezet. De vorige Java 11 LTS-tak wordt ondersteund tot 2026. De volgende LTS-release staat gepland voor september 2024. Bedenk dat het project vanaf de release van Java 10 is overgeschakeld naar een nieuw ontwikkelingsproces, wat een kortere cyclus impliceert voor de vorming van nieuwe releases. Er wordt nu nieuwe functionaliteit ontwikkeld in één constant bijgewerkte master-branch, die reeds voltooide wijzigingen bevat en van waaruit branches elke zes maanden worden vertakt om nieuwe releases te stabiliseren.

Nieuwe functies in Java 17 zijn onder andere:

  • Er wordt een experimentele implementatie van patroonvergelijking in "switch" -uitdrukkingen voorgesteld, waardoor niet exacte waarden in "case" -labels kunnen worden gebruikt, maar flexibele sjablonen die onmiddellijk een reeks waarden dekken waarvoor omslachtige ketens van "if ... else" uitdrukkingen waren eerder gebruikt. Bovendien wordt binnen de "schakelaar" de mogelijkheid geboden om NULL-waarden te verwerken. Voorwerp o = 123L; String geformatteerd = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("dubbel %f", d); case String s -> String.format("String %s", s); standaard -> o.toString(); };
  • Ondersteuning voor verzegelde klassen en interfaces die niet door andere klassen en interfaces kunnen worden gebruikt om implementaties over te nemen, uit te breiden of te overschrijven, is gestabiliseerd. Verzegelde klassen bieden ook een meer declaratieve manier om het gebruik van een superklasse te beperken dan toegangsmodificatoren, gebaseerd op een expliciete opsomming van de subklassen die mogen worden uitgebreid. pakket com.voorbeeld.geometrie; openbare verzegelde klasse Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • De tweede voorlopige implementatie van de Vector API wordt voorgesteld, die functies biedt voor vectorberekeningen die worden uitgevoerd met behulp van de vectorinstructies van de x86_64- en AArch64-processors en waarmee u gelijktijdig bewerkingen kunt toepassen op verschillende waarden (SIMD). In tegenstelling tot de mogelijkheden die de HotSpot JIT-compiler biedt voor autovectorisatie van scalaire bewerkingen, maakt de nieuwe API het mogelijk om vectorisatie expliciet te besturen voor parallelle gegevensverwerking.
  • Er is een voorlopige implementatie van de Foreign Function & Memory API toegevoegd, waarmee applicaties buiten de Java-runtime om kunnen gaan met code en data. Met de nieuwe API kunt u efficiënt niet-JVM-functies aanroepen en toegang krijgen tot geheugen dat niet door de JVM wordt beheerd. U kunt bijvoorbeeld functies uit externe gedeelde bibliotheken aanroepen en toegang krijgen tot procesgegevens zonder JNI te gebruiken.
  • De macOS-rendering-engine die de Java 2D API aandrijft, die op zijn beurt wordt gebruikt door de Swing API, is aangepast om de Metal grafische API te gebruiken. De standaard op macOS is nog steeds OpenGL, en het inschakelen van Metal-ondersteuning vereist het instellen van de optie "-Dsun.java2d.metal=true" en het hebben van ten minste een release van macOS 10.14.x.
  • Poort toegevoegd voor macOS/AArch64-platform (Apple-computers gebaseerd op nieuwe Apple M1-chips). Een kenmerk van de poort is de ondersteuning van het W^X (Write XOR Execute) geheugenbeveiligingsmechanisme, waarbij geheugenpagina's niet gelijktijdig beschikbaar kunnen zijn voor schrijven en uitvoeren. (de code kan alleen worden uitgevoerd nadat het schrijven is uitgeschakeld en schrijven naar de geheugenpagina is alleen mogelijk nadat de uitvoering is uitgeschakeld).
  • Retourneerde het gebruik van alleen strikte (strictfp) semantiek voor drijvende-komma-expressies. Ondersteuning voor "standaard" semantiek, beschikbaar sinds de release van Java 1.2, is geschrapt, inclusief vereenvoudigingen voor het draaien op systemen met zeer oude x87 wiskundige coprocessors (na de introductie van SSE2-instructies was de behoefte aan aanvullende semantiek verdwenen).
  • Nieuwe soorten interfaces geïmplementeerd voor generatoren van pseudo-willekeurige getallen, evenals aanvullende algoritmen geïmplementeerd voor een betere generatie van willekeurige getallen. Applicaties krijgen de mogelijkheid om het algoritme te kiezen voor het genereren van pseudo-willekeurige getallen. Verbeterde ondersteuning voor het genereren van streams van willekeurige objecten.
  • Geïmplementeerde verplichte sterke inkapseling van alle JDK-internals, behalve kritieke API's zoals sun.misc.Unsafe. Sterke inkapseling blokkeert pogingen om toegang te krijgen tot interne klassen, methoden en velden vanuit code. Voorheen kon strikte inkapseling worden uitgeschakeld met de optie "--illegal-access=permit", maar dit is nu verouderd. Toepassingen die toegang nodig hebben tot interne klassen, methoden en velden, moeten deze expliciet definiëren met behulp van de optie "--add-opens" of het kenmerk Add-Opens in het manifestbestand.
  • Toepassingen krijgen de mogelijkheid om filters te definiëren voor het deserialiseren van gegevens, die contextafhankelijk kunnen zijn en dynamisch kunnen worden geselecteerd in combinatie met bepaalde deserialisatiebewerkingen. De filters die u instelt, zijn van toepassing op de gehele virtuele machine (JVM-breed), d.w.z. bestrijken niet alleen de applicatie zelf, maar ook bibliotheken van derden die in de applicatie worden gebruikt.
  • Swing heeft de methode javax.swing.filechooser.FileSystemView.getSystemIcon toegevoegd om grote pictogrammen te laden om de UI-weergave op schermen met een hoge pixeldichtheid (High DPI) te verbeteren.
  • De java.net.DatagramSocket API biedt ondersteuning voor het verbinden met multicastgroepen zonder dat een aparte java.net.MulticastSocket API nodig is.
  • Het IGV-hulpprogramma (Ideal Graph Visualizer) is verbeterd en biedt interactieve visualisatie van de tussenliggende coderepresentatie in de HotSpot VM C2 JIT-compiler.
  • In JavaDoc wordt nu, naar analogie van de javac-compiler, bij het uitvoeren van een fout het nummer van de problematische regel in het bronbestand en de locatie van de fout aangegeven.
  • De eigenschap native.encoding is toegevoegd en weerspiegelt de naam van de tekencodering van het systeem (UTF-8, koi8-r, cp1251, enz.).
  • De java.time.InstantSource-interface is toegevoegd, waarmee je de tijd kunt manipuleren zonder gebonden te zijn aan een tijdzone.
  • Java.util.HexFormat API toegevoegd om te converteren naar hex-weergave en vice versa.
  • Er is een blackhole-modus aan de compiler toegevoegd, die bewerkingen voor het verwijderen van dode codes uitschakelt, die kunnen worden gebruikt bij het uitvoeren van prestatietests.
  • "-Xlog:async" optie toegevoegd aan Runtime om logs asynchroon te schrijven.
  • Bij het tot stand brengen van beveiligde verbindingen is standaard TLS 1.3 ingeschakeld (voorheen werd TLS 1.2 gebruikt).
  • De voorheen verouderde Applet API (java.applet.Applet*, javax.swing.JApplet), die werd gebruikt om Java-applicaties in de browser uit te voeren, is verplaatst naar de categorie die is gepland voor verwijdering (verloren relevantie na het einde van de ondersteuning voor de Java plug-in voor browsers).
  • Overgebracht naar de categorie Beveiligingsbeheer die gepland staat voor verwijdering, die al lang zijn relevantie heeft verloren en niet is opgeëist na beëindiging van de ondersteuning voor de browserplug-in.
  • Het RMI-activeringsmechanisme is verwijderd, dat is verouderd, verplaatst naar de categorie van een optie in Java 8 en wordt in de moderne praktijk bijna nooit gebruikt.
  • Er is een experimentele compiler uit de SDK verwijderd die JIT (just-in-time) ondersteunt voor dynamische compilatie van Java-code voor de HotSpot JVM, evenals de modus van preëmptieve compilatie (AOT, ahead-of-time) van klassen naar machinecode voordat de virtuele machine wordt gestart. De compiler is geschreven in Java en gebaseerd op het werk van het Graal-project. Opgemerkt wordt dat het onderhouden van de compiler veel arbeid vereist, wat zichzelf niet rechtvaardigt in omstandigheden van gebrek aan vraag bij ontwikkelaars.

Bron: opennet.ru

Voeg een reactie