Java SE 17 bertsioa

Sei hilabeteko garapenaren ondoren, Oracle-k Java SE 17 (Java Platform, Standard Edition 17) kaleratu zuen, kode irekiko OpenJDK proiektua erreferentziazko inplementazio gisa erabiltzen duena. Ezaugarri zaharkitu batzuk kentzea izan ezik, Java SE 17-k atzerako bateragarritasuna mantentzen du Java plataformaren aurreko bertsioekin - lehen idatzitako Java proiektu gehienek aldaketarik gabe funtzionatuko dute bertsio berriarekin exekutatzen direnean. Java SE 17 (JDK, JRE eta Server JRE) instalatzeko prest dauden eraikuntzak Linux (x86_64, AArch64), Windows (x86_64) eta macOS (x86_64, AArch64) prestatuta daude. OpenJDK proiektuak garatua, Java 17 erreferentziako inplementazioa guztiz irekia da GPLv2 lizentziapean, eta GNU ClassPath-en salbuespenek produktu komertzialekin lotura dinamikoa ahalbidetzen dute.

Java SE 17 epe luzeko euskarria (LTS) bertsio gisa sailkatuta dago, eta eguneraketak jasotzen jarraituko du 2029ra arte. Aurreko Java 16 mugarriaren bertsioaren eguneraketak eten egin dira. Java 11-ren aurreko LTS adarra 2026ra arte onartuko da. Hurrengo LTS bertsioa 2024ko 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.

