Versiunea Java SE 17

După șase luni de dezvoltare, Oracle a lansat platforma Java SE 17 (Java Platform, Standard Edition 17), care folosește proiectul open source OpenJDK ca implementare de referință. Cu excepția eliminării unor caracteristici depreciate, Java SE 17 menține compatibilitatea cu versiunile anterioare ale platformei Java – majoritatea proiectelor Java scrise anterior vor funcționa în continuare fără modificări atunci când sunt rulate sub noua versiune. Versiunile gata de instalare ale Java SE 17 (JDK, JRE și Server JRE) sunt pregătite pentru Linux (x86_64, AArch64), Windows (x86_64) și macOS (x86_64, AArch64). Dezvoltată de proiectul OpenJDK, implementarea de referință Java 17 este complet open source sub licența GPLv2 cu excepții GNU ClassPath pentru a permite conectarea dinamică la produsele comerciale.

Java SE 17 este clasificat ca o versiune Long Term Support (LTS), care va continua să primească actualizări până în 2029. Actualizările pentru lansarea anterioară de etapă Java 16 au fost întrerupte. Ramura LTS anterioară a Java 11 va fi acceptată până în 2026. Următoarea lansare LTS este programată pentru septembrie 2024. Să vă reamintim că începând cu lansarea Java 10, proiectul a trecut la un nou proces de dezvoltare, implicând un ciclu mai scurt pentru formarea de noi versiuni. Noua funcționalitate este acum dezvoltată într-o ramură principală actualizată constant, care include modificări gata făcute și din care ramurile sunt ramificate la fiecare șase luni pentru a stabiliza noile versiuni.

