Java SE 16 bertsioa

Sei hilabeteko garapenaren ondoren, Oracle-k Java SE 16 (Java Platform, Standard Edition 16) kaleratu zuen, OpenJDK proiektua erreferentziazko inplementazio gisa erabiltzen duena. Java SE 16-k atzerako bateragarritasuna mantentzen du Java plataformaren aurreko bertsioekin; aurretik idatzitako Java proiektu guztiek aldaketarik gabe funtzionatuko dute bertsio berriarekin abiarazten direnean. Java SE 16 (JDK, JRE eta Server JRE) instalatzeko prest dauden eraikuntzak Linux (x86_64, AArch64), Windows eta macOSerako prestatuta daude. OpenJDK proiektuak garatua, Java 16 erreferentziako inplementazioa guztiz irekia da GPLv2 lizentziapean, eta GNU ClassPath salbuespenek produktu komertzialekin lotura dinamikoa ahalbidetzen dute.

Java SE 16 laguntza-oharra orokor gisa sailkatuta dago eta eguneraketak jasotzen jarraituko du hurrengo bertsiora arte. Epe Luzeko Laguntza (LTS) adarrak Java SE 11 izan behar du, eta eguneraketak jasotzen jarraituko du 2026ra arte. Hurrengo LTS bertsioa 2021eko irailerako aurreikusita dago. Gogora dezagun Java 10 kaleratzetik hasita, proiektua garapen prozesu berri batera aldatu zela, bertsio berrien eraketarako ziklo laburragoa suposatuz. Gaur egun, funtzionalitate berriak etengabe eguneratutako adar nagusi batean garatzen dira, prest egindako aldaketak barne hartzen dituena eta bertatik sei hilean behin adarrak adarkatzen dira bertsio berriak egonkortzeko.

Bertsio berria prestatzeko, garapena Mercurial bertsioak kontrolatzeko sistematik Git eta GitHub garapen kolaboratiboko plataformara pasatu da. Migrazioak biltegiaren eragiketen errendimendua hobetzea, biltegiratze-eraginkortasuna areagotzea, proiektuaren historian zehar aldaketetarako sarbidea ematea espero da, kodea berrikusteko laguntza hobetzea eta APIak lan-fluxuak automatizatzeko gaitzea. Gainera, Git eta GitHub-en erabilerak proiektua erakargarriagoa egiten du Git-era ohituta dauden hasiberrientzat eta garatzaileentzat.

