Efter sex mĂ„naders utveckling har Oracle lanserat Java SE 18 (Java Platform, Standard Edition 18), dĂ€r det öppna projektet OpenJDK anvĂ€nds som den referensimplementation. Med undantag för att vissa förĂ„ldrade funktioner har tagits bort, upprĂ€tthĂ„ller Java SE 18 bakĂ„tanpassning med tidigare versioner av Java-plattformen â de flesta Java-projekt som tidigare skapats kommer att fungera utan Ă€ndringar nĂ€r de körs pĂ„ den nya versionen. De fĂ€rdiga installationspaketen för 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). Den referensimplementation av Java 18 som utvecklats inom ramen för OpenJDK-projektet Ă€r helt öppen under GPLv2-licensen med undantag för GNU ClassPath, vilket tillĂ„ter dynamisk lĂ€nkning med kommersiella produkter.
Java SE 18 klassificeras som en version med vanlig support som kommer att fÄ uppdateringar fram till nÀsta lansering. För en lÄngsiktig supportversion (LTS) rekommenderas Java SE 17, vars uppdateringar kommer att slÀppas fram till 2029. Observera att med lanseringen av Java 10 gick projektet över till en ny utvecklingsprocess som innebÀr en kortare cykel för nya versioner. Den nya funktionaliteten utvecklas nu i en stÀndigt uppdaterad master-gren, dÀr fÀrdiga Àndringar inkluderar och som var sjÀtte mÄnad förgrenas för stabilisering av nya utgÄvor.
NÄgra nyheter i Java 18 inkluderar:
- Som standard anvÀnds UTF-8-kodning. Java API som hanterar textdata med hÀnsyn till teckenkodningen kommer nu som standard att anvÀnda UTF-8 pÄ alla plattformar, oavsett systeminstÀllningar och vald locale. För att ÄterfÄ det gamla beteendet, dÀr kodningen vÀljs utifrÄn systemlocale, kan parametrar "-Dfile.encoding=COMPAT" anvÀndas.
- Paketet com.sun.net.httpserver ingÄr, som inkluderar verktyget jwebserver och ett biblioteks-API med en implementation av en enkel http-server för att leverera statiskt innehÄll (CGI och servlet-liknande hanterare stöds inte). Den inbyggda http-servern Àr inte optimerad för arbetsbelastningar och stöder inte Ätkomsthantering eller autentisering, eftersom den huvudsakligen Àr avsedd för anvÀndning under utvecklingsprocessen för att skapa prototyper, felsöka och testa projekt.
- JavaDoc implementerar stödet för taggen «@snippet» för att infoga fungerande exempel och kodfragments i dokumentationen av API:er, som kan tillÀmpas med verktyg för verifiering, syntaxmarkering och integration med IDE.
- Implementeringen av API:n java.lang.reflect (Core Reflection) har omarbetats för att hÀmta information om metoder, fÀlt och konstruktörer i klasser, samt för att fÄ Ätkomst till den interna strukturen av klasser. SjÀlva API:n java.lang.reflect Àr oförÀndrad, men implementeras nu genom att anvÀnda metodhandtag (method handles) som tillhandahÄlls av modulen java.lang.invoke, istÀllet för att anvÀnda bytecode-generatorer. Denna förÀndring har möjliggjort en enhetlig implementation av java.lang.reflect och java.lang.invoke och förenklat deras underhÄll.
- En tredje förhandsimplementation av API:n Vector har föreslagits, som tillhandahÄller funktioner för vektorberÀkningar, vilka utförs med hjÀlp av vektorinstuktioner i processorer x86_64 och AArch64 och möjliggör att samtidig tillÀmpa operationer pÄ flera vÀrden (SIMD). Till skillnad frÄn de möjligheter som tillhandahÄlls av JIT-kompilatorn HotSpot för automatisk vektorisering av skalaroperationer, ger det nya API:t möjlighet att uttryckligen styra vektoriseringen för parallell databehandling.
- Ett SPI-grÀnssnitt (service-provider interface) har lagts till för namngivning av vÀrdar och IP-adresser, vilket möjliggör anvÀndning av alternativa resolverare i java.net.InetAddress som inte Àr knutna till de hanterare som erbjuds av operativsystemet.
- Det andra preliminÀra API:et för Foreign Function & Memory har föreslagits, vilket gör det möjligt för applikationer att interagera med kod och data utanför Java-runtime. Det nya API:et gör det möjligt att effektivt anropa funktioner som körs utanför JVM och fÄ Ätkomst till minne som inte hanteras av JVM. Till exempel kan man anropa funktioner frÄn externa delade bibliotek och fÄ tillgÄng till 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, vilket tidigare krĂ€vde skrymmande kedjor av 'ifâŠelse'-uttryck. 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(); };
- Finalisering mekanismen har deklarerats som förÄldrad och kommer att tas bort i en av de kommande versionerna, likasÄ relaterade metoder som Object.finalize(), Enum.finalize(), Runtime.runFinalization() och System.runFinalization().
- Stöd för deduplicering av strÀngar har implementerats i skrÀpsamlarna ZGC (Z Garbage Collector), SerialGC och ParallelGC.
KĂ€lla: opennet.ru
