Java SE 18 release

Efter sex månaders utveckling har Oracle släppt plattformen Java SE 18 (Java Platform, Standard Edition 18), som använder OpenJDK open source-projektet som referensimplementering. Med undantag för borttagningen av vissa föråldrade funktioner, bibehåller Java SE 18 bakåtkompatibilitet med tidigare versioner av Java-plattformen – de flesta tidigare skrivna Java-projekt kommer fortfarande att fungera utan ändringar när de körs under den nya versionen. Installationsfärdiga versioner av Java SE 18 (JDK, JRE och Server JRE) är förberedda för Linux (x86_64, AArch64), Windows (x86_64) och macOS (x86_64, AArch64). Utvecklad av OpenJDK-projektet är Java 18-referensimplementeringen helt öppen källkod under GPLv2-licensen med GNU ClassPath-undantag för att tillåta dynamisk länkning till kommersiella produkter.

Java SE 18 kategoriseras som en vanlig supportversion, med uppdateringar som ska släppas innan nästa release. Långtidsstödsgrenen (LTS) bör vara Java SE 17, som kommer att få uppdateringar fram till 2029. Kom ihåg att från och med lanseringen av Java 10 bytte projektet till en ny utvecklingsprocess, vilket innebär en kortare cykel för bildandet av nya utgåvor. Ny funktionalitet utvecklas nu i en ständigt uppdaterad mastergren, som innehåller redan genomförda ändringar och från vilken filialer förgrenas var sjätte månad för att stabilisera nya releaser.

Nya funktioner i Java 18 inkluderar:

  • Standardkodningen är UTF-8. Java API:er som bearbetar textdata baserat på teckenkodning kommer nu att använda UTF-8 som standard på alla plattformar, oavsett systeminställningar och språkinställningar. För att återgå till det gamla beteendet, där kodningen väljs baserat på systemlokalen, kan du använda alternativet "-Dfile.encoding=COMPAT".
  • Paketet innehåller paketet com.sun.net.httpserver, som inkluderar jwebserver-verktyget och biblioteks-API med implementering av en enkel http-server för att servera statiskt innehåll (CGI- och servletliknande hanterare stöds inte). Den inbyggda HTTP-servern är inte optimerad för arbetsbelastningar och stöder inte åtkomstkontroll och autentisering, eftersom den främst är inriktad på användning i utvecklingsprocessen för prototypframställning, felsökning och testprojekt.
  • JavaDoc ger stöd för taggen "@snippet" för att bädda in arbetsexempel och kodavsnitt i API-dokumentation, där du kan använda valideringsverktyg, syntaxmarkering och IDE-integration.
  • Implementeringen av java.lang.reflect API (Core Reflection), utformad för att få information om metoder, fält och klasskonstruktörer, samt tillgång till klassernas interna struktur, har designats om. Själva java.lang.reflect API:et förblir oförändrat, men implementeras nu med hjälp av metodhandtag som tillhandahålls av java.lang.invoke-modulen, istället för att använda bytekodgeneratorer. Förändringen gjorde det möjligt för oss att förena implementeringarna av java.lang.reflect och java.lang.invoke och förenkla deras underhåll.
  • En tredje förhandsvisning av Vector API har föreslagits, som tillhandahåller funktioner för vektorberäkningar som exekveras med hjälp av vektorinstruktioner på x86_64- och AArch64-processorer och tillåter operationer att tillämpas samtidigt på flera värden (SIMD). Till skillnad från funktionerna i HotSpot JIT-kompilatorn för autovektorisering av skalära operationer, gör det nya API:et det möjligt att explicit styra vektorisering för parallell databehandling.
  • Tillagt SPI-gränssnitt (tjänsteleverantörsgränssnitt) för att lösa värdnamn och IP-adresser, så att du kan använda alternativa resolvers i java.net.InetAddress som inte är knutna till hanterare som erbjuds av operativsystemet.
  • En andra förhandsvisning av Foreign Function & Memory API tillhandahålls, vilket gör att applikationer kan interagera med kod och data utanför Java-runtime. Det nya API:et låter dig effektivt anropa icke-JVM-funktioner och komma åt icke-JVM-hanterat minne. Du kan till exempel anropa funktioner från externa delade bibliotek och komma åt processdata utan att använda JNI.
  • En andra experimentell implementering av mönstermatchning i "switch"-uttryck har lagts till, vilket tillåter användning av flexibla mönster i "case"-etiketter snarare än exakta värden, som täcker en serie värden på en gång, för vilka det tidigare var nödvändigt att använda besvärliga kedjor av "om...annat"-uttryck. Objekt o = 123L; String formatted = switch (o) { case Heltal i -> String.format("int %d", i); case Lång l -> String.format("lång %d", l); case Dubbel d -> String.format("dubbel %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Finaliseringsmekanismen och dess associerade metoder som Object.finalize(), Enum.finalize(), Runtime.runFinalization() och System.runFinalization() har fasats ut och kommer att inaktiveras i en framtida version.
  • ZGC (Z Garbage Collector), SerialGC och ParallelGC sophämtare stöder raddeduplicering.

Källa: opennet.ru

Lägg en kommentar