După șase luni de dezvoltare, compania Oracle a lansat platforma Java SE 18 (Java Platform, Standard Edition 18), pentru care se folosește ca implementare de referință proiectul open-source OpenJDK. Cu excepția eliminării unor funcționalități învechite, Java SE 18 păstrează compatibilitatea înapoi cu versiunile anterioare ale platformei Java – majoritatea proiectelor Java scrise anterior vor funcționa fără modificări pe noua versiune. Versiuni gata pentru instalare ale Java SE 18 (JDK, JRE și Server JRE) sunt disponibile pentru Linux (x86_64, AArch64), Windows (x86_64) și macOS (x86_64, AArch64). Implementarea de referință Java 18 dezvoltată în cadrul proiectului OpenJDK este complet deschisă sub licența GPLv2, cu excepții GNU ClassPath, care permit legarea dinamică cu produse comerciale.
Java SE 18 este clasificat ca o versiune cu suport obișnuit, actualizările fiind lansate până la următoarea versiune. Pentru un suport pe termen lung (LTS), este recomandat să se utilizeze Java SE 17, actualizările pentru care vor fi lansate până în 2029. Reamintim că, începând cu lansarea Java 10, proiectul a trecut la un nou proces de dezvoltare, care implică un ciclu mai scurt de lansare a noilor versiuni. Funcționalitățile noi sunt acum dezvoltate într-o ramură principală constant actualizată, în care sunt incluse modificările deja finalizate, iar care se ramifică la fiecare șase luni pentru stabilizarea noilor versiuni.
Printre noutățile din Java 18 se numără:
- Implicita este codificarea UTF-8. API-urile Java care procesează date textuale ținând cont de codificarea caracterelor vor folosi acum implicit UTF-8 pe toate platformele, indiferent de setările sistemului și de localele selectate. Pentru a reveni la comportamentul anterior, în care codificarea este selectată în funcție de localele sistemului, se poate utiliza parametru „-Dfile.encoding=COMPAT“.
- Pachetul com.sun.net.httpserver este inclus, care conține utilitarul jwebserver și o API de bibliotecă cu implementarea unui server http simplu pentru livrarea de conținut static (CGI și procesatoarele de tip servlet nu sunt suportate). Serverul http integrat nu este optimizat pentru sarcini de lucru și nu suportă controlul accesului și autentificarea, deoarece este destinat în principal utilizării în procesul de dezvoltare pentru crearea de prototipuri, depanare și testare a proiectelor.
- JavaDoc a implementat suportul pentru eticheta „@snippet” pentru încorporarea exemplelor funcționale și a fragmentelor de cod în documentația API, care pot fi aplicate instrumentelor pentru verificarea corectitudinii, evidențierea sintaxei și integrarea cu IDE.
- Implementarea API-ului java.lang.reflect (Reflectarea de bază) a fost refăcută, având ca scop obținerea informațiilor despre metode, câmpuri și constructori ale claselor, precum și accesul la structura internă a claselor. API-ul java.lang.reflect a rămas neschimbat, dar acum este implementat prin utilizarea descriptorilor de metode (method handles) furnizați de modulul java.lang.invoke, în locul aplicării generatorilor de bytecode. Această modificare a permis unificarea implementărilor java.lang.reflect și java.lang.invoke, precum și simplificarea întreținerii acestora.
- A fost propusă o a treia implementare preliminară a API-ului Vector, care oferă funcții pentru calcule vectoriale, ce sunt efectuate utilizând instrucțiuni vectoriale ale procesoarelor x86_64 și AArch64, permițând aplicarea simultană a operațiunilor pe mai multe valori (SIMD). Spre deosebire de posibilitățile de auto-vectorizare a operațiunilor scalare furnizate de compilatorul JIT HotSpot, noul API oferă posibilitatea de a gestiona explicit vectorizarea pentru procesarea paralelă a datelor.
- A fost adăugat un interfață SPI (interfața furnizorului de servicii) pentru rezolvarea numelui gazdelor și adreselor IP, permițând utilizarea de rezolvitori alternativi în java.net.InetAddress, care nu sunt legați de gestionarii oferiți de sistemul de operare.
- A fost propusă a doua implementare preliminară a API-ului Foreign Function & Memory, prin care aplicațiile pot interacționa cu codul și datele care se află în afara runtime-ului Java. Noua API permite apelarea eficientă a funcțiilor care nu se execută în JVM și accesarea memoriei necontrolate de JVM. De exemplu, se pot apela funcții din biblioteci partajate externe și se pot accesa datele procesului fără utilizarea JNI.
- A fost adăugată a doua implementare experimentală a potrivirii de tip în expresiile «switch», care permite utilizarea, în etichetele «case», nu a valorilor exacte, ci a unor șabloane flexibile, acoperind o întreagă serie de valori, pentru care anterior era necesar să se folosească lanțuri voluminoase de expresii «if…else». Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
- Mecanismul de finalizare a fost declarat învechit și va fi dezactivat într-una dintre următoarele versiuni, împreună cu metodele asociate, cum ar fi Object.finalize(), Enum.finalize(), Runtime.runFinalization() și System.runFinalization().
- Colectoarele de gunoi ZGC (Z Garbage Collector), SerialGC și ParallelGC au implementat suportul pentru deduplicarea șirurilor.
Sursa: opennet.ro
