Uitgave van Java SE 17

Na zes maanden ontwikkeling heeft Oracle het platform Java SE 17 (Java Platform, Standard Edition 17) uitgebracht, waarbij het open source project OpenJDK als referentie-implementatie wordt gebruikt. Behalve het verwijderen van enkele verouderde functies, is de achterwaartse compatibiliteit met eerdere versies van het Java-platform behouden in Java SE 17 - de meeste eerder geschreven Java-projecten zullen zonder aanpassingen werken op de nieuwe versie. De kant-en-klare installaties 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 referentie-implementatie van Java 17, ontwikkeld in het kader van het OpenJDK-project, is volledig open onder de GPLv2-licentie met uitzondering van GNU ClassPath, die dynamische koppeling met commerciële producten toestaat.

Java SE 17 valt onder de categorie van versies met lange termijn ondersteuning (LTS), waarvan de updates tot 2029 zullen worden uitgebracht. De release van updates voor de vorige tussenversie Java 16 is stopgezet. De vorige LTS-tak, Java 11, zal tot 2026 worden ondersteund. De volgende LTS-release is gepland voor september 2024. Ter herinnering, met de release van Java 10 is het project overgestapt op een nieuw ontwikkelingsproces, dat een kortere cyclus voor het maken van nieuwe versies inhoudt. Nieuwe functionaliteit wordt nu ontwikkeld in één voortdurend bijgewerkte master-tak, waarin al gereed zijnde wijzigingen worden opgenomen, en waarbij elke zes maanden takken voor het stabiliseren van nieuwe versies worden afgeleid.

