Ohjelmointi

JDK 15: Java 15: n uudet ominaisuudet

Java Development Kit 15, Oraclen Java SE: n (Standard Edition) seuraavan version toteutus, tulee saataville tuotantojulkaisuna tänään, 15. syyskuuta 2020. JDK 15: n kohokohtia ovat tekstilohkot, piilotetut luokat, vieraan muistin käyttöliittymä, Z Garbage Collector ja esikatselut suljetuista luokista, kuvion sovitus ja tietueet.

JDK 15 on vain lyhytaikainen julkaisu, jota Oracle Premier -tuki tukee vain kuuden kuukauden ajan, kunnes JDK 16 saapuu ensi maaliskuussa. JDK 17, seuraava pitkäaikaisen tuen julkaisu, jota Oracle tukee kahdeksan vuoden ajan, on määrä saapua vuoden kuluttua Oraclen kuuden kuukauden Java SE -versioiden julkaisutapahtuman mukaisesti.

Kehittäjät voivat nyt tarkastella JDK 15: tä saadakseen käsityksen siitä, mitä JDK 17: ssä tapahtuu, kertoi Oraclen Java Platform Groupin johtaja Georges Saab. Nykyinen LTS-julkaisu on JDK 11, joka saapui syyskuussa 2018. LTS-julkaisut saapuvat kolmen vuoden välein. JDK 15 seuraa JDK 14: tä, joka julkaistiin 17. maaliskuuta 2020.

