Efter sex mĂ„naders utveckling har Oracle publicerat plattformen Java SE 27 (Java Platform, Standard Edition 27), vars referensimplementation bygger pĂ„ det öppna projektet OpenJDK. Med undantag för borttagning av vissa förĂ„ldrade funktioner bevarar Java SE 27 bakĂ„tkompatibilitet med tidigare versioner av Java-plattformen â de flesta tidigare skrivna Java-projekt kommer att fungera utan förĂ€ndringar nĂ€r de körs med den nya versionen. InstallationsfĂ€rdiga versioner av Java SE 27 (JDK, JRE och Server JRE) har förberetts för Linux (x86_64, AArch64), Windows (x86_64) och macOS (x86_64, AArch64). Den referensimplementation som utvecklats inom ramen för OpenJDK-projektet Ă€r helt öppen under GPLv2-licens med undantag för GNU ClassPath som tillĂ„ter dynamisk lĂ€nkning med kommersiella produkter.
Java SE 27 klassas som en version med vanlig support, dĂ€r uppdateringar kommer att slĂ€ppas fram till nĂ€sta release. För lĂ„ngsiktigt stödda versioner (LTS) bör Java SE 25, Java SE 21 eller Java SE 17 anvĂ€ndas, vars uppdateringar kommer att ges ut fram till Ă„ren 2033, 2031 och 2029 respektive (offentliga â fram till september 2030, 2028 och 2026). Den utökade supporten för LTS-versionen Java SE 8 kommer att fortsĂ€tta till 2030, medan Java SE 11 supportar till 2032.
Bland Àndringarna i Java SE 27 (1, 2, 3, 4):
- Som standard anvÀnds skrÀpsamlare G1 (Garbage-First) för alla miljöer, som tidigare anvÀndes för servrar. G1 Àr optimerad för anvÀndning pÄ flerprocessystem med stora mÀngder minne och balanserar mellan förutsÀgbarhet i fördröjningar och hög bandbredd. Under drift delar G1 upp minnet i mÄnga smÄ regioner och rensar först de regioner dÀr det finns fler oanvÀnda objekt och fÀrre aktivt anvÀnda data.
- I HotSpot JVM anvÀnds kompakta objektöverskrifter som standard. Storleken pÄ överskrifterna har minskats frÄn 96 till 64 bitar pÄ 64-bitars system, vilket har minskat minnesanvÀndningen och ökat sannolikheten för att data hamnar i processorens cache. I SPECjbb2015-tester minskade minnesanvÀndningen med 22 %, CPU-belastningen med 8 %, och antalet skrÀpsamlingsoperationer minskade med 15 %. NÀr JSON-parsingtestet genomfördes minskade genomloppstiden för testerna med 10 %.
- I implementeringen av TLS 1.3 har stöd för hybrida nyckelutbytesalgoritmer lagts till, som kombinerar algoritmen ML-KEM (CRYSTALS-Kyber), som Àr kvantresistent, med klassiska algoritmer baserade pÄ elliptiska kurvor ECDHE: X25519MLKEM768 (ECDHE med kurvan X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE med kurvan secp256r1 + ML-KEM-768) och SecP384r1MLKEM1024 (ECDHE med kurvan secp384r1 + ML-KEM-1024). I API:et javax.net.ssl Dessa scheman Àr aktiverade som standard och krÀver inga Àndringar i applikationerna för att anvÀndas.
- I JDK Flight Recorder (JFR), som anvÀnds för övervakning, profilering och prestandadiagnostik, har stöd för rengöring av den sparade diagnostikinformationen för kommandoradsargument, initiala vÀrden för miljövariabler och systemegenskaper lagts till. Denna förÀndring förhindrar lÀckage av konfidentiell information som hanteras av den profilerade processen, sÄsom autentiseringstoken och API-Ätkomstnycklar som överförs via miljövariabler.
- Den tredje preliminÀra versionen av API för Lazy Constants har implementerats för att arbeta med objekt som innehÄller oförÀnderliga data och behandlas i JVM som konstanter. Till sÄdana objekt tillÀmpas prestandaoptimeringar som liknar fÀlt med nyckelordet "final". Till skillnad frÄn "final" separerar det nya API:et skapandet av konstantvÀrden och deras initialisering, garanterar att vÀrdet endast kan initialiseras en gÄng, minskar programstartstiden och möjliggör optimeringar av konstantveckning i anvÀndarkod, som tidigare endast anvÀndes i den interna koden i JDK. 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 mönstermatchningsmekanismen har en femte preliminÀr variant av möjligheten att anvÀnda primitiva typer (int, byte, char och andra grundlÀggande typer som inte Àr objekt) i alla typer av mallar, i "instanceof"-operatorn och i "switch"-block föreslagits. switch (x.getStatus()) { case 0 -> "okej"; case 1 -> "varning"; case 2 -> "fel"; case int i -> "okÀnt tillstÄnd: " + i; } if (i instanceof byte b) { ⊠b ⊠}
- Den sjunde preliminÀra versionen av API:t för strukturerad parallellism (Structured Concurrency) har föreslagits för testning, vilket förenklar utvecklingen av flertrÄdade applikationer genom att hantera flera uppgifter som körs i olika trÄdar som ett enda block.
- Den tolfte testimplementeringen av API:t Vector har genomförts, vilket erbjuder funktioner för vektorberÀkningar som utförs med hjÀlp av vektorinstruktioner frÄn x86_64 och AArch64, och gör det möjligt att applicera operationer pÄ flera vÀrden samtidigt (SIMD). Till skillnad frÄn de av HotSpot JIT-kompilatorn erbjudna möjligheterna för automatisk vektorisering av skalaroperationer, ger det nya API:t möjlighet att explicit hantera vektorisering för parallell databehandling.
- Den tredje preliminÀra versionen av API:t för kodning och avkodning av objekt med kryptografiska nycklar, certifikat och Äterkallade certifikatlistor, med hjÀlp av PEM-formatet (Pivacy-Enhanced Mail), Àr tillgÀnglig.
Dessutom kan man notera publiceringen av plattformsuppdateringen för att skapa applikationer med grafiskt grÀnssnitt, JavaFX 27. Inom nÄgra timmar förvÀntas ocksÄ lanseringen av den universella virtuella maskinen GraalVM 27, som stöder körning av applikationer i JavaScript (Node.js), Python, Ruby, R, samt alla sprÄk för JVM (Java, Scala, Clojure, Kotlin) och sprÄk för vilka det kan genereras LLVM-bitkod (C, C++, Rust).
KĂ€lla: opennet.ru
