Java SE 14-release

Na zes maanden ontwikkeling is Oracle vrijgegeven het platform JavaSE 14 (Java Platform, Standard Edition 14), wordt het open-source OpenJDK-project gebruikt als referentie-implementatie. Java SE 14 onderhoudt achterwaartse compatibiliteit met eerdere releases van het Java-platform; alle eerder geschreven Java-projecten zullen zonder wijzigingen werken wanneer ze onder de nieuwe versie worden gelanceerd. Kant-en-klare Java SE 14-builds (JDK, JRE en Server JRE) bereid voor Linux (x86_64), Windows en macOS. Referentie-implementatie ontwikkeld door het OpenJDK-project Java 14 is volledig open source onder de GPLv2-licentie, met GNU ClassPath-uitzonderingen die dynamische koppeling met commerciële producten mogelijk maken.

Java SE 14 is geclassificeerd als een algemene ondersteuningsrelease en zal updates blijven ontvangen tot de volgende release. De Long Term Support (LTS)-tak zou Java SE 11 moeten zijn, die tot 2026 updates zal blijven ontvangen. De vorige LTS-tak van Java 8 wordt ondersteund tot december 2020. De volgende LTS-release staat gepland voor september 2021. Laten we u eraan herinneren dat het project vanaf de release van Java 10 is overgestapt op een nieuw ontwikkelingsproces, wat een kortere cyclus voor de vorming van nieuwe releases inhield. Nieuwe functionaliteit wordt nu ontwikkeld in één voortdurend bijgewerkte masterbranch, die kant-en-klare wijzigingen bevat en van waaruit elke zes maanden branches worden vertakt om nieuwe releases te stabiliseren.