Noile funcții din Java 17 includ:

  • Se propune o implementare experimentală a potrivirii modelelor în expresiile „switch”, care permite utilizarea nu a unor valori exacte în etichetele „caz”, ci a șabloanelor flexibile care acoperă o serie de valori simultan, pentru care anterior era necesar să se utilizeze greoaie. lanțuri de expresii „dacă...altfel”. În plus, „comutatorul” are capacitatea de a gestiona valorile NULL. Obiect o = 123L; String formated = 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("Șir %s", s); implicit -> o.toString(); };
  • Suport stabilizat pentru clase și interfețe sigilate, care nu pot fi utilizate de alte clase și interfețe pentru a moșteni, extinde sau suprascrie implementarea. Clasele sigilate oferă, de asemenea, o modalitate mai declarativă de a restricționa utilizarea unei superclase decât modificatorii de acces, bazată pe listarea explicită a subclaselor permise pentru extensie. pachet com.example.geometry; clasă publică sigilată Formă permise com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Pătrat {…}
  • Este propusă o a doua previzualizare a API-ului Vector, care oferă funcții pentru calcule vectoriale care sunt executate folosind instrucțiuni vectoriale pe procesoarele x86_64 și AArch64 și permit operațiunilor să fie aplicate simultan la mai multe valori (SIMD). Spre deosebire de capabilitățile oferite de compilatorul HotSpot JIT pentru vectorizarea automată a operațiunilor scalare, noul API face posibilă controlul explicit al vectorizării pentru procesarea paralelă a datelor.
  • S-a adăugat o previzualizare a API-ului Foreign Function & Memory, care permite aplicațiilor să interacționeze cu codul și datele în afara timpului de rulare Java. Noul API vă permite să apelați eficient funcții non-JVM și să accesați memoria non-JVM gestionată. De exemplu, puteți apela funcții din biblioteci externe partajate și puteți accesa datele de proces fără a utiliza JNI.
  • Motorul de randare macOS care alimentează API-ul Java 2D, care la rândul său alimentează API-ul Swing, a fost adaptat pentru a utiliza API-ul Metal graphics. Platforma macOS continuă să folosească OpenGL în mod implicit, iar activarea suportului Metal necesită setarea „-Dsun.java2d.metal=true” și cel puțin rularea macOS 10.14.x.
  • S-a adăugat un port pentru platforma macOS/AArch64 (calculatoare Apple bazate pe noile cipuri Apple M1). O caracteristică specială a portului este suportul pentru mecanismul de protecție a memoriei W^X (Write XOR Execute), în care paginile de memorie nu pot fi accesate simultan pentru scriere și execuție. (codul poate fi executat numai după ce scrierea este dezactivată, iar scrierea pe o pagină de memorie este posibilă numai după ce execuția este dezactivată).
  • S-a revenit la utilizarea numai a semanticii strictfp pentru expresiile în virgulă mobilă. Suportul pentru semantica „implicit”, disponibilă de la lansarea Java 1.2, a fost întrerupt, inclusiv simplificări pentru lucrul pe sisteme cu coprocesoare matematice x87 foarte vechi (după apariția instrucțiunilor SSE2, nevoia de semantică suplimentară a dispărut).
  • Au fost implementate noi tipuri de interfețe pentru generatoarele de numere pseudoaleatoare și au fost implementați algoritmi suplimentari pentru o generare mai bună de numere aleatoare. Aplicațiilor li se oferă posibilitatea de a alege un algoritm pentru generarea de numere pseudoaleatoare. Suport îmbunătățit pentru generarea de fluxuri de obiecte aleatorii.
  • Încapsularea strictă impusă a tuturor elementelor interne JDK, cu excepția API-urilor critice, cum ar fi sun.misc.Unsafe. Încapsularea strictă blochează încercările de la cod de a accesa clasele, metodele și câmpurile interne. Anterior, modul strict de încapsulare putea fi dezactivat folosind opțiunea „--illegal-access=permit”, dar acest lucru a fost acum depreciat. Aplicațiile care necesită acces la clase, metode și câmpuri interne ar trebui să le definească în mod explicit folosind opțiunea --add-opens sau atributul Add-Opens din fișierul manifest.
  • Aplicațiile au capacitatea de a defini filtre de deserializare a datelor, care pot fi sensibile la context și selectate dinamic pe baza operațiunilor specifice de deserializare. Filtrele specificate sunt aplicabile întregii mașini virtuale (la nivelul JVM-ului), adică acoperă nu numai aplicația în sine, ci și bibliotecile terțe utilizate în aplicație.
  • Swing a adăugat metoda javax.swing.filechooser.FileSystemView.getSystemIcon pentru a încărca pictograme mari pentru a îmbunătăți interfața de utilizare pe ecranele cu DPI ridicat.
  • API-ul java.net.DatagramSocket oferă suport pentru conectarea la grupuri multicast fără a fi nevoie de un API java.net.MulticastSocket separat.
  • Utilitarul IGV (Ideal Graph Visualizer) a fost îmbunătățit, oferind vizualizarea interactivă a reprezentării codului intermediar în compilatorul HotSpot VM C2 JIT.
  • În JavaDoc, prin analogie cu compilatorul javac, atunci când apare o eroare, sunt indicate acum numărul liniei problematice din fișierul sursă și locația erorii.
  • S-a adăugat proprietatea native.encoding, care reflectă numele codificării caracterelor sistemului (UTF-8, koi8-r, cp1251 etc.).
  • A fost adăugată interfața java.time.InstantSource, permițând manipularea timpului fără referire la un fus orar.
  • S-a adăugat API-ul java.util.HexFormat pentru conversia la reprezentare hexazecimală și invers.
  • La compilator a fost adăugat un mod de gaură neagră, care dezactivează operațiunile de eliminare a codurilor moarte, care pot fi utilizate atunci când se efectuează teste de performanță.
  • S-a adăugat opțiunea „-Xlog:async” la Runtime pentru a înregistra jurnalele în modul asincron.
  • La stabilirea conexiunilor securizate, TLS 1.3 este activat implicit (anterior era folosit TLS 1.2).
  • API-ul Applet învechit, declarat anterior (java.applet.Applet*, javax.swing.JApplet), care a fost folosit pentru a rula aplicații Java în browser, a fost mutat în categoria de programat pentru eliminare (a pierdut relevanța după încheierea suportului). pentru pluginul Java pentru browsere).
  • Security Manager, care și-a pierdut de multă relevanță și s-a dovedit a fi nerevendicat după încetarea suportului pentru pluginul browserului, a fost mutat în categoria celor programate pentru eliminare.
  • A fost eliminat mecanismul de activare RMI, care este învechit, retrogradat la categoria unei opțiuni în Java 8 și nu este aproape niciodată folosit în practica modernă.
  • Un compilator experimental care acceptă JIT (just-in-time) pentru compilarea dinamică a codului Java pentru HotSpot JVM, precum și modul de compilare anticipativă (AOT, înainte de timp) a claselor în codul mașinii înainte de a porni mașina virtuală , a fost eliminat din SDK. Compilatorul a fost scris în Java și se bazează pe munca proiectului Graal. Se observă că întreținerea compilatorului necesită multă muncă, ceea ce nu este justificat atunci când nu există nicio cerere din partea dezvoltatorilor.

Sursa: opennet.ru

Adauga un comentariu