Java SE 17 leidimas

Po šešių mėnesių kūrimo, „Oracle“ išleido „Java SE 17“ („Java Platform, Standard Edition 17“) platformą, kuri naudoja OpenJDK atvirojo kodo projektą kaip atskaitos įgyvendinimą. Išskyrus kai kurių pasenusių funkcijų pašalinimą, „Java SE 17“ palaiko atgalinį suderinamumą su ankstesniais „Java“ platformos leidimais – dauguma anksčiau parašytų „Java“ projektų vis tiek veiks be pakeitimų, kai bus vykdomi naudojant naują versiją. Diegiamos Java SE 17 versijos (JDK, JRE ir Server JRE) yra paruoštos Linux (x86_64, AArch64), Windows (x86_64) ir macOS (x86_64, AArch64). Sukurtas OpenJDK projekto, Java 17 nuorodos diegimas yra visiškai atviras pagal GPLv2 licenciją su GNU ClassPath išimtimis, kad būtų galima dinamiškai susieti su komerciniais produktais.

„Java SE 17“ klasifikuojama kaip ilgalaikio palaikymo (LTS) leidimas, kuris ir toliau gaus atnaujinimus iki 2029 m. Ankstesnės „Java 16“ versijos leidimo atnaujinimai buvo nutraukti. Ankstesnė LTS „Java 11“ atšaka bus palaikoma iki 2026 m. Kitas LTS leidimas numatytas 2024 m. rugsėjo mėn. Priminsime, kad nuo „Java 10“ išleidimo projektas perėjo prie naujo kūrimo proceso, o tai reiškia trumpesnį naujų leidimų formavimo ciklą. Naujos funkcijos dabar sukurtos vienoje nuolat atnaujinamoje pagrindinėje šakoje, kuri apima paruoštus pakeitimus ir iš kurios šakos kas šešis mėnesius atšakojamos siekiant stabilizuoti naujus leidimus.