Van innovaties Java 14 men kan mark:

  • Experimentele ondersteuning toegevoegd patroonafstemming in de operator “instanceof”, waarmee u onmiddellijk een lokale variabele kunt definiëren om toegang te krijgen tot de gecontroleerde waarde. U kunt bijvoorbeeld onmiddellijk schrijven “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” zonder expliciet “String s = (String) obj” te definiëren.

    Het was:

    if (obj-instantie van groep) {
    Groepsgroep = (Groeps)obj;
    var vermeldingen = group.getEntries();
    }

    Nu kun je het doen zonder de definitie “Groepsgroep = (Groeps) obj”:

    if (obj-instantievan groepsgroep) {
    var vermeldingen = group.getEntries();
    }

  • Experimentele ondersteuning toegevoegd voor het nieuwe zoekwoord 'record", dat een compacte vorm biedt voor het definiëren van klassen, waardoor u kunt voorkomen dat u expliciet verschillende methoden op laag niveau definieert, zoals equals(), hashCode() en toString() in gevallen waarin gegevens alleen worden opgeslagen in velden waarvan het gedrag niet verandert. Wanneer een klasse standaardimplementaties van de methoden equals(), hashCode() en toString() gebruikt, kan deze het doen zonder hun expliciete definitie:

    openbaar record BankTransaction(LocalDate date,
    dubbel bedrag
    Tekenreeksbeschrijving) {}

    Deze declaratie voegt automatisch implementaties toe van de methoden equals(), hashCode() en toString() naast de methoden constructor en getter.

  • Gestandaardiseerd en ondersteuning voor een nieuwe vorm van “switch”-expressies is standaard ingeschakeld, waarvoor de operator “break” niet hoeft te worden gespecificeerd, waarmee u herhaalde labels kunt combineren en die niet alleen in de vorm van een operator kan worden gebruikt, maar ook als een uitdrukking.

    var log = schakelaar (gebeurtenis) {
    geval PLAY -> “Gebruiker heeft de afspeelknop geactiveerd”;
    geval STOP, PAUZE -> “Gebruiker heeft een pauze nodig”;
    standaard -> {
    Tekenreeksbericht = event.toString();
    LocalDateTime nu = LocalDateTime.now();
    opbrengst "Onbekende gebeurtenis" + bericht +
    » ingelogd » + nu;
    }
    };

  • Uitgebreide experimentele ondersteuning tekstblokken - een nieuwe vorm van letterlijke tekenreeksen waarmee u tekstgegevens van meerdere regels in de broncode kunt opnemen zonder gebruik te maken van teken-escaping en waarbij de originele tekstopmaak in het blok behouden blijft. Het blok wordt omlijst door drie dubbele aanhalingstekens. In Java 14 ondersteunen tekstblokken nu de escape-reeks "\s" om een ​​enkele spatie te definiëren en "\" om aan te sluiten op de volgende regel (waarbij nieuwe regels worden genegeerd als u een zeer lange regel moet afdrukken). In plaats van code bijvoorbeeld

    Tekenreeks html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 is er!\" » +
    "\n\t" + " » +
    "\n" + " ";

    u kunt opgeven:

    Tekenreeks html = """


    »Java 1\
    is hier!

    """;

  • De informatie-inhoud van diagnostiek wanneer zich uitzonderingen voordoen, is uitgebreid NullPointerUitzondering. Terwijl de foutmelding voorheen alleen naar het regelnummer verwees, wordt nu gedetailleerd welke methode de uitzondering veroorzaakte. Geavanceerde diagnostiek is momenteel alleen ingeschakeld wanneer het wordt gestart met de vlag “-XX:+ShowCodeDetailsInExceptionMessages”. Wanneer u bijvoorbeeld deze vlag opgeeft, wordt de uitzondering in de regel weergegeven

    var naam = gebruiker.getLocation().getCity().getName();

    resulteert in een bericht

    Uitzondering in thread "main" java.lang.NullPointerException: Kan "Location.getCity()" niet aanroepen
    omdat de retourwaarde van "User.getLocation()" nul is
    op NullPointerExample.main(NullPointerExample.java:5):5)

    wat duidelijk maakt dat de methode Location.getCity() niet is aangeroepen en dat User.getLocation() null heeft geretourneerd.

  • Geïmplementeerd Een voorbeeld van het hulpprogramma jpackage, waarmee u pakketten voor op zichzelf staande Java-toepassingen kunt maken. Het hulpprogramma is gebaseerd op javapackager van JavaFX en stelt u in staat pakketten te maken in formaten die eigen zijn aan verschillende platforms (msi en exe voor Windows, pkg en dmg voor macOS, deb en rpm voor Linux). De pakketten bevatten alle vereiste afhankelijkheden.
  • Naar de G1-vuilnisophaler toegevoegd een nieuw geheugentoewijzingsmechanisme dat rekening houdt met de specifieke kenmerken van het werken op grote systemen met behulp van de architectuur NUMA. De nieuwe geheugenallocator wordt ingeschakeld met behulp van de vlag "+XX:+UseNUMA" en kan de prestaties op NUMA-systemen aanzienlijk verbeteren.
  • toegevoegd API voor on-the-fly monitoring van JFR (JDK Flight Recorder)-evenementen, bijvoorbeeld voor het organiseren van continue monitoring.
  • toegevoegd jdk.nio.mapmode module, die nieuwe modi biedt (READ_ONLY_SYNC, WRITE_ONLY_SYNC) voor het maken van toegewezen bytebuffers (MappedByteBuffer) die verwijzen naar niet-vluchtig geheugen (NVM).
  • Geïmplementeerd Een preview van de Foreign-Memory Access API, waarmee Java-applicaties veilig en efficiënt toegang kunnen krijgen tot geheugengebieden buiten de Java-heap door de nieuwe MemorySegment-, MemoryAddress- en MemoryLayout-abstracties te manipuleren.
  • Aangekondigd verouderde poorten voor de Solaris OS- en SPARC-processors (Solaris/SPARC, Solaris/x64 en Linux/SPARC) met de bedoeling deze poorten in de toekomst te verwijderen. Door deze ports te beëindigen kan de community de ontwikkeling van nieuwe OpenJDK-functies versnellen zonder tijd te verspillen aan het onderhouden van Solaris- en SPARC-specifieke functies.
  • VERWIJDERD de CMS (Concurrent Mark Sweep) garbage collector, die twee jaar geleden als verouderd werd gemarkeerd en niet werd onderhouden (CMS werd lang geleden vervangen door de G1 garbage collector). Daarnaast, bekend gemaakt het gebruik van een combinatie van ParallelScavenge en SerialOld garbage collection-algoritmen verouderd (uitgevoerd met de opties "-XX:+UseParallelGC -XX:-UseParallelOldGC").
  • Er is experimentele ondersteuning voor de ZGC-garbagecollector (Z Garbage Collector) beschikbaar op macOS- en Windows-platforms (voorheen alleen ondersteund op Linux). ZGC werkt in passieve modus, minimaliseert de latentie als gevolg van garbagecollection zoveel mogelijk (de blokkeertijd bij gebruik van ZGC bedraagt ​​niet meer dan 10 ms) en kan werken met zowel kleine als enorme heaps, variërend in grootte van enkele honderden megabytes tot vele terabytes.
  • Verwijderd Toolkit en API voor het comprimeren van JAR-bestanden met behulp van het Pack200-algoritme.

Bron: opennet.ru

Voeg een reactie