Java SE 15 utgivelse

Etter seks måneder med utvikling, Oracle utgitt plattform JavaSE 15 (Java Platform, Standard Edition 15), åpen kildekode OpenJDK-prosjektet brukes som en referanseimplementering. Java SE 15 opprettholder bakoverkompatibilitet med tidligere utgivelser av Java-plattformen; alle tidligere skrevne Java-prosjekter vil fungere uten endringer når de lanseres under den nye versjonen. Klar til å installere Java SE 15-bygg (JDK, JRE og Server JRE) forberedt for Linux (x86_64), Windows og macOS. Referanseimplementering utviklet av OpenJDK-prosjektet Java 15 er fullstendig åpen kildekode under GPLv2-lisensen, med GNU ClassPath-unntak som tillater dynamisk kobling med kommersielle produkter.

Java SE 15 er klassifisert som en generell støtteutgivelse og vil fortsette å motta oppdateringer til neste utgivelse. Long Term Support (LTS)-grenen bør være Java SE 11, som vil fortsette å motta oppdateringer frem til 2026. Den forrige LTS-grenen av Java 8 vil bli støttet frem til desember 2020. Den neste LTS-utgivelsen er planlagt til september 2021. La oss minne deg på at fra og med utgivelsen av Java 10, gikk prosjektet over til en ny utviklingsprosess, noe som innebar en kortere syklus for dannelsen av nye utgivelser. Ny funksjonalitet utvikles nå i én konstant oppdatert hovedgren, som inkluderer ferdige endringer og hvor grener forgrenes hvert halvår for å stabilisere nye utgivelser.

