Java SE 15 -julkaisu

Kuuden kuukauden kehitystyön jälkeen Oracle julkaisi alusta JavaSE 15 (Java Platform, Standard Edition 15), avoimen lähdekoodin OpenJDK-projektia käytetään referenssitoteutuksena. Java SE 15 säilyttää taaksepäin yhteensopivuuden Java-alustan aikaisempien julkaisujen kanssa; kaikki aiemmin kirjoitetut Java-projektit toimivat ilman muutoksia, kun ne julkaistaan ​​uudessa versiossa. Asennettavat Java SE 15 -koontiversiot (JDK, JRE ja Server JRE) valmis Linuxille (x86_64), Windowsille ja macOS:lle. OpenJDK-projektin kehittämä referenssitoteutus Java 15 on täysin avoimen lähdekoodin GPLv2-lisenssin alainen GNU ClassPath-poikkeuksilla, jotka mahdollistavat dynaamisen linkityksen kaupallisiin tuotteisiin.

Java SE 15 on luokiteltu yleiseksi tukijulkaisuksi, ja se saa päivityksiä seuraavaan julkaisuun asti. Long Term Support (LTS) -haara pitäisi olla Java SE 11, joka saa jatkossakin päivityksiä vuoteen 2026 asti. Java 8:n aiempaa LTS-haaraa tuetaan joulukuuhun 2020 asti. Seuraava LTS-julkaisu on suunniteltu syyskuulle 2021. Muistutetaan, että Java 10:n julkaisusta lähtien projekti siirtyi uuteen kehitysprosessiin, mikä merkitsi lyhyempää sykliä uusien julkaisujen muodostukselle. Uusi toiminnallisuus on nyt kehitetty yhteen jatkuvasti päivitettävään päähaaraan, joka sisältää valmiita muutoksia ja josta haarat haarautuvat kuuden kuukauden välein uusien julkaisujen vakauttamiseksi.

