Որից հետո վեց ամիսներ շարունակ մշակման արդյունք է ձեռք բերում Oracle ընկերությունը հարթակ (Java Platform, Standard Edition 14), որն օգտագործում է հետ միասին բաց միջոց OpenJDK: Java SE 14-ում պահպանված է նախկին Java հարթակների հետ համատեղելիությունը, բոլոր նախկին Java նախագծերը առանց փոփոխությունների կաշխատեն նոր տարբերակի վրա: Թողարկված Java SE 14-ի (JDK, JRE և Server JRE) հավաքածուներ Linux (x86_64), Windows և macOS համակարգերի համար: Բաց միջոց OpenJDK-ի շրջանակներում մշակված է առանցքային GPLv2 լիցենզիայով, որը թույլ է տալիս դինամիկ կապ հաստատել առևտրային ապրանքների հետ:
Java SE 14-ը դասակարգվել է սովորական աջակցման ժամկետի թողարկումների կատեգորիա, որոնք թարմացումները կհրապարակվեն մինչև հաջորդ թողարկումը: Դեռևս երկարատև աջակցման (LTS) ճյուղ պետք է օգտագործել Java SE 11, որի թարմացումները կհրապարակվեն մինչև 2026 թվականը: Նախորդ LTS ճյուղ Java 8-ը կաջակցվի մինչև 2020 թվականի դեկտեմբեր: Հաջորդ LTS թողարկումը նախատեսված է 2021 թվականի սեպտեմբերին: Հարցնում ենք, որ Java 10-ի թողարկումից սկսած նախագիծը տեղափոխվել է նոր մշակման գործընթաց, որը ենթադրում է ավելի կարճ նոր թողարկումների ձևավորման ցիկլ: החדա ֆունկցիոնալությունը այժմ զարգանում է մշտապես թարմացվող master ճյուղում, որում ներառվում են արդեն ավարտված փոփոխությունները և որից յուրաքանչյուր վեց ամիս մեկ անգամ բաժանվում են ճյուղեր նոր թողարկումների կայունացման համար:
Դրանից :
- Ավելացվել է փորձնական աջակցություն 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();
} - Ավելացվել է փորձնական աջակցություն նոր ««, որը տրամադրում է դասերի սահմանման համ 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>
»»»; - Ընդլայնված է խթանման ինֆորմացիայի պիտակը, երբ վերացված են բացառությունները . Եթե վերացած վիժումը միայն անցկացնել միայն ամսաթիվ номер պետչային լույսի կատեգորիաների համար, ապա այժմ այն ունի մանրամասները, թե որ մեթոդները հանվել են բացառությունները։ Մանրամասն մանրամասն ընդգրկված են միայն «-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 աղբամանների հավաքիչ նոր հիշողության տարածքի գործիքակազմ, որը հաշվի է առնում մեծ համակարգերի կատարելագործման առանձնահատկությունները՝ օգտագործելով . Նոր հիշողության կառավարիչը ակտիվանում է «+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
