Java SE 14 kiadás

Hat hónapos fejlesztés után az Oracle megjelent felület JavaSE 14 (Java Platform, Standard Edition 14), a nyílt forráskódú OpenJDK projekt referencia megvalósításként használatos. A Java SE 14 fenntartja a visszamenőleges kompatibilitást a Java platform korábbi kiadásaival; minden korábban írt Java projekt változtatás nélkül fog működni az új verzió alatt. Telepítésre kész Java SE 14 buildek (JDK, JRE és Server JRE) előkészített Linux (x86_64), Windows és macOS számára. Az OpenJDK projekt által kifejlesztett referencia megvalósítás Java 14 teljesen nyílt forráskódú a GPLv2 licenc alatt, a GNU ClassPath kivételekkel, amelyek lehetővé teszik a dinamikus összekapcsolást a kereskedelmi termékekkel.

A Java SE 14 általános támogatási kiadásnak minősül, és a következő kiadásig továbbra is kap frissítéseket. A Long Term Support (LTS) ága a Java SE 11 lesz, amely 2026-ig továbbra is kap frissítéseket. A Java 8 korábbi LTS ága 2020 decemberéig támogatott. A következő LTS kiadás 2021 szeptemberére várható. Emlékeztetünk arra, hogy a Java 10 megjelenésétől kezdve a projekt új fejlesztési folyamatra váltott, ami rövidebb ciklust jelent az új kiadások kialakításához. Az új funkciókat most egyetlen folyamatosan frissített fő ágban fejlesztették ki, amely kész változtatásokat tartalmaz, és amelyből félévente elágaznak az ágak az új kiadások stabilizálása érdekében.

Of innovációk Java 14 tud jel:

  • Kísérleti támogatás hozzáadva minta illesztés az „instanceof” operátorban, amely lehetővé teszi egy helyi változó azonnali definiálását az ellenőrzött érték eléréséhez. Például azonnal beírhatja a következőt: „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” anélkül, hogy kifejezetten meghatározná a „String s = (String) obj” kifejezést.

    Ez volt:

    if (a csoport objektum példánya) {
    Csoportcsoport = (Csoport)obj;
    var bejegyzések = group.getEntries();
    }

    Most már nélkülözheti a „Csoportcsoport = (Csoport) obj” definíciót:

    if (Obj instanceof Group group) {
    var bejegyzések = group.getEntries();
    }

  • Kísérleti támogatás hozzáadva az új kulcsszóhoz "rekord", amely kompakt formát biztosít az osztályok meghatározásához, lehetővé téve, hogy elkerülje a különféle alacsony szintű metódusok, például az equals(), a hashCode() és a toString() explicit meghatározását olyan esetekben, amikor az adatok csak olyan mezőkben vannak tárolva, amelyek viselkedése nem változik. Ha egy osztály az equals(), hashCode() és toString() metódusok szabványos implementációit használja, megteheti az explicit definíciójuk nélkül:

    nyilvános nyilvántartás BankTransaction(LocalDate dátum,
    dupla mennyiségben
    Karakterlánc leírása) {}

    Ez a deklaráció automatikusan hozzáadja az equals(), hashCode() és toString() metódusok implementációit a konstruktor és a getter metódusok mellett.

  • Szabványosított és alapértelmezés szerint engedélyezve van a „switch” kifejezések új formájának támogatása, amely nem igényli a „break” operátor megadását, lehetővé teszi az ismétlődő címkék kombinálását, és nem csak operátor formájában, hanem operátorként is használható. kifejezés.

    var log = kapcsoló (esemény) {
    case PLAY -> „A felhasználó elindította a lejátszás gombot”;
    eset STOP, PAUSE -> „A felhasználónak szünetre van szüksége”;
    alapértelmezett -> {
    String message = event.toString();
    LocalDateTime most = LocalDateTime.now();
    hozam "Ismeretlen esemény" + üzenet +
    » bejelentkezve » + most;
    }
    };

  • Kibővített kísérleti támogatás szövegblokkok — a karakterlánc-literálok új formája, amely lehetővé teszi többsoros szöveges adatok beillesztését a forráskódba anélkül, hogy karakterkihagyást használna, és megőrizné a szöveg eredeti formázását a blokkban. A blokkot három dupla idézőjel keretezi. A Java 14-ben a szövegblokkok mostantól támogatják a "\s" escape szekvenciát egyetlen szóköz definiálásához és a "\" szekvenciát a következő sorhoz való összefűzéshez (ha nagyon hosszú sort kell kinyomtatni, figyelmen kívül hagyják az újsorokat). Például kód helyett

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Megérkezett a Java 1!\" » +
    "\n\t" + " » +
    "\n" + " ";

    megadhatja:

    Karakterlánc html = """


    »Java 1\
    itt!

    """;

  • Kibővült a diagnosztika információtartalma kivételek esetén NullPointerException. Míg korábban a hibaüzenet csak a sorszámra vonatkozott, most azt részletezi, hogy melyik módszer okozta a kivételt. A speciális diagnosztika jelenleg csak akkor engedélyezett, ha a „-XX:+ShowCodeDetailsInExceptionMessages” jelzővel indul. Például ennek a zászlónak a megadásakor a kivétel a sorban

    var név = user.getLocation().getCity().getName();

    üzenetet fog eredményezni

    Kivétel a "main" szálban java.lang.NullPointerException: A "Location.getCity()" nem hívható meg
    mert a "User.getLocation()" visszatérési értéke null
    itt: NullPointerExample.main(NullPointerExample.java:5):5)

    ami egyértelművé teszi, hogy a Location.getCity() metódus nem lett meghívva, és a User.getLocation() nullát adott vissza.

  • Megvalósítva A jpackage segédprogram előnézete, amely lehetővé teszi csomagok létrehozását az önálló Java alkalmazásokhoz. A segédprogram a JavaFX javapackagerin alapul, és lehetővé teszi a különböző platformokon natív formátumú csomagok létrehozását (msi és exe Windows, pkg és dmg macOS, deb és rpm Linux esetén). A csomagok minden szükséges függőséget tartalmaznak.
  • A G1 szemétgyűjtőhöz - tette hozzá egy új memóriakiosztási mechanizmus, amely figyelembe veszi az architektúrát használó nagy rendszereken végzett munka sajátosságait BAN BEN. Az új memóriaelosztó a „+XX:+UseNUMA” jelzővel engedélyezett, és jelentősen javíthatja a teljesítményt a NUMA rendszereken.
  • Hozzáadva API a JFR (JDK Flight Recorder) események menet közbeni monitorozására, például folyamatos monitorozás megszervezésére.
  • Hozzáadva jdk.nio.mapmode modul, amely új módokat (READ_ONLY_SYNC, WRITE_ONLY_SYNC) kínál a nem felejtő memóriára (NVM) hivatkozó leképezett bájtpufferek (MappedByteBuffer) létrehozásához.
  • Megvalósítva Az Foreign-Memory Access API előnézete, amely lehetővé teszi a Java alkalmazások számára, hogy biztonságosan és hatékonyan hozzáférjenek a Java kupacon kívüli memóriarégiókhoz az új MemorySegment, MemoryAddress és MemoryLayout absztrakciók manipulálásával.
  • Bejelentett elavult portokat a Solaris OS és SPARC processzorokhoz (Solaris/SPARC, Solaris/x64 és Linux/SPARC) azzal a szándékkal, hogy a jövőben eltávolítsák ezeket a portokat. E portok megszüntetése lehetővé teszi a közösség számára, hogy felgyorsítsa az új OpenJDK-funkciók fejlesztését anélkül, hogy időt veszítene a Solaris- és SPARC-specifikus szolgáltatások karbantartására.
  • Törölve a CMS (Concurrent Mark Sweep) szemétgyűjtő, amelyet két éve már elavultnak jelöltek, és karbantartatlan maradt (a CMS-t régen a G1 szemétgyűjtő váltotta fel). Kívül, bejelentett megszüntette a ParallelScavenge és a SerialOld szemétgyűjtő algoritmusok kombinációjának használatát (a „-XX:+UseParallelGC -XX:-UseParallelOldGC” beállítással futtassa).
  • A ZGC (Z Garbage Collector) szemétgyűjtő kísérleti támogatása macOS és Windows platformokon biztosított (korábban csak Linuxon támogatott). A ZGC passzív módban működik, a lehető legkisebbre csökkenti a szemétgyűjtés miatti késleltetést (ZGC használatakor a leállási idő nem haladja meg a 10 ms-t), és képes kis és hatalmas kupacokkal is dolgozni, amelyek mérete több száz megabájttól sok terabájtig terjed.
  • Eltávolítva Eszközkészlet és API a JAR fájlok Pack200 algoritmussal történő tömörítéséhez.

Forrás: opennet.ru

Hozzászólás