Java SE 17 väljalase

Pärast kuuekuulist arendustööd on Oracle välja andnud Java SE 17 (Java Platform, Standard Edition 17) platvormi, mis kasutab OpenJDK avatud lähtekoodiga projekti referentsrakendusena. Välja arvatud mõnede aegunud funktsioonide eemaldamine, säilitab Java SE 17 tagasiühilduvuse Java platvormi eelmiste väljalasetega – enamik varem kirjutatud Java-projekte töötab uue versiooniga käivitamisel endiselt ilma muudatusteta. Java SE 17 (JDK, JRE ja Server JRE) installitavad järgud on ette valmistatud Linuxi (x86_64, AArch64), Windowsi (x86_64) ja macOS-i (x86_64, AArch64) jaoks. OpenJDK projekti poolt välja töötatud Java 17 viiterakendus on täielikult avatud lähtekoodiga GPLv2 litsentsi alusel koos GNU ClassPathi eranditega, et võimaldada dünaamilist linkimist kommertstoodetega.

Java SE 17 on klassifitseeritud pikaajalise toe (LTS) väljalaseks, mis jätkub värskenduste saamisega kuni 2029. aastani. Eelmise Java 16 verstaposti versiooni värskendused on katkestatud. Java 11 eelmist LTS-i haru toetatakse kuni 2026. aastani. Järgmine LTS-i väljalase on kavandatud 2024. aasta septembrisse. Tuletame meelde, et alates Java 10 väljalaskmisest läks projekt üle uuele arendusprotsessile, mis tähendab lühemat tsüklit uute väljaannete moodustamiseks. Uus funktsionaalsus on nüüd välja töötatud ühes pidevalt uuenevas põhiharus, mis sisaldab valmis muudatusi ja millest hargnetakse iga kuue kuu tagant uute väljaannete stabiliseerimiseks.

