Eldono de Java SE 14

Post ses monatoj da evoluo, Oracle liberigita platformo JavaSE 14 (Java Platform, Standard Edition 14), la malfermfonta OpenJDK-projekto estas uzata kiel referenca efektivigo. Java SE 14 konservas malantaŭan kongruon kun antaŭaj eldonoj de la Java-platformo; ĉiuj antaŭe skribitaj Java-projektoj funkcios sen ŝanĝoj kiam lanĉitaj sub la nova versio. Preta instali Java SE 14-konstruaĵoj (JDK, JRE kaj Server JRE) preparita por Linukso (x86_64), Vindozo kaj macOS. Referenca efektivigo evoluigita per la OpenJDK-projekto Java 14 estas plene malfermita fonto laŭ la permesilo GPLv2, kun GNU ClassPath-esceptoj permesantaj dinamikan ligon kun komercaj produktoj.

Java SE 14 estas klasifikita kiel ĝenerala subtena eldono kaj daŭre ricevos ĝisdatigojn ĝis la venonta eldono. La branĉo Long Term Support (LTS) devus esti Java SE 11, kiu daŭre ricevos ĝisdatigojn ĝis 2026. La antaŭa LTS-filio de Java 8 estos subtenata ĝis decembro 2020. La venonta LTS-eldono estas planita por septembro 2021. Ni memorigu vin, ke ekde la liberigo de Java 10, la projekto ŝanĝis al nova evoluprocezo, kio implicas pli mallongan ciklon por la formado de novaj eldonoj. Nova funkcieco nun estas evoluigita en unu konstante ĝisdatigita majstra branĉo, kiu inkluzivas pretajn ŝanĝojn kaj de kiuj branĉoj estas disbranĉigitaj ĉiujn ses monatojn por stabiligi novajn eldonojn.

