Java SE 15 udgivelse

Efter seks måneders udvikling, Oracle udgivet platform JavaSE 15 (Java Platform, Standard Edition 15), open source OpenJDK-projektet bruges som referenceimplementering. Java SE 15 bevarer bagudkompatibilitet med tidligere udgivelser af Java-platformen; alle tidligere skrevne Java-projekter vil fungere uden ændringer, når de lanceres under den nye version. Klar til at installere Java SE 15 builds (JDK, JRE og Server JRE) forberedt til Linux (x86_64), Windows og macOS. Referenceimplementering udviklet af OpenJDK-projektet Java 15 er fuldt åben kildekode under GPLv2-licensen, med GNU ClassPath-undtagelser, der tillader dynamisk kobling med kommercielle produkter.

Java SE 15 er klassificeret som en generel supportudgivelse og vil fortsætte med at modtage opdateringer indtil næste udgivelse. LTS-afdelingen (Long Term Support) bør være Java SE 11, som vil fortsætte med at modtage opdateringer indtil 2026. Den tidligere LTS-gren af ​​Java 8 vil blive understøttet indtil december 2020. Den næste LTS-udgivelse er planlagt til september 2021. Lad os minde dig om, at fra og med udgivelsen af ​​Java 10 skiftede projektet til en ny udviklingsproces, hvilket indebar en kortere cyklus for dannelsen af ​​nye udgivelser. Ny funktionalitet udvikles nu i én konstant opdateret mastergren, som omfatter færdige ændringer, og hvorfra filialer forgrenes hvert halve år for at stabilisere nye udgivelser.

