Java SE 16 leidimas

Po šešių mėnesių kūrimo „Oracle“ išleido „Java SE 16“ („Java Platform“, „Standard Edition 16“), kuri naudoja atvirojo kodo „OpenJDK“ projektą kaip atskaitos diegimą. „Java SE 16“ palaiko atgalinį suderinamumą su ankstesniais „Java“ platformos leidimais; visi anksčiau parašyti „Java“ projektai veiks be pakeitimų, kai bus paleista pagal naują versiją. Paruoštos įdiegti Java SE 16 versijos (JDK, JRE ir Server JRE), skirtos Linux (x86_64, AArch64), Windows ir macOS. Sukurtas OpenJDK projekto, Java 16 nuorodos diegimas yra visiškai atviras pagal GPLv2 licenciją, su GNU ClassPath išimtimis, leidžiančiomis dinamiškai susieti su komerciniais produktais.

„Java SE 16“ yra klasifikuojama kaip bendras palaikymo leidimas ir bus atnaujinamas iki kito leidimo. Ilgalaikio palaikymo (LTS) filialas turėtų būti Java SE 11, kuris ir toliau gaus atnaujinimus iki 2026 m. Kitas LTS leidimas numatytas 2021 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.

Ruošiantis naujam leidimui, kūrimas buvo perkeltas iš Mercurial versijų valdymo sistemos į Git ir GitHub bendradarbiavimo platformą. Tikimasi, kad perkėlimas pagerins saugyklos operacijų našumą, padidins saugojimo efektyvumą, suteiks prieigą prie pakeitimų per visą projekto istoriją, pagerins kodo peržiūros palaikymą ir leis API automatizuoti darbo eigas. Be to, naudojant Git ir GitHub, projektas tampa patrauklesnis pradedantiesiems ir prie Git pripratusiems kūrėjams.

