PÄc seÅ”u mÄneÅ”u izstrÄdes Oracle atbrÄ«vots platforma Java SE 15 (Java platforma, Standard Edition 15), atvÄrtÄ pirmkoda OpenJDK projekts tiek izmantots kÄ atsauces ievieÅ”ana. Java SE 15 saglabÄ atpakaļejoÅ”u saderÄ«bu ar iepriekÅ”Äjiem Java platformas laidieniem; visi iepriekÅ” rakstÄ«tie Java projekti darbosies bez izmaiÅÄm, kad tie tiks palaisti jaunajÄ versijÄ. InstalÄÅ”anai gatavas Java SE 15 versijas (JDK, JRE un Server JRE) sagatavots operÄtÄjsistÄmai Linux (x86_64), Windows un macOS. OpenJDK projekta izstrÄdÄtÄ atsauces realizÄcija Java 15 ir pilnÄ«bÄ atvÄrts avots saskaÅÄ ar GPLv2 licenci, ar GNU ClassPath izÅÄmumiem, kas ļauj dinamiski izveidot savienojumu ar komerciÄliem produktiem.
Java SE 15 ir klasificÄts kÄ vispÄrÄjs atbalsta laidiens, un tas turpinÄs saÅemt atjauninÄjumus lÄ«dz nÄkamajam laidienam. IlgtermiÅa atbalsta (LTS) filiÄlei vajadzÄtu bÅ«t Java SE 11, kas turpinÄs saÅemt atjauninÄjumus lÄ«dz 2026. gadam. IepriekÅ”ÄjÄ Java 8 LTS filiÄle tiks atbalstÄ«ta lÄ«dz 2020. gada decembrim. NÄkamais LTS izlaidums ir paredzÄts 2021. gada septembrÄ«. AtgÄdinÄm, ka, sÄkot ar Java 10 izlaiÅ”anu, projekts pÄrgÄja uz jaunu izstrÄdes procesu, kas nozÄ«mÄ Ä«sÄku ciklu jaunu laidienu veidoÅ”anai. Jauna funkcionalitÄte tagad ir izstrÄdÄta vienÄ pastÄvÄ«gi atjauninÄtajÄ galvenajÄ filiÄlÄ, kas ietver gatavas izmaiÅas un no kuras filiÄles tiek atzarotas ik pÄc seÅ”iem mÄneÅ”iem, lai stabilizÄtu jaunus izdevumus.
IebÅ«vÄts atbalsts EdDSA (Edwards-Curve Digital Signature Algorithm) digitÄlÄ paraksta izveides algoritmam RFC 8032). PiedÄvÄtÄ EdDSA implementÄcija nav atkarÄ«ga no aparatÅ«ras platformÄm, ir aizsargÄta pret sÄnu kanÄlu uzbrukumiem (tiek nodroÅ”inÄts visu aprÄÄ·inu konstants laiks) un ir ÄtrÄka veiktspÄjÄ nekÄ esoÅ”Ä ECDSA implementÄcija, kas rakstÄ«ta C valodÄ, ar tÄdu paÅ”u aizsardzÄ«bas lÄ«meni. PiemÄram, EdDSA, kas izmanto eliptisku lÄ«kni ar 126 bitu atslÄgu, uzrÄda lÄ«dzÄ«gu veiktspÄju kÄ ECDSA ar eliptisku lÄ«kni secp256r1 un 128 bitu atslÄgu.
Pievienots eksperimentÄls atbalsts slÄgtÄm klasÄm un saskarnÄm, kuras nevar izmantot citas klases un saskarnes, lai mantotu, paplaÅ”inÄtu vai ignorÄtu ievieÅ”anu. AizzÄ«mogotÄs klases nodroÅ”ina arÄ« deklaratÄ«vÄku veidu, kÄ ierobežot virsklases izmantoÅ”anu nekÄ piekļuves modifikatori, pamatojoties uz nepÄrprotamu paplaÅ”inÄÅ”anai atļauto apakÅ”klaÅ”u uzskaitÄ«jumu.
pakotne com.example.geometry;
publiska aizzīmogota klase Forma
atļauj com.example.polar.Circle,
com.example.quad.Taisnstūris,
com.example.quad.vienkÄrÅ”s.KvadrÄts {ā¦}
Pievienots atbalsts slÄptÄm klasÄm, kuras nevar tieÅ”i izmantot citu klaÅ”u baitkods. SlÄpto klaÅ”u galvenais mÄrÄ·is ir izmantot ietvaros, kas izpildlaikÄ dinamiski Ä£enerÄ klases un izmanto tÄs netieÅ”i, izmantojot pÄrdomas. Å ÄdÄm klasÄm parasti ir ierobežots dzÄ«ves cikls, tÄpÄc to uzturÄÅ”ana piekļuvei no statiski Ä£enerÄtÄm klasÄm nav attaisnojama un tikai palielinÄs atmiÅas patÄriÅu. SlÄptÄs klases arÄ« novÄrÅ” nepiecieÅ”amÄ«bu pÄc nestandarta API sun.misc.Unsafe::defineAnonymousClass, kas ir paredzÄts noÅemt nÄkotnÄ.
ZGC (Z Garbage Collector) atkritumu savÄcÄjs ir stabilizÄts un atzÄ«ts par gatavu plaÅ”ai lietoÅ”anai. ZGC darbojas pasÄ«vÄ režīmÄ, maksimÄli samazina atkritumu savÄkÅ”anas radÄ«to latentumu (aiztures laiks, lietojot ZGC, nepÄrsniedz 10 ms.) un var strÄdÄt gan ar mazÄm, gan milzÄ«gÄm kaudzÄm, kuru izmÄrs svÄrstÄs no vairÄkiem simtiem megabaitu lÄ«dz daudziem terabaitiem.
StabilizÄts un atrasts gatavs vispÄrÄjai lietoÅ”anai
atkritumu savÄcÄjs Shenandoah, strÄdÄjot ar minimÄlÄm pauzÄm (Low-Pause-Time Trabage Collector). Shenandoah izstrÄdÄja Red Hat, un tas ir ievÄrojams ar algoritma izmantoÅ”anu, kas samazina apstÄÅ”anÄs laiku atkritumu savÄkÅ”anas laikÄ, palaižot tÄ«rÄ«Å”anu paralÄli Java lietojumprogrammu izpildei. Atkritumu savÄcÄja ieviesto kavÄjumu lielums ir prognozÄjams un nav atkarÄ«gs no kaudzes lieluma, t.i. 200 MB un 200 GB kaudzÄm aizkaves bÅ«s identiskas (nenÄc ÄrÄ ilgÄk par 50 ms un parasti 10 ms laikÄ);
Atbalsts ir stabilizÄjies un ieviests valodÄ teksta bloki - jauna virkÅu literÄļu forma, kas ļauj avota kodÄ iekļaut vairÄku rindiÅu teksta datus, neizmantojot rakstzÄ«mju atkÄpÅ”anos un saglabÄjot sÄkotnÄjo teksta formatÄjumu blokÄ. Bloks ir ierÄmÄts ar trim dubultpÄdiÅÄm.
PiemÄram, koda vietÄ
Virkne html = " Ā»+
"\n\t" + " Ā»+
"\n\t\t" + " \"Java 1 ir klÄt!\" Ā»+
"\n\t" + " Ā»+
"\n" + " ";
jÅ«s varat norÄdÄ«t:
Virkne html = """
Ā»Java 1\
ir Ŕeit!
""";
PÄrveidots MantotÄ DatagramSocket API. VecÄs java.net.DatagramSocket un java.net.MulticastSocket implementÄcijas ir aizstÄtas ar modernu implementÄciju, kuru ir vieglÄk atkļūdot un uzturÄt, kÄ arÄ« ir savietojams ar projekta ietvaros izstrÄdÄtajÄm virtuÄlajÄm straumÄm Stelles. IespÄjamas nesaderÄ«bas ar esoÅ”o kodu gadÄ«jumÄ vecÄ ievieÅ”ana nav noÅemta, un to var iespÄjot, izmantojot opciju jdk.net.usePlainDatagramSocketImpl.
PiedÄvÄta otrÄ eksperimentÄlÄ ievieÅ”ana modeļu saskaÅoÅ”ana operatorÄ āinstanceofā, kas ļauj nekavÄjoties definÄt vietÄjo mainÄ«go, lai piekļūtu pÄrbaudÄ«tajai vÄrtÄ«bai. PiemÄram, varat uzreiz uzrakstÄ«t āif (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}ā, nepÄrprotami nedefinÄjot āString s = (String) objā.
Bija:
if (Obj instanceof Group) {
Grupas grupa = (Grupa)obj;
var ieraksti = group.getEntries();
}
Tagad jÅ«s varat iztikt bez definÄ«cijas āGrupa grupa = (Grupa) objā:
if (Obj instanceof Group group) {
var ieraksti = group.getEntries();
}
Ieteikts atslÄgvÄrda otrÄ eksperimentÄlÄ ievieÅ”anaieraksts", kas nodroÅ”ina kompaktu formu klaÅ”u definÄÅ”anai, ļaujot izvairÄ«ties no dažÄdu zema lÄ«meÅa metožu, piemÄram, equals(), hashCode() un toString() nepÄrprotamas definÄÅ”anas gadÄ«jumos, kad dati tiek glabÄti tikai laukos, kuru uzvedÄ«ba nemainÄs. Ja klase izmanto standarta vienÄds(), hashCode() un toString() metožu implementÄcijas, tÄ var iztikt bez to skaidras definÄ«cijas:
publisks ieraksts BankTransaction (vietÄjais datums,
dubultÄ summa
Virknes apraksts) {}
Å Ä« deklarÄcija papildus konstruktora un ieguvÄja metodÄm automÄtiski pievienos arÄ« vienÄds(), hashCode() un toString() metožu implementÄcijas.
IerosinÄts otrs sveÅ”Äs atmiÅas piekļuves API priekÅ”skatÄ«jums, kas ļauj Java lietojumprogrammÄm droÅ”i un efektÄ«vi piekļūt atmiÅas reÄ£ioniem Ärpus Java kaudzes, manipulÄjot ar jaunajÄm MemorySegment, MemoryAddress un MemoryLayout abstrakcijÄm.
AtspÄjots un novecojusi neobjektÄ«vÄs bloÄ·ÄÅ”anas optimizÄcijas paÅÄmienu, ko izmanto HotSpot JVM, lai samazinÄtu bloÄ·ÄÅ”anas izmaksas. Å is paÅÄmiens ir zaudÄjis savu nozÄ«mi sistÄmÄs ar atomu instrukcijÄm, ko nodroÅ”ina mÅ«sdienu CPU, un tÄ sarežģītÄ«bas dÄļ ir pÄrÄk darbietilpÄ«ga, lai to uzturÄtu.
PaziÅots novecojis mehÄnisms RMI aktivizÄÅ”ana, kas tiks noÅemts nÄkamajÄ laidienÄ. Tiek atzÄ«mÄts, ka RMI aktivizÄÅ”ana ir novecojusi, iekļauta Java 8 opciju kategorijÄ un gandrÄ«z nekad netiek izmantota mÅ«sdienu praksÄ.
IzdzÄsts JavaScript dzinÄjs Nashorna, kas tika novecojusi Java SE 11.
NoÅemts porti Solaris OS un SPARC procesoriem (Solaris/SPARC, Solaris/x64 un Linux/SPARC). Å o portu noÅemÅ”ana ļaus kopienai paÄtrinÄt jaunu OpenJDK lÄ«dzekļu izstrÄdi, netÄrÄjot laiku, uzturot Solaris un SPARC specifiskos lÄ«dzekļus.