Af innovationer Java 15 man kan mark:

  • Indbygget understøttelse af EdDSA (Edwards-Curve Digital Signature Algorithm) digital signaturoprettelsesalgoritme RFC 8032). Den foreslåede EdDSA-implementering afhænger ikke af hardwareplatforme, er beskyttet mod sidekanalangreb (konstant tid for alle beregninger er sikret) og er hurtigere i ydeevne end den eksisterende ECDSA-implementering skrevet i C-sprog, med samme beskyttelsesniveau. For eksempel udviser EdDSA, der bruger en elliptisk kurve med en 126-bit nøgle, en lignende ydeevne som ECDSA med en secp256r1 elliptisk kurve og en 128-bit nøgle.
  • Tilføjet eksperimentel understøttelse af forseglede klasser og grænseflader, som ikke kan bruges af andre klasser og grænseflader til at arve, udvide eller tilsidesætte implementeringen. Forseglede klasser giver også en mere deklarativ måde at begrænse brugen af ​​en superklasse på end adgangsmodifikatorer, baseret på en eksplicit liste over de underklasser, der er tilladt for udvidelse.

    pakke com.example.geometry;

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

  • Tilføjet understøttelse af skjulte klasser, der ikke kan bruges direkte af andre klassers bytekode. Hovedformålet med skjulte klasser er at blive brugt i rammer, der dynamisk genererer klasser under kørsel og bruger dem indirekte, gennem refleksion. Sådanne klasser har normalt en begrænset livscyklus, så det er ikke berettiget at opretholde dem for adgang fra statisk genererede klasser og vil kun føre til øget hukommelsesforbrug. Skjulte klasser eliminerer også behovet for den ikke-standardiserede API sun.misc.Unsafe::defineAnonymousClass, som er planlagt til at blive fjernet i fremtiden.
  • ZGC (Z Garbage Collector) affaldsopsamleren er blevet stabiliseret og er anerkendt som klar til udbredt brug. ZGC fungerer i passiv tilstand, minimerer ventetiden på grund af affaldsindsamling så meget som muligt (stalltid ved brug af ZGC overstiger ikke 10 ms.) og kan arbejde med både små og store dynger, der varierer i størrelse fra flere hundrede megabyte til mange terabyte.
  • Stabiliseret og fundet klar til almindelig brug
    skraldemand Shenandoah, arbejder med minimale pauser (Low-Pause-Time Garbage Collector). Shenandoah er udviklet af Red Hat og er bemærkelsesværdigt for sin brug af en algoritme, der reducerer stalltiden under skraldindsamling ved at køre oprydning parallelt med udførelsen af ​​Java-applikationer. Størrelsen af ​​de forsinkelser, som affaldssamleren introducerer, er forudsigelig og afhænger ikke af dyngens størrelse, dvs. for dynger på 200 MB og 200 GB vil forsinkelserne være identiske (kom ikke ud over 50 ms og sædvanligvis inden for 10 ms);

  • Support er blevet stabiliseret og introduceret i sproget tekstblokke - en ny form for streng-literal, der giver dig mulighed for at inkludere multi-line tekstdata i kildekoden uden at bruge tegn escape og bevare den originale tekstformatering i blokken. Blokken er indrammet af tre dobbelte anførselstegn.

    For eksempel i stedet for kode

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

    du kan angive:

    String html = """


    »Java 1\
    er her!

    """;

  • Redesignet Ældre DatagramSocket API. De gamle implementeringer af java.net.DatagramSocket og java.net.MulticastSocket er blevet erstattet med en moderne implementering, der er nemmere at debugge og vedligeholde, og som også er kompatibel med virtuelle streams udviklet inden for projektet Væven. I tilfælde af mulig inkompatibilitet med eksisterende kode, er den gamle implementering ikke blevet fjernet og kan aktiveres ved hjælp af jdk.net.usePlainDatagramSocketImpl-indstillingen.
  • Anden eksperimentel implementering foreslået mønstermatchning i operatoren "instanceof", som giver dig mulighed for straks at definere en lokal variabel for at få adgang til den afkrydsede værdi. For eksempel kan du straks skrive "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" uden eksplicit at definere "String s = (String) obj".

    Var:

    if (obj forekomst af gruppe) {
    Gruppegruppe = (Gruppe) obj;
    var entries = group.getEntries();
    }

    Nu kan du undvære definitionen "Group group = (Group) obj":

    if (obj-forekomst af gruppegruppe) {
    var entries = group.getEntries();
    }

  • Foreslog anden eksperimentel implementering af søgeordet "optage", som giver en kompakt form til at definere klasser, hvilket giver dig mulighed for at undgå eksplicit at definere forskellige metoder på lavt niveau såsom equals(), hashCode() og toString() i tilfælde, hvor data kun gemmes i felter, hvis adfærd ikke ændres. Når en klasse bruger standardimplementeringer af equals(), hashCode() og toString() metoderne, kan den undvære deres eksplicitte definition:

    offentlig registrering banktransaktion(LocalDate dato,
    dobbelt beløb
    Strengbeskrivelse) {}

    Denne erklæring tilføjer automatisk implementeringer af equals(), hashCode() og toString() metoderne ud over constructor- og getter-metoderne.

  • Foreslog en anden forhåndsvisning af Foreign-Memory Access API, der giver Java-applikationer mulighed for sikkert og effektivt at få adgang til hukommelsesområder uden for Java-heapen ved at manipulere de nye MemorySegment-, MemoryAddress- og MemoryLayout-abstraktioner.
  • handicappet og udfasede optimeringsteknikken for Biased Locking, der blev brugt i HotSpot JVM for at reducere overhead ved låsning. Denne teknik har mistet sin relevans på systemer med atominstruktioner leveret af moderne CPU'er og er for arbejdskrævende at vedligeholde på grund af dens kompleksitet.
  • Meddelt forældet mekanisme RMI aktivering, som vil blive fjernet i en fremtidig udgivelse. Det bemærkes, at RMI Activation er forældet, henvist til kategorien af ​​en option i Java 8 og næsten aldrig bruges i moderne praksis.
  • Slettet JavaScript-motor rhino, som blev forældet i Java SE 11.
  • Fjernet porte til Solaris OS og SPARC-processorer (Solaris/SPARC, Solaris/x64 og Linux/SPARC). Fjernelse af disse porte vil give fællesskabet mulighed for at accelerere udviklingen af ​​nye OpenJDK-funktioner uden at spilde tid på at vedligeholde Solaris- og SPARC-specifikke funktioner.

Kilde: opennet.ru

Tilføj en kommentar