Po šestih mesecih razvoja je podjetje Oracle objavilo platformo Java SE 27 (Java Platform, Standard Edition 27), katere referenčna implementacija temelji na odprtem projektu OpenJDK. Razen odstranitve nekaterih zastarelih možnosti je Java SE 27 ohranila združljivost s prejšnjimi različicami platforme Java - večina prej napisanih Java projektov bo brez sprememb delovala na novi različici. Na voljo so različice za namestitev Java SE 27 (JDK, JRE in Server JRE) za Linux (x86_64, AArch64), Windows (x86_64) in macOS (x86_64, AArch64). Referenčna implementacija Java SE 27, razvita v okviru projekta OpenJDK, je popolnoma odprta pod licenco GPLv2 s posebnimi izjemami GNU ClassPath, ki omogočajo dinamično povezovanje s komercialnimi izdelki.
Java SE 27 spada v kategorijo izdaj z običajno podporo, nadgradnje za to pa bodo izhajale do naslednje različice. Za dolgotrajno podporo (LTS) se priporoča uporaba Java SE 25, Java SE 21 ali Java SE 17, za katere bodo nadgradnje izhajale do leta 2033, 2031 in 2029 (javne - do septembra 2030, 2028 in 2026). Razširjena podpora za LTS vejo Java SE 8 bo trajala do leta 2030, medtem ko bo Java SE 11 imela podporo do leta 2032.
Med spremembami v Java SE 27 (1, 2, 3, 4):
- Privzeto je za vsa okolja uporabljen zbiralnik odpadkov G1 (Garbage-First), ki je bil prej uporabljen v strežniških sistemih. G1 je optimiziran za uporabo na večprocesorskih sistemih z veliko pomnilnika in uravnotežuje med predvidljivostjo zamud in visoko prepustnostjo. Med delovanjem G1 razdeli pomnilnik na številne majhne regije in najprej čisti tiste regije, kjer je manj aktivno uporabljenih podatkov in več neuporabljenih predmetov.
- V HotSpot JVM so privzeto uporabljeni kompaktni naslovi predmetov. Velikost naslovov na 64-bitnih sistemih je bila zmanjšana s 96 na 64 bitov, kar je zmanjšalo porabo pomnilnika in povečalo verjetnost, da podatki pridejo v procesorski predpomnilnik. V testih SPECjbb2015 se je poraba pomnilnika zmanjšala za 22%, obremenitev CPU pa je upadla za 8%, število operacij zbiranja odpadkov pa se je zmanjšalo za 15%. Pri testiranju JSON parserja se je čas trajanja testov skrajšal za 10%.
- TLS 1.3 introduces support for hybrid key agreement schemes, combining the ML-KEM (CRYSTALS-Kyber) algorithm, which is resistant to quantum computer attacks, with classical algorithms based on elliptic curves ECDHE: X25519MLKEM768 (ECDHE with curve X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE with curve secp256r1 + ML-KEM-768), and SecP384r1MLKEM1024 (ECDHE with curve secp384r1 + ML-KEM-1024). In the API javax.net.ssl These schemes are enabled by default and do not require any changes to applications to be utilized.
- The JDK Flight Recorder (JFR) toolkit, used for monitoring, profiling, and diagnosing performance, has been enhanced to support the removal of command-line argument information, initial environment variable values, and system properties from saved diagnostic information. This change helps prevent the leakage of confidential data processed by the profiled process, such as authorization tokens and API access keys passed through environment variables.
- A third preview of the Lazy Constants API has been implemented for working with objects that contain immutable data and are handled in the JVM as constants. Such objects benefit from performance optimizations similar to fields declared with the 'final' keyword. Unlike 'final', the new API separates the creation of constant values from their initialization, ensuring that a value can only be initialized once, reducing program startup time and allowing optimizations such as constant-folding in user code that were previously only used in the internal JDK code. class Application { // Was: // static final UserService USERS = new UserService(); // Now possible: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- In the pattern matching mechanism, a fifth preliminary version proposes the ability to use primitive types (int, byte, char, and other basic types that are not objects) in all types of patterns, in the 'instanceof' operator, and in 'switch' blocks. switch (x.getStatus()) { case 0 -> 'okay'; case 1 -> 'warning'; case 2 -> 'error'; case int i -> 'unknown status: ' + i; } if (i instanceof byte b) { … b … }
- Predlagan je sedmi preliminarni model API za strukturirano paralelno izvršavanje (Structured Concurrency), koji pojednostavljuje razvoj višedretvenih aplikacija obradom više zadataka u različitim thread-ovima kao jedinstvene jedinice.
- Implementirana je dvanaesta testna verzija API za vektorske proračune, koja pruža funkcije za vektorske izračune koristeći vektorske instrukcije procesora x86_64 i AArch64, što omogućava istovremeno izvođenje operacija na više vrednosti (SIMD). Za razliku od mogućnosti automatske vektorizacije skalarnih operacija koje nude JIT kompajler HotSpot, novi API omogućava eksplicitno upravljanje vektorizacijom za paralelnu obradu podataka.
- Dostupan je treći preliminarni model API za kodiranje i dekodiranje objekata sa kriptografskim ključevima, sertifikatima i spiskovima opozvanih sertifikata, koristeći PEM format (Pivacy-Enhanced Mail).
Dodatno, ističe se objava nadogradnje platforme za razvoj aplikacija sa grafičkim korisničkim interfejsom JavaFX 27. U narednim satima se očekuje i objavljivanje univerzalne virtuelne mašine GraalVM 27, koja podržava pokretanje aplikacija u JavaScript-u (Node.js), Python-u, Ruby-ju, R-u, kao i jezicima za JVM (Java, Scala, Clojure, Kotlin) i jezicima za koje je moguće generisati LLVM bitcode (C, C++, Rust).
Izvor: opennet.ru
