Efter sex mĂ„naders utveckling har Oracle publicerat plattformen Java SE 26 (Java Platform, Standard Edition 26), dĂ€r den referensimplementation som anvĂ€nds Ă€r det öppna projektet OpenJDK. Förutom att vissa förĂ„ldrade funktioner tagits bort, har Java SE 26 behĂ„llit bakĂ„tkompatibiliteten med tidigare versioner av Java-plattformen â de flesta tidigare skrivna Java-projekten kommer att fungera utan Ă€ndringar pĂ„ den nya versionen. De fĂ€rdiga installationspaketen för Java SE 26 (JDK, JRE och Server JRE) Ă€r tillgĂ€ngliga för Linux (x86_64, AArch64), Windows (x86_64) och macOS (x86_64, AArch64). Den referensimplementation av Java SE 26 som utvecklats inom ramen för projektet OpenJDK Ă€r helt öppen under GPLv2-licensen med undantag för GNU ClassPath, som möjliggör dynamisk lĂ€nkning med kommersiella produkter.
Java SE 26 klassas som en version med vanlig supportcykel, dĂ€r uppdateringar kommer att slĂ€ppas fram till nĂ€sta release. För en version med lĂ„ngsiktig support (LTS) rekommenderas Java SE 25, Java SE 21 eller Java SE 17, vars uppdateringar kommer att slĂ€ppas fram till 2033, 2031 respektive 2029 (offentliga uppdateringar â fram till september 2030, 2028 och 2026). Den utökade LTS-stöden för Java SE 8 kommer att pĂ„gĂ„ till 2030, medan Java SE 11 kommer att stödjas till 2032.
Bland förÀndringarna i Java SE 26 (1, 2, 3, 4):
- En varning har implementerats för anvÀndning av djup reflexion för att Àndra fÀlt mÀrkta med nyckelordet "final". I framtiden planeras det att osÀkra sprÄkfunktioner som standard ska stÀngas av, och bland annat att fÀlt mÀrkta som final helt ska bli oförÀnderliga genom att eliminera genvÀgar för att förÀndra dem via djup reflexion (API Reflection).
- API Applet (java.applet.Applet*, javax.swing.JApplet) har tagits bort, vilket anvÀndes för att köra Java-applikationer i webblÀsaren. Detta API blev omodernt efter att stödet för Java-plugin för webblÀsare upphört och deklarerades förÄldrat 2021.
- Möjligheten att anvĂ€nda förkompilerad cache (AOT - ahead-of-time) med alla skrĂ€parcollectorer, inklusive ZGC (Z Garbage Collector), har implementerats. Ăndringen innebĂ€r stöd för sekventiell laddning av cachade Java-objekt i minnet, med en universell och skrĂ€parcollector-oberoende format istĂ€llet för direkt mappning till minnet av specifika cache-representationer. AnvĂ€ndningen av AOT-cache minskar starttiden och snabbar upp uppvĂ€rmningen av HotSpot virtuella maskinen.
- HTTP Client API:t har fÄtt stöd för HTTP/3-protokollet, vilket gör det möjligt för applikationer och bibliotek att kommunicera med servrar via HTTP/3 efter minimala kodÀndringar.
- Prestandan hos G1-skrÀparcollectorn har förbÀttrats tack vare minskning av lÄs för att synkronisera applikationens trÄdar med skrÀparcollectorns trÄdar.
- Ett andra preliminÀrt API-förslag för kodning och avkodning av objekt med kryptografiska nycklar, certifikat och Äterkallade certifikat, med anvÀndning av PEM-formatet (Privacy-Enhanced Mail), har föreslagits.
- Ett sjÀtte preliminÀrt API-förslag för strukturerad parallellism (Structured Concurrency) har föreslagits för testning, vilket förenklar utvecklingen av flertrÄdiga applikationer genom att hantera flera uppgifter som körs i olika trÄdar som en enhetlig block.
- Den andra preliminÀra versionen av API för Lazy Constants har lagts till för att arbeta med objekt som innehÄller oförÀnderliga data och som behandlas i JVM som konstanter. LikasÄ tillÀmpas prestandaoptimeringar för sÄdana objekt, liknande de för fÀlt med nyckelordet 'final'. Till skillnad frÄn 'final' separerar det nya API:t skapandet av permanenta vÀrden och deras initiering, garanterar att vÀrdet endast kan initieras en gÄng, minskar programstarttiden och möjliggör anvÀndning av optimeringar för konstantsvÀngning (constant-folding) i anvÀndarkoden, som tidigare endast anvÀndes i JDK:s interna kod. class Application { // Tidigare: // static final UserService USERS = new UserService(); // Nu kan man: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- I mekanismen för mönstermatchning föreslÄs ett fjÀrde preliminÀrt alternativ för anvÀndning av primitiva typer (int, byte, char och andra grundlÀggande typer som inte Àr objekt) i alla typer av mallar, i operatören 'instanceof' och i 'switch'-block. switch (x.getStatus()) { case 0 -> 'okej'; case 1 -> 'varning'; case 2 -> 'fel'; case int i -> 'okÀnt status: ' + i; } if (i instanceof byte b) { ⊠b ⊠}
- Den elfte testimplementeringen av API:et Vector föreslÄs, vilket tillhandahÄller funktioner för vektorberÀkningar som utförs med hjÀlp av vektorinstruktioner frÄn x86_64- och AArch64-processorer och tillÄter samtidig tillÀmpning av operationer pÄ flera vÀrden (SIMD). Till skillnad frÄn de funktioner som tillhandahÄlls av JIT-kompilatorn HotSpot för automatisk vektorisering av skalÀra operationer, ger det nya API:et möjlighet att uttryckligen styra vektoriseringen för parallell databehandling.
Dessutom har Oracle tillkÀnnagett projektet Detroit, som kommer att utvecklas inom OpenJDK och syftar till att förbÀttra portabiliteten mellan Java, JavaScript och Python. Inom ramen för projektet avser man att möjliggöra inbÀddning i JVM-runtime-processen med JavaScript-motorn V8 och CPython-tolkaren. Tidigare utvecklade Oracle JavaScript-motorn Nashorn, som kördes ovanpÄ JVM, men avbröts projektet pÄ grund av svÄrigheterna att utveckla en separat JavaScript-implementation nÀr den huvudsakliga ekosystemet Àr knutet till V8-motorn.
Det Àr ocksÄ vÀrt att notera publiceringen av en uppdatering av plattformen för att skapa applikationer med grafiskt grÀnssnitt JavaFX 26. Inom de nÀrmaste timmarna förvÀntas ocksÄ lanseringen av den universella virtuella maskinen GraalVM 26, som stöder körning av applikationer pÄ JavaScript (Node.js), Python, Ruby, R, alla sprÄk för JVM (Java, Scala, Clojure, Kotlin) och sprÄk för vilka bitcode kan formuleras LLVM (C, C++, Rust).
KĂ€lla: opennet.ru
