Java SE 14 udgivelse

Efter seks måneders udvikling, Oracle udgivet platform JavaSE 14 (Java Platform, Standard Edition 14), open source OpenJDK-projektet bruges som referenceimplementering. Java SE 14 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 14 builds (JDK, JRE og Server JRE) forberedt til Linux (x86_64), Windows og macOS. Referenceimplementering udviklet af OpenJDK-projektet Java 14 er fuldt åben kildekode under GPLv2-licensen, med GNU ClassPath-undtagelser, der tillader dynamisk kobling med kommercielle produkter.

Java SE 14 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 14 man kan mark:

  • Tilføjet eksperimentel støtte 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();
    }

  • Tilføjet eksperimentel støtte til det nye søgeord "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.

  • Standardiseret og understøttelse af en ny form for "switch"-udtryk er aktiveret som standard, hvilket ikke kræver specificering af "break"-operatoren, giver dig mulighed for at kombinere gentagne etiketter og kan bruges ikke kun i form af en operator, men også som en udtryk.

    var log = switch (hændelse) {
    case PLAY -> "Brugeren har udløst afspilningsknappen";
    case STOP, PAUSE -> "Brugeren har brug for en pause";
    standard -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    giver "Ukendt hændelse" + besked +
    » logget på » + nu;
    }
    };

  • Udvidet eksperimentel støtte 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. I Java 14 understøtter tekstblokke nu escape-sekvensen "\s" for at definere et enkelt mellemrum og "\" for at sammenkæde med den næste linje (ignorerer nye linjer, når du skal udskrive en meget lang linje). 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!

    """;

  • Informationsindholdet i diagnostik, når der opstår undtagelser, er blevet udvidet NullPointerException. Hvor fejlmeddelelsen tidligere kun refererede til linjenummeret, beskriver den nu, hvilken metode der forårsagede undtagelsen. Avanceret diagnostik er i øjeblikket kun aktiveret, når den startes med flaget "-XX:+ShowCodeDetailsInExceptionMessages". For eksempel, når du angiver dette flag, undtagelsen i linjen

    var name = user.getLocation().getCity().getName();

    vil resultere i en besked

    Undtagelse i tråden "main" java.lang.NullPointerException: Kan ikke påberåbe "Location.getCity()"
    fordi returværdien af ​​"User.getLocation()" er null
    på NullPointerExample.main(NullPointerExample.java:5):5)

    hvilket gør det klart, at Location.getCity()-metoden ikke blev kaldt, og User.getLocation() returnerede null.

  • Implementeret En forhåndsvisning af værktøjet jpackage, som giver dig mulighed for at oprette pakker til selvstændige Java-applikationer. Hjælpeprogrammet er baseret på javapackager fra JavaFX og giver dig mulighed for at oprette pakker i formater, der er native til forskellige platforme (msi og exe til Windows, pkg og dmg til macOS, deb og rpm til Linux). Pakkerne inkluderer alle nødvendige afhængigheder.
  • Til G1 skraldemand tilføjet en ny hukommelsesallokeringsmekanisme, der tager højde for de særlige forhold ved at arbejde på store systemer ved hjælp af arkitekturen I. Den nye hukommelsesallokator er aktiveret ved hjælp af "+XX:+UseNUMA"-flaget og kan forbedre ydeevnen markant på NUMA-systemer.
  • Tilføjet API til on-the-fly overvågning af JFR (JDK Flight Recorder) hændelser, for eksempel til organisering af kontinuerlig overvågning.
  • Tilføjet jdk.nio.mapmode-modul, som tilbyder nye tilstande (READ_ONLY_SYNC, WRITE_ONLY_SYNC) til at skabe mappede byte-buffere (MappedByteBuffer), der refererer til ikke-flygtig hukommelse (NVM).
  • Implementeret En 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.
  • Meddelt forældede porte til Solaris OS- og SPARC-processorerne (Solaris/SPARC, Solaris/x64 og Linux/SPARC) med det formål at fjerne disse porte i fremtiden. Udfasning 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.
  • Slettet affaldssamleren CMS (Concurrent Mark Sweep), som blev markeret som forældet for to år siden og forblev uvedligeholdt (CMS blev for længst erstattet af G1-affaldssamleren). Udover, annonceret udfasede brugen af ​​en kombination af ParallelScavenge og SerialOld affaldsopsamlingsalgoritmer (kør med mulighederne "-XX:+UseParallelGC -XX:-UseParallelOldGC").
  • Eksperimentel understøttelse af ZGC (Z Garbage Collector) garbage collector er blevet leveret på macOS- og Windows-platforme (tidligere kun understøttet på Linux). 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.
  • Fjernet Værktøjssæt og API til at komprimere JAR-filer ved hjælp af Pack200-algoritmen.

Kilde: opennet.ru

Tilføj en kommentar