Av innovasjoner Java 15 man kan mark:

  • Innebygd støtte for EdDSA (Edwards-Curve Digital Signature Algorithm) algoritmen for opprettelse av digital signatur RFC 8032). Den foreslåtte EdDSA-implementeringen er ikke avhengig av maskinvareplattformer, er beskyttet mot sidekanalangrep (konstant tid for alle beregninger er sikret) og er raskere i ytelse enn den eksisterende ECDSA-implementeringen skrevet på C-språk, med samme beskyttelsesnivå. For eksempel, EdDSA som bruker en elliptisk kurve med en 126-bits nøkkel, viser lignende ytelse som ECDSA med en secp256r1 elliptisk kurve og en 128-bits nøkkel.
  • La til eksperimentell støtte for forseglede klasser og grensesnitt, som ikke kan brukes av andre klasser og grensesnitt for å arve, utvide eller overstyre implementeringen. Forseglede klasser gir også en mer deklarativ måte å begrense bruken av en superklasse enn tilgangsmodifikatorer, basert på en eksplisitt liste over underklassene som er tillatt for utvidelse.

    pakke com.example.geometry;

    offentlig forseglet klasse Form
    tillater com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {...}

  • La til støtte for skjulte klasser som ikke kan brukes direkte av bytekoden til andre klasser. Hovedformålet med skjulte klasser er å brukes i rammeverk som dynamisk genererer klasser ved kjøretid og bruker dem indirekte, gjennom speilbilde. Slike klasser har vanligvis en begrenset livssyklus, så å opprettholde dem for tilgang fra statisk genererte klasser er ikke berettiget og vil bare føre til økt minneforbruk. Skjulte klasser eliminerer også behovet for ikke-standard API sun.misc.Unsafe::defineAnonymousClass, som er planlagt for fjerning i fremtiden.
  • ZGC (Z Garbage Collector) søppeloppsamleren er stabilisert og er anerkjent som klar for utbredt bruk. ZGC opererer i passiv modus, minimerer ventetiden på grunn av søppeloppsamling så mye som mulig (stopptid ved bruk av ZGC overstiger ikke 10 ms.) og kan jobbe med både små og store hauger, i størrelse fra flere hundre megabyte til mange terabyte.
  • Stabilisert og funnet klar for generell bruk
    søppelmann Shenandoah, arbeider med minimale pauser (Low-Pause-Time Garbage Collector). Shenandoah ble utviklet av Red Hat og er kjent for bruken av en algoritme som reduserer stopptiden under søppelinnsamling ved å kjøre opprydding parallelt med kjøringen av Java-applikasjoner. Størrelsen på forsinkelsene innført av søppelsamleren er forutsigbar og avhenger ikke av størrelsen på haugen, dvs. for hauger på 200 MB og 200 GB vil forsinkelsene være identiske (ikke kom ut over 50 ms og vanligvis innen 10 ms);

  • Støtte er stabilisert og introdusert i språket tekstblokker - en ny form for strengliteraler som lar deg inkludere flerlinjers tekstdata i kildekoden uten å bruke tegnavbrudd og bevare den opprinnelige tekstformateringen i blokken. Blokken er innrammet av tre doble anførselstegn.

    For eksempel i stedet for kode

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 er her!\" » +
    "\n\t" + " » +
    "\n" + " ";

    du kan spesifisere:

    String html = """


    »Java 1\
    er her!

    """;

  • Omarbeidet Eldre DatagramSocket API. De gamle implementeringene av java.net.DatagramSocket og java.net.MulticastSocket er erstattet med en moderne implementering som er enklere å feilsøke og vedlikeholde, og som også er kompatibel med virtuelle strømmer utviklet i prosjektet Vevstol. I tilfelle av mulig inkompatibilitet med eksisterende kode, har ikke den gamle implementeringen blitt fjernet og kan aktiveres ved å bruke jdk.net.usePlainDatagramSocketImpl-alternativet.
  • Andre eksperimentelle implementering foreslått mønstermatching i "instanceof"-operatoren, som lar deg umiddelbart definere en lokal variabel for å få tilgang til den sjekkede verdien. For eksempel kan du umiddelbart skrive "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" uten å eksplisitt definere "String s = (String) obj".

    Det var:

    if (obj forekomst av gruppe) {
    Gruppegruppe = (Gruppe) obj;
    var oppføringer = group.getEntries();
    }

    Nå kan du klare deg uten definisjonen "Group group = (Group) obj":

    if (objektforekomst av gruppegruppe) {
    var oppføringer = group.getEntries();
    }

  • Foreslått andre eksperimentelle implementering av søkeordet "rekord", som gir en kompakt form for å definere klasser, slik at du kan unngå eksplisitt å definere forskjellige lavnivåmetoder som equals(), hashCode() og toString() i tilfeller der data bare lagres i felt hvis virkemåte ikke endres. Når en klasse bruker standardimplementeringer av metodene equals(), hashCode() og toString() kan den klare seg uten deres eksplisitte definisjon:

    offentlig post banktransaksjon(LocalDate dato,
    dobbelt beløp
    Strengebeskrivelse) {}

    Denne erklæringen vil automatisk legge til implementeringer av metodene equals(), hashCode() og toString() i tillegg til konstruktør- og gettermetodene.

  • Foreslått en andre forhåndsvisning av Foreign-Memory Access API, som lar Java-applikasjoner sikkert og effektivt få tilgang til minneregioner utenfor Java-haugen ved å manipulere de nye MemorySegment-, MemoryAddress- og MemoryLayout-abstraksjonene.
  • Funksjonshemmet og avviklet optimaliseringsteknikken for Biased Locking som ble brukt i HotSpot JVM for å redusere overhead for låsing. Denne teknikken har mistet sin relevans på systemer med atominstruksjoner levert av moderne CPUer, og er for arbeidskrevende å vedlikeholde på grunn av kompleksiteten.
  • Kunngjort utdatert mekanisme RMI-aktivering, som vil bli fjernet i en fremtidig utgivelse. Det bemerkes at RMI-aktivering er utdatert, henvist til kategorien et alternativ i Java 8 og nesten aldri brukes i moderne praksis.
  • Slettet JavaScript-motor neshorn, som ble avviklet i Java SE 11.
  • Fjernet porter for Solaris OS- og SPARC-prosessorer (Solaris/SPARC, Solaris/x64 og Linux/SPARC). Fjerning av disse portene vil tillate fellesskapet å akselerere utviklingen av nye OpenJDK-funksjoner uten å kaste bort tid på å vedlikeholde Solaris- og SPARC-spesifikke funksjoner.

Kilde: opennet.ru

Legg til en kommentar