Programiranje

JDK 15: Nove funkcije v Javi 15

Java Development Kit 15, Oraclova izvedba naslednje različice Java SE (Standard Edition), je na voljo kot produkcijska izdaja danes, 15. septembra 2020. Značilnosti JDK 15 vključujejo besedilne bloke, skrite razrede, API za dostop do tujega pomnilnika, Z Garbage Collector in predogledi zapečatenih razredov, ujemanje vzorcev in zapisi.

JDK 15 je le kratkoročna izdaja, ki jo bomo s podporo za Oracle Premier podpirali šest mesecev, dokler JDK 16 ne pride marca prihodnje leto. JDK 17, naslednja izdaja za dolgoročno podporo, ki jo bo Oracle podpiral osem let, naj bi prišla čez eno leto, kot pravi Oraclova šestmesečna kadenca za različice Java SE.

Razvijalci lahko zdaj pogledajo JDK 15, da dobijo idejo o tem, kaj bo v JDK 17, je dejal Georges Saab, predsednik Oraclove skupine Java Platform. Trenutna izdaja LTS je JDK 11, ki je prispela septembra 2018. Izdaje LTS prihajajo vsaka tri leta. JDK 15 sledi JDK 14, ki je izšel 17. marca 2020.

Nove funkcije in spremembe v OpenJDK 15:

  • Drugi inkubator API-ja za dostop do tujega pomnilnika, ki bi programom Java omogočil varen in učinkovit dostop do tujega pomnilnika zunaj kopice Java. API mora biti sposoben delovati na različnih vrstah tujega pomnilnika, na primer na izvornem, trajnem in upravljanem kupu. Številni programi Java dostopajo do tujega pomnilnika, kot sta Ignite in MapDB. API bi se izognil stroškom in nepredvidljivosti, povezanim z zbiranjem smeti, delil pomnilnik med procesi ter seriral in deserializiral vsebino pomnilnika s preslikavo datotek v pomnilnik. Java API trenutno ne nudi zadovoljive rešitve za dostop do tujega pomnilnika. Toda z novim predlogom API ne bi smel ogroziti varnosti JVM. Ta zmogljivost gre skozi prejšnjo fazo inkubatorja v JDK 14, izboljšave pa so na voljo v JDK 15.
  • Predogled zapečatenih razredov. Zaprti razredi skupaj z vmesniki omejujejo, kateri drugi razredi ali vmesniki jih lahko razširijo ali izvedejo. Cilji te funkcije vključujejo omogočanje avtorju razreda ali vmesnika, da nadzoruje, katera koda je odgovorna za njegovo izvajanje, zagotavljanje bolj deklarativnega načina kot modifikatorji dostopa za omejevanje uporabe superrazreda in podpiranje prihodnjih navodil pri ujemanju vzorcev s podpiranjem izčrpnih analiza vzorcev.
  • Odstranitev izvorne kode in podpora za gradnjo vrat Solaris / SPARC, Solaris / x64 in Linux / SPARC, ki so bila zastarela za odstranitev v JDK 14 z namenom, da bi jih odstranili v prihodnji izdaji. Številni projekti in funkcije v razvoju, kot so Valhalla, Loom in Panama, zahtevajo pomembne spremembe v arhitekturi procesorja in kodi za operacijski sistem. Opustitev podpore za vrata Solaris in SPARC bo sodelavcem v skupnosti OpenJDK omogočila pospešen razvoj novih funkcij, ki bodo platformo pomaknile naprej. Tako Solaris kot SPARC sta v zadnjih letih nadomestila Linux OS in Intel procesorji.
  • Zapisi, ki so razredi, ki delujejo kot pregledni nosilci za nespremenljive podatke, bi bili vključeni v drugo različico predogleda v JDK 15, potem ko bi prvič nastopili kot predogled v JDK 14. Cilji načrta vključujejo oblikovanje objektno usmerjenega konstrukta, ki izraža preprosto združevanje vrednosti, ki pomaga programerjem, da se osredotočijo na modeliranje nespremenljivih podatkov namesto na razširljivo vedenje, samodejno izvajanje podatkovnih metod, kot so enaki in ocenjevalci, in ohranjanje dolgotrajnih načel Java, kot sta nominalno tipkanje in združljivost migracij. Za zapise lahko razmišljamo kot o imenskih koritnicah.
  • Kriptografski podpisi na podlagi algoritma digitalnega podpisa Edwards-Curve (EdDSA). EdDSA je sodobna shema eliptične krivulje s prednostmi pred obstoječimi shemami podpisov v JDK. EdDSA bo implementiran samo pri ponudniku SunEC. EdDSA je v povpraševanju zaradi izboljšane varnosti in zmogljivosti v primerjavi z drugimi shemami podpisovanja; že je podprt v kripto knjižnicah, kot sta OpenSSL in BoringSSL.
  • Ponovno izvajanje starejšega API-ja DatagramSocket z zamenjavo osnovnih izvedbjava.net.datagram.Socket in java.net.MulticastSocket API-ji s preprostejšimi in sodobnejšimi izvedbami, ki so 1. enostavni za odpravljanje napak in vzdrževanje ter 2. delo z navideznimi nitmi, ki jih trenutno raziskujemo v Project Loom. Novi načrt je nadaljevanje predloga za izboljšanje JDK 353, ki je znova uvedel stari API vtičnice. Trenutne izvedbe java.net.datagram.Socket in java.net.MulticastSocket segajo v JDK 1.0 in čas, ko je bil IPv6 še v fazi razvoja. Tako je trenutno izvajanjeMulticastSocket poskuša uskladiti IPv4 in IPv6 na načine, ki jih je težko vzdrževati.
  • Privzeto onemogočite pristransko zaklepanje in opustite vse povezane možnosti ukazne vrstice. Cilj je ugotoviti potrebo po nadaljnji podpori drage za vzdrževanje starejše sinhronizacijske optimizacije pristranskega zaklepanja, ki se uporablja v navideznem računalniku HotSpot za zmanjšanje obremenitev neoviranega zaklepanja. Čeprav lahko nekatere programe Java zaznajo regresijo v zmogljivosti z onemogočenim pristranskim zaklepanjem, so učinki pristranskega zaklepanja na splošno manj očitni kot nekoč.
  • Drugi predogled ujemanja vzorcev za instanceof, po prejšnjem predogledu v JDK 14. Ujemanje vzorcev omogoča enostavnejšo in jedrnato izražanje skupne logike v programu, predvsem pogojnega pridobivanja komponent iz predmetov. Jeziki, kot sta Haskell in C #, so sprejeli ujemanje vzorcev zaradi svoje kratkosti in varnosti.
  • Skriti razredi, torej razredi, ki jih z bajtno kodo drugih razredov ne more uporabljati neposredno, so namenjeni za uporabo ogrodjem, ki generirajo razrede med izvajanjem in jih uporabljajo posredno z refleksijo. Skriti razred je mogoče definirati kot člana gnezda za nadzor dostopa in ga je mogoče razložiti neodvisno od drugih razredov. Predlog bi izboljšal učinkovitost vseh jezikov na JVM, tako da bi omogočil standardnemu API-ju, da opredeli skrite razrede, ki jih ni mogoče odkriti in imajo omejen življenjski cikel. Okviri znotraj in zunaj JDK bi lahko dinamično generirali razrede, ki bi lahko namesto tega definirali skrite razrede. Številni jeziki, zgrajeni na JVM, se za prilagodljivost in učinkovitost zanašajo na dinamično generiranje razredov. Cilji tega predloga vključujejo: omogočanje okvirom, da razrede opredelijo kot neznatne izvedbene podrobnosti okvira, tako da jih drugi razredi ne morejo povezati niti odkriti z refleksijo; podpora za razširitev gnezda nadzora dostopa z razredi, ki jih ni mogoče odkriti; in podporo za agresivno razkladanje razredov, ki jih ni mogoče odkriti, zato imajo okviri fleksibilnost, da opredelijo toliko, kolikor je potrebno. Drugi cilj je opustitev nestandardnega API-ja,misc.Unsafe :: defineAnonymousClass, z namenom, da se v prihodnji izdaji opusti. Zaradi tega predloga se tudi jezik Java ne bo spremenil.
  • Zbiralnik smeti Z (ZGC) iz tega predloga diplomira iz poskusne funkcije na izdelek. ZGC je integriran v JDK 11, ki je prispel septembra 2018, prilagodljiv zbiralec smeti z nizko zakasnitvijo. ZGC je bil predstavljen kot eksperimentalna zmogljivost, ker so se razvijalci Jave odločili, da je treba značilnost te velikosti in zapletenosti vnašati previdno in postopoma. Od takrat so bile dodane številne izboljšave, od sočasnega razkladanja razredov, odstranjevanja neuporabljenega pomnilnika in podpore za skupno rabo podatkov razreda do izboljšane zavesti NUMA in predhodnega dotikanja večnitnega kupa. Prav tako se je povečala največja velikost kopice s štiri terabajtov na 16 terabajtov. ZGC obravnava pomisleke glede zmogljivosti v aplikacijah, ki vključujejo velike količine podatkov, na primer strojno učenje, kjer uporabniki želijo biti prepričani, da obdelava podatkov zaradi zbiranja smeti ne bo predmet nepredvidljivosti ali dolgih premorov. Podprte platforme vključujejo Linux, Windows in MacOS.
  • Besedilni bloki, predogledani tako v JDK 14 kot v JDK 13, naj bi poenostavili nalogo pisanja programov Java tako, da olajšajo izražanje nizov, ki obsegajo več vrstic izvorne kode, obenem pa se v običajnih primerih izognejo ubežnim zaporedjem. Besedilni blok je večvrstična dobesedna dobesedna črka, ki se izogne ​​potrebi po večini ubežnih zaporedij, samodejno oblikuje niz na predvidljiv način in razvijalcu po želji ponuja nadzor nad obliko. Cilj predloga besedilnih blokov je izboljšati berljivost nizov v programih Java, ki označujejo kodo, napisano v jezikih, ki niso Java. Drugi cilj je podpreti selitev iz nizovnih literal z določitvijo, da lahko kateri koli nov konstrukt izraža isti niz nizov kot nizovna literala, interpretira enaka ubežna zaporedja in se z njim manipulira na enak način kot nizovna literala. Razvijalci OpenJDK upajo, da bodo dodali ubežna zaporedja za upravljanje eksplicitnega presledka in nadzora nove vrstice.
  • Zbiralnik smeti Shenandoah z nizko pavzo bi postal proizvodna značilnost in se premaknil iz poskusne faze. Pred letom dni je bil vključen v JDK 12.
  • Odstranitev Nashorna, ki je bil prvič predstavljen v JDK 8 marca 2014, vendar so ga tehnologije, kot je GraalVM, postale zastarele. Predlog OpenJDK 15 zahteva odstranitev API-jev Nashorn in orodja ukazne vrstice jjs, ki se uporablja za priklic Nashorna.
  • Opustitev mehanizma za aktiviranje RMI za nadaljnjo odstranitev. Aktivirni mehanizem RMI je zastarel del RMI, ki je od Java 8 neobvezen. Noben drug del RMI ne bo opuščen.
$config[zx-auto] not found$config[zx-overlay] not found