Java 17 uute funktsioonide hulka kuuluvad:

  • Pakutakse välja mustrite sobitamise eksperimentaalne rakendamine "lüliti" avaldistes, mis võimaldab kasutada "case" siltides mitte täpseid väärtusi, vaid paindlikke malle, mis katavad korraga mitmeid väärtusi, mille jaoks varem oli vaja kasutada tülikat. "kui...muidu" väljendite ahelaid. Lisaks on "lülitil" võime käsitleda NULL väärtusi. Objekt o = 123L; String vormindatud = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("pikk %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); vaikimisi -> o.toString(); };
  • Stabiliseeritud tugi suletud klassidele ja liidestele, mida teised klassid ja liidesed ei saa kasutada juurutamiseks, laiendamiseks või alistamiseks. Suletud klassid pakuvad ka deklaratiivsemat viisi ülemklassi kasutamise piiramiseks kui juurdepääsu modifikaatorid, mis põhinevad laiendamiseks lubatud alamklasside selgesõnalisel loetlemisel. pakett com.example.geometry; avalik suletud klass Kuju lubab com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.lihtne.Ruut {…}
  • Pakutakse välja Vector API teine ​​eelvaade, mis pakub funktsioone vektoriarvutuste jaoks, mida täidetakse vektorkäskude abil x86_64 ja AArch64 protsessorites ning mis võimaldab toiminguid üheaegselt rakendada mitmele väärtusele (SIMD). Erinevalt HotSpot JIT kompilaatoris pakutavatest võimalustest skalaaroperatsioonide automaatseks vektoriseerimiseks võimaldab uus API paralleelse andmetöötluse vektoriseerimist selgesõnaliselt juhtida.
  • Lisati välisfunktsiooni ja mälu API eelvaade, mis võimaldab rakendustel koodi ja andmetega suhelda väljaspool Java käitusaega. Uus API võimaldab teil tõhusalt kutsuda mitte-JVM-i funktsioone ja pääseda juurde JVM-i mittehallatavale mälule. Näiteks saate kutsuda funktsioone välistest jagatud teegidest ja pääseda juurde protsessiandmetele ilma JNI-d kasutamata.
  • MacOS-i renderdusmootor, mis toidab Java 2D API-d, mis omakorda toidab Swing API-d, on kohandatud metalligraafika API kasutamiseks. MacOS-i platvorm kasutab vaikimisi jätkuvalt OpenGL-i ja Metalli toe lubamiseks on vaja seada "-Dsun.java2d.metal=true" ja käitada vähemalt macOS 10.14.x.
  • Lisatud on macOS/AArch64 platvormi port (uutel Apple M1 kiipidel põhinevad Apple'i arvutid). Pordi eripäraks on tugi W^X (Write XOR Execute) mälukaitsemehhanismile, mille puhul ei saa mälulehtedele üheaegselt juurde pääseda nii kirjutamiseks kui ka täitmiseks. (koodi saab käivitada alles pärast kirjutamise keelamist ja mälulehele kirjutamine on võimalik alles pärast täitmise keelamist).
  • Taastatud on ujukomaavaldiste jaoks ainult strictfp semantika. "Vaikesemantika" tugi, mis on saadaval alates Java 1.2 väljalaskmisest, on lõpetatud, sealhulgas lihtsustused väga vanade x87 matemaatika kaasprotsessoritega süsteemides töötamiseks (pärast SSE2 juhiste tulekut kadus vajadus täiendava semantika järele).
  • Rakendatud on uut tüüpi liideseid pseudojuhuslike numbrite generaatoritele ja juhuslike arvude paremaks genereerimiseks on rakendatud täiendavaid algoritme. Rakendustele antakse võimalus valida pseudojuhuslike arvude genereerimise algoritm. Täiustatud tugi juhuslike objektivoogude genereerimiseks.
  • Kõigi JDK sisemiste, välja arvatud kriitiliste API-de, nagu sun.misc.Unsafe, range kapseldamine. Range kapseldamine blokeerib katsed koodist pääseda juurde sisemistele klassidele, meetoditele ja väljadele. Varem sai range kapseldamise režiimi keelata, kasutades suvandit "--illegal-access=permit", kuid nüüd on see aegunud. Rakendused, mis nõuavad juurdepääsu sisemistele klassidele, meetoditele ja väljadele, peaksid need selgelt määratlema, kasutades manifesti faili suvandit --add-opens või atribuuti Add-Opens.
  • Rakendustele antakse võimalus määratleda andmete deserialiseerimisfiltrid, mis võivad olla kontekstitundlikud ja dünaamiliselt valitud konkreetsete deserialiseerimistoimingute põhjal. Määratud filtrid on rakendatavad kogu virtuaalmasinale (üle JVM-i), st. ei hõlma mitte ainult rakendust ennast, vaid ka rakenduses kasutatavaid kolmandate osapoolte teeke.
  • Swing on lisanud javax.swing.filechooser.FileSystemView.getSystemIcon meetodi suurte ikoonide laadimiseks, et täiustada kõrge DPI-ga ekraanide kasutajaliidest.
  • API java.net.DatagramSocket pakub tuge Multicasti rühmadega ühenduse loomiseks, ilma et oleks vaja eraldi java.net.MulticastSocket API-t.
  • IGV (Ideal Graph Visualizer) utiliiti on täiustatud, pakkudes HotSpot VM C2 JIT kompilaatoris vahepealse koodi esituse interaktiivset visualiseerimist.
  • JavaDoc-is on analoogselt javaci kompilaatoriga tõrke väljastamisel nüüd näidatud probleemse rea number lähtefailis ja vea asukoht.
  • Lisatud atribuut native.encoding, mis kajastab süsteemi märgikodeeringu nime (UTF-8, koi8-r, cp1251 jne).
  • Lisatud on liides java.time.InstantSource, mis võimaldab aja manipuleerimist ilma ajavööndile viitamata.
  • Lisatud java.util.HexFormat API kuueteistkümnendsüsteemis teisendamiseks ja vastupidi.
  • Kompilaatorisse on lisatud musta augu režiim, mis keelab surnud koodi kõrvaldamise toimingud, mida saab kasutada jõudlustestide läbiviimisel.
  • Lisatud Runtime'ile suvand "-Xlog:async", et salvestada logisid asünkroonses režiimis.
  • Turvaliste ühenduste loomisel on TLS 1.3 vaikimisi lubatud (varem oli kasutusel TLS 1.2).
  • Varem vananenud apleti API (java.applet.Applet*, javax.swing.JApplet), mida kasutati Java rakenduste käivitamiseks brauseris, on teisaldatud eemaldamiseks mõeldud kategooriasse (kaotas pärast toe lõppemist asjakohasuse). brauseritele mõeldud Java pistikprogrammi jaoks).
  • Turvahaldur, mis on ammu oma aktuaalsuse kaotanud ja pärast brauseri pistikprogrammi toe lõppemist osutus taotlemata, on viidud eemaldatavate inimeste kategooriasse.
  • RMI aktiveerimise mehhanism on eemaldatud, mis on aegunud, tõrjutud Java 8 valiku kategooriasse ja mida tänapäevases praktikas peaaegu kunagi ei kasutata.
  • Eksperimentaalne kompilaator, mis toetab JIT-d (just-in-time) Java-koodi dünaamiliseks kompileerimiseks HotSpot JVM-i jaoks, samuti klasside ennetava kompileerimise režiimi (AOT, enne aega) masinkoodiks enne virtuaalmasina käivitamist. , on SDK-st eemaldatud. Kompilaator on kirjutatud Java keeles ja põhines Graali projekti tööl. Märgitakse, et kompilaatorite hooldus nõuab palju tööjõudu, mis ei ole õigustatud, kui arendajate nõudlus puudub.

Allikas: opennet.ru

Lisa kommentaar