PĂ€rast kuut kuud arendust esitles Oracle platvormi (Java platvorm, Standard Edition 14), mille standardrealiseerimiseks kasutatakse avatud projekti OpenJDK. Java SE 14 sĂ€ilitab tagasipööratavuse eelneva Java platvormi vĂ€ljaannete suhtes, kĂ”ik varem kirjutatud Java projektid töötavad probleemideta uue versiooni all. Java SE 14 installimiskohased versioonid (JDK, JRE ja Server JRE) Linuxi (x86_64), Windowsi ja macOS-i jaoks. Avatud projekt OpenJDK raames loodud etalonrealiseerimine on tĂ€ielikult avatud GPLv2 litsentsiga, millel on GNU ClassPath'i erandid, mis lubavad dĂŒnaamilist sidumist kommertstooteid.
Java SE 14 on klassifitseeritud regulaarselt toetatavate versioonide kategooriasse, mille vĂ€rskendusi vabastatakse jĂ€rgmise vĂ€ljaandeni. Pikemaajalise toe haruna peaks kasutama Java SE 11, mille vĂ€rskendusi antakse vĂ€lja kuni 2026. aastani. Eelmine LTS haru Java 8 toetatakse kuni 2020. aasta detsembrini. JĂ€rgmine LTS vĂ€ljaanne on planeeritud 2021. aasta septembriks. Meeldetuletuseks, alates Java 10 vĂ€ljaandest on projekt lĂ€inud ĂŒle uuele arendusprotsessile, mis hĂ”lmab lĂŒhemat uute vĂ€ljaannete arendamise tsĂŒklit. Uus funktsionaalsus areneb nĂŒĂŒd pidevalt uuendatava master-haru kaudu, kuhu tuuakse sisse valmis muudatused ja millelt hargneb iga kuue kuu tagant haru uute vĂ€ljaannete stabiliseerimiseks.
Kuna :
- Lisatud katsetav tugi instanceof operatsioonis, mis vÔimaldab kohe mÀÀrata kohalikku muutuja kontrollitud vÀÀrtusele viitamiseks. NÀiteks saab kohe kirjutada "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" ilma "String s = (String) obj" selges mÀÀratlemiseta.
Oli:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}NĂŒĂŒd saab ilma "Group group = (Group) obj" mÀÀratlemiseta hakkama:
if (obj instanceof Group group) {
var entries = group.getEntries();
} - Lisatud katsetamine uue vĂ”tmesĂ”na "" , mis pakub kompaktset vormi klasside mÀÀramiseks, vĂ”imaldades vĂ€ltida madala taseme meetodite nagu equals(), hashCode() ja toString() selget mÀÀratlemist, kui andmed salvestatakse ainult vĂ€ljadele, mille kĂ€itumine ei muutu. Kui klassis kasutatakse tĂŒĂŒplahendusi meetodite equals(), hashCode() ja toString() jaoks, saab neist ilma selge mÀÀratlemiseta hakkama:
public record BankTransaction(LocalDate date,
double amount,
String description) {}See mÀÀratlemine toob automaatselt kaasa meetodite equals(), hashCode() ja toString() teostuste lisamise koos konstruktoriga ja meetoditega, mis kontrollivad andmete muutmist (getter).
- ja vaikimisi aktiveeritud uue "switch" vĂ€ljendivormi tugi, mis ei vaja "break" operaatorit, vĂ”imaldades ĂŒhendada korduvaid silte ja lubades kasutada mitte ainult operaatorina, vaid ka vĂ€ljendina.
var log = switch (event) {
case PLAY -> "Kasutaja kÀivitas mÀngimise nupu";
case STOP, PAUSE -> "Kasutaja vajab pausi";
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield "Tundmatu sĂŒndmus " + message +
" registreeritud " + now;
}
}; - Suurem katsetamine â uue stringi literaalide vormi tugi, mis vĂ”imaldab lisada lĂ€htekoodi mitmerealisi tekstilisi andmeid, ilma et oleks vaja sĂŒmboleid escape'ida ja sĂ€ilitades teksti algse vorminduse plokis. Ploki raami moodustavad kolm topelt tsitaati. Java 14 toetab tekstiplokkides escape-jĂ€rjendeid "\s" ĂŒhe tĂŒhiku mÀÀratlemiseks ja "\" jĂ€rgmise reali ĂŒhendamiseks (uue rea ignoreerimine, kui on vaja kuvada vĂ€ga pika stringi). NĂ€iteks asemel kood
String html = "" +
"\n\t" + "" +
"\n\t\t" + ""Java 14 is here!"" +
"\n\t" + "" +
"\n" + "";saab mÀÀrata:
String html = """
<HTML>
<BODY>"Java 14\
on kohal!"
</BODY>
"""; - Diagnostics have been enhanced for exception handling. . Previously, the error message only referenced the line number, but now it details which method triggered the exception. Detailed diagnostics are currently enabled only when started with the flag "-XX:+ShowCodeDetailsInExceptionMessages". For instance, when using this flag, the exception in line
var name = user.getLocation().getCity().getName();
will lead to the following output:
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)which clarifies that the method Location.getCity() was not called, and User.getLocation() returned a null value.
- a preliminary version of the jpackage utility, allowing for the creation of packages for self-contained Java applications. The utility is based on javapackager from JavaFX and enables the formation of packages in formats native to various platforms (msi and exe for Windows, pkg and dmg for macOS, deb and rpm for Linux). Packages include all required dependencies.
- In the G1 garbage collector, a new memory distribution mechanism that considers the specifics of operation on large systems using an architecture . The new memory distributor is activated using the flag "+XX:+UseNUMA" and can significantly improve performance on NUMA systems.
- an API for real-time event tracking JFR (JDK Flight Recorder), for instance for organizing continuous monitoring.
- the jdk.nio.mapmode module, offering new modes (READ_ONLY_SYNC, WRITE_ONLY_SYNC) for creating mapped byte buffers (MappedByteBuffer) that reference non-volatile memory (NVM).
- a preliminary version of the Foreign-Memory Access API, allowing Java applications to access memory areas outside of the Java heap safely and efficiently using new abstractions MemorySegment, MemoryAddress, and MemoryLayout.
- deprecated (Solaris/SPARC, Solaris/x64, and Linux/SPARC), with the intention to remove these ports in the future. Declaring these ports as deprecated will allow the community to accelerate the development of new OpenJDK features without spending time maintaining Solaris and SPARC-specific aspects.
- the CMS garbage collector (Concurrent Mark Sweep), which was marked as deprecated two years ago and has been left without support (the G1 garbage collector has long replaced CMS). Additionally, vananenud kombinatsioonide algoritmide kasutamine kogumiskogumites ParallelScavenge ja SerialOld (kÀivitamine valikutega «-XX:+UseParallelGC -XX:-UseParallelOldGC»).
- Eksperimentaalne tugi ZGC (Z Garbage Collector) kogumiskogumi jaoks on tagatud macOS ja Windows plaatformidel (varem toetas ainult Linux). ZGC töötab passiivses reĆŸiimis, minimeerides kogumiskogumi stagnatsiooni (ZGC kasutamisel ei ĂŒleta peatamise aeg 10 ms.) ja suudab töötada nii vĂ€ikeste kui ka hiiglaslike hunnikutega, mille suurus ulatub mitmest sadast megabaitist kuni paljude terabaitideni.
- tööriistade ja API JAR-failide pakkimise jaoks, kasutades algoritmi Pack200.
Allikas: opennet.ru