De novigoj Java 14 povas markon:

  • Aldonita eksperimenta subteno ŝablona kongruo en la "instanceof" operatoro, kiu permesas vin tuj difini lokan variablon por aliri la kontrolitan valoron. Ekzemple, vi povas tuj skribi "se (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" sen eksplicite difini "String s = (String) obj".

    Estis:

    if (obj instanceof Group) {
    Grupo grupo = (Group)obj;
    var enskriboj = group.getEntries ();
    }

    Nun vi povas malhavi la difinon "Grupo = (Grupo) obj":

    if (obj instanceof Grupo grupo) {
    var enskriboj = group.getEntries ();
    }

  • Aldonita eksperimenta subteno por la nova ŝlosilvorto "rekordo", kiu provizas kompaktan formon por difini klasojn, ebligante al vi eviti eksplicite difini diversajn malaltnivelajn metodojn kiel equals(), hashCode() kaj toString() en kazoj kie datumoj estas stokitaj nur en kampoj kies konduto ne ŝanĝiĝas. Kiam klaso uzas normajn efektivigojn de la metodoj equals(), hashCode() kaj toString(), ĝi povas fari sen ilia eksplicita difino:

    publika rekordo BankTransaction (LocalDate dato,
    duobla kvanto
    Ĉenpriskribo) {}

    Ĉi tiu deklaro aŭtomate aldonos efektivigojn de la metodoj equals(), hashCode() kaj toString() krom la metodoj konstruktilo kaj getter.

  • Normigita kaj subteno por nova formo de "ŝanĝi" esprimoj estas ebligita defaŭlte, kiu ne postulas specifi la "rompi" operatoron, permesas vin kombini ripetajn etikedojn kaj povas esti uzata ne nur en la formo de operatoro, sed ankaŭ kiel operatoro. esprimo.

    var log = ŝaltilo (okazaĵo) {
    case PLAY -> "Uzanto ekigis la ludbutonon";
    kazo STOP, PAUSE -> "Uzanto bezonas paŭzon";
    defaŭlta -> {
    String message = event.toString ();
    LocalDateTime nun = LocalDateTime.nun();
    rendimento "Nekonata evento" + mesaĝo +
    » ensalutinta » + nun;
    }
    };

  • Plivastigita eksperimenta subteno tekstoblokoj - nova formo de ĉenaj literoj, kiu ebligas al vi inkluzivi plurliniajn tekstajn datumojn en la fontkodo sen uzi signan eskapon kaj konservi la originalan tekstformaton en la bloko. La bloko estas enkadrigita per tri citiloj. En Java 14, tekstblokoj nun subtenas la eskapsekvencon "\s" por difini ununuran spacon kaj "\" por kunliĝi kun la sekva linio (ignorante novliniojn kiam vi bezonas presi tre longan linion). Ekzemple, anstataŭ kodo

    Ŝnuro html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 estas ĉi tie!\" » +
    "\n\t" + " » +
    "\n" + " ";

    vi povas specifi:

    String html = """


    »Java 1\
    estas ĉi tie!

    """;

  • La informenhavo de diagnozoj kiam okazas esceptoj estis vastigita NullPointerException. Dum antaŭe la erarmesaĝo nur rilatis al la linionumero, nun ĝi detaligas, kiu metodo kaŭzis la escepton. Altnivelaj diagnozoj estas nuntempe ebligitaj nur kiam ĝi estas lanĉita kun la flago "-XX:+ShowCodeDetailsInExceptionMessages". Ekzemple, kiam oni specifas ĉi tiun flagon, la escepto en la linio

    var nomo = uzanto.getLocation().getCity().getName();

    rezultos en mesaĝo

    Escepto en fadeno "ĉefa" java.lang.NullPointerException: Ne povas alvoki "Location.getCity()"
    ĉar la revena valoro de "User.getLocation()" estas nula
    ĉe NullPointerExample.main(NullPointerExample.java:5):5)

    kio klarigas, ke la metodo Location.getCity() ne estis vokita kaj User.getLocation() resendis nula.

  • Efektivigita Antaŭrigardo de la ilo jpackage, kiu permesas krei pakaĵojn por memstaraj Java-aplikoj. La ilo baziĝas sur javapackager de JavaFX kaj permesas krei pakaĵojn en denaskaj formatoj al diversaj platformoj (msi kaj exe por Vindozo, pkg kaj dmg por macOS, deb kaj rpm por Linukso). La pakaĵoj inkluzivas ĉiujn postulatajn dependecojn.
  • Al la rubkolektisto G1 aldonis nova memor-asigna mekanismo kiu enkalkulas la specifaĵojn de laborado pri grandaj sistemoj uzantaj la arkitekturon EN. La nova memor-asignilo estas ebligita per la flago "+XX:+UseNUMA" kaj povas signife plibonigi rendimenton en NUMA-sistemoj.
  • Aldonita API por surla fluga monitorado de eventoj de JFR (JDK Flight Recorder), ekzemple por organizi kontinuan monitoradon.
  • Aldonita jdk.nio.mapmode modulo, kiu ofertas novajn reĝimojn (READ_ONLY_SYNC, WRITE_ONLY_SYNC) por krei mapitajn bajtajn bufrojn (MappedByteBuffer) referencantajn nevolatilan memoron (NVM).
  • Efektivigita Antaŭprezento de la Foreign-Memory Access API, permesante al Java-aplikoj sekure kaj efike aliri memorregionojn ekster la Java amaso manipulante la novajn abstraktaĵojn MemorySegment, MemoryAddress kaj MemoryLayout.
  • Anoncita malrekomenditaj havenoj por la Solaris OS kaj SPARC-procesoroj (Solaris/SPARC, Solaris/x64 kaj Linukso/SPARC) kun la intenco forigi ĉi tiujn havenojn en la estonteco. Malrekomendi ĉi tiujn havenojn permesos al la komunumo akceli la evoluon de novaj OpenJDK-funkcioj sen perdi tempon konservante Solaris- kaj SPARC-specifajn funkciojn.
  • Forigita la CMS (Samtempa Mark Sweep) rubkolektisto, kiu estis markita malnoviĝinta antaŭ du jaroj kaj restis neprizorgita (CMS estis anstataŭigita antaŭ longe per la G1 rubkolektisto). Cetere, anoncita malrekomendis la uzon de kombinaĵo de ParallelScavenge kaj SerialOld rubaĵkolektado-algoritmoj (kuru kun la opcioj "-XX:+UseParallelGC -XX:-UseParallelOldGC").
  • Eksperimenta subteno por la rubkolektilo ZGC (Z Garbage Collector) estis disponigita sur macOS kaj Vindozo platformoj (antaŭe subtenata nur en Linukso). ZGC funkcias en pasiva reĝimo, minimumigas latentecon pro rubkolekto kiel eble plej multe (halta tempo kiam uzado de ZGC ne superas 10 ms.) kaj povas funkcii kun kaj malgrandaj kaj grandegaj amasoj, intervalante en grandeco de kelkcent megabajtoj ĝis multaj terabajtoj.
  • Forigita Ilaro kaj API por kunpremi JAR-dosierojn uzante la Pack200-algoritmon.

fonto: opennet.ru

Aldoni komenton