Java 16-en eginbide berriak hauek dira:

  • Jdk.incubator.vector modulu esperimentala gehitu da Vector APIaren inplementazioarekin, x86_64 eta AArch64 prozesadoreetan bektore-argibideen bidez egiten diren kalkulu bektorialetarako funtzioak eskaintzen dituena eta eragiketak balio anitzetan (SIMD) aldi berean aplikatzeko aukera ematen duena. HotSpot JIT konpiladoreak eragiketa eskalarren auto-vektorizaziorako eskaintzen dituen gaitasunen aldean, API berriak datu paraleloen prozesatzeko bektoreizazioa esplizituki kontrolatzeko aukera ematen du.
  • C++-n idatzitako JDK eta VM HotSpot kodea C++ 14 zehaztapenean sartutako ezaugarriak erabiltzeko baimena dute. Aurretik, C++98/03 estandarrak onartzen ziren.
  • Modu pasiboan funtzionatzen duen eta zabor bilketaren ondoriozko atzerapenak ahalik eta gehien murrizten dituen ZGC (Z Garbage Collector) hari pilak paraleloki prozesatzeko gaitasuna gehitu du aplikazioen hariak pausatu gabe. ZGCk etetea eskatzen duen lana baino ez du orain, etengabeko atzerapenak dituena, normalean ehundaka mikrosegundo batzuk baino gehiagokoak ez direnak.
  • SocketChannel, ServerSocketChannel eta java.nio.channels klaseetan Unix socketetarako (AF_UNIX) euskarria gehitu da.
  • Alpine Linux banaketarako ataka bat inplementatu da C liburutegi estandarra musl, edukiontzietarako, mikrozerbitzuetarako, hodeiko eta sistema txertatuetarako inguruneetan ezaguna dena. Ingurune horietan proposatutako atakak Java programak exekutatzeko aukera ematen du ohiko aplikazioak bezala. Horrez gain, jlink erabiliz, erabili gabeko modulu guztiak kendu ditzakezu eta aplikazioa exekutatzeko nahikoa den ingurune minimo bat sor dezakezu, eta horrek aplikazioaren berariazko irudi trinkoak sortzeko aukera ematen du.
  • Elastic Metaspace mekanismoa ezarri da, JVM HotSpot-en klase metadatuak (metaespazioa) okupatutako memoria esleitzeko eta itzultzeko eragiketak optimizatuz. Elastic Metaspace-ren erabilerak memoria zatikatzea murrizten du, klase-kargagailuen gainkostua murrizten du eta, gainera, efektu onuragarria du iraupen luzeko zerbitzari-aplikazioen errendimenduan, erabili gabeko klase metadatuek okupatutako memoria sistema eragilera itzultzen delako azkarrago. Klaseak deskargatu ondoren memoria askatzeko modua hautatzeko, "-XX:MetaspaceReclaimPolicy=(orekatua|agressiboa|ez ere)" aukera eskaintzen da.
  • JDK ataka bat gehitu da AArch64 arkitekturan oinarritutako prozesadoreekin exekutatzen diren Windows sistemetarako.
  • Foreign-Memory Access APIaren hirugarren aurrebista bat proposatu da, eta Java aplikazioek Java heap-etik kanpoko memoria-eskualdeetara segurtasunez eta modu eraginkorrean sartzeko aukera izan dezaten, MemorySegment, MemoryAddress eta MemoryLayout abstrakzio berriak manipulatuz.
  • Foreign Linker API esperimental bat ezarri da, Javatik jatorrizko koderako sarbidea eskaintzen duena. Foreign-Memory APIarekin batera, programazio-interfaze berriak askoz errazten du bilgarriak sortzea ohiko liburutegi partekatuen gainean.
  • jpackage utilitatea gehitu da, Java aplikazio autonomoetarako paketeak sortzeko aukera ematen duena. Utilitatea JavaFX-ko javapackager-en oinarritzen da eta hainbat plataformatako jatorrizko formatuetan paketeak sortzeko aukera ematen du (msi eta exe Windowsentzat, pkg eta dmg macOSentzat, deb eta rpm Linuxentzat). Paketeek beharrezko mendekotasun guztiak biltzen dituzte.
  • JDK barneko guztien kapsulatze zorrotza lehenespenez gaituta dago, sun.misc.Unsafe bezalako API kritikoak izan ezik. "--illegal-access" aukeraren balioa "ukatu" gisa ezarri da "baimendu" beharrean, lehenespenez, eta horrek blokeatuko ditu barneko klase, metodo eta eremu gehienetara sartzeko kodetik saiakerak. Murrizketa saihesteko, erabili "-illegal-access=permit" aukera.
  • Egonkortu egin da "instanceof" operadorearen eredua bat etortzearen ezarpena, eta horrek aukera ematen du berehala definitzeko tokiko aldagai bat egiaztatutako balioari erreferentzia egiteko. Adibidez, berehala idatz dezakezu "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" esplizituki definitu gabe "String s = (String) obj". Was: if (obj instanceof Group) { Group group = (Group) obj; var sarrerak = group.getEntries(); } Orain "Group group = (Group) obj" definitu gabe egin dezakezu: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • "Erregistroa" gako-hitza inplementatzea egonkortu da, klaseen definizioetarako forma trinkoa eskainiz, maila baxuko hainbat metodo esplizituki definitzeko beharra ezabatzen duena, hala nola, equals(), hashCode() eta toString() datuak gordetzen diren kasuetan. soroetan bakarrik.ekin ez da aldatzen. Klase batek equals(), hashCode() eta toString() metodoen inplementazio estandarrak erabiltzen dituenean, haien definizio esplizitua gabe egin dezake: erregistro publikoa BankTransaction(LocalDate data, bikoitza zenbatekoa, String deskribapena) {}

    Adierazpen honek automatikoki gehituko ditu equals(), hashCode() eta toString() metodoen inplementazioak, eraikitzaile eta getter metodoez gain.

  • Bigarren zirriborro bat proposatzen da beste klase eta interfaze batzuek inplementazioak heredatzeko, hedatzeko edo gainidazteko erabili ezin dituzten klase eta interfaze itxietarako. Klase zigilatuek superklase baten erabilera mugatzeko modu deklaratiboagoa ere eskaintzen dute sarbide-aldagailuak baino, luzapenerako baimendutako azpiklaseak esplizituki zerrendatzean oinarrituta. paketea com.example.geometry; klase publiko itxia Forma baimenak com.example.polar.Circle, com.example.quad.Laukizuzena, com.example.quad.simple.Square {…}

Iturria: opennet.ru

Gehitu iruzkin berria