Java SE 16 -julkaisu

Kuuden kuukauden kehitystyön jälkeen Oracle on julkaissut Java SE 16 -alustan (Java Platform, Standard Edition 16), joka käyttää avoimen lähdekoodin OpenJDK-projektia referenssitoteutuksenaan. Java SE 16 säilyttää taaksepäin yhteensopivuuden Java-alustan aiempien versioiden kanssa; kaikki aiemmin kirjoitetut Java-projektit toimivat muuttumattomina uudessa versiossa. Java SE 16:n asennusvalmiit koontiversiot (JDK, JRE ja Server JRE) on valmisteltu seuraaville toimijoille: Linux (x86_64, AArch64), Windows и macOSOpenJDK-projektin kehittämä Java 16 -referenssiesite on täysin avoimen lähdekoodin GPLv2-lisenssillä ja sisältää GNU ClassPath -poikkeuksen, joka sallii dynaamisen linkityksen kaupallisiin tuotteisiin.

Java SE 16 on luokiteltu yleiseksi tukijulkaisuksi, ja se saa päivityksiä seuraavaan julkaisuun saakka. Long Term Support (LTS) -haara pitäisi olla Java SE 11, joka saa jatkossakin päivityksiä vuoteen 2026 asti. Seuraava LTS-julkaisu on suunniteltu syyskuulle 2021. Muistutetaan, että Java 10:n julkaisusta lähtien projekti siirtyi uuteen kehitysprosessiin, mikä merkitsi lyhyempää sykliä uusien julkaisujen muodostukselle. Uusi toiminnallisuus on nyt kehitetty yhteen jatkuvasti päivitettävään päähaaraan, joka sisältää valmiita muutoksia ja josta haarat haarautuvat puolen vuoden välein uusien julkaisujen vakauttamiseksi.

Uutta julkaisua valmisteltaessa kehitys on siirtynyt Mercurial-versionhallintajärjestelmästä Gitiin ja GitHub-yhteistyökehitysalustaan. Siirron odotetaan parantavan arkiston toimintojen suorituskykyä, lisäävän tallennustehokkuutta, mahdollistavan pääsyn muutoksiin koko projektin historian aikana, parantavan koodintarkistuksen tukea ja mahdollistavan API:iden automatisoinnin työnkulkuja. Lisäksi Gitin ja GitHubin käyttö tekee projektista houkuttelevamman aloittelijoille ja Gitiin tottuneille kehittäjille.

