После шести месяцев разработки компания Oracle платформу (Java Platform, Standard Edition 14), whose reference implementation is the open project OpenJDK. Java SE 14 maintains backward compatibility with previous releases of the Java platform; all previously written Java projects will work without changes when run on the new version. Ready-to-install builds of Java SE 14 (JDK, JRE, and Server JRE) za Linux (x86_64), Windows in macOS. Referenčna implementacija je bila razvita v okviru projekta OpenJDK полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с коммерческими продуктами.
Java SE 14 is categorized as a release with a regular support period, with updates being released until the next version. For a long-term support (LTS) branch, Java SE 11 should be used, with updates being released until 2026. The previous LTS branch, Java 8, will be supported until December 2020. The next LTS release is scheduled for September 2021. Note that starting with Java 10, the project has switched to a new development process that involves a shorter cycle for new releases. New functionality is now developed in a constantly updated master branch, which includes ready changes and from which stabilization branches for new releases diverge every six months.
Iz :
- Dodana eksperimentalna podpora u operatoru „instanceof“, koji omogućava trenutnu definiciju lokalne promenljive za pristup proverenoj vrednosti. Na primer, može se odmah napisati „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“ bez eksplicitne definicije „String s = (String) obj“.
Bilo je:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}Sada se može izbeći definicija „Group group = (Group) obj“:
if (obj instanceof Group group) {
var entries = group.getEntries();
} - Experimental support for the new keyword "“, koja pruža kompaktni oblik za definisanje klasa, omogućavajući izbegavanje eksplicitne definicije raznih niskonivo metodâ, kao što su equals(), hashCode() i toString(), u slučajevima kada se podaci čuvaju samo u poljima čije se ponašanje ne menja. Kada se u klasi koriste generičke implementacije metoda equals(), hashCode() i toString(), u njoj se može izbeći njihova eksplicitna definicija:
public record BankTransaction(LocalDate date,
double amount,
String description) {}Ta oglas bo avtomatsko dodal implementacije metod equals(), hashCode() in toString() poleg konstruktorja in metod, ki nadzorujejo spremembo podatkov (getter).
- and included by default support for a new form of the "switch" expression that does not require a "break" statement, allowing for the combination of duplicate labels and permitting its use not only as a statement but also as an expression.
var log = switch (event) {
case PLAY -> "User has triggered the play button";
case STOP, PAUSE -> "User needs a break";
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield "Unknown event " + message +
" logged on " + now;
}
}; - Expanded experimental support — for the new form of string literals that allow including multiline text data in the source code without escaping characters and preserving the original text formatting in the block. The block is enclosed in three double quotes. In Java 14, text blocks support the escape sequence "\s" for defining a single space and "\" for concatenating with the next line (ignoring the newline when outputting a very long string). For example, instead of the code
String html = "<HTML>" +
"\n\t" + "<BODY>" +
"\n\t\t" + ""Java 14 is here!"
" +
"\n\t" + "</BODY>" +
"\n" + "</HTML>";lahko zapišemo:
String html = """
<HTML>
<BODY>"Java 14
is here!"</H1>
</BODY>
</HTML>"""; - Povečana informativnost diagnosticiranja ob pojavu izjem . Če je prej sporočilo o napaki le navajalo številko vrstice, je zdaj podrobneje opisano, kateri od metod je povzročil izjemo. Povečana diagnostika se trenutno aktivira le ob zagonu s flagom „-XX:+ShowCodeDetailsInExceptionMessages“. Na primer, ko se navede ta flag, izjema v vrsti
var name = user.getLocation().getCity().getName();
privede do izpisa sporočila
Izjema v niti „main“ java.lang.NullPointerException: Ni mogoče poklicati „Location.getCity()“
saj je povratna vrednost „User.getLocation()“ null
na NullPointerExample.main(NullPointerExample.java:5):5)kar omogoča razumevanje, da metoda Location.getCity() ni bila poklicana, temveč je User.getLocation() vrnil vrednost null.
- predstavniška različica orodja jpackage, ki omogoča ustvarjanje paketov za samostojne (self-contained) Java aplikacije. Orodje temelji na javapackagerju iz JavaFX in omogoča oblikovanje paketov v formatih, specifičnih za različne plaftorme (msi in exe za Windows, pkg in dmg za macOS, deb in rpm za Linux). Paketi vključujejo vse potrebne odvisnosti.
- V zbiralcu odpadkov G1 nov mehanizem za dodeljevanje pomnilnika, ki upošteva specifičnost delovanja na velikih sistemih, ki uporabljajo arhitekturo . Nov dodeljevalec pomnilnika se aktivira z flagom „+XX:+UseNUMA“ in lahko znatno poveča zmogljivost na NUMA sistemih.
- API za spremljanje dogodkov v realnem času JFR (JDK Flight Recorder), na primer za organizacijo kontinuiranega monitoringa.
- modul jdk.nio.mapmode, ki ponuja nove načine (READ_ONLY_SYNC, WRITE_ONLY_SYNC) za ustvarjanje prikazanih bajtnih predpomnilnikov (MappedByteBuffer), povezanih z neodvisnim virom pomnilnika (NVM).
- predstavniška različica API Foreign-Memory Access, ki omogoča Java aplikacijam varno in učinkovito dostopati do pomnilniških območij zunaj Java kupčka, s manipulacijo z novimi abstrakcijami MemorySegment, MemoryAddress in MemoryLayout.
- deprecated porti za operacijski sistem Solaris in procesorje SPARC (Solaris/SPARC, Solaris/x64 in Linux/SPARC) z namenom, da se ti porti v prihodnosti odstranijo. Prehod navedenih portov v razred deprecated bo skupnosti omogočil hitrejši razvoj novih možnosti OpenJDK, ne da bi porabila čas za vzdrževanje posebnosti, specifičnih za Solaris in SPARC.
- zbiralec odpadkov CMS (Concurrent Mark Sweep), ki je pred dvema letoma bil označen kot deprecated in ostal brez podpore (na mesto CMS je že dolgo prišel zbiralec odpadkov G1). Poleg tega, Zastarjela upotreba kombinacije algoritama za sakupljanje smeća ParallelScavenge i SerialOld (pokretanje s opcijama „-XX:+UseParallelGC -XX:-UseParallelOldGC“).
- Osigurana je eksperimentalna podrška za sakupljač smeća ZGC (Z Garbage Collector) na platformama macOS i Windows (ranije je podržavan samo na Linuxu). ZGC radi u pasivnom režimu, maksimalno minimizirajući kašnjenja zbog sakupljanja smeća (vreme zaustavljanja pri korišćenju ZGC ne prelazi 10 ms) i može raditi sa malim ili ogromnim hrpama, veličine od nekoliko stotina megabajta do mnogo terabajta.
- Alat i API za kompresiju JAR datoteka koristeći algoritam Pack200.
Izvor: opennet.ru
