Java SE 18-release

Na zes maanden ontwikkeling heeft Oracle Java SE 18 (Java Platform, Standard Edition 18) uitgebracht, dat het OpenJDK open source-project als referentie-implementatie gebruikt. Met uitzondering van de verwijdering van enkele verouderde functies, behoudt Java SE 18 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 18 (JDK, JRE en Server JRE) zijn voorbereid voor Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). De Java 18-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 18 is gecategoriseerd als een reguliere ondersteuningsrelease, met updates die vóór de volgende release worden uitgebracht. De tak voor ondersteuning op lange termijn (LTS) zou Java SE 17 moeten zijn, die tot 2029 updates zal ontvangen. 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 18 zijn onder andere:

  • De standaardcodering is UTF-8. Java API's die tekstgegevens verwerken op basis van tekencodering, gebruiken nu standaard UTF-8 op alle platforms, ongeacht de systeeminstellingen en landinstellingen. Om terug te keren naar het oude gedrag, waarbij de codering wordt gekozen op basis van de landinstelling van het systeem, kunt u de optie "-Dfile.encoding=COMPAT" gebruiken.
  • Het pakket bevat het pakket com.sun.net.httpserver, dat het hulpprogramma jwebserver en de bibliotheek-API bevat met de implementatie van een eenvoudige http-server voor het aanbieden van statische inhoud (CGI en servlet-achtige handlers worden niet ondersteund). De ingebouwde HTTP-server is niet geoptimaliseerd voor werklasten en ondersteunt geen toegangscontrole en authenticatie, omdat deze primair bedoeld is voor gebruik in het ontwikkelingsproces voor prototyping, debuggen en testen van projecten.
  • JavaDoc biedt ondersteuning voor de tag "@snippet" om werkvoorbeelden en codefragmenten in API-documentatie in te sluiten, waar u validatietools, syntaxisaccentuering en IDE-integratie kunt gebruiken.
  • De implementatie van de java.lang.reflect API (Core Reflection), ontworpen om informatie te verkrijgen over methoden, velden en klasseconstructors, evenals toegang tot de interne structuur van klassen, is opnieuw ontworpen. De java.lang.reflect API zelf blijft ongewijzigd, maar wordt nu geïmplementeerd met behulp van methodehandvatten van de java.lang.invoke-module, in plaats van bytecodegeneratoren te gebruiken. Dankzij de wijziging konden we de implementaties van java.lang.reflect en java.lang.invoke verenigen en het onderhoud ervan vereenvoudigen.
  • Er is een derde preview van de Vector API voorgesteld, die functies biedt voor vectorberekeningen die worden uitgevoerd met behulp van vectorinstructies op x86_64- en AArch64-processors en waarmee bewerkingen tegelijkertijd op meerdere waarden kunnen worden toegepast (SIMD). In tegenstelling tot de mogelijkheden van de HotSpot JIT-compiler voor automatische vectorisatie van scalaire bewerkingen, maakt de nieuwe API het mogelijk om vectorisatie expliciet te controleren voor parallelle gegevensverwerking.
  • SPI-interface (serviceproviderinterface) toegevoegd voor het omzetten van hostnamen en IP-adressen, waardoor u alternatieve resolvers in java.net.InetAddress kunt gebruiken die niet gebonden zijn aan handlers die door het besturingssysteem worden aangeboden.
  • Er is een tweede preview van de Foreign Function & Memory API beschikbaar, waardoor applicaties buiten de Java-runtime met code en gegevens kunnen communiceren. Met de nieuwe API kunt u efficiënt niet-JVM-functies aanroepen en toegang krijgen tot niet-JVM-beheerd geheugen. U kunt bijvoorbeeld functies uit externe gedeelde bibliotheken oproepen en toegang krijgen tot procesgegevens zonder JNI te gebruiken.
  • Er is een tweede experimentele implementatie van patroonmatching in ‘switch’-uitdrukkingen toegevoegd, waardoor het gebruik van flexibele patronen in ‘case’-labels mogelijk is in plaats van exacte waarden, die een reeks waarden tegelijk bestrijken, waarvoor het voorheen nodig was om te gebruiken omslachtige ketens van “if...else”-uitdrukkingen. Object o = 123L; String geformatteerd = switch (o) { case Integer i -> String.format("int %d", i); case Lange l -> String.format("lange %d", l); case Dubbele d -> String.format("dubbele %f", d); case String s -> String.format("String %s", s); standaard -> o.toString(); };
  • Het finalisatiemechanisme en de bijbehorende methoden zoals Object.finalize(), Enum.finalize(), Runtime.runFinalization() en System.runFinalization() zijn verouderd en zullen in een toekomstige release worden uitgeschakeld.
  • De ZGC (Z Garbage Collector), SerialGC en ParallelGC garbage collectors ondersteunen rijdeduplicatie.

Bron: opennet.ru

Voeg een reactie