Java SE 16 väljalase

Pärast kuuekuulist arendustööd andis Oracle välja Java SE 16 (Java Platform, Standard Edition 16), mis kasutab OpenJDK projekti võrdlusrakendusena. Java SE 16 säilitab tagasiühilduvuse Java platvormi eelmiste väljaannetega; kõik varem kirjutatud Java projektid töötavad uue versiooniga käivitamisel muudatusteta. Installimiseks valmis Java SE 16 (JDK, JRE ja Server JRE) järgud on ette valmistatud Linuxi (x86_64, AArch64), Windowsi ja macOS-i jaoks. OpenJDK projekti poolt välja töötatud Java 16 viiterakendus on täielikult avatud lähtekoodiga GPLv2 litsentsi alusel, GNU ClassPathi erandid võimaldavad dünaamilist linkimist kommertstoodetega.

Java SE 16 on klassifitseeritud üldiseks tugiväljalaseks ja sellele saadetakse värskendusi kuni järgmise väljalaskeni. Pikaajalise toe (LTS) haru peaks olema Java SE 11, mis jätkab värskenduste saamist kuni 2026. aastani. Järgmine LTS-i väljalase on kavandatud 2021. 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.

Uue väljalaske ettevalmistamiseks on arendus kolinud Mercuriali versioonikontrollisüsteemilt Gitile ja GitHubi koostöö arendusplatvormile. Eeldatakse, et migratsioon parandab hoidla toimingute jõudlust, suurendab salvestuse tõhusust, annab juurdepääsu muudatustele kogu projekti ajaloo jooksul, parandab koodi ülevaatuse tuge ja võimaldab API-del töövooge automatiseerida. Lisaks muudab Giti ja GitHubi kasutamine projekti atraktiivsemaks algajatele ja Gitiga harjunud arendajatele.