Ja innovaatioita Java 15 voidaan muodostaa merkki:

  • Sisäänrakennettu tuki EdDSA (Edwards-Curve Digital Signature Algorithm) digitaalisen allekirjoituksen luontialgoritmille RFC 8032). Ehdotettu EdDSA-toteutus ei riipu laitteistoalustoista, se on suojattu sivukanavahyökkäyksiltä (kaikkien laskelmien jatkuva aika on taattu) ja suorituskyky on nopeampi kuin nykyinen C-kielellä kirjoitettu ECDSA-toteutus samalla suojaustasolla. Esimerkiksi EdDSA, joka käyttää elliptistä käyrää 126-bittisellä avaimella, on samanlainen kuin ECDSA, jossa on secp256r1 elliptinen käyrä ja 128-bittinen avain.
  • lisätty kokeellinen tuki suljetuille luokille ja rajapinnoille, joita muut luokat ja rajapinnat eivät voi käyttää toteutuksen perimiseen, laajentamiseen tai ohittamiseen. Sinetöityt luokat tarjoavat myös rajoituksia määrittävämmän tavan rajoittaa superluokan käyttöä kuin pääsyn muokkaajat, jotka perustuvat laajennettavissa olevien alaluokkien nimenomaiseen luetteloon.

    paketti com.example.geometry;

    julkinen suljettu luokka Muoto
    sallii com.example.polar.Circle,
    com.example.quad.Rectangle,
    fi.esimerkki.neliö.yksinkertainen.neliö {…}

  • lisätty tuki piilotetuille luokille, joita muiden luokkien tavukoodi ei voi käyttää suoraan. Piilotettujen luokkien päätarkoitus on käyttää kehyksissä, jotka luovat luokkia dynaamisesti ajon aikana ja käyttävät niitä epäsuorasti, heijastus. Tällaisilla luokilla on yleensä rajoitettu elinkaari, joten niiden ylläpitäminen staattisesti luotujen luokkien pääsyä varten ei ole perusteltua ja johtaa vain lisääntyneeseen muistinkulutukseen. Piilotetut luokat poistavat myös ei-standardin mukaisen API:n sun.misc.Unsafe::defineAnonymousClass tarpeen, joka on tarkoitus poistaa tulevaisuudessa.
  • ZGC (Z Garbage Collector) -jätteenkeräin on stabiloitu ja se on tunnustettu valmiiksi laajaan käyttöön. ZGC toimii passiivisessa tilassa, minimoi roskien keräämisestä johtuvan latenssin mahdollisimman paljon (juoksuaika ZGC:tä käytettäessä ei ylitä 10 ms) ja voi toimia sekä pienten että valtavien kasojen kanssa, joiden koko vaihtelee useista sadasta megatavuista useisiin teratavuihin.
  • Vakautettu ja löydetty valmiina yleiseen käyttöön
    roskankerääjä Shenandoah, työskentelee minimaalisilla tauoilla (Low-Pause-Time Garbage Collector). Shenandoahin on kehittänyt Red Hat, ja se on tunnettu algoritmin käytöstä, joka vähentää jumiutumisaikaa roskienkeräyksen aikana suorittamalla siivouksen samanaikaisesti Java-sovellusten suorittamisen kanssa. Jätteenkeräimen aiheuttamien viiveiden suuruus on ennakoitavissa eikä se riipu kasan koosta, ts. 200 Mt:n ja 200 Gt:n kasoilla viiveet ovat samat (älä tule ulos yli 50 ms ja yleensä 10 ms sisällä);

  • Tuki on vakiintunut ja otettu kieleen tekstilohkoja - uusi merkkijonoliteraalimuoto, jonka avulla voit sisällyttää lähdekoodiin monirivistä tekstidataa käyttämättä merkinvaihtoa ja säilyttää alkuperäisen tekstin muotoilun lohkossa. Lohko on kehystetty kolmella lainausmerkillä.

    Esimerkiksi koodin sijaan

    merkkijono html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 on täällä!\" » +
    "\n\t" + " » +
    "\n" + " ";

    voit määrittää:

    merkkijono html = """


    »Java 1\
    on täällä!

    """;

  • Uudelleentyöstetty Vanha DatagramSocket API. Vanhat java.net.DatagramSocket- ja java.net.MulticastSocket-toteutukset on korvattu nykyaikaisella toteutuksella, joka on helpompi jäljittää ja ylläpitää ja joka on myös yhteensopiva projektin puitteissa kehitettyjen virtuaalivirtojen kanssa. Kangaspuiden. Jos kyseessä on mahdollinen yhteensopimattomuus olemassa olevan koodin kanssa, vanhaa toteutusta ei ole poistettu ja se voidaan ottaa käyttöön jdk.net.usePlainDatagramSocketImpl-vaihtoehdolla.
  • Ehdotettu toinen kokeellinen toteutus kuvion sovitus "instanceof"-operaattorissa, jonka avulla voit määrittää välittömästi paikallisen muuttujan, jolla pääset tarkastettuun arvoon. Voit esimerkiksi kirjoittaa välittömästi "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" määrittelemättä nimenomaisesti "String s = (String) obj".

    Se oli:

    if (ryhmän objektiinstanssi) {
    Ryhmäryhmä = (Ryhmä)obj;
    var merkinnät = group.getEntries();
    }

    Nyt voit tehdä ilman määritelmää "Group group = (Group) obj":

    if (Obj instanceof Group group) {
    var merkinnät = group.getEntries();
    }

  • Ehdotettu avainsanan toinen kokeellinen toteutusennätys", joka tarjoaa kompaktin muodon luokkien määrittelyyn, jolloin voit välttää erilaisten matalan tason menetelmien, kuten equals(), hashCode() ja toString() määrittelyn, jos tietoja on tallennettu vain kenttiin, joiden käyttäytyminen ei muutu. Kun luokka käyttää menetelmien equals(), hashCode() ja toString() vakiototeutuksia, se voi pärjätä ilman niiden nimenomaista määritelmää:

    julkinen tietue BankTransaction(LocalDate päivämäärä,
    kaksinkertainen määrä
    Merkkijonon kuvaus) {}

    Tämä ilmoitus lisää automaattisesti menetelmien equals(), hashCode() ja toString() toteutukset konstruktori- ja getter-menetelmien lisäksi.

  • Ehdotettu toinen esikatselu Foreign-Memory Access API:sta, jonka avulla Java-sovellukset voivat käyttää turvallisesti ja tehokkaasti Java-keon ulkopuolisia muistialueita manipuloimalla uusia MemorySegment-, MemoryAddress- ja MemoryLayout-abstraktioita.
  • Liikuntarajoitteinen ja poisti käytöstä HotSpot JVM:ssä käytetyn Biased Locking -optimointitekniikan lukituksen vähentämiseksi. Tämä tekniikka on menettänyt merkityksensä järjestelmissä, joissa on nykyaikaisten prosessorien antamia atomikäskyjä, ja se on liian työvoimavaltaista ylläpitääkseen monimutkaisuutensa vuoksi.
  • Ilmoitettu vanhentunut mekanismi RMI-aktivointi, joka poistetaan tulevassa julkaisussa. On huomattava, että RMI-aktivointi on vanhentunut, jaettu Java 8 -vaihtoehdon luokkaan, eikä sitä käytetä melkein koskaan nykykäytännössä.
  • Poistettu JavaScript-moottori sarvikuono, joka oli vanhentunut Java SE 11:ssä.
  • Poistettu portit Solaris OS- ja SPARC-prosessoreille (Solaris/SPARC, Solaris/x64 ja Linux/SPARC). Näiden porttien poistaminen antaa yhteisölle mahdollisuuden nopeuttaa uusien OpenJDK-ominaisuuksien kehitystä tuhlaamatta aikaa Solaris- ja SPARC-ominaisuuksien ylläpitoon.

Lähde: opennet.ru

Lisää kommentti