Efter seks måneders udvikling har Oracle offentliggjort platformen Java SE 27 (Java Platform, Standard Edition 27), hvor den åbne projekt OpenJDK bruges som referenceimplementering. Med undtagelse af fjernelse af nogle forældede funktioner bevares bagudkompatibilitet med tidligere versioner af Java-platformen i Java SE 27 — de fleste tidligere Java-projekter vil fungere uden ændringer, når de køres på den nye version. Klargjorte installationspakker for Java SE 27 (JDK, JRE, og Server JRE) er tilgængelige for Linux (x86_64, AArch64), Windows (x86_64) og macOS (x86_64, AArch64). Referenceimplementeringen af Java SE 27, der er udviklet under OpenJDK-projektet, er helt åbent under GPLv2-licensen med undtagelser fra GNU ClassPath, som tillader dynamisk binding til kommercielle produkter.
Java SE 27 klassificeres som en version med almindelig support, og opdateringer vil blive udgivet indtil næste release. For en version med langvarig support (LTS) bør Java SE 25, Java SE 21 eller Java SE 17 anvendes, som får opdateringer frem til 2033, 2031 og 2029 henholdsvis (offentlige — indtil september 2030, 2028 og 2026). Den udvidede support for Java SE 8 LTS-versionen vil vare indtil 2030, mens Java SE 11 vil have support frem til 2032.
Blandt ændringerne i Java SE 27 (1, 2, 3, 4):
- Som standard bruges Garbage-First (G1) affaldssamleren i alle miljøer, som tidligere blev anvendt til serversystemer. G1 er optimeret til brug på multiprocessorsystemer med stor hukommelse og balance mellem forudsigelighed af forsinkelser og høj gennemløbshastighed. Under drift opdeler G1 hukommelsen i mange små regioner og renser først de regioner, hvor der er flest ubenyttede objekter og færrest aktivt anvendte data.
- I HotSpot JVM er kompakte objektoverskrifter som standard aktiveret. Størrelsen på overskrifterne er reduceret fra 96 til 64 bit på 64-bit systemer, hvilket har reduceret hukommelsesforbruget og øget sandsynligheden for, at data kommer i processorens cache. I SPECjbb2015-tests er hukommelsesforbruget faldet med 22%, belastningen af CPU er faldet med 8%, og antallet af affaldssamlingsoperationer er faldet med 15%. Under test af JSON-parseren blev gennemløbstiden reduceret med 10%.
- TLS 1.3 implementerer støtte for hybride nøgleaftaleordninger, der kombinerer ML-KEM-algoritmen (CRYSTALS-Kyber), som er modstandsdygtig overfor kvantecomputerangreb, med klassiske algoritmer baseret på elliptiske kurver ECDHE: X25519MLKEM768 (ECDHE med kurven X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE med kurven secp256r1 + ML-KEM-768) og SecP384r1MLKEM1024 (ECDHE med kurven secp384r1 + ML-KEM-1024). I API'en javax.net.ssl Disse ordninger er inkluderet som standard og kræver ingen ændringer af applikationerne for at blive anvendt.
- Værktøjet JDK Flight Recorder (JFR), der anvendes til overvågning, profilering og diagnose af ydeevne, har fået tilføjet støtte til rensning af den gemte diagnostiske information, herunder kommandolinjeargumenter, initialværdier for miljøvariabler og systemegenskaber. Denne ændring forhindrer lækage af følsomme data, som den profilerede proces håndterer, såsom autoriseringstokens og API-adgangsnøgler overført via miljøvariabler.
- En tredje foreløbig version af API'en Lazy Constants er implementeret til at arbejde med objekter, der indeholder immutable data og behandles som konstante i JVM. Sådanne objekter får performanceoptimeringer, der svarer til felter med nøgleordet «final». I modsætning til «final» adskiller det nye API oprettelse af konstante værdier fra deres initialisering og garanterer, at værdien kun kan initialiseres én gang, hvilket reducerer programstarttiden og muliggør anvendelse af konstantfoldning i brugerens kode, hvilket tidligere kun var anvendeligt i JDK's interne kode. class Application { // Tidligere: // 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ønster-matchingsmekanismen er der foreslået en femte foreløbig mulighed for at bruge primitive typer (int, byte, char og andre grundlæggende typer, der ikke er objekter) i alle typer skabeloner, 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 … }
- Den syvende beta-version af API til struktureret parallelisme er blevet præsenteret. Det forenkler udviklingen af multitrådede applikationer ved at behandle flere opgaver, der udføres i forskellige tråde, som en enkelt enhed.
- Den tolvte testudgave af API Vector er implementeret og tilbyder funktioner til vektorberegninger, der bruger vektorinstruktioner fra x86_64- og AArch64-processorerne. Den muliggør samtidig anvendelse af operationer på flere værdier (SIMD). I modsætning til de autovektoriseringsmuligheder, der tilbydes af HotSpot JIT-kompilatoren for skalaroperationer, giver det nye API mulighed for eksplicit styring af vektorisering for parallel databehandling.
- Den tredje beta-version af API til kodning og dekodning af objekter med kryptografiske nøgler, certifikater og certifikatrevocationslister ved hjælp af PEM-formatet (Pivacy-Enhanced Mail) er tilgængelig.
Det er også værd at bemærke udgivelsen af opdateringen til platformen for oprettelse af JavaFX 27-applikationer. Inden for de næste timer forventes lanceringen af den universelle virtuelle maskine GraalVM 27, som understøtter kørsel af applikationer skrevet i JavaScript (Node.js), Python, Ruby, R, alle JVM-sprog (Java, Scala, Clojure, Kotlin) samt sprog, hvor der kan genereres LLVM-bitkode (C, C++, Rust).
Kilde: opennet.ru
