PĂ€rast kuut kuud arendust on ettevĂ”te Oracle platvormi (Java Platform, Standard Edition 14), mille referentse rakendusena kasutatakse avatud projekti OpenJDK. Java SE 14 sĂ€ilitab tagasipööratavuse eelnevate Java platvormi versioonide suhtes, kĂ”ik varasemad Java projektid töötavad muutumatult uue versiooni all. Paigaldamiseks valmis Java SE 14 (JDK, JRE ja Server JRE) paketid. Linuxile (x86_64), Windowsile ja macOS-ile. OpenJDK projekti raames vĂ€lja töötatud referentsrealiseerimine on tĂ€iesti avatud GPLv2 litsentsi all koos GNU ClassPath eranditega, mis lubavad dĂŒnaamilist sidumist kommertstooteid.
Java SE 14 kuulub tavapĂ€raste tugiperioodidega vĂ€ljalaste hulka, mille uuendused ilmuvad kuni jĂ€rgimise vĂ€ljalaske kuupĂ€evani. Pikaajalise toe (LTS) haruna tuleks kasutada Java SE 11, mille uuendused ilmuvad kuni 2026. aastani. Eelmine LTS-haru Java 8 toetatakse kuni 2020. aasta detsembrini. JĂ€rgmine LTS-vĂ€ljastus on planeeritud 2021. aasta septembriks. Tasub meenutada, et alates Java 10 vĂ€ljalaskest on projekt lĂ€inud ĂŒle uuele arendusprotsessile, mis hĂ”lmab lĂŒhemaid uusi vĂ€ljalaske tsĂŒkleid. Uus funktsionaalsus arendatakse nĂŒĂŒd ĂŒhes pidevalt uuendatavas master-harus, kuhu lisatakse valmis muudatused ja millest eraldatakse kord kuue kuu jooksul uute vĂ€ljalaskete stabiliseerimise harud.
Uusimad :
- Eksperimentaalne tugi on lisatud instanceof operaatoris, mis vÔimaldab kohe mÀÀrata lokaalse muutuja kontrollitud vÀÀrtusele viitamiseks. NÀiteks saab kirjutada "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" ilma, et peaks selgelt mÀÀratlema "String s = (String) obj".
Oli:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}NĂŒĂŒd saab loobuda mÀÀratlemast "Group group = (Group) obj":
if (obj instanceof Group group) {
var entries = group.getEntries();
} - Lisatud eksperimentaalne toetuse uus vĂ”tmesĂ”na ««, pakkudes kompaktset vormi klasside mÀÀratlemiseks, mis vĂ”imaldab vĂ€ltida erinevate madalama taseme meetodite, nagu equals(), hashCode() ja toString(), selget mÀÀratlemist, juhtudel, kui andmed salvestatakse ainult vĂ€ljadessse, mille kasutus ei muutu. Kui klassis kasutatakse tĂŒĂŒpide pĂ”hjalike meetodite equals(), hashCode() ja toString() realiseerimisi, siis saab neist ilma selgelt mÀÀratlemata hakkama:
public record BankTransaction(LocalDate date,
double amount,
String description) {}See deklareerimine toob automaatselt kaasa meetodite equals(), hashCode() ja toString() rakenduste lisamise koos konstruktorite ja andmete muutmise (getterite) juhtimise meetoditega.
- ja vaikimisi sisse lĂŒlitatud uus vorm «switch», mis ei nĂ”ua «break» operaatorit, vĂ”imaldades ĂŒhendada korduvad mĂ€rgid ning kasutada seda mitte ainult operaatorina, vaid ka vĂ€ljendina.
var log = switch (event) {
case PLAY -> «Kasutaja on kÀivitanud mÀngimise nupu»;
case STOP, PAUSE -> «Kasutaja vajab puhkust»;
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield «Tundmatu sĂŒndmus » + message +
» logitud » + now;
}
}; - Laienev eksperimentaalne tugi â uue vormi stringi literaalide toetuseks, mis vĂ”imaldavad hĂ”lmata lĂ€htekoodis mitmerealisi tekstiandeid ilma sĂŒmbolite pĂ”genemiseta ja sĂ€ilitades teksti algse vormingu plokis. Ploki raamistamine toimub kolme topeltkĂ”rge jutumĂ€rgi abil. Java 14-s on tekstiplokkides rakendatud escape-jĂ€rjendite «\s» toetust ĂŒhe tĂŒhiku mÀÀramiseks ja «\» ĂŒhendamiseks jĂ€rgmise reaga (rea vahetuse ignoreerimine, kui on vaja kuvada vĂ€ga pikka rida). NĂ€iteks, selle asemel, et koodi
String html = «<HTML>» +
«\n\t» + «<BODY>» +
«\n\t\t» + «<H1>\»Java 14 on siin!\»</H1>» +
«\n\t» + «</BODY>» +
«\n» + «</HTML>»;vÔib kirjutada:
String html = «»»
<HTML>
<BODY>
<H1>»Java 14\
on kohal!»</H1>
</BODY>
</HTML>»»»; - Diagnoosimise teave on laiendatud erandite korral . Kui varem viitas veateade ainult rea numbrile, siis nĂŒĂŒd tĂ€psustatakse, milline meetod pĂ”hjustas erandi. Laiendatud diagnostika aktiveeritakse praegu ainult kĂ€ivitamisel lipuga â-XX:+ShowCodeDetailsInExceptionMessagesâ. NĂ€iteks kui kasutada seda lippu, siis erand real
var name = user.getLocation().getCity().getName();
annab jÀrgmise veateate
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)mis aitab mÔista, et meetodit Location.getCity() ei kutsutud, vaid User.getLocation() tagastas nulli.
- eellise versioon jpackage utiliidist, mis vÔimaldab luua pakette iseseisvatele (self-contained) Java rakendustele. Tööriist pÔhineb JavaFX-i javapackager'il ja vÔimaldab luua pakette erinevates formaatides, mis on spetsiifilised erinevatele platvormidele (msi ja exe Windowsile, pkg ja dmg macOS-le, deb ja rpm Linuxile). Pakendid sisaldavad kÔiki vajalikke sÔltuvusi.
- G1 prĂŒgikoguja uus mĂ€lu jagamise mehhanism, mis arvestab suurte sĂŒsteemide spesifikaga, mille arhitektuur on . Uus mĂ€lja jagaja aktiveeritakse lipuga «+XX:+UseNUMA» ja see vĂ”imaldab oluliselt tĂ”sta jĂ”udlust NUMA-sĂŒsteemides.
- API jooksva JFR (JDK Flight Recorder) sĂŒndmuste jĂ€lgimiseks, nĂ€iteks pideva monitooringu korraldamiseks.
- modul jdk.nio.mapmode, mis pakub uusi reĆŸiime (READ_ONLY_SYNC, WRITE_ONLY_SYNC) mappitud baitide puutmete (MappedByteBuffer) loomiseks, mis viitavad mittefassaadsele mĂ€lule (NVM).
- eelversioon Foreign-Memory Access API-st, mis vÔimaldab Java rakendustel turvaliselt ja tÔhusalt juurde pÀÀseda Java hulgast vÀljapoole jÀÀvatele mÀlualadest, manipuleerides uute abstraktsioonidega MemorySegment, MemoryAddress ja MemoryLayout.
- ajaloo mÔttes aegunud portidele Solaris OS ja SPARC protsessoritele (Solaris/SPARC, Solaris/x64 ja Linux/SPARC) eesmÀrgiga need portid tulevikus eemaldada. Nende portide vananenuks kuulutamine vÔimaldab kogukonnal kiirendada uute vÔimaluste arendamist OpenJDK-s, raiskamata aega Solaris ja SPARC spetsiifiliste omaduste sÀilitamisele.
- jÀÀtme kogumise CMS (Concurrent Mark Sweep), mis kaks aastat tagasi kuulutati aegunuks ja jĂ€i hoolduseta (CMS-i asemel on juba ammu kasutusele vĂ”etud G1 jÀÀtme kogumine). Lisaks, aegunud koos kasutama algoritmide kombinatsiooni paralleelse prĂŒgikogumise ja SerialOld (kĂ€ivitamine valikutega â-XX:+UseParallelGC -XX:-UseParallelOldGCâ).
- Eksperimentaalne tugi ZGC (Z Garbage Collector) prĂŒgikogujale on tagatud macOSi ja Windowsi platvormidel (varem oli tugi saadaval ainult Linuxis). ZGC töötab passiivreĆŸiimis, pĂŒĂŒdlikult minimeerides prĂŒgikogumise tĂ”ttu tekkivaid viivitusi (stoppide aeg ZGC kasutamisel ei ĂŒleta 10 ms.) ja suudab töötada nii vĂ€ikeste kui ka suurte hulga kottidega, ulatudes sadadest megabaitidest kuni mitme terabaidini.
- tööriistakomplekt ja API JAR-failide tihendamiseks Pack200 algoritmi abil.
Allikas: opennet.ru
