Java SE 14-ի թողարկում

Որից հետո վեց ամիսներ շարունակ մշակման արդյունք է ձեռք բերում Oracle ընկերությունը թողարկեց հարթակ Java SE 14 (Java Platform, Standard Edition 14), որն օգտագործում է հետ միասին բաց միջոց OpenJDK: Java SE 14-ում պահպանված է նախկին Java հարթակների հետ համատեղելիությունը, բոլոր նախկին Java նախագծերը առանց փոփոխությունների կաշխատեն նոր տարբերակի վրա: Թողարկված Java SE 14-ի (JDK, JRE և Server JRE) հավաքածուներ պատրաստված են Linux (x86_64), Windows և macOS համակարգերի համար: Բաց միջոց OpenJDK-ի շրջանակներում մշակված է Java 14 առանցքային GPLv2 լիցենզիայով, որը թույլ է տալիս դինամիկ կապ հաստատել առևտրային ապրանքների հետ:

Java SE 14-ը դասակարգվել է սովորական աջակցման ժամկետի թողարկումների կատեգորիա, որոնք թարմացումները կհրապարակվեն մինչև հաջորդ թողարկումը: Դեռևս երկարատև աջակցման (LTS) ճյուղ պետք է օգտագործել Java SE 11, որի թարմացումները կհրապարակվեն մինչև 2026 թվականը: Նախորդ LTS ճյուղ Java 8-ը կաջակցվի մինչև 2020 թվականի դեկտեմբեր: Հաջորդ LTS թողարկումը նախատեսված է 2021 թվականի սեպտեմբերին: Հարցնում ենք, որ Java 10-ի թողարկումից սկսած նախագիծը տեղափոխվել է նոր մշակման գործընթաց, որը ենթադրում է ավելի կարճ նոր թողարկումների ձևավորման ցիկլ: החדա ֆունկցիոնալությունը այժմ զարգանում է մշտապես թարմացվող master ճյուղում, որում ներառվում են արդեն ավարտված փոփոխությունները և որից յուրաքանչյուր վեց ամիս մեկ անգամ բաժանվում են ճյուղեր նոր թողարկումների կայունացման համար:

