Na ses maande se ontwikkeling het Oracle Java SE 27 (Java Platform, Standard Edition 27) vrygestel, wat die oopbron OpenJDK-projek as verwysingsimplementering gebruik. Met die uitsondering van die verwydering van sommige verouderde funksies, handhaaf Java SE 27 terugwaartse versoenbaarheid met vorige weergawes van die Java-platform—meeste voorheen geskrewe Java-projekte sal onveranderd loop wanneer hulle onder die nuwe weergawe loop. Gereed-om-te-installeer weergawes van Java SE 27 (JDK, JRE en Server JRE) word voorberei vir... Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). Ontwikkel deur die OpenJDK-projek, is die Java SE 27-verwysingsimplementering volledig oopbron onder die GPLv2-lisensie met die GNU ClassPath-uitsondering, wat dinamiese skakeling met kommersiële produkte moontlik maak.
Java SE 27 word gekategoriseer as 'n gereelde ondersteuningsvrystelling, met opdaterings wat vrygestel word tot die volgende vrystelling. Die langtermynondersteuning (LTS) tak behoort Java SE 25, Java SE 21 of Java SE 17 te wees, met opdaterings wat vrygestel word tot onderskeidelik 2033, 2031 en 2029 (algemeen beskikbaar tot September 2030, 2028 en 2026). Uitgebreide ondersteuning vir die Java SE 8 LTS tak sal voortduur tot 2030, en vir Java SE 11 tot 2032.
Veranderinge in Java SE 27 (1, 2, 3, 4) sluit in:
- Standaard gebruik alle omgewings die G1 (Garbage-First) vullisverwyderaar, wat voorheen vir bedienerstelsels gebruik is. G1 is geoptimaliseer vir gebruik op multiverwerkerstelsels met groot geheuekapasiteit en vir die balansering van voorspelbare latensie met hoë deurset. Tydens werking verdeel G1 geheue in baie klein streke en prioritiseer daardie streke met meer ongebruikte voorwerpe en minder aktief toeganklike data.
- Die HotSpot JVM gebruik standaard kompakte objek-opskrifte. Op 64-bis-stelsels is die opskrifgrootte van 96 na 64 bisse verminder, wat geheueverbruik verminder en die waarskynlikheid verhoog dat data die verwerkerkas tref. In SPECjbb2015-maatstawwe het geheueverbruik met 22% afgeneem, die SVE-las met 8% afgeneem en die aantal vullisverwyderingsbewerkings met 15%. Toetslooptye vir die JSON-ontleder is met 10% verminder.
- Die TLS 1.3 implementering voeg ondersteuning by vir hibriede sleutelooreenkomsskemas wat die kwantumbestande ML-KEM (CRYSTALS-Kyber) algoritme kombineer met klassieke ECDHE elliptiese kurwe-algoritmes: X25519MLKEM768 (ECDHE met die X25519-kurwe + ML-KEM-768), SecP256r1MLKEM76 (ECDHE met die secp256r1-kurwe + ML-KEM-768), en SecP384r1MLKEM1024 (ECDHE met die secp384r1-kurwe + ML-KEM-1024). In die javax.net API.ssl Hierdie skemas is standaard geaktiveer en vereis geen toepassingsveranderinge om te gebruik nie.
- JDK Flight Recorder (JFR), 'n instrument wat gebruik word vir prestasiemonitering, profilering en diagnostiek, ondersteun nou die sanitasie van opdragreëlargumente, aanvanklike waardes van omgewingveranderlikes en stelseleienskappe in gestoorde diagnostiese inligting. Hierdie verandering verhoed die lekkasie van sensitiewe data wat deur die geprofileerde proses verwerk word, soos magtigingstokens en API-toegangsleutels wat via omgewingveranderlikes deurgegee word.
- Die derde voorskou van die Lazy Constants API is geïmplementeer vir die werk met objekte wat onveranderlike data bevat en as konstantes in die JVM behandel word. Prestasie-optimalisering soortgelyk aan dié vir velde met die "final" sleutelwoord word op sulke objekte toegepas. Anders as "final", skei die nuwe API die skep van konstante waardes van hul initialisering, waarborg dat 'n waarde slegs een keer geïnisialiseer kan word, verminder programopstarttyd, en maak dit moontlik dat konstante-vou-optimalisering, wat voorheen slegs in JDK-interne kode gebruik is, in gebruikerskode gebruik kan word. class Application { // Voorheen: // static final UserService USERS = new UserService(); // Nou: static final StableValue GEBRUIKERS = StabieleWaarde.van(); public static GebruikersDiens gebruikers() { return GEBRUIKERS.ofAndersStel(GebruikersDiens::nuut); } }
- Die patroonooreenstemmingsenjin stel 'n vyfde konsep bekend van die vermoë om primitiewe tipes (int, byte, char en ander nie-objek basistipes) in alle soorte patrone te gebruik, in die geval van die operator, en in skakelblokke. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
- Die sewende konsep van die Structured Concurrency API, wat die ontwikkeling van multithreaded-toepassings vereenvoudig deur verskeie take wat op verskillende drade loop as 'n enkele eenheid te behandel, is vrygestel vir toetsing.
- Die twaalfde toetsimplementering van die Vector API is geïmplementeer. Hierdie API bied funksies vir vektorberekeninge wat uitgevoer word met behulp van x86_64- en AArch64-verwerkervektorinstruksies en maak voorsiening vir gelyktydige bewerkings op veelvuldige waardes (SIMD). Anders as die HotSpot JIT-samesteller se outo-vektorisering van skalaarbewerkings, laat die nuwe API eksplisiete beheer oor vektorisering vir parallelle dataverwerking toe.
- 'n Derde konsep van die API is nou beskikbaar vir die kodering en dekodering van voorwerpe wat kriptografiese sleutels, sertifikate en sertifikaatherroepingslyste bevat deur die PEM (Privacy-Enhanced Mail) formaat te gebruik.
Daarbenewens is ons bly om die vrystelling van 'n opdatering vir die JavaFX 27-platform vir die skep van grafiese gebruikerskoppelvlaktoepassings aan te kondig. Die vrystelling van die GraalVM 27 universele virtuele masjien, wat die uitvoering van toepassings in JavaScript (Node.js), Python, Ruby, R, enige JVM-taal (Java, Scala, Clojure, Kotlin), en tale waarvoor LLVM-bitkode gegenereer kan word (C, C++, Rust) ondersteun, word ook in die komende ure verwag.
Bron: opennet.ru