Java 17-en eginbide berriak hauek dira:

  • "Switch" esamoldeetan eredu bat etortzearen inplementazio esperimentala proposatzen da, "kasu" etiketetan balio zehatzak ez erabiltzea ahalbidetzen duena, baizik eta txantiloi malguak aldi berean balio batzuk estaltzen dituztenak, eta horretarako beharrezkoa zen astunak erabiltzea. β€œbaldin... bestela” esapideen kateak. Horrez gain, "switch"-ek NULL balioak kudeatzeko gaitasuna du. Objektua o = 123L; String formatua = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("luzea %d", l); case d Bikoitza -> String.format("%f bikoitza", d); case String s -> String.format("String %s", s); lehenetsia -> o.toString(); };
  • Klase eta interfaze zigiluen euskarria egonkortua, beste klase eta interfazeek erabili ezin dituztenak inplementazioa heredatzeko, hedatzeko edo gainidazteko. Klase zigilatuek superklase baten erabilera mugatzeko modu deklaratiboagoa ere eskaintzen dute sarbide-modifikatzaileak 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 {…}
  • Vector APIaren bigarren aurrebista bat proposatzen da, x86_64 eta AArch64 prozesadoreetan bektore-argibideen bidez exekutatzen 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 gaitasunek ez bezala, API berriak datu paraleloen prozesamendurako bektoreizazioa esplizituki kontrolatzea ahalbidetzen du.
  • Atzerriko Funtzio eta Memoria APIaren aurrebista gehitu da, aplikazioei Java exekuzio-denboratik kanpo kode eta datuekin elkarreragiteko aukera ematen diena. API berriak JVM ez diren funtzioei modu eraginkorrean deitzeko eta JVMk kudeatutako memorian sartzeko aukera ematen du. Adibidez, kanpoko liburutegi partekatuetatik funtzioetara dei dezakezu eta prozesuko datuak atzitu JNI erabili gabe.
  • Java 2D APIa bultzatzen duen macOS errendatze-motorra, Swing APIa bultzatzen duena, Metal graphics APIa erabiltzeko egokitu da. MacOS plataformak OpenGL erabiltzen jarraitzen du lehenespenez, eta Metal laguntza gaitzeko "-Dsun.java2d.metal=true" ezarri eta gutxienez macOS 10.14.x exekutatu behar da.
  • MacOS/AArch64 plataformarako ataka bat gehitu da (Apple M1 txip berrietan oinarritutako Apple ordenagailuak). Portuaren ezaugarri berezi bat W^X (Write XOR Execute) memoria babesteko mekanismoaren euskarria da, non memoria-orrietara ezin baita aldi berean sartu idazteko eta exekutatzeko. (Kodea idazketa desgaitu ondoren bakarrik exekutatu daiteke, eta memoria-orri batean idaztea posible da exekuzioa desgaitu ondoren).
  • Koma mugikorreko adierazpenetarako strictfp semantika soilik erabiltzera itzuli da. Java 1.2 kaleratu zenetik eskuragarri dagoen "lehenetsitako" semantikaren euskarria eten egin da, x87 matematika koprozesadore oso zaharrak zituzten sistemetan lan egiteko sinplifikazioak barne (SSE2 argibideen etorreraren ondoren, semantika osagarriaren beharra desagertu zen).
  • Zenbaki sasi-ausazkoen sorgailuetarako interfaze mota berriak ezarri dira, eta algoritmo osagarriak ezarri dira ausazko zenbakiak hobeto sortzeko. Aplikazioei aukera ematen zaie sasi-ausazko zenbakiak sortzeko algoritmo bat aukeratzeko. Ausazko objektu-korronteak sortzeko laguntza hobetua.
  • JDK barneko guztien kapsulazio zorrotza behartu da, sun.misc.Unsafe bezalako API kritikoak izan ezik. Enkapsulazio zorrotzak kodetik barneko klaseak, metodoak eta eremuak atzitzeko saiakerak blokeatzen ditu. Lehen, kapsulatze modu zorrotza desgaitu zitekeen "--illegal-access=permit" aukera erabiliz, baina orain zaharkituta geratu da. Barneko klase, metodo eta eremuetarako sarbidea behar duten aplikazioek esplizituki definitu beharko lituzkete --add-opens aukera edo manifestu fitxategiko Add-Opens atributua erabiliz.
  • Aplikazioei datuak deserializazio-iragazkiak definitzeko gaitasuna ematen zaie, testuinguruaren araberakoak izan daitezkeenak eta dinamikoki hauta daitezkeen deserializazio-eragiketa zehatzetan oinarrituta. Zehaztutako iragazkiak makina birtual osorako (JVM osoan) aplikagarriak dira, hau da. aplikazioa bera ez ezik, aplikazioan erabiltzen diren hirugarrenen liburutegiak ere estaltzen ditu.
  • Swing-ek javax.swing.filechooser.FileSystemView.getSystemIcon metodoa gehitu du ikono handiak kargatzeko DPI handiko pantailetan UI hobetzeko.
  • java.net.DatagramSocket APIak Multicast taldeetara konektatzeko laguntza eskaintzen du java.net.MulticastSocket API bereizi beharrik gabe.
  • IGV (Ideal Graph Visualizer) utilitatea hobetu da, hotspot VM C2 JIT konpilatzailean tarteko kodearen irudikapenaren bistaratzea interaktiboa eskainiz.
  • JavaDoc-en, javac konpiladorearen analogia eginez, errore bat ateratzen denean, iturburu-fitxategiko arazo-lerroaren zenbakia eta errorearen kokapena adierazten dira orain.
  • Native.encoding propietatea gehitu da, sistemaren karaktereen kodeketaren izena islatuz (UTF-8, koi8-r, cp1251, etab.).
  • java.time.InstantSource interfazea gehitu da, ordu-eremuari erreferentziarik egin gabe denbora manipulatzeko aukera emanez.
  • Java.util.HexFormat APIa gehitu da irudikapen hamaseimalera bihurtzeko eta alderantziz.
  • Konpilatzaileari zulo beltz modu bat gehitu zaio, hildako kodeak ezabatzeko eragiketak desgaitzen dituena, errendimendu-probak egiterakoan erabil daitekeena.
  • "-Xlog: async" aukera gehitu da Runtime-ra erregistroak modu asinkronoan grabatzeko.
  • Konexio seguruak ezartzean, lehenespenez TLS 1.3 gaituta dago (lehen TLS 1.2 erabiltzen zen).
  • Lehenago deklaratutako Applet API zaharkitua (java.applet.Applet*, javax.swing.JApplet), arakatzailean Java aplikazioak exekutatzeko erabiltzen zena, kentzeko aurreikusitako kategoriara eraman da (garrantzitasuna galdu da euskarria amaitu ondoren). arakatzaileentzako Java pluginerako).
  • Segurtasun-kudeatzailea, aspalditik bere garrantzia galdu eta arakatzailearen pluginaren euskarria amaitu ondoren erreklamatu gabe geratu zena, kentzeko programatutakoen kategoriara eraman da.
  • RMI aktibatzeko mekanismoa kendu egin da, zaharkituta dagoena, Java 8-n aukera baten kategoriara utzita eta praktika modernoan ia inoiz ez da erabiltzen.
  • JIT (just-in-time) onartzen duen konpilatzaile esperimentala, HotSpot JVMrako Java kodearen konpilazio dinamikorako, baita klaseen aurreikuspen-konpilazio modua (AOT, aurretik) makina kodean makina birtuala hasi aurretik. , SDK-tik kendu da. Konpilatzailea Javan idatzi zen eta Graal proiektuaren lanean oinarrituta. Konpiladoreen mantentze-lanak lan handia eskatzen duela nabarmentzen da, eta hori ez da justifikatzen garatzaileen eskaerarik ez dagoenean.

Iturria: opennet.ru

Gehitu iruzkin berria