Na zes maanden ontwikkeling heeft Oracle de Java SE 18 (Java Platform, Standard Edition 18) uitgebracht, waarbij het open project OpenJDK als referentie-implementatie wordt gebruikt. Behalve de verwijdering van enkele verouderde functies, behoudt Java SE 18 de achterwaartse compatibiliteit met eerdere uitgaven van het Java-platform ā de meeste eerder geschreven Java-projecten zullen zonder aanpassingen functioneren op de nieuwe versie. Klaar-voor-installatie bundels 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 referentie-implementatie van Java 18, ontwikkeld binnen het OpenJDK-project, is volledig open onder de GPLv2-licentie met uitzonderingen voor GNU ClassPath, die dynamische koppeling met commerciĆ«le producten toestaan.
Java SE 18 valt onder releases met een normaal ondersteuningsschema, waarbij updates worden uitgebracht tot de volgende release. Voor een versie met lange-termijnondersteuning (LTS) moet Java SE 17 worden gebruikt, waarbij updates worden uitgebracht tot 2029. Ter herinnering, met de uitgave van Java 10 is het project overgestapt op een nieuw ontwikkelingsproces dat een kortere cyclus voor nieuwe releases inhoudt. Nieuwe functionaliteit wordt nu ontwikkeld in ƩƩn voortdurend bijgewerkte master-tak, waarin al klaar zijnde wijzigingen worden opgenomen, en waar elke zes maanden takken voor stabilisatie van nieuwe releases van worden afgeleid.
Onder de nieuwigheden van Java 18 kunnen de volgende worden opgemerkt:
- Standaard wordt UTF-8 codering gebruikt. Java API's die tekstgegevens verwerken met inachtneming van tekencodering, zullen nu standaard UTF-8 gebruiken op alle platforms, ongeacht de systeeminstellingen en ingestelde lokale voorkeur. Om het oude gedrag, waarbij de codering wordt gekozen op basis van de systeemlocale, terug te brengen, kan de parameter '-Dfile.encoding=COMPAT' worden gebruikt.
- Het pakket com.sun.net.httpserver is opgenomen, waarin de jwebserver-tool en een bibliotheek-API zijn opgenomen voor de implementatie van een eenvoudige http-server voor de levering van statische content (CGI- en servlet-achtige handlers worden niet ondersteund). De ingebouwde http-server is niet geoptimaliseerd voor werklast en ondersteunt geen toegangsbeheer en authenticatie, omdat deze voornamelijk gericht is op gebruik tijdens de ontwikkeling voor prototyping, debugging en testen van projecten.
- In JavaDoc is ondersteuning voor de tag "@snippet" geĆÆmplementeerd voor het insluiten van werkende voorbeelden en codefragmenten in de API-documentatie, waarmee hulpmiddelen voor validatie, syntax highlighting en integratie met IDE's kunnen worden toegepast.
- De implementatie van de API java.lang.reflect (Core Reflection), bedoeld voor het verkrijgen van informatie over methoden, velden en constructors van klassen, evenals voor toegang tot de interne structuur van klassen, is herzien. De API java.lang.reflect zelf is onveranderd gebleven, maar wordt nu geĆÆmplementeerd via het gebruik van method descriptors (method handles), verstrekt door de module java.lang.invoke, in plaats van door bytecode-generators. Deze wijziging heeft het mogelijk gemaakt om de implementaties van java.lang.reflect en java.lang.invoke te uniformeren en hun onderhoud te vereenvoudigen.
- Een derde voorlopige implementatie van de API Vector is voorgesteld, die functies biedt voor vectorberekeningen, uitgevoerd met behulp van de vectorinstructies van x86_64- en AArch64-processors, waarmee gelijktijdig bewerkingen op meerdere waarden (SIMD) kunnen worden toegepast. In tegenstelling tot de mogelijkheden voor autovectorisatie van scalairen in de HotSpot JIT-compiler, biedt de nieuwe API de mogelijkheid om expliciet de vectorisatie te beheren voor parallelle gegevensverwerking.
- Een SPI-interface (service-provider interface) is toegevoegd voor het resolven van hostnamen, IP-adressen, waarmee alternatieve resolvers kunnen worden ingeschakeld in java.net.InetAddress, die niet gebonden zijn aan de door het besturingssysteem aangeboden handlers.
- De tweede voorlopige implementatie van de Foreign Function & Memory API is voorgesteld, waarmee applicaties kunnen communiceren met code en gegevens buiten de Java-runtime. De nieuwe API maakt het mogelijk om efficiƫnt functies aan te roepen die niet in de JVM draaien, en toegang te krijgen tot niet door de JVM beheerde geheugen. Bijvoorbeeld, je kunt functies aanroepen uit externe gedeelde bibliotheken en toegang krijgen tot procesgegevens zonder gebruik te maken van JNI.
- De tweede experimentele implementatie van patroonmatching in switch-expressies is toegevoegd, waardoor in case-labels geen exacte waarden meer hoeven te worden gebruikt, maar flexibele patronen die een reeks waarden dekken, waarvoor eerder omvangrijke if...else-uitdrukkingen nodig waren. 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 finalizermechanisme is als verouderd verklaard en zal in een van de volgende releases worden uitgeschakeld, evenals de bijbehorende methoden zoals Object.finalize(), Enum.finalize(), Runtime.runFinalization() en System.runFinalization().
- In de garbage collectors ZGC (Z Garbage Collector), SerialGC en ParallelGC is ondersteuning voor str Deduplicatie geĆÆmplementeerd.
Bron: opennet.ru
