Java SE 15 vÀljaanne

PĂ€rast kuut kuud arendust esitles Oracle vabastas platvormi Java SE 15 (Java Platform, Standard Edition 15), mille etalonrealiseerimiseks kasutatakse avatud projekti OpenJDK. Java SE 15 sĂ€ilitab tagurpidi ĂŒhilduvuse varasemate Java versioonidega, kĂ”ik varasemad Java projektid töötavad ilma muudatusteta koos uue versiooniga. Valmis installimiseks olevad Java SE 15 paketid (JDK, JRE ja Server JRE) valmistatud Linuxi (x86_64), Windowsi ja macOS-i jaoks. Avatud projekt OpenJDK raames loodud etalonrealiseerimine Java 15 on tĂ€ielikult avatud GPLv2 litsentsiga, millel on GNU ClassPath'i erandid, mis lubavad dĂŒnaamilist sidumist kommertstooteid.

Java SE 15 kuulub tavaliste toega vĂ€ljaannete kategooriasse, mille vĂ€rskendusi antakse vĂ€lja seni, kuni ilmub jĂ€rgmine versioon. Pikaajalise toe (LTS) jaoks on soovitatav kasutada Java SE 11, mille vĂ€rskendusi antakse vĂ€lja kuni 2026. aastani. Eelmise LTS-suuna Java 8 toetamine kestab kuni 2020. aasta detsembri lĂ”puni. JĂ€rgmine LTS vĂ€ljaanne on planeeritud 2021. aasta septembriks. Tuletame meelde, et alates Java 10 vĂ€ljaandest on projekt lĂ€inud ĂŒle uuele arendusprotsessile, mis sisaldab lĂŒhemaid uute vĂ€ljaannete tsĂŒkleid. Uus funktsionaalsus areneb nĂŒĂŒd ĂŒhes pidevalt vĂ€rskendatavas master-haru, kuhu lisatakse valmis muudatused ja kuuest kuust lĂ”igatakse harud uute vĂ€ljaannete stabiliseerimiseks.