Java 16 uute funktsioonide hulka kuuluvad:

  • Lisatud eksperimentaalne moodul jdk.incubator.vector koos Vector API juurutamisega, mis pakub funktsioone vektoriarvutuste jaoks, mida teostatakse vektorijuhiste abil x86_64 ja AArch64 protsessoritel ning võimaldab toiminguid üheaegselt rakendada mitmele väärtusele (SIMD). Erinevalt HotSpot JIT-i kompilaatoris pakutavatest võimalustest skalaaroperatsioonide automaatseks vektoriseerimiseks võimaldab uus API teil selgesõnaliselt juhtida vektoriseerimist paralleelseks andmetöötluseks.
  • C++ keeles kirjutatud JDK ja VM HotSpot koodil on lubatud kasutada spetsifikatsioonis C++14 toodud funktsioone. Varem olid lubatud C++98/03 standardid.
  • ZGC (Z Garbage Collector), mis töötab passiivses režiimis ja minimeerib nii palju kui võimalik prügikorjamisest tulenevaid viivitusi, on lisanud võimaluse töödelda niitide virnasid paralleelselt ilma rakenduse lõime peatamata. ZGC-l on nüüd ainult vedrustust nõudvad tööd, millel on pidevad viivitused, mis tavaliselt ei ületa paarsada mikrosekundit.
  • Unixi soklite (AF_UNIX) tugi lisati klassidele SocketChannel, ServerSocketChannel ja java.nio.channels.
  • Linuxi distributsiooni Alpine jaoks on juurutatud port standardse C raamatukoguga musl, mis on populaarne konteinerite, mikroteenuste, pilve- ja manustatud süsteemide keskkondades. Sellistes keskkondades pakutav port võimaldab käivitada Java-programme nagu tavalisi rakendusi. Lisaks saate jlinki abil eemaldada kõik kasutamata moodulid ja luua rakenduse käitamiseks piisava minimaalse keskkonna, mis võimaldab luua rakendusepõhiseid kompaktseid pilte.
  • Rakendatud on elastse metaruumi mehhanism, mis optimeerib JVM HotSpotis klassi metaandmete (metaruumi) poolt hõivatud mälu eraldamise ja tagastamise toiminguid. Elastic Metaspace'i kasutamine vähendab mälu killustumist, vähendab klassilaaduri üldkulusid ja avaldab kasulikku mõju ka kaua töötavate serverirakenduste jõudlusele tänu kasutamata klassi metaandmetega hõivatud mälu kiiremale tagastamisele operatsioonisüsteemi. Mälu vabastamise režiimi valimiseks pärast klasside mahalaadimist pakutakse valikut “-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)”.
  • AArch64 arhitektuuril põhinevate protsessoritega riistvaraga töötavatele Windowsi süsteemidele on lisatud JDK-port.
  • Välja on pakutud kolmas välismälu juurdepääsu API eelvaade, mis võimaldab Java rakendustel turvaliselt ja tõhusalt juurde pääseda väljaspool Java hunnikut asuvatele mälupiirkondadele, manipuleerides uute MemorySegmenti, MemoryAddressi ja MemoryLayouti abstraktsioonidega.
  • Rakendatud on eksperimentaalne Foreign Linker API, mis pakub juurdepääsu Java-lt omakoodile. Koos välismälu API-ga muudab uus programmeerimisliides tavapäraste jagatud teekide kaudu ümbriste loomise palju lihtsamaks.
  • Lisatud utiliit jpackage, mis võimaldab luua pakette iseseisvate Java-rakenduste jaoks. Utiliit põhineb JavaFX-i javapackageril ja võimaldab teil luua pakette erinevatele platvormidele omases vormingus (msi ja exe Windowsi jaoks, pkg ja dmg macOS-i jaoks, deb ja rpm Linuxi jaoks). Paketid sisaldavad kõiki vajalikke sõltuvusi.
  • Kõikide JDK sisemiste osade range kapseldamine on vaikimisi lubatud, välja arvatud kriitilised API-d, nagu sun.misc.Unsafe. Suvandi "--illegal-access" väärtus on nüüd vaikimisi seatud "keela" asemel "luba", mis blokeerib koodi katsed pääseda juurde enamikule sisemistele klassidele, meetoditele ja väljadele. Piirangust mööda hiilimiseks kasutage suvandit „-illegal-access=permit”.
  • Mustri sobitamise rakendamine operaatoris "instanceof" on stabiliseeritud, mis võimaldab teil koheselt määratleda kohaliku muutuja, mis viitab kontrollitud väärtusele. Näiteks võite kohe kirjutada "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}", ilma et oleks selgelt määratletud "String s = (String) obj". Was: if (obj instanceof Group) { Group group = (Group) obj; var kirjed = group.getEntries(); } Nüüd saate teha ilma "Group group = (Group) obj" määratlemata: if (obj instanceof Group group) { var enterries = group.getEntries(); }
  • Märksõna "rekord" rakendamine on stabiliseeritud, pakkudes klasside määratluste jaoks kompaktset vormi, mis välistab vajaduse selgesõnaliselt määratleda mitmesuguseid madala taseme meetodeid, nagu võrdsus(), hashCode() ja toString() andmete salvestamise korral ainult põldudel.millega see ei muutu. Kui klass kasutab meetodite equals(), hashCode() ja toString() standardrakendusi, saab see hakkama ka ilma nende selgesõnalise definitsioonita: avalik kirje BankTransaction(LocalDate kuupäev, topeltsumma, stringi kirjeldus) {}

    See deklaratsioon lisab lisaks konstruktori- ja geterimeetoditele automaatselt ka meetodite equals(), hashCode() ja toString() juurutused.

  • Teine mustand on pakutud suletud klasside ja liideste jaoks, mida teised klassid ja liidesed ei saa kasutada rakenduste pärimiseks, laiendamiseks või tühistamiseks. 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 {…}

Allikas: opennet.ru

Lisa kommentaar