Java SE 15 bertsioa

Sei hilabeteko garapenaren ondoren, Oracle kaleratu plataforma JavaSE 15 (Java Platform, Standard Edition 15), kode irekiko OpenJDK proiektua erreferentziazko inplementazio gisa erabiltzen da. Java SE 15-ek Java plataformaren aurreko bertsioekin bateragarritasuna mantentzen du; aurretik idatzitako Java proiektu guztiek aldaketarik gabe funtzionatuko dute bertsio berriarekin abiarazten direnean. Java SE 15 eraikitzeko prest instalatzeko (JDK, JRE eta Server JRE) prestatuta Linux (x86_64), Windows eta macOSentzat. OpenJDK proiektuak garatutako erreferentzia-inplementazioa Java 15 guztiz irekia da GPLv2 lizentziapean, GNU ClassPath salbuespenekin produktu komertzialekin lotura dinamikoa ahalbidetzen duena.

Java SE 15 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. Java 8-ren aurreko LTS adarra 2020ko abendura arte onartuko da. 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 hilabetean behin adarrak adarkatzen dira bertsio berriak egonkortzeko.

Of berrikuntzak Java 15 ko ahal Markatu:

  • Eraikituta EdDSA (Edwards-Curve Digital Signature Algorithm) sinadura digitala sortzeko algoritmorako laguntza RFC 8032). Proposatutako EdDSA inplementazioa ez dago hardware-plataformen menpe, albo-kanaletako erasoetatik babestuta dago (kalkulu guztien denbora etengabea bermatuta dago) eta C lengoaian idatzitako lehendik dagoen ECDSA inplementazioa baino errendimendu azkarragoa da, babes-maila berdinarekin. Adibidez, EdDSAk 126 biteko gako batekin kurba eliptiko bat erabiliz, ECDSAren antzeko errendimendua erakusten du secp256r1 kurba eliptiko batekin eta 128 biteko gako batekin.
  • Gehituta Klase eta interfaze zigiluen euskarri esperimentala, 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 {…}

  • Gehituta beste klase batzuen bytecodeak zuzenean erabili ezin dituen ezkutuko klaseetarako laguntza. Ezkutuko klaseen funtsezko helburu nagusia exekuzioan klaseak dinamikoki sortzen dituzten eta zeharka erabiltzen dituzten esparruetan erabiltzea da, bidez. hausnarketa. Horrelako klaseek normalean bizi-ziklo mugatua dute, beraz, estatikoki sortutako klaseetatik atzitzeko horiek mantentzea ez dago justifikatuta eta memoria-kontsumoa handitzea baino ez du ekarriko. Ezkutuko klaseek, gainera, sun.misc.Unsafe::defineAnonymousClass API ez estandarraren beharra ezabatzen dute, etorkizunean kentzeko aurreikusita dagoena.
  • ZGC (Z Garbage Collector) zabor-biltzailea egonkortu egin da eta erabiltzeko prest dagoela onartu da. ZGC modu pasiboan funtzionatzen du, zabor-bilketaren ondoriozko latentzia ahalik eta gehien murrizten du (ZGC erabiltzean 10 ms gainditzen ez direnean gelditze-denbora) eta pila txiki eta handiekin lan egin dezake, ehunka megabytetik terabyte askotara bitarteko tamainarekin.
  • Egonkortuta eta erabilera orokorrerako prest aurkitu da
    zabor biltzailea Shenandoah, gutxieneko etenekin lan eginez (Pausa-Denbora baxuko Zabor-biltzailea). Shenandoah Red Hat-ek garatu zuen eta zabor bilketan geldialdi-denbora murrizten duen algoritmo bat erabiltzeagatik nabarmentzen da garbiketa Java aplikazioen exekuzioarekin batera exekutatuta. Zabor-biltzaileak sartutako atzerapenen tamaina aurreikusten da eta ez dago pila-tamainaren araberakoa, hau da. 200 MB eta 200 GB-ko pilaretarako atzerapenak berdinak izango dira (ez atera 50 ms baino gehiago eta normalean 10 ms barru);

  • Laguntza egonkortu eta hizkuntzan sartu da testu blokeak - kate literalen forma berri bat, lerro anitzeko testu-datuak iturburu-kodean sartzeko aukera ematen duena, karaktere-ihesak erabili gabe eta jatorrizko testuaren formatua blokean gordez. Blokea hiru komatxo bikoitzek osatzen dute.

    Adibidez, kodearen ordez

    String html = " Β» +
    "\n\t" + " Β» +
    "\n\t\t" + " \"Java 1 hemen dago!\" Β» +
    "\n\t" + " Β» +
    "\n" + " ";

    zehaztu dezakezu:

    String html = """


    Β»Java 1\
    hemen dago!

    """;

  • Berriz landua DatagramSocket API zaharra. java.net.DatagramSocket eta java.net.MulticastSocket inplementazio zaharrak arazketa eta mantentze errazago den inplementazio moderno batekin ordezkatu dira, eta proiektuaren barruan garatutako korronte birtualekin bateragarria dena. ehuna. Lehendik dagoen kodearekin bateraezintasun posiblea izanez gero, inplementazio zaharra ez da kendu eta jdk.net.usePlainDatagramSocketImpl aukera erabiliz gaitu daiteke.
  • Proposatzen den bigarren ezarpen esperimentala eredua parekatzea "instanceof" operadorean, eta horrek aukera ematen dizu berehala definitzeko tokiko aldagai bat egiaztatutako balioa atzitzeko. Adibidez, berehala idatz dezakezu "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" esplizituki definitu gabe "String s = (String) obj".

    izan zen:

    if (obj instanceof Group) {
    Talde taldea = (Talde)obj;
    var sarrerak = group.getEntries();
    }

    Orain "Group group = (Group) obj" definiziorik gabe egin dezakezu:

    if (obj instance of Group group) {
    var sarrerak = group.getEntries();
    }

  • Proposatua gako-hitzaren bigarren inplementazio esperimentala "erregistroa", klaseak definitzeko forma trinkoa eskaintzen duena, maila baxuko hainbat metodo esplizituki definitzea saihesteko aukera ematen duena, hala nola equals(), hashCode() eta toString() bezalako datuak portaera aldatzen ez den eremuetan soilik gordetzen diren kasuetan. Klase batek equals(), hashCode() eta toString() metodoen inplementazio estandarrak erabiltzen dituenean, haien definizio esplizitua gabe egin dezake:

    erregistro publikoa BankTransaction (LocalDate data,
    kopuru bikoitza
    Katearen deskribapena) {}

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

  • Proposatua Foreign-Memory Access APIaren bigarren aurrebista bat, Java aplikazioek Java heapetik kanpoko memoria-eskualdeetara segurtasunez eta eraginkortasunez sartzeko aukera emanez, MemorySegment, MemoryAddress eta MemoryLayout abstrakzio berriak manipulatuz.
  • Desgaituta eta desaprobetxatu zuen HotSpot JVM-n erabiltzen den Blokeo alboratuaren optimizazio-teknika blokeo-gastuak murrizteko. Teknika honek bere garrantzia galdu du CPU modernoek emandako instrukzio atomikoak dituzten sistemetan, eta mantentze-lan intentsiboegia da bere konplexutasuna dela eta.
  • Iragarri mekanismo zaharkitua RMI aktibazioa, etorkizuneko bertsio batean kenduko dena. Kontuan izan da RMI aktibazioa zaharkituta dagoela, Java 8-n aukera baten kategoriara baztertuta dagoela eta praktika modernoan ia inoiz ez dela erabiltzen.
  • Ezabatu da JavaScript motorra Nashorn, Java SE 11n zaharkituta zegoen.
  • Kendua Solaris OS eta SPARC prozesadoreentzako atakak (Solaris/SPARC, Solaris/x64 eta Linux/SPARC). Ataka hauek kenduz gero, komunitateak OpenJDK funtzio berrien garapena azkartuko du Solaris eta SPARC ezaugarri espezifikoak mantenduz denbora galdu gabe.

Iturria: opennet.ru

Gehitu iruzkin berria