Izdaja Java SE 14

Po šestih mesecih razvoja je Oracle izpuščen platforma JavaSE 14 (Java Platform, Standard Edition 14), je kot referenčna izvedba uporabljen odprtokodni projekt OpenJDK. Java SE 14 ohranja povratno združljivost s prejšnjimi izdajami platforme Java; vsi predhodno napisani projekti Java bodo ob zagonu pod novo različico delovali brez sprememb. Graditve Java SE 14, pripravljene za namestitev (JDK, JRE in strežnik JRE) pripravljeni za Linux (x86_64), Windows in macOS. Referenčna implementacija, ki jo je razvil projekt OpenJDK Java 14 je popolnoma odprtokoden pod licenco GPLv2, z izjemami GNU ClassPath, ki omogočajo dinamično povezovanje s komercialnimi izdelki.

Java SE 14 je razvrščena kot izdaja splošne podpore in bo prejemala posodobitve do naslednje izdaje. Podružnica dolgoročne podpore (LTS) bi morala biti Java SE 11, ki bo prejemala posodobitve do leta 2026. Prejšnja veja LTS Jave 8 bo podprta do decembra 2020. Naslednja izdaja LTS je predvidena za september 2021. Naj vas spomnimo, da je projekt z izdajo Jave 10 prešel na nov razvojni proces, kar pomeni krajši cikel za oblikovanje novih izdaj. Nova funkcionalnost je zdaj razvita v eni stalno posodobljeni glavni veji, ki vključuje že pripravljene spremembe in iz katere se veje razvejajo vsakih šest mesecev za stabilizacijo novih izdaj.

Od inovacije Java 14 eno lahko znamka:

  • Dodana eksperimentalna podpora ujemanje vzorcev v operatorju “instanceof”, ki vam omogoča, da takoj definirate lokalno spremenljivko za dostop do preverjene vrednosti. Takoj lahko na primer napišete »if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}«, ne da bi eksplicitno definirali »String s = (String) obj«.

    Bilo je:

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

    Zdaj lahko storite brez definicije "Group group = (Group) obj":

    if (obj instanceof skupina skupine) {
    var vnosov = group.getEntries();
    }

  • Dodana eksperimentalna podpora za novo ključno besedo "zapis«, ki zagotavlja kompaktno obliko za definiranje razredov, kar vam omogoča, da se izognete eksplicitnemu definiranju različnih nizkonivojskih metod, kot so equals(), hashCode() in toString(), v primerih, ko so podatki shranjeni samo v poljih, katerih vedenje se ne spremeni. Ko razred uporablja standardne izvedbe metod equals(), hashCode() in toString(), lahko brez njihove eksplicitne definicije:

    javni zapis BankTransaction(LocalDate date,
    dvojni znesek
    Opis niza) {}

    Ta deklaracija bo poleg metod konstruktorja in pridobivanja samodejno dodala izvedbe metod equals(), hashCode() in toString().

  • Standardizirano privzeto je omogočena podpora za novo obliko izrazov »switch«, ki ne zahteva podajanja operatorja »break«, omogoča kombiniranje ponavljajočih se oznak in se lahko uporablja ne le v obliki operatorja, temveč tudi kot izražanje.

    var log = stikalo (dogodek) {
    case PLAY -> “Uporabnik je sprožil gumb za predvajanje”;
    case STOP, PAUSE -> “Uporabnik potrebuje odmor”;
    privzeto -> {
    String message = event.toString();
    LocalDateTime zdaj = LocalDateTime.now();
    donos "Neznan dogodek" + sporočilo +
    » prijavljen » + zdaj;
    }
    };

  • Razširjena eksperimentalna podpora besedilni bloki - nova oblika literalov nizov, ki vam omogoča, da v izvorno kodo vključite večvrstične besedilne podatke brez uporabe ubežnih znakov in ohranite izvirno oblikovanje besedila v bloku. Blok je uokvirjen s tremi dvojnimi narekovaji. V Javi 14 besedilni bloki zdaj podpirajo ubežno zaporedje »\s« za določitev enega samega presledka in »\« za združevanje z naslednjo vrstico (ne upoštevajo se nove vrstice, ko morate natisniti zelo dolgo vrstico). Na primer, namesto kode

    Niz html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 je tukaj!\" » +
    "\n\t" + " » +
    "\n" + " ";

    lahko določite:

    Niz html = """


    »Java 1\
    je tukaj!

    """;

  • Razširjena je informacijska vsebina diagnostike ob pojavu izjem NullPointerException. Medtem ko se je prej sporočilo o napaki nanašalo le na številko vrstice, zdaj podrobno opisuje, katera metoda je povzročila izjemo. Napredna diagnostika je trenutno omogočena le, če se zažene z zastavico »-XX:+ShowCodeDetailsInExceptionMessages«. Na primer, ko določite to zastavo, izjemo v vrstici

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

    se prikaže sporočilo

    Izjema v niti "main" java.lang.NullPointerException: Ni mogoče priklicati "Location.getCity()"
    ker je vrnjena vrednost "User.getLocation()" ničelna
    na NullPointerExample.main(NullPointerExample.java:5):5)

    kar jasno pove, da metoda Location.getCity() ni bila poklicana in je User.getLocation() vrnil nič.

  • Izvedeno Predogled pripomočka jpackage, ki vam omogoča ustvarjanje paketov za samostojne aplikacije Java. Pripomoček temelji na javapackagerju iz JavaFX in omogoča ustvarjanje paketov v formatih, ki so izvirni za različne platforme (msi in exe za Windows, pkg in dmg za macOS, deb in rpm za Linux). Paketi vključujejo vse zahtevane odvisnosti.
  • Do zbiralnika smeti G1 dodano nov mehanizem dodeljevanja pomnilnika, ki upošteva posebnosti dela na velikih sistemih, ki uporabljajo arhitekturo NUMA. Nov dodeljevalec pomnilnika je omogočen z uporabo zastavice »+XX:+UseNUMA« in lahko bistveno izboljša zmogljivost v sistemih NUMA.
  • Dodano API za sprotno spremljanje dogodkov JFR (JDK Flight Recorder), na primer za organiziranje stalnega spremljanja.
  • Dodano Modul jdk.nio.mapmode, ki ponuja nove načine (READ_ONLY_SYNC, WRITE_ONLY_SYNC) za ustvarjanje preslikanih medpomnilnikov bajtov (MappedByteBuffer), ki se nanašajo na obstojni pomnilnik (NVM).
  • Izvedeno Predogled API-ja za dostop do zunanjega pomnilnika, ki aplikacijam Java omogoča varen in učinkovit dostop do pomnilniških območij zunaj kopice Java z manipulacijo novih abstrakcij MemorySegment, MemoryAddress in MemoryLayout.
  • Napovedano opuščena vrata za OS Solaris in procesorje SPARC (Solaris/SPARC, Solaris/x64 in Linux/SPARC) z namenom odstranitve teh vrat v prihodnosti. Opustitev teh vrat bo skupnosti omogočila, da pospeši razvoj novih funkcij OpenJDK, ne da bi izgubljala čas z vzdrževanjem funkcij, specifičnih za Solaris in SPARC.
  • Izbrisano zbiralnik smeti CMS (Concurrent Mark Sweep), ki je bil pred dvema letoma označen za zastarelega in ostal nevzdrževan (CMS je že zdavnaj zamenjal zbiralnik smeti G1). Poleg tega napovedano opustil uporabo kombinacije algoritmov za zbiranje smeti ParallelScavenge in SerialOld (zagon z možnostmi »-XX:+UseParallelGC -XX:-UseParallelOldGC«).
  • Eksperimentalna podpora za zbiralnik smeti ZGC (Z Garbage Collector) je bila zagotovljena na platformah macOS in Windows (prej podprto samo v Linuxu). ZGC deluje v pasivnem načinu, čim bolj zmanjša zakasnitev zaradi zbiranja smeti (čas zastoja pri uporabi ZGC ne presega 10 ms.) in lahko deluje tako z majhnimi kot ogromnimi kopicami, ki segajo v velikosti od nekaj sto megabajtov do več terabajtov.
  • Izbrisano Komplet orodij in API za stiskanje datotek JAR z uporabo algoritma Pack200.

Vir: opennet.ru

Dodaj komentar