Java SE 15 release

Efter sex månaders utveckling, Oracle släppte plattform JavaSE 15 (Java Platform, Standard Edition 15), OpenJDK-projektet med öppen källkod används som referensimplementering. Java SE 15 upprätthåller bakåtkompatibilitet med tidigare versioner av Java-plattformen; alla tidigare skrivna Java-projekt kommer att fungera utan ändringar när de lanseras under den nya versionen. Klara att installera Java SE 15 builds (JDK, JRE och Server JRE) beredd för Linux (x86_64), Windows och macOS. Referensimplementering utvecklad av OpenJDK-projektet Java 15 är helt öppen källkod under GPLv2-licensen, med GNU ClassPath-undantag som tillåter dynamisk länkning med kommersiella produkter.

Java SE 15 klassificeras som en allmän supportversion och kommer att fortsätta att ta emot uppdateringar fram till nästa release. LTS-grenen (Long Term Support) bör vara Java SE 11, som kommer att fortsätta att ta emot uppdateringar fram till 2026. Den tidigare LTS-grenen av Java 8 kommer att stödjas fram till december 2020. Nästa LTS-release är planerad till september 2021. Låt oss påminna dig om att från och med lanseringen av Java 10 gick projektet över till en ny utvecklingsprocess, vilket innebär en kortare cykel för bildandet av nya utgåvor. Ny funktionalitet utvecklas nu i en ständigt uppdaterad mastergren, som inkluderar färdiga ändringar och från vilka grenar förgrenas var sjätte månad för att stabilisera nya releaser.