Kuna uuendusi Java 15 saab esile tÔsta:

  • Sisseehitatud EdDSA digitaalallkirja loomise algoritmi tugi (Edwards-Curve Digital Signature Algorithm RFC 8032). EdDSA pakutud rakendus ei sĂ”ltu riistvaralisest platvormist, on kaitstud kĂ”rvalkanalitest pĂ€rit rĂŒnnakute eest (tagatakse kĂ”ikide arvutuste konstantne aeg) ja ĂŒletab jĂ”udluses olemasolevat ECDSA rakendust, mis on kirjutatud C keeles, samas kaitsetaset hoides. NĂ€iteks EdDSA kasutades 126-bitist elliptilise kĂ”veraga vĂ”tit nĂ€itab sama jĂ”udluse taset nagu ECDSA elliptilise kĂ”veraga secp256r1 ja 128-bitise vĂ”ti.
  • Lisatud eksperimentaalne tugi suletud („sealed“) klassidele ja liidestele, mida ei saa kasutada teiste klasside ja liideste poolt pĂ€rimise, laiendamise vĂ”i rakenduse ĂŒlekirjutamise jaoks. Suletud klassid pakuvad ka deklareerimise kaudu selgemat viisi superklasside kasutamise piiramiseks, vĂ”rreldes ligipÀÀsude modifikaatoritega, mis pĂ”hinevad lubatud alamklasside nimede selgel loetelul, mida saab laiendada.

    package com.example.geometry;

    public sealed class Shape
    permits com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {
}

  • Lisatud tugevdatud klassid, mida ei saa otse kasutada teiste klasside poolt. Peamine eesmĂ€rk tugevdatud klasside puhul on kasutada neid raamistikus, mis genereerib klasse dĂŒnaamiliselt töö ajal ja kasutab neid kaudselt, lĂ€bi peegeldamise. Sellised klassid omavad tavaliselt piiratud elutsĂŒklit, seega pole nende hoidmine staatiliselt genereeritud klasside poolt ligipÀÀsetavana mĂ”istlik ega too muud kui suurenenud mĂ€lutarbimist. Tugevdatud klassid vĂ”imaldavad vĂ€ltida mittestandardsest API-st sun.misc.Unsafe::defineAnonymousClass, mis on kavandatud tulevikus eemaldada.
  • Stabiliseeriti ja tunnustati laialdaseks kasutamiseks valmis prĂŒgikorja ZGC (Z Garbage Collector). ZGC töötab passiivses reĆŸiimis, et minimeerida prĂŒgikorjaga seotud viivitusi (ZGC kasutamisel ei ĂŒleta peatamise aeg 10 ms) ja suudab töötada nii vĂ€ikeste kui ka tohutute mĂ€gedega, mille suurus on paarisaja megabaiti kuni paljude terabaitideni.
  • Stabiliseeriti ja tunnustati laialdaseks kasutamiseks valmis
    prĂŒgikorjaja Shenandoah, mis töötab minimaalsete peatustega (Low-Pause-Time Garbage Collector). Shenandoah on vĂ€lja töötatud ettevĂ”tte Red Hat poolt ja on tuntud oma algoritmi poolest, mis vĂ€hendab prĂŒgikorja peatamisaegu, tehes koristustöid paralleelselt Java rakenduste kĂ€ivitamisega. PrĂŒgikorja pĂ”hjustatud viivituste suurus on ettearvatav ja ei sĂ”ltu mĂ€e suurusest, st 200 MB ja 200 GB mĂ€gede puhul on viivitused identsed (ei ĂŒleta 50 ms ja tavaliselt jÀÀvad 10 ms sisse);
  • Stabiliseeritud ja keelesse on sisse viidud tugi tekstiblokkide jaoks — uue stringi literate vorme, mis vĂ”imaldavad lisada lĂ€htekoodile mitmerealisi tekstandmeid ilma sĂŒmbolite escape'ita ja sĂ€ilitades teksti algse vormingu plokis. Ploki piirimiseks kasutatakse kolme jutumĂ€rki.

    NĂ€iteks, koodi asemel

    String html = "" +
    "\n\t" + "" +
    "\n\t\t" + "

    \"Java 15 on kohal!\"" +
    "\n\t" + "" +
    "\n" + "";

    saab mÀÀrata:

    String html = """
    <HTML>
    <BODY>

    "Java 15\
    on kohal!"
    </BODY>
    """;

  • Uuendatud API Legacy DatagramSocket. Vanad teostused java.net.DatagramSocket ja java.net.MulticastSocket on asendatud tĂ€napĂ€eva teostusega, mis on kergemini silutav ja hooldatav ning ĂŒhilduv virtuaalsete voogudega, mis on arenduses projektis Loom. KĂ”ik muu, mis vĂ”ib pĂ”hjustada ĂŒhilduvuse katkemist olemasolevaga, ei ole vana teostust eemaldatud ning see saab aktiveerida valiku jdk.net.usePlainDatagramSocketImpl abil.
  • Pakutud on teine eksperimentaalne teostus mustri vastavuse instanceof operatsioonis, mis vĂ”imaldab kohe mÀÀrata kohalikku muutuja kontrollitud vÀÀrtusele viitamiseks. NĂ€iteks saab kohe kirjutada "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" ilma "String s = (String) obj" selges mÀÀratlemiseta.

    Oli:

    if (obj instanceof Group) {
    Group group = (Group) obj;
    var entries = group.getEntries();
    }

    NĂŒĂŒd saab ilma "Group group = (Group) obj" mÀÀratlemiseta hakkama:

    if (obj instanceof Group group) {
    var entries = group.getEntries();
    }

  • Pakutud on teine eksperimentaalne teostus vĂ”tmesĂ”nast "record" , mis pakub kompaktset vormi klasside mÀÀramiseks, vĂ”imaldades vĂ€ltida madala taseme meetodite nagu equals(), hashCode() ja toString() selget mÀÀratlemist, kui andmed salvestatakse ainult vĂ€ljadele, mille kĂ€itumine ei muutu. Kui klassis kasutatakse tĂŒĂŒplahendusi meetodite equals(), hashCode() ja toString() jaoks, saab neist ilma selge mÀÀratlemiseta hakkama:

    public record BankTransaction(LocalDate date,
    double amount,
    String description) {}

    See mÀÀratlemine toob automaatselt kaasa meetodite equals(), hashCode() ja toString() teostuste lisamise koos konstruktoriga ja meetoditega, mis kontrollivad andmete muutmist (getter).

  • Pakutud teine eelnev versioon API Foreign-Memory Access, mis vĂ”imaldab Java rakendustel ohutult ja tĂ”husalt pÀÀseda mĂ€lupiirkondadele vĂ€ljaspool Java kuhi, manipuleerides uute abstraktsioonidega MemorySegment, MemoryAddress ja MemoryLayout.
  • KĂ€ivitatud ja on kuulutatud vananenud tehnikaks Biased Locking, mida kasutati HotSpot JVM-is lukustamise ĂŒleolekute vĂ€hendamiseks. See tehnika on tĂ€napĂ€eva CPU-de pakutavate aatominstruktsioonide tĂ”ttu kaotanud oma tĂ€htsuse ja on oma keerukuse tĂ”ttu liiga töömahukas hooldamiseks.
  • Kuulutatud vananenud mehhanism RMI Activation, mis eemaldatakse ĂŒhes jĂ€rgmistest vĂ€ljaannetest. TĂ€heldatakse, et RMI Activation on vananenud, kuulutati valikuks juba Java 8-s ja praktiliselt ei kasutata tĂ€napĂ€evases praktikas.
  • Eemaldatud JavaScript mootori Nashorn, mis kuulutati vananenuks Java SE 11-s.
  • Eemaldatud sadamad Solaris operatsioonisĂŒsteemi ja SPARC protsessorite jaoks (Solaris/SPARC, Solaris/x64 ja Linux/SPARC). Nende sadamate eemaldamine vĂ”imaldab kogukonnal kiirendada uute vĂ”imaluste arendamist OpenJDK, kulutamata aega Solaris ja SPARC-spetsiifiliste omaduste hooldamiseks.

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster