Pas six mois de dĂ©veloppement, Oracle a publiĂ© la plateforme Java SE 27 (Java Platform, Standard Edition 27), dont la mise en Ćuvre de rĂ©fĂ©rence est le projet open-source OpenJDK. Ă l'exception de la suppression de certaines fonctionnalitĂ©s obsolĂštes, Java SE 27 maintient la compatibilitĂ© avec les versions prĂ©cĂ©dentes de la plateforme Java â la majoritĂ© des projets Java prĂ©cĂ©demment Ă©crits fonctionneront sans modifications avec la nouvelle version. Des builds prĂȘtes Ă l'installation de Java SE 27 (JDK, JRE et Server JRE) ont Ă©tĂ© prĂ©parĂ©es pour Linux (x86_64, AArch64), Windows (x86_64) et macOS (x86_64, AArch64). La mise en Ćuvre de rĂ©fĂ©rence de Java SE 27, dĂ©veloppĂ©e dans le cadre du projet OpenJDK, est entiĂšrement ouverte sous la licence GPLv2 avec des exceptions GNU ClassPath, permettant la liaison dynamique avec des produits commerciaux.
Java SE 27 est classé parmi les versions à support standard, avec des mises à jour qui seront publiées jusqu'à la prochaine version. Pour un support à long terme (LTS), on doit utiliser Java SE 25, Java SE 21 ou Java SE 17, avec des mises à jour qui seront publiées jusqu'en 2033, 2031 et 2029 respectivement (publiquement disponibles jusqu'en septembre 2030, 2028 et 2026). Le support étendu de la branche LTS de Java SE 8 se poursuivra jusqu'en 2030, tandis que Java SE 11 bénéficiera d'un support jusqu'en 2032.
Ndër ndryshimet në Java SE 27 (1, 2, 3, 4):
- Si parazgjedhje, për të gjitha mjediset përdoret mbledhësi i mbeturinave G1 (Garbage-First), i cili më parë përdorej për sistemet server. G1 është i optimizuar për përdorim në sisteme shumëprocesorike me sasi të madhe memorieje dhe për të balancuar parashikueshmërinë e vonesave me kapacitet të lartë përpunimi. Gjatë punës, G1 e ndan memorien në shumë rajone të vogla dhe fillimisht pastron ato rajone ku ka më shumë objekte të papërdorura dhe më pak të dhëna në përdorim aktiv.
- Në HotSpot JVM, si parazgjedhje përdoren tituj kompaktë të objekteve. Madhësia e titujve në sistemet 64-bit është zvogëluar nga 96 në 64 bit, gjë që ka ulur konsumin e memories dhe ka rritur gjasat që të dhënat të futen në cache të procesorit. Në testet SPECjbb2015, konsumi i memories u ul me 22%, ngarkesa në CPU u zvogëlua me 8%, ndërsa numri i operacioneve të mbledhjes së mbeturinave ra me 15%. Gjatë testimit të parserit JSON, koha e ekzekutimit të testeve u shkurtua me 10%.
- Në implementimin e TLS 1.3 është shtuar mbështetja për skemat hibride të marrëveshjes së çelësave, duke kombinuar algoritmin ML-KEM (CRYSTALS-Kyber), rezistent ndaj thyerjes me forcë brutale në kompjuterë kuantikë, me algoritmet klasike ECDHE të bazuara në kurbat eliptike: X25519MLKEM768 (ECDHE me kurbën X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE me kurbën secp256r1 + ML-KEM-768) dhe SecP384r1MLKEM1024 (ECDHE me kurbën secp384r1 + ML-KEM-1024). Në API javax.net.ssl Këto skema janë aktivizuar si parazgjedhje dhe për përdorimin e tyre nuk kërkojnë ndryshime në aplikacione.
- Në paketën e mjeteve JDK Flight Recorder (JFR), e përdorur për monitorim, profilizim dhe diagnostikim të performancës, është shtuar mbështetja për pastrimin në informacionin diagnostik të ruajtur të argumenteve të linjës së komandës, vlerave fillestare të variablave të mjedisit dhe vetive të sistemit. Ky ndryshim ndihmon në parandalimin e rrjedhjes së të dhënave konfidenciale që përpunohen nga procesi i profilizuar, si p.sh. token-et e autorizimit dhe çelësat e aksesit në API të transmetuar përmes variablave të mjedisit.
- La troisiĂšme prĂ©version de l'API Lazy Constants a Ă©tĂ© mise en Ćuvre pour travailler avec des objets contenant des donnĂ©es immuables, traitĂ©s dans la JVM comme des constantes. Des optimisations de performance, similaires Ă celles appliquĂ©es aux champs avec le mot-clĂ© « final », sont appliquĂ©es Ă ces objets. Contrairement à « final », la nouvelle API sĂ©pare la crĂ©ation de valeurs constantes de leur initialisation, garantissant que la valeur ne peut ĂȘtre initialisĂ©e qu'une seule fois, rĂ©duisant le temps de dĂ©marrage des programmes et permettant d'appliquer dans le code utilisateur des optimisations de rĂ©duction des constantes (constant-folding), qui Ă©taient auparavant utilisĂ©es uniquement dans le code interne du JDK. class Application { // Avant: // static final UserService USERS = new UserService(); // Maintenant, on peut: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- Në mekanizmin e përputhjes me mostrën, propozohet një variant i pestë paraprak i mundësive për të përdorur tipe primitive (int, byte, char dhe tipe të tjera bazike që nuk janë objekte) në të gjithë llojet e shabllonëve, në operatorin «instanceof» dhe në blloqet «switch». switch (x.getStatus()) { case 0 -> «okay»; case 1 -> «warning»; case 2 -> «error»; case int i -> «status i panjohur: » + i; } if (i instanceof byte b) { ⊠b ⊠}
- ĂshtĂ« propozuar pĂ«r testim varianti i shtatĂ« paraprak i API-sĂ« pĂ«r Structured Concurrency, i cili thjeshton zhvillimin e aplikacioneve shumĂ«fijĂ«she duke trajtuar disa detyra qĂ« ekzekutohen nĂ« fije tĂ« ndryshme si njĂ« bllok i vetĂ«m.
- ĂshtĂ« realizuar implementimi i dymbĂ«dhjetĂ« testues i API-sĂ« Vector, i cili ofron funksione pĂ«r llogaritje vektoriale qĂ« ekzekutohen duke pĂ«rdorur instruksionet vektoriale tĂ« procesorĂ«ve x86_64 dhe AArch64 dhe mundĂ«sojnĂ« zbatimin e njĂ«kohshĂ«m tĂ« operacioneve mbi disa vlera njĂ«herĂ«sh (SIMD). Ndryshe nga mundĂ«sitĂ« e autovektorizimit tĂ« operacioneve skalare qĂ« ofron JIT-kompiluesi HotSpot, API-ja e re lejon kontroll tĂ« drejtpĂ«rdrejtĂ« tĂ« vektorizimit pĂ«r pĂ«rpunim paralel tĂ« tĂ« dhĂ«nave.
- ĂshtĂ« i disponueshĂ«m varianti i tretĂ« paraprak i API-sĂ« pĂ«r kodimin dhe dekodimin e objekteve me çelĂ«sa kriptografikĂ«, certifikata dhe lista tĂ« certifikatave tĂ« revokuara, duke pĂ«rdorur formatin PEM (Pivacy-Enhanced Mail).
Gjithashtu vlen të përmendet publikimi i përditësimit të platformës JavaFX 27 për krijimin e aplikacioneve me ndërfaqe grafike. Në orët në vijim pritet edhe dalja e makinës virtuale universale GraalVM 27, e cila mbështet ekzekutimin e aplikacioneve në JavaScript (Node.js), Python, Ruby, R, në çdo gjuhë për JVM (Java, Scala, Clojure, Kotlin) dhe në gjuhë për të cilat mund të gjenerohet bitkodi LLVM (C, C++, Rust).
Burimi: opennet.ru
