Efter seks måneders udvikling har Oracle udgivet Java SE 27 (Java Platform, Standard Edition 27), som bruger open source-projektet OpenJDK som referenceimplementering. Med undtagelse af fjernelsen af nogle forældede funktioner opretholder Java SE 27 bagudkompatibilitet med tidligere udgivelser af Java-platformen – de fleste tidligere skrevne Java-projekter vil køre uændret, når de kører under den nye version. Installationsklare builds af Java SE 27 (JDK, JRE og Server JRE) er forberedt til Linux (x86_64, AArch64), Windows (x86_64) og macOS (x86_64, AArch64). Java SE 27-referenceimplementeringen, der er udviklet af OpenJDK-projektet, er fuldt open source under GPLv2-licensen med GNU ClassPath Exception, som tillader dynamisk linkning med kommercielle produkter.
Java SE 27 er kategoriseret som en almindelig supportudgivelse, hvor opdateringer udgives indtil den næste udgivelse. Langtidssupportgrenen (LTS) bør være Java SE 25, Java SE 21 eller Java SE 17, med opdateringer udgivet indtil henholdsvis 2033, 2031 og 2029 (generelt tilgængelig indtil september 2030, 2028 og 2026). Udvidet support til Java SE 8 LTS-grenen fortsætter indtil 2030, og til Java SE 11 indtil 2032.
Ændringer i Java SE 27 (1, 2, 3, 4) omfatter:
- Som standard bruger alle miljøer G1 (Garbage-First) garbage collector, som tidligere blev brugt til serversystemer. G1 er optimeret til brug på multiprocessorsystemer med stor hukommelseskapacitet og til at afbalancere forudsigelig latenstid med høj kapacitet. Under drift opdeler G1 hukommelsen i mange små områder og prioriterer de områder med flere ubrugte objekter og mindre aktivt tilgåede data.
- HotSpot JVM bruger som standard kompakte objektheadere. På 64-bit systemer er headerstørrelsen reduceret fra 96 til 64 bit, hvilket reducerer hukommelsesforbruget og øger sandsynligheden for, at data rammer processorcachen. I SPECjbb2015 benchmarks faldt hukommelsesforbruget med 22 %, CPU-belastningen faldt med 8 %, og antallet af garbage collection-operationer faldt med 15 %. Testkørselstiderne for JSON-parseren blev reduceret med 10 %.
- TLS 1.3-implementeringen tilføjer understøttelse af hybride nøgleaftaleordninger, der kombinerer den kvanteresistente ML-KEM (CRYSTALS-Kyber) algoritme med klassiske ECDHE elliptiske kurvealgoritmer: X25519MLKEM768 (ECDHE med X25519-kurven + ML-KEM-768), SecP256r1MLKEM76 (ECDHE med secp256r1-kurven + ML-KEM-768) og SecP384r1MLKEM1024 (ECDHE med secp384r1-kurven + ML-KEM-1024). I javax.net API'en.ssl Disse ordninger er aktiveret som standard og kræver ingen ændringer i programmet for at kunne bruges.
- JDK Flight Recorder (JFR), et værktøj, der bruges til ydeevneovervågning, profilering og diagnosticering, understøtter nu rensning af kommandolinjeargumenter, startværdier for miljøvariabler og systemegenskaber i gemte diagnostiske oplysninger. Denne ændring forhindrer lækage af følsomme data, der behandles af den profilerede proces, såsom autorisationstokens og API-adgangsnøgler, der sendes via miljøvariabler.
- Den tredje forhåndsvisning af Lazy Constants API er blevet implementeret til at arbejde med objekter, der indeholder uforanderlige data og behandles som konstanter i JVM'en. Ydelsesoptimeringer svarende til dem for felter med nøgleordet "final" anvendes på sådanne objekter. I modsætning til "final" adskiller den nye API oprettelsen af konstante værdier fra deres initialisering, garanterer, at en værdi kun kan initialiseres én gang, reducerer programstarttiden og muliggør konstantfoldningsoptimeringer, der tidligere kun blev brugt i JDK-intern kode, i brugerkode. class Application { // Tidligere: // static final UserService USERS = new UserService(); // Nu: static final StableValue BRUGERE = StabilVærdi.af(); public static BrugerService brugere() { return BRUGERE.ellerElleSæt(BrugerService::ny); } }
- Mønstermatchningsmotoren introducerer et femte udkast til muligheden for at bruge primitive typer (int, byte, char og andre ikke-objektbasetyper) i alle slags mønstre, i instanceof-operatoren og i switch-blokke. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
- Det syvende udkast af Structured Concurrency API'en, som forenkler udviklingen af multithreaded-applikationer ved at behandle flere opgaver, der kører på forskellige tråde, som en enkelt enhed, er blevet udgivet til test.
- Den tolvte testimplementering af Vector API'en er blevet implementeret. Denne API leverer funktioner til vektorberegninger udført ved hjælp af x86_64- og AArch64-processorvektorinstruktioner og tillader samtidige operationer på flere værdier (SIMD). I modsætning til HotSpot JIT-compilerens automatiske vektorisering af skalære operationer, tillader den nye API eksplicit kontrol over vektorisering til parallel databehandling.
- Et tredje udkast til API'en er nu tilgængeligt til kodning og afkodning af objekter, der indeholder kryptografiske nøgler, certifikater og certifikattilbagekaldelseslister ved hjælp af PEM-formatet (Pivacy-Enhanced Mail).
Derudover er vi glade for at kunne annoncere udgivelsen af en opdatering til JavaFX 27-platformen til oprettelse af grafiske brugergrænsefladeapplikationer. Udgivelsen af den universelle virtuelle maskine GraalVM 27, som understøtter kørsel af applikationer i JavaScript (Node.js), Python, Ruby, R, ethvert JVM-sprog (Java, Scala, Clojure, Kotlin) og sprog, hvortil LLVM-bitkode kan genereres (C, C++, Rust), forventes også i de kommende timer.
Kilde: opennet.ru