Enkele vernieuwingen in Java 17 zijn:

  • Een experimentele implementatie van patroonmatching in 'switch'-uitdrukkingen is voorgesteld, waarmee in 'case'-labels niet exact waarden, maar flexibele sjablonen kunnen worden gebruikt die een reeks waarden omvatten, waarvoor eerder omvangrijke ketens van 'if...else'-uitdrukkingen nodig waren. Bovendien is er binnen 'switch' nu de mogelijkheid om NULL-waarden te verwerken. 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(); };
  • De ondersteuning voor 'sealed' klassen en interfaces is gestabiliseerd, die niet door andere klassen en interfaces kunnen worden gebruikt voor overerving, uitbreiding of overschrijving van implementaties. 'Sealed' klassen bieden ook een meer declaratieve manier om het gebruik van de superklasse te beperken dan toegangsmodifiers, gebaseerd op het expliciet opsommen van subklassen die voor uitbreiding zijn toegestaan. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Een tweede voorlopige implementatie van de Vector API is voorgesteld, die functies biedt voor vectorberekeningen die worden uitgevoerd met behulp van vectorinstructies van x86_64 en AArch64-prosessors, waardoor gelijktijdig bewerkingen op meerdere waarden (SIMD) kunnen worden toegepast. In tegenstelling tot de mogelijkheden van de HotSpot JIT-compiler voor het automatisch vectoriseren van scalair operaties, biedt de nieuwe API de mogelijkheid om de vectorisering expliciet te beheren voor parallelle gegevensverwerking.
  • Een voorlopige implementatie van de API Foreign Function & Memory is toegevoegd, waarmee applicaties kunnen communiceren met code en gegevens die buiten de Java-runtime liggen. De nieuwe API maakt het mogelijk om efficiënt functies aan te roepen die niet in de JVM worden uitgevoerd en om toegang te krijgen tot geheugen dat niet door de JVM wordt beheerd. Bijvoorbeeld, functies uit externe gedeelde bibliotheken kunnen worden aangeroepen en gegevens van een proces kunnen worden benaderd zonder gebruik te maken van JNI.
  • De renderengine voor macOS, die het Java 2D API ondersteunt, dat op zijn beurt in het Swing API wordt gebruikt, is aangepast voor het gebruik van de Metal grafische API. Op macOS wordt standaard nog steeds OpenGL gebruikt, en om de ondersteuning voor Metal in te schakelen, moet de parameter '-Dsun.java2d.metal=true' worden ingesteld en moet ten minste macOS versie 10.14.x zijn geïnstalleerd.
  • Een poort voor het macOS/AArch64 platform (Apple computers met de nieuwe Apple M1-chips) is toegevoegd. Kenmerkend voor de poort is de ondersteuning voor het W^X geheugenbeschermingsmechanisme (Write XOR Execute), waarbij geheugenspagina's niet tegelijkertijd toegankelijk kunnen zijn voor schrijven en uitvoering. (Code kan pas worden uitgevoerd nadat schrijven is verboden, en schrijven naar een geheugensectie is alleen mogelijk nadat uitvoering is verboden).
  • Het gebruik van alleen strikte (strictfp) semantiek voor floating-point expressies is hersteld. De ondersteuning voor de beschikbare semantiek 'default', die vereenvoudigingen bevatte voor systemen met zeer oude wiskundige coprocessors x87 (na de komst van SSE2-instructies is de noodzaak voor extra semantiek komen te vervallen), is stopgezet sinds de release van Java 1.2.
  • Nieuwe soorten interfaces voor pseudowillekeurige getallengeneratoren zijn geïmplementeerd, evenals aanvullende algoritmen voor een hogere kwaliteit van willekeurige getallengeneratie. Applicaties hebben de mogelijkheid om het algoritme voor de generatie van pseudowillekeurige getallen te kiezen. De ondersteuning voor de generatie van stromen van willekeurige objecten is verbeterd.
  • Verplichte strikte kapseling van alle interne elementen van de JDK is geïmplementeerd, met uitzondering van kritieke API's zoals sun.misc.Unsafe. Strikte kapseling blokkeert pogingen om vanuit de code toegang te krijgen tot interne klassen, methoden en velden. Voorheen kon de modus voor strikte kapseling worden uitgeschakeld met de optie '--illegal-access=permit', maar deze is nu verouderd. Applicaties die toegang nodig hebben tot interne klassen, methoden en velden moeten deze expliciet definiëren met de optie '--add-opens' of de Add-Opens-attribuut in het manifestbestand.
  • Applicaties hebben de mogelijkheid gekregen om filters voor het deserialiseren van gegevens te definiëren, die afhankelijk kunnen zijn van de context en dynamisch kunnen worden geselecteerd in relatie tot bepaalde deserialisatieoperaties. De opgegeven filters zijn van toepassing op alles een virtuele machine (JVM-breed), dat wil zeggen dat ze niet alleen het applicatie zelf omvatten, maar ook de gebruikte externe bibliotheken binnen de applicatie.
  • In Swing is de methode javax.swing.filechooser.FileSystemView.getSystemIcon toegevoegd voor het laden van grotere pictogrammen, wat de interfacevorming op schermen met een hoge pixeldichtheid (HighDPI) verbetert.
  • In de API java.net.DatagramSocket is ondersteuning voor verbinding met Multicast-groepen geïmplementeerd zonder dat een aparte API java.net.MulticastSocket nodig is.
  • De tool IGV (Ideal Graph Visualizer) is verbeterd, wat zorgt voor interactieve visualisatie van de tussentijdse weergave van code in de JIT-compiler HotSpot VM C2.
  • In JavaDoc wordt, net als bij de compiler javac, bij het rapporteren van een fout nu het nummer van de problematische regel in het brondocument en de plaats van de fout aangegeven.
  • De eigenschap native.encoding is toegevoegd, die de naam van de systeemtekencodering (UTF-8, koi8-r, cp1251, enz.) weergeeft.
  • De interface java.time.InstantSource is toegevoegd, waarmee je de tijd kunt manipuleren zonder gebonden te zijn aan een tijdzone.
  • De API java.util.HexFormat is toegevoegd voor conversie naar en van hexadecimale vertegenwoordiging.
  • De compiler heeft de blackhole-modus gekregen, die de verwijdering van ongebruikte code (dead-code elimination) uitschakelt, wat kan worden gebruikt voor prestatie-evaluaties.
  • Er is een optie ‘-Xlog:async’ aan de runtime toegevoegd voor het schrijven van logs in asynchrone modus.
  • Bij het opzetten van beveiligde verbindingen wordt standaard TLS 1.3 gebruikt (voorheen werd TLS 1.2 gebruikt).
  • De eerder aangekondigde verouderde API Applet (java.applet.Applet*, javax.swing.JApplet) is verplaatst naar de categorie van verwijdering, die werd gebruikt voor het uitvoeren van Java-applicaties in de browser (is niet meer relevant na de beëindiging van de ondersteuning van de Java-plugin voor browsers).
  • De Security Manager, die lang niet meer relevant is en overbodig werd na de beëindiging van de ondersteuning voor de browserplugin, is in de categorie van verwijdering geplaatst.
  • Het RMI Activation-mechanisme is verwijderd, dat verouderd is, in Java 8 naar een optie is omgezet en vrijwel niet meer in de moderne praktijk wordt gebruikt.
  • De experimentele compiler die JIT (just-in-time) ondersteunde voor dynamische compilatie van Java-code voor de HotSpot JVM is uit de SDK verwijderd, evenals de AOT (ahead-of-time) compilatie modus van klassen naar machinecode vóór de uitvoering van de virtuele machine. De compiler was geschreven in Java en gebaseerd op de ontwikkelingen van het Graal-project. Het onderhoud van de compiler vereist veel arbeidzame inspanningen, die niet gerechtvaardigd zijn gezien de gebrek aan vraag van ontwikkelaars.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster