Java SE 15 väljalase

Pärast kuuekuulist arendamist Oracle vabastati platvorm JavaSE 15 (Java platvorm, standardväljaanne 15), kasutatakse avatud lähtekoodiga OpenJDK projekti viiterakendusena. Java SE 15 säilitab tagasiühilduvuse Java platvormi eelmiste väljalasetega; kõik varem kirjutatud Java projektid töötavad uue versiooniga käivitamisel muudatusteta. Installimiseks valmis Java SE 15 järgud (JDK, JRE ja Server JRE) ette valmistatud Linuxi (x86_64), Windowsi ja macOS-i jaoks. OpenJDK projekti poolt välja töötatud viiterakendus Java 15 on GPLv2 litsentsi all täielikult avatud lähtekoodiga GNU ClassPathi erandid, mis võimaldavad dünaamilist linkimist kommertstoodetega.

Java SE 15 on klassifitseeritud üldiseks tugiväljalaseks ja sellele saadetakse värskendusi kuni järgmise väljalaskeni. Pikaajalise toe (LTS) haru peaks olema Java SE 11, mis jätkab värskenduste saamist kuni 2026. aastani. Java 8 eelmist LTS-i haru toetatakse kuni 2020. aasta detsembrini. Järgmine LTS-i väljalase on kavandatud 2021. aasta septembrisse. Tuletame meelde, et alates Java 10 väljalaskmisest läks projekt üle uuele arendusprotsessile, mis tähendab lühemat tsüklit uute väljaannete moodustamiseks. Uus funktsionaalsus on nüüd välja töötatud ühes pidevalt uuenevas põhiharus, mis sisaldab valmis muudatusi ja millest hargnetakse iga kuue kuu tagant uute väljaannete stabiliseerimiseks.