Naujos „Java 17“ funkcijos apima:

  • Siūlomas eksperimentinis modelių atitikimo „jungiklio“ išraiškose įgyvendinimas, leidžiantis naudoti ne tikslias reikšmes „atvejo“ etiketėse, o lanksčius šablonus, vienu metu apimančius eilę reikšmių, kurioms anksčiau reikėjo naudoti sudėtingas. „jei... kitaip“ posakių grandinės. Be to, „jungiklis“ turi galimybę tvarkyti NULL reikšmes. Objektas 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(); };
  • Stabilizuotas užantspauduotų klasių ir sąsajų palaikymas, kurių negali naudoti kitos klasės ir sąsajos, kad būtų galima paveldėti, išplėsti arba nepaisyti diegimo. Užantspauduotos klasės taip pat yra labiau deklaratyvus būdas apriboti superklasės naudojimą nei prieigos modifikatoriai, remiantis aiškiai išvardintais poklasiais, kuriuos leidžiama išplėsti. paketas com.example.geometry; vieša uždara klasė leidžia forma com.example.polar.Circle, com.example.quad.Stačiakampis, com.example.quad.simple.Square {…}
  • Siūloma antroji Vector API peržiūra, kurioje pateikiamos vektorinių skaičiavimų funkcijos, vykdomos naudojant vektorines instrukcijas x86_64 ir AArch64 procesoriuose, ir leidžianti operacijas vienu metu taikyti kelioms reikšmėms (SIMD). Skirtingai nuo HotSpot JIT kompiliatoriaus galimybių, skirtų automatiniam skaliarinių operacijų vektorizavimui, nauja API leidžia aiškiai valdyti vektorizavimą lygiagrečiam duomenų apdorojimui.
  • Pridėta „Foreign Function & Memory“ API peržiūra, leidžianti programoms sąveikauti su kodu ir duomenimis ne „Java“ vykdymo metu. Naujoji API leidžia efektyviai iškviesti ne JVM funkcijas ir pasiekti ne JVM valdomą atmintį. Pavyzdžiui, galite iškviesti funkcijas iš išorinių bendrinamų bibliotekų ir pasiekti proceso duomenis nenaudodami JNI.
  • „MacOS“ atvaizdavimo variklis, maitinantis „Java 2D“ API, kuris savo ruožtu veikia „Swing“ API, buvo pritaikytas naudoti Metalo grafikos API. „MacOS“ platforma ir toliau naudoja „OpenGL“ pagal numatytuosius nustatymus, o norint įjungti „Metal“ palaikymą, reikia nustatyti „-Dsun.java2d.metal=true“ ir bent jau paleisti „macOS 10.14.x“.
  • Pridėtas prievadas, skirtas macOS/AArch64 platformai („Apple“ kompiuteriai, pagrįsti naujais „Apple M1“ lustais). Ypatinga prievado savybė yra W^X (Write XOR Execute) atminties apsaugos mechanizmo palaikymas, kai atminties puslapiai negali būti vienu metu pasiekiami rašymui ir vykdymui. (kodą galima vykdyti tik išjungus rašymą, o įrašyti į atminties puslapį galima tik išjungus vykdymą).
  • Sugrąžinta į tik strictfp semantikos naudojimą slankiojo kablelio išraiškoms. „Numatytosios“ semantikos, prieinamos nuo „Java 1.2“ išleidimo, palaikymas buvo nutrauktas, įskaitant supaprastinimus dirbant su sistemomis su labai senais x87 matematiniais koprocesoriais (po SSE2 instrukcijų atsiradimo papildomos semantikos poreikis išnyko).
  • Įdiegtos naujos sąsajos su pseudoatsitiktinių skaičių generatoriais, įdiegti papildomi algoritmai geresniam atsitiktinių skaičių generavimui. Programoms suteikiama galimybė pasirinkti pseudoatsitiktinių skaičių generavimo algoritmą. Pagerintas atsitiktinių objektų srautų generavimo palaikymas.
  • Priverstas griežtas visų JDK vidinių elementų įterpimas, išskyrus svarbias API, pvz., sun.misc.Unsafe. Griežta inkapsuliacija blokuoja bandymus iš kodo pasiekti vidines klases, metodus ir laukus. Anksčiau griežtą inkapsuliavimo režimą buvo galima išjungti naudojant parinktį „--illegal-access=permit“, tačiau dabar ji nebenaudojama. Programos, kurioms reikalinga prieiga prie vidinių klasių, metodų ir laukų, turėtų juos aiškiai apibrėžti naudodami parinktį --add-opens arba atributą Add-Opens aprašo faile.
  • Programoms suteikiama galimybė apibrėžti duomenų deserializavimo filtrus, kurie gali būti jautrūs kontekstui ir dinamiškai parinkti pagal konkrečias deserializavimo operacijas. Nurodyti filtrai taikomi visai virtualiai mašinai (visame JVM), t.y. apima ne tik pačią programą, bet ir programoje naudojamas trečiųjų šalių bibliotekas.
  • Swing pridėjo javax.swing.filechooser.FileSystemView.getSystemIcon metodą, kad būtų galima įkelti dideles piktogramas, kad pagerintų vartotojo sąsają didelio DPI ekranuose.
  • Java.net.DatagramSocket API palaiko prisijungimą prie Multicast grupių be atskiros java.net.MulticastSocket API.
  • Patobulinta IGV (Ideal Graph Visualizer) programa, teikianti interaktyvią tarpinio kodo atvaizdavimo vizualizaciją HotSpot VM C2 JIT kompiliatoriuje.
  • JavaDoc, pagal analogiją su javac kompiliatoriumi, kai išvedama klaida, dabar nurodomas probleminės eilutės numeris šaltinio faile ir klaidos vieta.
  • Pridėta savybė native.encoding, atspindinti sistemos simbolių kodavimo pavadinimą (UTF-8, koi8-r, cp1251 ir kt.).
  • Pridėta java.time.InstantSource sąsaja, leidžianti manipuliuoti laiku be nuorodos į laiko juostą.
  • Pridėta java.util.HexFormat API, skirta konvertuoti į šešioliktainį vaizdą ir atvirkščiai.
  • Prie kompiliatoriaus pridėtas juodosios skylės režimas, kuris išjungia mirusio kodo pašalinimo operacijas, kurias galima naudoti atliekant našumo testus.
  • Prie Runtime pridėta parinktis „-Xlog:async“, kad būtų galima įrašyti žurnalus asinchroniniu režimu.
  • Užmezgant saugius ryšius, pagal numatytuosius nustatymus įjungiamas TLS 1.3 (anksčiau buvo naudojamas TLS 1.2).
  • Anksčiau paskelbta pasenusia programėlės API (java.applet.Applet*, javax.swing.JApplet), kuri buvo naudojama „Java“ programoms naršyklėje paleisti, buvo perkelta į pašalinimo kategoriją (prarado aktualumą pasibaigus palaikymui „Java“ papildiniui naršyklėms).
  • „Security Manager“, kuris jau seniai prarado savo aktualumą ir, pasibaigus naršyklės papildinio palaikymui, pasirodė esąs nepareikštas, buvo perkeltas į kategoriją, kurią planuojama pašalinti.
  • Buvo pašalintas RMI aktyvinimo mechanizmas, kuris yra pasenęs, įtrauktas į „Java 8“ parinkties kategoriją ir beveik niekada nenaudojamas šiuolaikinėje praktikoje.
  • Eksperimentinis kompiliatorius, palaikantis JIT (just-in-time), skirtas dinaminiam Java kodo kompiliavimui HotSpot JVM, taip pat numatomo klasių kompiliavimo (AOT, prieš laiką) į mašinos kodą prieš paleidžiant virtualią mašiną režimą. , buvo pašalintas iš SDK. Kompiliatorius buvo parašytas Java kalba ir pagrįstas Graal projekto darbu. Pažymima, kad kompiliatoriaus priežiūra reikalauja daug darbo jėgos, o tai nėra pateisinama, kai nėra kūrėjų poreikio.

Šaltinis: opennet.ru

Добавить комментарий