Java 16:n uusia ominaisuuksia ovat:

  • Lisätty kokeellinen moduuli jdk.incubator.vector, jossa on toteutettu Vector API, joka tarjoaa toimintoja vektorilaskelmille, jotka suoritetaan vektoriohjeiden avulla x86_64- ja AArch64-prosessoreissa ja mahdollistaa toimintojen soveltamisen samanaikaisesti useisiin arvoihin (SIMD). Toisin kuin HotSpot JIT -kääntäjän tarjoamat ominaisuudet skalaarioperaatioiden automaattiseen vektorointiin, uusi API antaa sinun ohjata suoraan vektorointia rinnakkaista tietojenkäsittelyä varten.
  • C++-kielellä kirjoitettu JDK ja VM HotSpot -koodi saavat käyttää C++14-spesifikaatiossa esiteltyjä ominaisuuksia. Aikaisemmin C++98/03-standardit olivat sallittuja.
  • ZGC (Z Garbage Collector), joka toimii passiivisessa tilassa ja minimoi roskien keräämisestä aiheutuvat viiveet mahdollisimman paljon, on lisännyt mahdollisuuden käsitellä säikeitä rinnakkain keskeyttämättä sovellussäikeitä. ZGC:ssä on nyt vain jousitusta vaativia töitä, joissa on jatkuvat viiveet, jotka eivät yleensä ylitä muutamaa sataa mikrosekuntia.
  • Lisätty tuki Unix-socketeille (AF_UNIX) SocketChannel-, ServerSocketChannel- ja java.nio.channels-luokille.
  • Toteutettu portti kohteelle LinuxAlpine-jakelu ja sen C-kielinen standardikirjasto musl on suosittu kontti-, mikropalvelu-, pilvi- ja sulautettujen ympäristöjen sovelluksissa. Ehdotettu portti mahdollistaa Java-ohjelmien suorittamisen tavallisina sovelluksina tällaisissa ympäristöissä. Lisäksi jlinkin avulla voit poistaa kaikki käyttämättömät moduulit ja luoda sovelluksen suorittamiseen riittävän minimaalisen ympäristön, mikä mahdollistaa tiettyihin sovelluksiin liittyvien kompaktien levykuvien luomisen.
  • Elastic Metaspace -mekanismi on toteutettu, mikä optimoi JVM HotSpotin luokan metatietojen (metaspace) varaaman muistin varaamisen ja palauttamisen. Elastic Metaspacen käyttö vähentää muistin pirstoutumista, vähentää luokkalatauksen ylimääräisiä kustannuksia ja sillä on myös myönteinen vaikutus pitkään käynnissä olevien palvelinsovellusten suorituskykyyn, koska käyttämättömän luokan metatietojen varaama muisti palautuu nopeammin käyttöjärjestelmään. Muistin vapautustilan valitsemiseksi luokkien purkamisen jälkeen tarjotaan vaihtoehto "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)".
  • Lisätty JDK-portti järjestelmille Windows, joka toimii laitteistolla, jossa on AArch64-arkkitehtuuriin perustuvat prosessorit.
  • Ulkomaisen muistin käyttöliittymän kolmatta esikatselua on ehdotettu, jonka avulla Java-sovellukset voivat käyttää turvallisesti ja tehokkaasti Java-keon ulkopuolisia muistialueita käsittelemällä uusia MemorySegment-, MemoryAddress- ja MemoryLayout-abstraktioita.
  • Kokeellinen Foreign Linker API on otettu käyttöön, joka tarjoaa pääsyn Javasta alkuperäiseen koodiin. Yhdessä Foreign-Memory API:n kanssa uusi ohjelmointirajapinta helpottaa kääreiden luomista perinteisten jaettujen kirjastojen päälle.
  • jpackage-apuohjelma on lisätty, jonka avulla voit luoda paketteja itsenäisille Java-sovelluksille. Apuohjelma perustuu JavaFX:n javapackager-apuohjelmaan ja sen avulla voit luoda paketteja eri alustoille natiiveissa muodoissa (msi ja exe). Windows, paketti ja vahinko macOS, deb ja rpm funktioille Linux). Paketit sisältävät kaikki tarvittavat riippuvuudet.
  • Kaikkien JDK:n sisäisten osien tiukka kapselointi on oletuksena käytössä, lukuun ottamatta kriittisiä sovellusliittymiä, kuten sun.misc.Unsafe. Valinnan "--illegal-access" arvoksi on nyt asetettu oletusarvoisesti "deny" "permit" sijaan, mikä estää koodin yritykset päästä useimpiin sisäisiin luokkiin, menetelmiin ja kenttiin. Voit ohittaa rajoituksen käyttämällä "-illegal-access=permit" -vaihtoehtoa.
  • Mallin sovituksen toteutus operaattorissa "instanceof" on vakiintunut, mikä mahdollistaa paikallisen muuttujan määrittämisen välittömästi tarkastettuun arvoon viittaamaan. Voit esimerkiksi kirjoittaa heti "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" määrittelemättä nimenomaisesti "String s = (String) obj". Oli: if (Obj instanceof Group) { Ryhmäryhmä = (Ryhmä) obj; var merkinnät = group.getEntries(); } Nyt voit tehdä määrittämättä "Group group = (Group) obj": if (Obj instanceof Group group) { var entries = group.getEntries(); }
  • "Record"-avainsanan toteutus on vakiintunut, mikä tarjoaa kompaktin muodon luokkamäärittelyille, joka eliminoi tarpeen määrittää eksplisiittisesti erilaisia ​​matalan tason menetelmiä, kuten equals(), hashCode() ja toString() tapauksissa, joissa tietoja tallennetaan. vain aloilla, joilla se ei muutu. Kun luokka käyttää menetelmien equals(), hashCode() ja toString() vakiototeutuksia, se voi pärjätä ilman niiden nimenomaista määritelmää: julkinen tietue BankTransaction(LocalDate päivämäärä, tuplasumma, merkkijonon kuvaus) {}

    Tämä ilmoitus lisää automaattisesti menetelmien equals(), hashCode() ja toString() toteutukset konstruktori- ja getter-menetelmien lisäksi.

  • Toista luonnosta ehdotetaan suljetuille luokille ja rajapinnoille, joita muut luokat ja rajapinnat eivät voi käyttää toteutusten perimiseksi, laajentamiseksi tai ohittamiseksi. Sinetöityt luokat tarjoavat myös deklaratiivisemman tavan rajoittaa superluokan käyttöä kuin pääsyn muokkaajat, jotka perustuvat laajennettavaksi sallittujen alaluokkien nimenomaiseen luetteloon. paketti com.example.geometry; julkinen suljettu luokka Muoto sallii com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.yksinkertainen.Neliö {…}

Lähde: opennet.ru

Osta luotettava isännöinti sivustoille, joissa on DDoS-suojaus, VPS VDS -palvelimet 🔥 Osta luotettavaa verkkosivustojen hostingia DDoS-suojauksella, VPS VDS -palvelimilla | ProHoster