Udgivelse af Java SE 14

Efter seks måneders udvikling har Oracle udgivet platformen Java SE 14 (Java Platform, Standard Edition 14), hvor den referenceimplementering, der anvendes, er det åbne projekt OpenJDK. Java SE 14 bevarer bagudkompatibilitet med tidligere versioner af Java-platformen, så alle tidligere skrevne Java-projekter vil fungere uden ændringer under den nye version. Installationsklar Java SE 14-samling (JDK, JRE og Server JRE) forberedes til Linux (x86_64), Windows og macOS. Den referenceimplementering, der er udviklet inden for projektet OpenJDK, Java 14 er helt åbne under GPLv2-licensen med undtagelser for GNU ClassPath, der tillader dynamisk binding til kommercielle produkter.

Java SE 14 tilhører kategorien af versioner med almindelig support, hvor opdateringer vil blive udsendt indtil næste udgivelse. For en version med langtidssupport (LTS) bør Java SE 11 anvendes, hvis opdateringer vil blive udsendt indtil 2026. Den tidligere LTS-version, Java 8, vil blive understøttet indtil december 2020. Den næste LTS-udgivelse er planlagt til september 2021. Det skal huskes, at med udgivelsen af Java 10 er projektet gået over til en ny udviklingsproces, der indebærer en kortere cyklus for udarbejdelse af nye versioner. Ny funktionalitet udvikles nu i en enkelt, konstant opdateret master-gren, hvori allerede færdige ændringer inkluderes, og som bliver splittet i stabilitetsgrene for nye udgivelser hver sjette måned.

Af nyheder Java 14 you can markere:

  • Experimental support has been added. til mønster-matchning i "instanceof"-operatoren, som gør det muligt straks at bestemme en lokal variabel for at få adgang til den kontrollerede værdi. For eksempel kan man straks skrive "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" uden at skulle definere "String s = (String) obj" eksplicit.

    Tidligere:

    if (obj instanceof Group) {
    Group group = (Group) obj;
    var entries = group.getEntries();
    }

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

    if (obj instanceof Group group) {
    var entries = group.getEntries();
    }

  • Eksperimentel understøttelse af det nye nøgleord "record", der giver en kompakt form for at definere klasser, som gør det muligt at undgå eksplicitte definitioner af forskellige lavniveau-metoder, såsom equals(), hashCode() og toString(), i tilfælde hvor data kun gemmes i felterne, hvis opførsel ikke ændres. Når klassemetoderne equals(), hashCode() og toString() anvendes, kan man undvære deres eksplicitte definition:

    public record BankTransaction(LocalDate date,
    double beløb,
    String beskrivelse) {}

    Denne meddelelse vil automatisk føre til tilføjelse af implementeringerne af metoderne equals(), hashCode() og toString() samt konstruktøren og metoderne, der kontrollerer datamodifikation (getter).

  • Standardiseret og inkluderet som standard støtte til den nye form for "switch"-udtryk, der ikke kræver angivelse af "break"-operatoren, hvilket muliggør sammenslutning af gentagne mærker og tillader brug ikke kun som en operator, men også som et udtryk.

    var log = switch (event) {
    case PLAY -> "Brugeren har udløst afspilningsknappen";
    case STOP, PAUSE -> "Brugeren har brug for en pause";
    default -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield "Ukendt begivenhed " + message +
    " logget den " + now;
    }
    };

  • Udvidet eksperimentel støtte tekstblokke — den nya form för string literals, som gør det muligt at inkludere multiline tekstdata i kildekoden uden at anvende escape-tegn, samtidig med at den oprindelige formatering i blokken bevares. Blokken indrammes med tre doble citationstegn. I Java 14 er der implementeret støtte til escape-sekvensen "\s" til angivelse af ét mellemrum og "\" til at fortsætte på næste linje (ignorerer linjebrud, når der skal udsendes en meget lang linje). For eksempel i stedet for koden

    String html = "" +
    "\n\t" + "" +
    "\n\t\t" + "

    "Java 14 is here!"

    " +
    "\n\t" + "" +
    "\n" + "";

    kan man angive:

    String html = """
    <HTML>
    <BODY>

    "Java 14\
    er her!


    </BODY>
    """;

  • Diagnostics information has been expanded in case of exceptions NullPointerException. Previously, the error message only referred to the line number, but now it includes details about which method caused the exception. Extended diagnostics is currently only enabled when starting with the flag "-XX:+ShowCodeDetailsInExceptionMessages". For example, when specifying this flag, the exception in line

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

    will produce the following message

    Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Location.getCity()"
    because the return value of "User.getLocation()" is null
    at NullPointerExample.main(NullPointerExample.java:5):5)

    which makes it clear that the method Location.getCity() was not called, and User.getLocation() returned a null value.

  • Implementeret a preliminary version of the jpackage utility, allowing the creation of packages for self-contained Java applications. The utility is based on javapackager from JavaFX and allows the formation of packages in formats native to various platforms (msi and exe for Windows, pkg and dmg for macOS, deb and rpm for Linux). Packages include all necessary dependencies.
  • In the G1 garbage collector tilføjet a new memory distribution mechanism considering the specifics of operation on large systems using the architecture NUMA. The new memory distributor is enabled using the flag "+XX:+UseNUMA" and can significantly increase performance on NUMA systems.
  • Tilføjet API for on-the-fly tracking of JFR (JDK Flight Recorder) events, for instance, for continuous monitoring.
  • Tilføjet the jdk.nio.mapmode module, offering new modes (READ_ONLY_SYNC, WRITE_ONLY_SYNC) for creating mapped byte buffers (MappedByteBuffer) that refer to non-volatile memory (NVM).
  • Implementeret a preliminary version of the Foreign-Memory Access API, allowing Java applications to safely and efficiently access areas of memory outside of the Java heap while manipulating new abstractions MemorySegment, MemoryAddress, and MemoryLayout.
  • Erklæret deprecated ports for the Solaris OS and SPARC processors (Solaris/SPARC, Solaris/x64, and Linux/SPARC) with the intention of removing these ports in the future. The classification of the specified ports as deprecated will enable the community to accelerate the development of new features for OpenJDK without spending time on maintaining Solaris and SPARC-specific features.
  • Fjernet the CMS (Concurrent Mark Sweep) garbage collector, which was marked as deprecated two years ago and has remained unmaintained (the G1 garbage collector has long replaced CMS). Additionally, tilkendegivet forældet anvendelse af kombinationen af garbage collection-algoritmerne ParallelScavenge og SerialOld (start med indstillingerne «-XX:+UseParallelGC -XX:-UseParallelOldGC»).
  • Der er tilføjet eksperimentel støtte til garbage collector ZGC (Z Garbage Collector) på macOS- og Windows-platforme (før kun understøttet på Linux). ZGC fungerer i passiv tilstand og minimerer så vidt muligt forsinkelser forårsaget af garbage collection (stop-tiden ved brug af ZGC overstiger ikke 10 ms) og kan fungere med både små og enorme heaps, størrelse fra nogle hundrede megabytes til mange terabyte.
  • Fjernet værktøjer og API til komprimering af JAR-filer ved hjælp af algoritmen Pack200.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster