Java SE 14 bertsioa

Sei hilabeteko garapenaren ondoren, Oracle kaleratu plataforma JavaSE 14 (Java Platform, Standard Edition 14), kode irekiko OpenJDK proiektua erreferentziazko inplementazio gisa erabiltzen da. Java SE 14-ek Java plataformaren aurreko bertsioekin bateragarritasuna mantentzen du; aurretik idatzitako Java proiektu guztiek aldaketarik gabe funtzionatuko dute bertsio berriarekin abiarazten direnean. Java SE 14 eraikitzeko prest instalatzeko (JDK, JRE eta Server JRE) prestatuta Linux (x86_64), Windows eta macOSentzat. OpenJDK proiektuak garatutako erreferentzia-inplementazioa Java 14 guztiz irekia da GPLv2 lizentziapean, GNU ClassPath salbuespenekin produktu komertzialekin lotura dinamikoa ahalbidetzen duena.

Java SE 14 laguntza-oharra orokor gisa sailkatuta dago eta eguneraketak jasotzen jarraituko du hurrengo bertsiora arte. Epe Luzeko Laguntza (LTS) adarrak Java SE 11 izan behar du, eta eguneraketak jasotzen jarraituko du 2026ra arte. Java 8-ren aurreko LTS adarra 2020ko abendura arte onartuko da. Hurrengo LTS bertsioa 2021eko irailerako aurreikusita dago. Gogora dezagun Java 10 kaleratzetik hasita, proiektua garapen prozesu berri batera aldatu zela, bertsio berrien eraketarako ziklo laburragoa suposatuz. Gaur egun, funtzionalitate berriak etengabe eguneratutako adar nagusi batean garatzen dira, prest egindako aldaketak barne hartzen dituena eta bertatik sei hilabetean behin adarrak adarkatzen dira bertsio berriak egonkortzeko.

Of berrikuntzak Java 14 ko ahal Markatu:

  • Laguntza esperimentala gehitu da eredua parekatzea "instanceof" operadorean, eta horrek aukera ematen dizu berehala definitzeko tokiko aldagai bat egiaztatutako balioa atzitzeko. Adibidez, berehala idatz dezakezu "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" esplizituki definitu gabe "String s = (String) obj".

    izan zen:

    if (obj instanceof Group) {
    Talde taldea = (Talde)obj;
    var sarrerak = group.getEntries();
    }

    Orain "Group group = (Group) obj" definiziorik gabe egin dezakezu:

    if (obj instance of Group group) {
    var sarrerak = group.getEntries();
    }

  • Gako-hitz berrirako euskarria esperimentala gehitu da "erregistroa", klaseak definitzeko forma trinkoa eskaintzen duena, maila baxuko hainbat metodo esplizituki definitzea saihesteko aukera ematen duena, hala nola equals(), hashCode() eta toString() bezalako datuak portaera aldatzen ez den eremuetan soilik gordetzen diren kasuetan. Klase batek equals(), hashCode() eta toString() metodoen inplementazio estandarrak erabiltzen dituenean, haien definizio esplizitua gabe egin dezake:

    erregistro publikoa BankTransaction (LocalDate data,
    kopuru bikoitza
    Katearen deskribapena) {}

    Adierazpen honek automatikoki gehituko ditu equals(), hashCode() eta toString() metodoen inplementazioak, eraikitzaile eta getter metodoez gain.

  • Normalizatua eta "aldatu" esamoldeen forma berri baten laguntza lehenespenez gaituta dago, eta horrek ez du eskatzen "hautsi" operadorea zehaztea, errepikatutako etiketak konbinatzeko aukera ematen du eta operadore moduan ez ezik, era berean ere erabil daiteke. adierazpena.

    var log = aldatu (gertaera) {
    case PLAY -> "Erabiltzaileak erreproduzitzeko botoia aktibatu du";
    kasua STOP, PAUSE -> β€œErabiltzaileak atseden bat behar du”;
    lehenetsia -> {
    String mezua = event.toString();
    LocalDateTime now = LocalDateTime.now();
    eman "Gertaera ezezaguna" + mezua +
    Β» saioa hasita Β» + orain;
    }
    };

  • Euskarri esperimentala hedatua testu blokeak - kate literalen forma berri bat, lerro anitzeko testu-datuak iturburu-kodean sartzeko aukera ematen duena, karaktere-ihesak erabili gabe eta jatorrizko testuaren formatua blokean gordez. Blokea hiru komatxo bikoitzek osatzen dute. Java 14-n, testu-blokeek orain "\s" ihes-sekuentzia onartzen dute espazio bakarra definitzeko eta "\" hurrengo lerroarekin kateatzeko (lerro berriak alde batera utzita oso lerro luzea inprimatu behar duzunean). Adibidez, kodearen ordez

    String html = " Β» +
    "\n\t" + " Β» +
    "\n\t\t" + " \"Java 1 hemen dago!\" Β» +
    "\n\t" + " Β» +
    "\n" + " ";

    zehaztu dezakezu:

    String html = """


    Β»Java 1\
    hemen dago!

    """;

  • Salbuespenak gertatzen direnean diagnostikoen informazio edukia zabaldu da NullPointerException. Lehen errore-mezuak lerro-zenbakia soilik aipatzen zuen bitartean, orain salbuespena zein metodok eragin zuen zehazten du. Diagnostiko aurreratuak "-XX:+ShowCodeDetailsInExceptionMessages" marka batekin abiarazten direnean soilik gaituta daude. Adibidez, bandera hau zehaztean, lerroan salbuespena

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

    mezu bat ekarriko du

    Salbuespena "main" harian java.lang.NullPointerException: Ezin da "Location.getCity()" deitu.
    "User.getLocation()"-ren itzulera balioa nulua delako
    NullPointerExample.main(NullPointerExample.java:5):5) helbidean

    horrek argi uzten du Location.getCity() metodoa ez dela deitu eta User.getLocation() nulua itzuli dela.

  • Inplementatua jpackage utilitatearen aurrebista, Java aplikazio autonomoetarako paketeak sortzeko aukera ematen duena. Utilitatea JavaFX-ko javapackager-en oinarritzen da eta hainbat plataformatako jatorrizko formatuetan paketeak sortzeko aukera ematen du (msi eta exe Windows-erako, pkg eta dmg macOS-erako, deb eta rpm Linux-erako). Paketeek beharrezko mendekotasun guztiak biltzen dituzte.
  • G1 zabor biltzailera gehitu du arkitektura erabiliz sistema handietan lan egitearen berezitasunak kontuan hartzen dituen memoria esleitzeko mekanismo berri bat NUMA. Memoria esleitzaile berria "+XX:+UseNUMA" marka erabiliz gaitu eta NUMA sistemetan errendimendua nabarmen hobetu dezake.
  • Gehituta JFR (JDK Flight Recorder) gertaeren etengabeko jarraipena egiteko APIa, adibidez, etengabeko monitorizazioa antolatzeko.
  • Gehituta jdk.nio.mapmode modulua, modu berriak eskaintzen dituena (READ_ONLY_SYNC, WRITE_ONLY_SYNC) mapatutako byte-buffer-ak (MappedByteBuffer) memoria ez-hegazkorra (NVM) erreferentzia eginez.
  • Inplementatua Foreign-Memory Access APIaren aurrebista, Java aplikazioei Java heapetik kanpoko memoria-eskualdeetara segurtasunez eta eraginkortasunez atzitzeko aukera emanez, MemorySegment, MemoryAddress eta MemoryLayout abstrakzio berriak manipulatuz.
  • Iragarri Solaris OS eta SPARC prozesadoreetarako (Solaris/SPARC, Solaris/x64 eta Linux/SPARC) ataka zaharkituak, etorkizunean ataka horiek kentzeko asmoz. Ataka hauek zaharkituz gero, komunitateak OpenJDK funtzio berrien garapena bizkortuko du Solaris-en eta SPARC-en ezaugarri espezifikoak mantentzen denbora galdu gabe.
  • Ezabatu da CMS (Concurrent Mark Sweep) zabor-biltzailea, duela bi urte zaharkituta geratu zen eta mantendu gabe geratu zen (CMS aspaldi G1 zabor-biltzaileak ordezkatu zuen). Gainera, iragarri du ParallelScavenge eta SerialOld zabor bilketa algoritmoen konbinazio baten erabilera zaharkitu zuen (exekutatu "-XX:+UseParallelGC -XX:-UseParallelOldGC" aukerekin).
  • ZGC (Z Garbage Collector) zabor-biltzailerako laguntza esperimentala eskaini da macOS eta Windows plataformetan (lehen Linux-en bakarrik onartzen zen). ZGC modu pasiboan funtzionatzen du, zabor-bilketaren ondoriozko latentzia ahalik eta gehien murrizten du (ZGC erabiltzean 10 ms gainditzen ez direnean gelditze-denbora) eta pila txiki eta handiekin lan egin dezake, ehunka megabytetik terabyte askotara bitarteko tamainarekin.
  • Kendua Pack200 algoritmoa erabiliz JAR fitxategiak konprimitzeko tresna-kit eta APIa.

Iturria: opennet.ru

Gehitu iruzkin berria