Kohta uuendused Java 15 keegi ei saa märk:

  • Sisseehitatud tugi EdDSA (Edwards-Curve Digital Signature Algorithm) digitaalallkirja loomise algoritmile RFC 8032). Kavandatav EdDSA realisatsioon ei sõltu riistvaraplatvormidest, on kaitstud külgkanalite rünnakute eest (tagatud on kõigi arvutuste pidev aeg) ja on jõudluses kiirem kui olemasolev C-keeles kirjutatud ECDSA teostus, sama kaitsetasemega. Näiteks EdDSA, mis kasutab 126-bitise võtmega elliptilist kõverat, toimib sarnaselt ECDSA-ga koos elliptilise kõvera secp256r1 ja 128-bitise võtmega.
  • Lisatud katseline tugi suletud klassidele ja liidestele, mida teised klassid ja liidesed ei saa kasutada juurutamiseks, laiendamiseks või alistamiseks. Suletud klassid pakuvad ka deklaratiivsemat viisi ülemklassi kasutamise piiramiseks kui juurdepääsu modifikaatorid, mis põhinevad laiendamiseks lubatud alamklasside selgesõnalisel loetlemisel.

    pakett com.example.geometry;

    avalik pitseeritud klass Kuju
    lubab com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.lihtne.Ruut {…}

  • Lisatud tugi peidetud klassidele, mida ei saa teiste klasside baitkoodid otse kasutada. Peidetud klasside põhieesmärk on kasutada raamistikes, mis genereerivad käitusajal klasse dünaamiliselt ja kasutavad neid kaudselt, peegeldus. Sellistel klassidel on tavaliselt piiratud elutsükkel, nii et nende säilitamine staatiliselt genereeritud klassidest juurdepääsuks ei ole õigustatud ja toob kaasa ainult suurema mälutarbimise. Peidetud klassid kõrvaldavad ka vajaduse mittestandardse API sun.misc.Unsafe::defineAnonymousClass järele, mis on plaanitud tulevikus eemaldada.
  • ZGC (Z Garbage Collector) prügikoguja on stabiliseeritud ja on tunnistatud laialdaseks kasutamiseks valmis. ZGC töötab passiivses režiimis, minimeerib prügi kogumisest tingitud latentsust nii palju kui võimalik (seiskumisaeg ZGC kasutamisel ei ületa 10 ms) ja suudab töötada nii väikeste kui ka tohutute hunnikutega, mille suurus ulatub mitmesajast megabaidist kuni mitme terabaidini.
  • Stabiliseeritud ja leitud üldiseks kasutamiseks valmis
    prügikorjaja Shenandoah, töötab minimaalsete pausidega (Low-Pause-Time Garbage Collector). Shenandoahi töötas välja Red Hat ja see on tähelepanuväärne selle algoritmi kasutamise poolest, mis vähendab prügi kogumise ajal seiskumisaega, käivitades puhastuse paralleelselt Java rakenduste täitmisega. Prügivedaja poolt sisse toodud viivituste suurus on etteaimatav ega sõltu hunniku suurusest, s.t. 200 MB ja 200 GB suuruste hunnikute puhul on viivitused identsed (ära tule välja üle 50 ms ja tavaliselt 10 ms jooksul);

  • Tugi on stabiliseerunud ja keelde sisse viidud tekstiplokid - stringiliteraalide uus vorm, mis võimaldab lisada lähtekoodi mitmerealisi tekstiandmeid ilma tähemärki kasutamata ja plokis algset tekstivormingut säilitamata. Plokk on raamitud kolme topeltjutumärgiga.

    Näiteks koodi asemel

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 on kohal!\" » +
    "\n\t" + " » +
    "\n" + " ";

    saate täpsustada:

    String html = """


    »Java 1\
    on siin!

    """;

  • Ümbertöödeldud Pärand DatagramSocket API. Vanad java.net.DatagramSocketi ja java.net.MulticastSocketi juurutused on asendatud kaasaegse teostusega, mida on lihtsam siluda ja hooldada ning mis ühildub ka projekti raames välja töötatud virtuaalsete voogudega Loom. Võimaliku mitteühilduvuse korral olemasoleva koodiga pole vana teostust eemaldatud ja seda saab lubada jdk.net.usePlainDatagramSocketImpl suvandi abil.
  • Pakutud teine ​​eksperimentaalne teostus mustri sobitamine operaatoris "instanceof", mis võimaldab teil kontrollitud väärtusele juurdepääsu saamiseks kohe määratleda kohaliku muutuja. Näiteks võite kohe kirjutada "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}", ilma et oleks selgelt määratletud "String s = (String) obj".

    See oli:

    if (Obj instanceof Group) {
    Rühmarühm = (Rühm)obj;
    var kirjed = group.getEntries();
    }

    Nüüd saate hakkama ilma definitsioonita "Grupirühm = (Group) obj":

    if (grupirühma objekt (objekti eksemplar)) {
    var kirjed = group.getEntries();
    }

  • Pakutud märksõna teine ​​eksperimentaalne rakendusrekord", mis pakub klasside määratlemiseks kompaktset vormi, võimaldades vältida erinevate madala taseme meetodite, nagu võrdsed(), hashCode() ja toString() selgesõnalist määratlemist juhtudel, kui andmeid salvestatakse ainult väljadele, mille käitumine ei muutu. Kui klass kasutab meetodite equals(), hashCode() ja toString() standardrakendusi, saab see hakkama ka ilma nende selgesõnalise määratluseta:

    avalik register BankTransaction(LocalDate kuupäev,
    topeltkogus
    Stringi kirjeldus) {}

    See deklaratsioon lisab lisaks konstruktori- ja geterimeetoditele automaatselt ka meetodite equals(), hashCode() ja toString() juurutused.

  • Pakutud välismälu juurdepääsu API teine ​​eelvaade, mis võimaldab Java rakendustel turvaliselt ja tõhusalt juurde pääseda väljaspool Java hunnikut asuvatele mälupiirkondadele, manipuleerides uute MemorySegmenti, MemoryAddressi ja MemoryLayouti abstraktsioonidega.
  • Keelatud ja loobus HotSpot JVM-is kasutatud kallutatud lukustamise optimeerimistehnikast, et vähendada lukustamise üldkulusid. See meetod on kaotanud oma tähtsuse süsteemides, mille aatomijuhised pakuvad kaasaegsed protsessorid, ja on oma keerukuse tõttu hooldamiseks liiga töömahukas.
  • Välja kuulutatud vananenud mehhanism RMI aktiveerimine, mis tulevases versioonis eemaldatakse. Märgitakse, et RMI aktiveerimine on aegunud, tõrjutud Java 8 valiku kategooriasse ja seda ei kasutata tänapäevases praktikas peaaegu kunagi.
  • Kustutatud JavaScripti mootor Nashorn, mis oli Java SE 11-s aegunud.
  • Eemaldatud pordid Solaris OS ja SPARC protsessorite jaoks (Solaris/SPARC, Solaris/x64 ja Linux/SPARC). Nende portide eemaldamine võimaldab kogukonnal kiirendada uute OpenJDK funktsioonide väljatöötamist ilma Solarise ja SPARC-i spetsiifiliste funktsioonide hooldamisele aega raiskamata.

Allikas: opennet.ru

Lisa kommentaar