OpenJDK 15: n uudet ominaisuudet ja muutokset:

  • Toinen vierasmuistipääsy-sovellusliittymän inkubaattori, joka antaisi Java-ohjelmille turvallisen ja tehokkaan pääsyn vieraaseen muistiin Java-kasan ulkopuolella. Sovellusliittymän tulisi pystyä toimimaan erilaisilla vierailla muisteilla, kuten alkuperäisellä, pysyvällä ja hallitulla kasalla. Monet Java-ohjelmat käyttävät ulkomaista muistia, kuten Ignite ja MapDB. Sovellusliittymä auttaisi välttämään roskien keräykseen liittyviä kustannuksia ja arvaamattomuutta, jakamaan muistia prosessien välillä sekä sarjottamaan ja poistamaan muistin sisällön kartoittamalla tiedostot muistiin. Java-sovellusliittymä ei tällä hetkellä tarjoa tyydyttävää ratkaisua vieraan muistin käyttämiseen. Uuden ehdotuksen myötä API: n ei kuitenkaan pitäisi olla mahdollista heikentää JVM: n turvallisuutta. Tämä ominaisuus käy läpi aikaisemman inkubaattorivaiheen JDK 14: ssä, ja JDK 15 tarjoaa parannuksia.
  • Esikatselu suljetuista luokista. Liitäntöjen ohella suljetut luokat rajoittavat sitä, mitkä muut luokat tai rajapinnat voivat laajentaa tai toteuttaa niitä. Tämän ominaisuuden tavoitteisiin kuuluu luokan tai käyttöliittymän kirjoittajan salliminen hallita koodi, joka on vastuussa sen toteuttamisesta, tarjota selkeämpi tapa kuin pääsymodifikaattorit supistaa yliluokan käyttöä ja tukea tulevia ohjeita mallien sovittamisessa tukemalla tyhjentävää tietoa mallien analysointi.
  • Lähdekoodin poistaminen ja rakennustuki Solaris / SPARC-, Solaris / x64- ja Linux / SPARC-portteille, jotka poistettiin käytöstä poistona JDK 14: ssä tarkoituksena poistaa ne tulevassa julkaisussa. Monet kehittämishankkeet ja -ominaisuudet, kuten Valhalla, Loom ja Panama, edellyttävät merkittäviä muutoksia CPU-arkkitehtuuriin ja käyttöjärjestelmäkohtaiseen koodiin. Solaris- ja SPARC-porttien tuen pudottaminen antaa OpenJDK-yhteisölle avustajien mahdollisuuden nopeuttaa uusien ominaisuuksien kehittämistä, jotka vievät alustan eteenpäin. Sekä Solaris että SPARC on korvattu viime vuosina Linux-käyttöjärjestelmän ja Intel-prosessoreilla.
  • Tietueet, jotka ovat luokkia, jotka toimivat muuttumattomien tietojen läpinäkyvinä kantajina, sisällytettäisiin JDK 15: n toiseen esikatseluversioon sen jälkeen, kun ne on debytoitu varhaisena esikatseluna JDK 14: ssä. Suunnitelman tavoitteisiin kuuluu suunnitella olio-orientoitu rakenne, joka ilmaisee yksinkertainen arvojen yhdistäminen, joka auttaa ohjelmoijia keskittymään muuttumattomien tietojen mallintamiseen laajennettavan käyttäytymisen sijaan, automaattisesti toteuttamaan dataan perustuvia menetelmiä, kuten yhtäläiset ja arvioijat, ja säilyttämään pitkäaikaiset Java-periaatteet, kuten nimellinen kirjoittaminen ja siirron yhteensopivuus. Tietueet voidaan ajatella nimellisiksi tupliksi.
  • Edwards-käyrän digitaalisen allekirjoituksen algoritmiin (EdDSA) perustuvat kryptografiset allekirjoitukset. EdDSA on moderni elliptinen käyräjärjestelmä, jolla on etuja JDK: n olemassa oleviin allekirjoitusjärjestelmiin verrattuna. EdDSA otetaan käyttöön vain SunEC-palveluntarjoajalla. EdDSA on kysytty parantuneen turvallisuuden ja suorituskyvyn vuoksi muihin allekirjoitusjärjestelmiin verrattuna; sitä tuetaan jo salauskirjastoissa, kuten OpenSSL ja BoringSSL.
  • Vanhan DatagramSocket-sovellusliittymän uudistaminen korvaamallajava.net.datagram.Socket ja java.net.MulticastSocket Sovellusliittymät, joissa on yksinkertaisempia ja nykyaikaisempia toteutuksia, joita 1. on helppo debugata ja ylläpitää ja 2. ne toimivat virtuaalisilla ketjuilla, joita parhaillaan tutkitaan Project Loomissa. Uusi suunnitelma on jatkoa JDK Enhancement -ehdotukselle 353, jolla uudistettiin vanhat Socket-sovellusliittymät. Ohjelman nykyiset toteutukset java.net.datagram.Socket ja java.net.MulticastSocket juontaa juurensa JDK 1.0: een ja aikaan, jolloin IPv6 oli vielä kehitteillä. Näin ollen EU: n nykyinen täytäntöönpanoMulticastSocket yrittää sovittaa yhteen IPv4: n ja IPv6: n vaikeasti ylläpidettävillä tavoilla.
  • Poistaa puolueellisen lukituksen oletuksena ja poistaa kaikki siihen liittyvät komentorivivalinnat. Tavoitteena on selvittää tarvetta jatkaa ennakoitujen lukitusten kalliiden ylläpitää vanhojen synkronointien optimointia, jota HotSpot-virtuaalikoneessa käytetään rajoittamattoman lukituksen yleiskustannusten vähentämiseen. Vaikka jotkut Java-sovellukset saattavat nähdä regressio suorituskyvyssä, kun puolueellinen lukitus on poistettu käytöstä, puolueellisen lukituksen suorituskyvyn parannukset eivät yleensä ole yhtä ilmeisiä kuin aiemmin.
  • Toinen esikatselu mallin vastaavuudesta mallille esiintymä, edellisen JDK 14: n esikatselun jälkeen. Kuvion sovitus mahdollistaa ohjelman yleisen logiikan, lähinnä komponenttien ehdollisen poiminnan esineistä, helpommin ja ytimekkäämmästi. Kielet, kuten Haskell ja C #, ovat omaksuneet kuvion sovituksen sen lyhyyden ja turvallisuuden vuoksi.
  • Piilotetut luokat, ts. Luokat, joita muiden luokkien tavukoodi ei voi käyttää suoraan, on tarkoitettu kehyksille, jotka luovat luokkia ajon aikana ja jotka käyttävät niitä epäsuorasti heijastuksen avulla. Piilotettu luokka voidaan määritellä kulunvalvontapesän jäseneksi ja se voidaan purkaa muista luokista riippumatta. Ehdotus parantaisi kaikkien JVM: n kielten tehokkuutta mahdollistamalla vakio-sovellusliittymän määrittelemään piilotetut luokat, jotka eivät ole löydettävissä ja joiden elinkaari on rajoitettu. JDK: n sisällä ja ulkopuolella olevat kehykset pystyisivät luomaan dynaamisesti luokkia, jotka sen sijaan voisivat määrittää piilotetut luokat. Monet JVM: ään rakennetut kielet luottavat dynaamiseen luokkien luomiseen joustavuuden ja tehokkuuden takaamiseksi. Tämän ehdotuksen tavoitteisiin kuuluu: antaa kehysten sallia luokkien määritteleminen kehyksen toteuttamattomiksi yksityiskohdiksi, joten muut luokat eivät voi yhdistää niitä eikä löytää niitä pohdinnan avulla; tuki kulunvalvontapesän laajentamiseksi ei-löydettävissä olevilla luokilla ja tuki ei-löydettävien luokkien aggressiiviselle purkamiselle, joten kehyksillä on joustavuus määritellä niin monta kuin tarvitaan. Toinen tavoite on hylätä epätyypillinen sovellusliittymä,misc.Unsafe :: defineAnonymousClass, aikomuksena olla vanhentunut poistettavaksi tulevassa julkaisussa. Java-kieltä ei myöskään tule muuttaa tämän ehdotuksen seurauksena.
  • Z Garbage Collector (ZGC) valmistuu kokeellisesta ominaisuudesta tuotteeksi tämän ehdotuksen mukaisesti. Integroituna JDK 11: een, joka saapui syyskuussa 2018, ZGC on skaalautuva, matalaviiveinen roskien keräilijä. ZGC esiteltiin kokeellisena ominaisuutena, koska Java-kehittäjät päättivät, että tämän kokoinen ja monimutkainen ominaisuus tulisi tuoda sisään huolellisesti ja vähitellen. Siitä lähtien on lisätty useita parannuksia, jotka vaihtelevat samanaikaisesta luokan purkamisesta, käyttämättömän muistin sitomattomuudesta ja luokan tietojen jakamisen tuesta parantuneeseen NUMA-tietoisuuteen ja monisäikeisiin kasoihin. Myös kasan enimmäiskoko on kasvanut neljästä teratavusta 16 teratavuun. ZGC korjaa suorituskykyä koskevat ongelmat sovelluksissa, joihin liittyy valtavia määriä dataa, kuten koneoppiminen, joissa käyttäjät haluavat olla varmoja siitä, että tietojen käsittelyyn ei kohdistu arvaamattomuutta tai pitkiä taukoja jätteiden keräämisen takia. Tuettuja alustoja ovat Linux, Windows ja MacOS.
  • Sekä JDK 14: ssä että JDK 13: ssa esikatseltavien tekstilohkojen tarkoituksena on yksinkertaistaa Java-ohjelmien kirjoittamista helpottamalla useiden lähdekoodirivien ulottuvien merkkijonojen ilmaisua välttäen samalla pakosarjoja yleisissä tapauksissa. Tekstilohko on monirivinen merkkijono-kirjain, joka välttää useimpien pakosarjojen tarpeen, muotoilee merkkijonon automaattisesti ennustettavalla tavalla ja tarjoaa kehittäjälle hallinnan muodon haluttaessa. Tekstilohkoehdotuksen tavoitteena on parantaa Java-ohjelmien merkkijonojen luettavuutta, jotka merkitsevät muilla kuin Java-kielillä kirjoitettua koodia. Toinen tavoite on tukea siirtymistä merkkijono-literaaleista säätämällä, että mikä tahansa uusi rakenne voi ilmaista saman merkkijonosarjan kuin merkkijono-literaali, tulkita samat pakosarjat ja käsitellä samalla tavalla kuin merkkijono-literaali. OpenJDK-kehittäjät toivovat voivansa lisätä pakosarjoja hallitsemaan selkeää tyhjää tilaa ja uuden rivin hallintaa.
  • Shenandoahin pienen taukoaikaisen jätteenkerääjästä tulisi tuotanto-ominaisuus ja se siirtyisi pois kokeiluvaiheesta. Se oli integroitu JDK 12: een vuosi sitten.
  • Nashornin poisto, joka debytoi JDK 8: ssa maaliskuussa 2014, mutta sen jälkeen GraalVM: n kaltaiset tekniikat ovat vanhentaneet. OpenJDK 15 -ehdotus kehottaa poistamaan Nashorn-sovellusliittymät ja jjs-komentorivityökalun, jota käytetään Nashornin kutsumiseen.
  • RMI-aktivointimekanismin poistaminen käytöstä tulevaa poistoa varten. RMI-aktivointimekanismi on vanhentunut osa RMI: tä, joka on ollut valinnainen Java 8: n jälkeen. RMI-aktivointi asettaa jatkuvan ylläpitokuorman. Mitään muuta RMI: n osaa ei poisteta käytöstä.