Naujos „Java 16“ funkcijos apima:

  • Pridėtas eksperimentinis modulis jdk.incubator.vector su "Vector API" įgyvendinimu, kuris suteikia vektorinių skaičiavimų funkcijas, kurios atliekamos naudojant vektorines instrukcijas x86_64 ir AArch64 procesoriuose ir leidžia vienu metu taikyti operacijas kelioms reikšmėms (SIMD). Priešingai nei HotSpot JIT kompiliatoriuje teikiamos galimybės automatiniam skaliarinių operacijų vektorizavimui, nauja API leidžia aiškiai valdyti vektorizavimą lygiagrečiam duomenų apdorojimui.
  • JDK ir VM HotSpot kodui, parašytam C++ kalba, leidžiama naudoti C++14 specifikacijoje įdiegtas funkcijas. Anksčiau C++98/03 standartai buvo leidžiami.
  • ZGC (Z Garbage Collector), veikiantis pasyviuoju režimu ir kiek įmanoma sumažinantis vėlavimą dėl šiukšlių surinkimo, pridėjo galimybę lygiagrečiai apdoroti gijų krūvas, nestabdant taikymo gijų. Dabar ZGC yra tik darbai, kuriuos reikia sustabdyti ir kurie nuolat vėluoja, paprastai neviršijantys kelių šimtų mikrosekundžių.
  • Pridėtas „Unix“ lizdų (AF_UNIX) palaikymas „SocketChannel“, „ServerSocketChannel“ ir „java.nio.channels“ klasėse.
  • „Linux“ paskirstymui „Alpine“ įdiegtas prievadas su standartine C biblioteka musl, kuri yra populiari konteinerių, mikro paslaugų, debesų ir įterptųjų sistemų aplinkose. Siūlomas prievadas tokiose aplinkose leidžia paleisti Java programas kaip įprastas programas. Be to, naudodamiesi jlink galite pašalinti visus nenaudojamus modulius ir sukurti minimalią aplinką, kurios pakaktų programai paleisti, kuri leidžia kurti konkrečios programos kompaktiškus vaizdus.
  • Įdiegtas Elastic Metaspace mechanizmas, optimizuojantis JVM HotSpot klasės metaduomenų (metaerdvės) užimtos atminties paskirstymo ir grąžinimo operacijas. Elastic Metaspace naudojimas sumažina atminties fragmentaciją, sumažina klasės įkėlimo išlaidas, taip pat turi teigiamą poveikį ilgai veikiančių serverio programų veikimui dėl greitesnio nenaudojamų klasės metaduomenų užimtos atminties grąžinimo į operacinę sistemą. Norint pasirinkti atminties atleidimo režimą iškrovus klases, siūloma parinktis „-XX:MetaspaceReclaimPolicy=(balanced|agressive|none)“.
  • Pridėtas JDK prievadas, skirtas Windows sistemoms, veikiančioms aparatinėje įrangoje su procesoriais, pagrįstais AArch64 architektūra.
  • Buvo pasiūlyta trečioji „Foreign-Memory Access“ API peržiūra, leidžianti „Java“ programoms saugiai ir efektyviai pasiekti atminties sritis už „Java“ krūvos ribų, manipuliuojant naujomis „MemorySegment“, „MemoryAddress“ ir „MemoryLayout“ abstrakcijomis.
  • Įdiegta eksperimentinė „Foreign Linker“ API, suteikianti prieigą iš „Java“ prie vietinio kodo. Kartu su „Foreign-Memory“ API, naujoji programavimo sąsaja leidžia daug lengviau sukurti įprastų bendrinamų bibliotekų paketus.
  • Pridėta „jpackage“ programa, leidžianti kurti paketus savarankiškoms „Java“ programoms. Priemonė yra pagrįsta JavaFX javapackage ir leidžia kurti paketus, kurių formatai būdingi įvairioms platformoms (msi ir exe, skirta Windows, pkg ir dmg, skirta macOS, deb ir rpm, skirta Linux). Į paketus įtrauktos visos reikalingos priklausomybės.
  • Griežta visų JDK vidinių dalių inkapsuliacija įgalinta pagal numatytuosius nustatymus, išskyrus svarbias API, pvz., sun.misc.Unsafe. Parinkties „--nelegal-access“ reikšmė dabar pagal numatytuosius nustatymus nustatyta į „neleisti“, o ne „leisti“, o tai blokuos bandymus iš kodo pasiekti daugumą vidinių klasių, metodų ir laukų. Norėdami apeiti apribojimą, naudokite parinktį „-illegal-access=permit“.
  • Stabilizuotas modelio atitikimo įgyvendinimas operatoriuje „instanceof“, kuris leidžia iš karto apibrėžti vietinį kintamąjį, nurodantį patikrintą reikšmę. Pavyzdžiui, galite iš karto parašyti „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“ aiškiai neapibrėždami „String s = (String) obj“. Buvo: if (obj instanceof Group) { Group group = (Group) obj; var įrašai = group.getEntries(); } Dabar galite apsieiti neapibrėždami „Grupės grupė = (Grupė) obj“: if (grupės grupės obj egzempliorius) { var įrašai = group.getEntries(); }
  • Raktinio žodžio „įrašymas“ įgyvendinimas buvo stabilizuotas, suteikiant kompaktišką klasių apibrėžimų formą, kuri pašalina poreikį aiškiai apibrėžti įvairius žemo lygio metodus, tokius kaip equals(), hashCode() ir toString() tais atvejais, kai saugomi duomenys. tik laukuose.su kuriais nesikeičia. Kai klasė naudoja standartinius lygių(), hashCode() ir toString() metodų įgyvendinimus, ji gali apsieiti be aiškaus jų apibrėžimo: viešas įrašas BankTransaction(LocalDate data, dviguba suma, eilutės aprašymas) {}

    Ši deklaracija, be konstruktoriaus ir geterio metodų, automatiškai pridės ir lygių(), hashCode() ir toString() metodų įgyvendinimus.

  • Antrasis projektas siūlomas užantspauduotoms klasėms ir sąsajoms, kurių negali naudoti kitos klasės ir sąsajos, kad būtų galima paveldėti, išplėsti ar nepaisyti diegimų. Užantspauduotos klasės taip pat yra labiau deklaratyvus būdas apriboti superklasės naudojimą nei prieigos modifikatoriai, pagrįsti aiškiais poklasių, kuriuos leidžiama išplėsti, sąrašu. paketas com.example.geometry; viešai užantspauduota klasė leidžia forma com.example.polar.Circle, com.example.quad.Stačiakampis, com.example.quad.simple.Square {…}

Šaltinis: opennet.ru

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