Java SE 20-release

Na zes maanden ontwikkeling heeft Oracle Java SE 20 (Java Platform, Standard Edition 20) uitgebracht, dat het OpenJDK open source-project als referentie-implementatie gebruikt. Met uitzondering van de verwijdering van enkele verouderde functies, behoudt Java SE 20 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 20 (JDK, JRE en Server JRE) zijn voorbereid voor Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). De Java 20-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 20 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 20 zijn onder andere:

  • Er is voorlopige ondersteuning voor Scoped Values, waardoor onveranderlijke gegevens kunnen worden gedeeld tussen threads en gegevens efficiënt kunnen worden uitgewisseld tussen onderliggende threads (waarden worden geërfd). Scoped Values ​​worden ontwikkeld om het thread-local variabelen-mechanisme te vervangen en zijn efficiënter bij het gebruik van zeer grote aantallen virtuele threads (duizenden of miljoenen threads). Het belangrijkste verschil tussen Scoped Values ​​en lokale threadvariabelen is dat de eerste één keer worden geschreven, in de toekomst niet kunnen worden gewijzigd en alleen beschikbaar blijven voor de duur van de uitvoering van de thread. class Server {laatste statische ScopedValue CURRENT_USER = nieuwe ScopedValue(); void serve(Verzoekverzoek, Reactieantwoord) {var level = (verzoek. isAuthorized()? ADMIN: GAST); var gebruiker = nieuwe gebruiker(niveau); ScopedValue.where(CURRENT_USER, gebruiker).run(() -> Application.handle(verzoek, antwoord)); } } klasse DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) nieuwe InvalidUserException(); retourneer nieuwe DBConnection(...); } }
  • Er is een tweede voorbeeld van recordpatronen toegevoegd, waarmee de in Java 16 geïntroduceerde patroonvergelijkingsfunctie wordt uitgebreid om de waarden van recordklassen te ontleden. Bijvoorbeeld: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instantie van Punt p) { int x = px(); int y = py(); Systeem.uit.println(x+y); } }
  • Er is een vierde voorlopige implementatie van patroonmatching in ‘switch’-instructies toegevoegd, waardoor ‘case’-labels geen exacte waarden kunnen gebruiken, maar flexibele patronen die een reeks waarden tegelijk bestrijken, waarvoor het voorheen nodig was om omslachtige waarden te gebruiken ketens van “if...else”-uitdrukkingen. static String formatterPatternSwitch(Object obj) { return switch (obj) { 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(); }; }
  • Er is een tweede voorlopige implementatie van de FFM-API (Foreign Function & Memory) toegevoegd, waarmee u de interactie van Java-programma's met externe code en gegevens kunt organiseren door functies uit externe bibliotheken aan te roepen en toegang te krijgen tot geheugen buiten de JVM.
  • Er is een tweede preview van virtuele threads toegevoegd. Dit zijn lichtgewicht threads die het schrijven en onderhouden van hoogwaardige multi-threaded applicaties aanzienlijk vereenvoudigen.
  • Er is een tweede experimentele API toegevoegd voor gestructureerd parallellisme, die de ontwikkeling van toepassingen met meerdere threads vereenvoudigt door meerdere taken die in verschillende threads worden uitgevoerd, als één blok te behandelen.
  • Er is een vijfde preview van de Vector API toegevoegd, 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.

Bron: opennet.ru

Voeg een reactie