Java SE 14 release

Efter sex månaders utveckling, Oracle släppte plattform JavaSE 14 (Java Platform, Standard Edition 14), OpenJDK-projektet med öppen källkod används som referensimplementering. Java SE 14 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 14 builds (JDK, JRE och Server JRE) beredd för Linux (x86_64), Windows och macOS. Referensimplementering utvecklad av OpenJDK-projektet Java 14 är helt öppen källkod under GPLv2-licensen, med GNU ClassPath-undantag som tillåter dynamisk länkning med kommersiella produkter.

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

  • Lade till experimentellt stöd 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();
    }

  • Lade till experimentellt stöd för det nya 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.

  • Standardiserad och stöd för en ny form av "switch"-uttryck är aktiverat som standard, vilket inte kräver specificering av "break"-operatorn, låter dig kombinera upprepade etiketter och kan användas inte bara i form av en operator, utan också som en uttryck.

    var log = switch (händelse) {
    fall PLAY -> "Användaren har utlöst uppspelningsknappen";
    fall STOP, PAUSE -> "Användaren behöver en paus";
    standard -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    ger "Okänd händelse" + meddelande +
    » inloggad » + nu;
    }
    };

  • Utökat experimentellt stöd 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. I Java 14 stöder textblock nu escape-sekvensen "\s" för att definiera ett enstaka mellanslag och "\" för att sammanfoga med nästa rad (ignorerar nyrader när du behöver skriva ut en mycket lång rad). 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!

    """;

  • Informationsinnehållet i diagnostik när undantag förekommer har utökats NullPointerException. Medan felmeddelandet tidigare bara hänvisade till radnumret, beskriver det nu vilken metod som orsakade undantaget. Avancerad diagnostik är för närvarande endast aktiverad när den startas med flaggan "-XX:+ShowCodeDetailsInExceptionMessages". Till exempel, när du anger denna flagga, undantaget i raden

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

    kommer att resultera i ett meddelande

    Undantag i tråden "main" java.lang.NullPointerException: Kan inte anropa "Location.getCity()"
    eftersom returvärdet för "User.getLocation()" är null
    på NullPointerExample.main(NullPointerExample.java:5):5)

    vilket gör det tydligt att metoden Location.getCity() inte anropades och User.getLocation() returnerade null.

  • Genomfört En förhandsvisning av verktyget jpackage, som låter dig skapa paket för fristående Java-applikationer. Verktyget är baserat på javapackager från JavaFX och låter dig skapa paket i format som är inbyggda i olika plattformar (msi och exe för Windows, pkg och dmg för macOS, deb och rpm för Linux). Paketen innehåller alla nödvändiga beroenden.
  • Till G1-sopsamlaren Lagt till en ny minnesallokeringsmekanism som tar hänsyn till detaljerna i att arbeta på stora system som använder arkitekturen NUMA. Den nya minnesallokatorn är aktiverad med "+XX:+UseNUMA"-flaggan och kan avsevärt förbättra prestandan på NUMA-system.
  • tillsatt API för on-the-fly övervakning av JFR (JDK Flight Recorder) händelser, till exempel för att organisera kontinuerlig övervakning.
  • tillsatt jdk.nio.mapmode-modul, som erbjuder nya lägen (READ_ONLY_SYNC, WRITE_ONLY_SYNC) för att skapa mappade byte-buffertar (MappedByteBuffer) som refererar till icke-flyktigt minne (NVM).
  • Genomfört En förhandsvisning av Foreign-Memory Access API, som gör att Java-applikationer säkert och effektivt kan komma åt minnesregioner utanför Java-högen genom att manipulera de nya MemorySegment-, MemoryAddress- och MemoryLayout-abstraktionerna.
  • Meddelat föråldrade portar för Solaris OS- och SPARC-processorer (Solaris/SPARC, Solaris/x64 och Linux/SPARC) med avsikten att ta bort dessa portar i framtiden. Utfasning av dessa portar gör det möjligt för communityn att påskynda utvecklingen av nya OpenJDK-funktioner utan att slösa tid på att underhålla Solaris- och SPARC-specifika funktioner.
  • raderade sopsamlaren CMS (Concurrent Mark Sweep), som märktes som föråldrad för två år sedan och förblev outhållen (CMS ersattes för länge sedan av G1-sopsamlaren). Förutom, meddelat utfasade användningen av en kombination av ParallelScavenge och SerialOld sopsamlingsalgoritmer (kör med alternativen "-XX:+UseParallelGC -XX:-UseParallelOldGC").
  • Experimentellt stöd för sopsamlaren ZGC (Z Garbage Collector) har tillhandahållits på macOS- och Windows-plattformar (tidigare stöddes endast på Linux). 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.
  • raderade Toolkit och API för att komprimera JAR-filer med Pack200-algoritmen.

Källa: opennet.ru

Lägg en kommentar