Av innovationer Java 15 kan man mark:

  • Inbyggt stöd för EdDSA (Edwards-Curve Digital Signature Algorithm) algoritm för att skapa digitala signaturer RFC 8032). Den föreslagna EdDSA-implementeringen är inte beroende av hårdvaruplattformar, är skyddad från sidokanalattacker (konstant tid för alla beräkningar säkerställs) och har snabbare prestanda än den befintliga ECDSA-implementationen skriven i C-språk, med samma skyddsnivå. Till exempel, EdDSA som använder en elliptisk kurva med en 126-bitars nyckel uppvisar liknande prestanda som ECDSA med en secp256r1 elliptisk kurva och en 128-bitars nyckel.
  • Lagt till experimentellt stöd för förseglade klasser och gränssnitt, som inte kan användas av andra klasser och gränssnitt för att ärva, utöka eller åsidosätta implementeringen. Förseglade klasser ger också ett mer deklarativt sätt att begränsa användningen av en superklass än åtkomstmodifierare, baserat på att explicit lista de underklasser som tillåts för förlängning.

    paket com.example.geometry;

    offentlig förseglad klass Form
    tillåter com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {...}

  • Lagt till stöd för dolda klasser som inte kan användas direkt av andra klassers bytekod. Huvudsyftet med dolda klasser är att användas i ramverk som dynamiskt genererar klasser vid körning och använder dem indirekt, genom reflektion. Sådana klasser har vanligtvis en begränsad livscykel, så att behålla dem för åtkomst från statiskt genererade klasser är inte motiverat och kommer bara att leda till ökad minnesförbrukning. Dolda klasser eliminerar också behovet av icke-standardiserade API sun.misc.Unsafe::defineAnonymousClass, som är planerad att tas bort i framtiden.
  • ZGC (Z Garbage Collector) sopsamlare har stabiliserats och anses vara redo för utbredd användning. ZGC arbetar i passivt läge, minimerar latens på grund av sophämtning så mycket som möjligt (stopptiden vid användning av ZGC överstiger inte 10 ms.) och kan arbeta med både små och stora högar, i storlek från flera hundra megabyte till många terabyte.
  • Stabiliserat och befunnits redo för allmänt bruk
    skräp samlare Shenandoah, arbetar med minimala pauser (Low-Pause-Time Garbage Collector). Shenandoah utvecklades av Red Hat och är anmärkningsvärt för sin användning av en algoritm som minskar stalltiden under sophämtning genom att köra rensning parallellt med körningen av Java-applikationer. Storleken på de förseningar som sopsamlaren introducerar är förutsägbar och beror inte på högens storlek, d.v.s. för högar på 200 MB och 200 GB kommer fördröjningarna att vara identiska (kom inte ut över 50 ms och vanligtvis inom 10 ms);

  • Stödet har stabiliserats och introducerats i språket textblock - en ny form av strängliteraler som låter dig inkludera flerradstextdata i källkoden utan att använda teckensläckning och bevara den ursprungliga textformateringen i blocket. Blocket ramas in av tre dubbla citattecken.

    Till exempel istället för kod

    Sträng html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 är här!\" » +
    "\n\t" + " » +
    "\n" + " ";

    du kan ange:

    String html = """


    »Java 1\
    är här!

    """;

  • Omarbetad Äldre DatagramSocket API. De gamla implementeringarna av java.net.DatagramSocket och java.net.MulticastSocket har ersatts med en modern implementering som är lättare att felsöka och underhålla, och som även är kompatibel med virtuella strömmar som utvecklats inom projektet Vävstol. I händelse av eventuell inkompatibilitet med befintlig kod har den gamla implementeringen inte tagits bort och kan aktiveras med alternativet jdk.net.usePlainDatagramSocketImpl.
  • Den andra experimentella implementeringen föreslås mönstermatchning i operatorn "instanceof", som låter dig omedelbart definiera en lokal variabel för att komma åt det markerade värdet. Till exempel kan du omedelbart skriva "if (obj instans av String s && s.length() > 5) {.. s.contains(..) ..}" utan att uttryckligen definiera "String s = (String) obj".

    Var:

    if (obj instans av grupp) {
    Gruppgrupp = (Grupp)obj;
    var entries = group.getEntries();
    }

    Nu kan du klara dig utan definitionen "Gruppgrupp = (Grupp) obj":

    if (obj instans av gruppgrupp) {
    var entries = group.getEntries();
    }

  • Föreslog andra experimentella implementeringen av sökordet "post", som tillhandahåller en kompakt form för att definiera klasser som eliminerar behovet av att explicit definiera olika lågnivåmetoder, såsom equals(), hashCode() och toString(), i fall där data endast lagras i fält vars beteende gör det. inte ändras. När en klass använder standardimplementationer av metoderna equals(), hashCode() och toString() kan den klara sig utan deras explicita definition:

    offentliga banktransaktioner(LocalDate date,
    dubbelt belopp
    Strängbeskrivning) {}

    Den här deklarationen kommer automatiskt att lägga till implementeringar av metoderna equals(), hashCode() och toString() utöver konstruktor- och gettermetoderna.

  • Föreslagen en andra förhandsvisning av Foreign-Memory Access API, som tillåter Java-applikationer att säkert och effektivt komma åt minnesregioner utanför Java-högen genom att manipulera de nya MemorySegment-, MemoryAddress- och MemoryLayout-abstraktionerna.
  • Inaktiverad och avskaffade optimeringstekniken för partisk låsning som används i HotSpot JVM för att minska låsningsoverhead. Denna teknik har förlorat sin relevans på system med atominstruktioner från moderna processorer och är för arbetskrävande att underhålla på grund av dess komplexitet.
  • Meddelat föråldrad mekanism RMI-aktivering, som kommer att tas bort i en framtida version. Det noteras att RMI-aktivering är föråldrad, förpassad till kategorin för ett alternativ i Java 8 och nästan aldrig används i modern praxis.
  • raderade JavaScript-motor Nashorn, som föråldrades i Java SE 11.
  • raderade portar för Solaris OS- och SPARC-processorer (Solaris/SPARC, Solaris/x64 och Linux/SPARC). Om du tar bort dessa portar kan communityn påskynda utvecklingen av nya OpenJDK-funktioner utan att slösa tid på att underhålla specifika Solaris- och SPARC-funktioner.

Källa: opennet.ru

Lägg en kommentar