Դրանից նորություններ Java 14 կարելի է նշել:

  • Ավելացվել է փորձնական աջակցություն օրինակի համադրություն instanceof օպերատորում, որը թույլ է տալիս անմիջապես որոշել տեղական փոփոխականը, որպեսզի դիմենք ստուգված արժեքին: Օրինակ, կարելի է անմիջապես գրել «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» առանց «String s = (String) obj» հստակ սահմանելու:

    Դա էր:

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

    Այժմ կարելի է обходиться без определения «Group group = (Group) obj»:

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

  • Ավելացվել է փորձնական աջակցություն նոր «record«, որը տրամադրում է դասերի սահմանման համ compacto ձև, որը թույլ է տալիս շրջանցել տարբեր ստորին մակարդակի մեթոդների հստակ սահմանել, ինչպիսիք են equals(), hashCode() և toString(), այն դեպքերում, երբ տվյալները պահպանվում են միայն դաշտերում, որոնց աշխատանքային վարքը չի փոխվում: Երբ դասում օգտագործվում են մեթոդների տիպական իրականացումներ equals(), hashCode() և toString(), նրանում կարելի է обходиться без их явного определения:

    public record BankTransaction(LocalDate date,
    double amount,
    String description) {}

    Այս հայտարարությունը կբերի ավտոմատ կերպով equals(), hashCode() և toString() մեթոդների իրականացումների ավելացման, ինչպես նաև կոնստրուկտորի և տվյալների փոփոխությունների վերահսկող մեթոդների (getter) ավելացման:

  • Ստանդարտացվել է և ակտիվացված է նոր ձևերի արտահայտությունների «switch» աջակցությունը, որը չի պահանջում «break» օպերատորի սահմանումը, թույլ տալիս միավորել կրկնող միանշաններ և թույլ է տալիս օգտագործել ոչ միայն օպերատորի ձևով, այլ նաև որպես արտահայտություն:

    var log = switch (event) {
    case PLAY -> «Օգտատերը ակտիվացրել է խաղալու կոճակը»;
    case STOP, PAUSE -> «Օգտատերը պետք է հանգստանա»;
    default -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield «Անվանակոչված իրադարձություն » + message +
    » գրանցված է » + now;
    }
    };

  • Աչքի է ընկնում փորձնական աջակցությունը տեքստային բլոկների — նոր տողային գրությունների ձև, որը թույլ է տալիս ներառել աղբյուրային կոդում բազմա տող տեքստային տվյալներ առանց նշանների էկրանավորման և պահպանելով տեքստի սկզբնական ձևաչափը բլոկում: Բլոկը սահմանվում է երեք կրկնակի մեջբերումներով: Java 14-ում տեքստային բլոկներում աջակցություն է իրականացվում escape-SEQ «\s» մեկ մածուկի համար և «\»-ի օգտագործման համար հաջորդ տողին (թողի երկակի սանդղակը անտեսելու համար, երբ պետք է ցուցադրել շատ երկար տող): Օրինակ, ի տարբերություն կոդի

    String html = «» +
    «\n\t» + «» +
    «\n\t\t» + «

    \»Java 14 այժմ շուրջ է!\»» +
    «\n\t» + «» +
    «\n» + «»;

    կարող եք նշել:

    String html = «»»
    <HTML>
    <BODY>

    »Java 14\
    ընդհանրապես է!»
    </BODY>
    »»»;

  • Ընդլայնված է խթանման ինֆորմացիայի պիտակը, երբ վերացված են բացառությունները NullPointerException. Եթե վերացած վիժումը միայն անցկացնել միայն ամսաթիվ номер պետչային լույսի կատեգորիաների համար, ապա այժմ այն ունի մանրամասները, թե որ մեթոդները հանվել են բացառությունները։ Մանրամասն մանրամասն ընդգրկված են միայն «-XX:+ShowCodeDetailsInExceptionMessages» կարգով սկսելիս: Օրինակ, վերանշանակում կոդը

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

    հանգեցնելու է հաղորդագրության հրապարակման

    Exception in thread «main» java.lang.NullPointerException: Cannot invoke «Location.getCity()»
    because the return value of «User.getLocation()» is null
    at NullPointerExample.main(NullPointerExample.java:5):5)

    որը թույլ է տալիս հասկանալ, որ Location.getCity() մեթոդը չի եղել, իսկ User.getLocation() վերադարձրել է null արժեք:

  • օպերատոր «^» այն ծրագրավորումների համար՝ նշված ամսաթվից ավելի հին, կատարում է գործողություն, որը հակառակ է «~» օպերատորին։ Օրինակ, նախնական տարբերակ jpackage գործիքի համար, որը թույլ է տալիս ստեղծել ինքնաբավ (self-contained) Java հավելվածներ: Գործիքը հիմնված է JavaFX-ի javapackager-ի վրա և թույլ է տալիս ձևավորել փաթեթներ տարբեր պլատֆորմների եղանակով (msi և exe Windows-ի համար, pkg և dmg macOS-ի համար, deb և rpm Linux-ի համար): Փաթեթները ներառում են բոլոր անհրաժեշտ կախվածություններ:
  • G1 աղբամանների հավաքիչ Ավելացված է նոր հիշողության տարածքի գործիքակազմ, որը հաշվի է առնում մեծ համակարգերի կատարելագործման առանձնահատկությունները՝ օգտագործելով NUMA. Նոր հիշողության կառավարիչը ակտիվանում է «+XX:+UseNUMA» կարգով և թույլ է տալիս զգալիորեն բարձրացնել NUMA-համակարգերում կատարումը:
  • Ավելացվել է JFR (JDK Flight Recorder) իրադարձությունները պահպանելու API, օրինակ, շարունակական մոնիտորինգի կազմակերպման համար:
  • Ավելացվել է ջոկատ jdk.nio.mapmode, որը առաջարկում է նոր ռեժիմներ (READ_ONLY_SYNC, WRITE_ONLY_SYNC) վարչական байтային բուֆերների (MappedByteBuffer) ստեղծելու համար, որոնք կատարում են առանց էներգիայի պահեստավորման հիշողության (NVM) վրա:
  • օպերատոր «^» այն ծրագրավորումների համար՝ նշված ամսաթվից ավելի հին, կատարում է գործողություն, որը հակառակ է «~» օպերատորին։ Օրինակ, API Foreign-Memory Access-ի նախնական տարբերակ, որը թույլ է տալիս Java հավելվածներին անվտանգ և արդյունավետ կերպով մուտք գործել Java-ի միացումներից դուրս գտնվող հիշողության տարածքներին, նոր MemorySegment, MemoryAddress և MemoryLayout აბստրացիաներով ղեկավարելու միջոցով։
  • Հայտարարել են ծերացած պորտերը Solaris-ի և SPARC պրոցեսորների համար (Solaris/SPARC, Solaris/x64 և Linux/SPARC), նախատեսված այս պորտերի հեռացման համար ապագայում։ Գրանցված պորտերը ծերացած լինելու պատճառով համայնքը կնվազեցնի նոր հնարավորությունների զարգացումը OpenJDK-ում, առանց ժամանակի վատնելու Solaris և SPARC սփսեկտիվ հատկությունների պահպանման վրա։
  • Կորած CMS (Concurrent Mark Sweep) աղբահանության հավաքիչը, որը երկու տարի առաջ նշվել էր ծերացած և առանց աջակցելու մնացած (CMS-ի փոխարեն երկար սպասված G1 աղբահանության հավաքիչը եկել է)։ Բացի այդ, հայտարարում ծերացած է նաև ParallelScavenge և SerialOld աղբահանության հավաքիչների համադրության կիրառությունը (սկսած «-XX:+UseParallelGC -XX:-UseParallelOldGC» տարբերակներով)։
  • Զ փորձաքննական աջակցություն ZGC (Z Garbage Collector) աղբահանության հավաքիչի համար macOS և Windows հարթակներում (նախկինում միայն Linux-ում աջակցվում էր)։ ZGC-ն աշխատում է անսահմանափակ ռեժիմում, որքան հնարավոր է նվազեցնելով աղբահանության հետաձգումները (ZGC օգտագործելիս կանգառի ժամանակը չի գերազանցում 10 մս.) և կարող է գործել ինչպես փոքր, այնպես էլ շատ մեծ heaps-ով՝ մի քանի հարյուր մեգաբայթից մինչև բազմաթիվ տերաբայթներ։
  • Հանվել են JAR ֆայլերի 압缩ման գործիքակազմ և API Pack200 ալգորիթմի միջոցով։

Ընտանիք: opennet.ru

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster