Nach sechsmonatiger Entwicklung hat die Firma Oracle plattforms (Java-Plattform, Standard-Edition 14), deren Referenzimplementierung das OpenJDK-Projekt ist. In Java SE 14 bleibt die RĂŒckwĂ€rtskompatibilitĂ€t mit frĂŒheren Versionen der Java-Plattform erhalten, alle zuvor geschriebenen Java-Projekte werden ohne Ănderungen unter der neuen Version funktionieren. Fertige Installationsversionen von Java SE 14 (JDK, JRE und Server JRE) fĂŒr Linux (x86_64), Windows und macOS. Die Referenzimplementierung wurde im Rahmen des OpenJDK-Projekts entwickelt ist vollstĂ€ndig unter der GPLv2-Lizenz mit Ausnahmen von GNU ClassPath geöffnet, die dynamische Bindungen an kommerzielle Produkte erlauben.
Java SE 14 gehört zur Kategorie der Versionen mit regulĂ€rer UnterstĂŒtzung, Updates werden bis zur nĂ€chsten Veröffentlichung herausgegeben. FĂŒr die langfristige UnterstĂŒtzung (LTS) sollte Java SE 11 verwendet werden, Updates hierfĂŒr werden bis 2026 veröffentlicht. Die vorherige LTS-Version Java 8 wird bis Dezember 2020 unterstĂŒtzt. Die nĂ€chste LTS-Veröffentlichung ist fĂŒr September 2021 geplant. Es sei daran erinnert, dass mit der Veröffentlichung von Java 10 das Projekt auf einen neuen Entwicklungsprozess umgestiegen ist, der einen kĂŒrzeren Zyklus fĂŒr neue Releases vorsieht. Neue Funktionen werden jetzt in einer stĂ€ndig aktualisierten Master-Branch entwickelt, in die bereits fertige Ănderungen einflieĂen, und von der alle sechs Monate Branches zur Stabilisierung neuer Versionen abgezweigt werden.
Aus :
- Es wurde experimentelle UnterstĂŒtzung hinzugefĂŒgt im Operator âinstanceofâ, der es ermöglicht, sofort eine lokale Variable zum Zugriff auf den geprĂŒften Wert zu definieren. Zum Beispiel kann man sofort schreiben âif (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}â ohne die explizite Definition âString s = (String) objâ.
FrĂŒher:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}Jetzt kann man auf die Definition âGroup group = (Group) objâ verzichten:
if (obj instanceof Group group) {
var entries = group.getEntries();
} - Experimentelle UnterstĂŒtzung des neuen SchlĂŒsselworts ââ, das eine kompakte Form zur Definition von Klassen bereitstellt, die es ermöglicht, ohne explizite Definition verschiedener Low-Level-Methoden wie equals(), hashCode() und toString() auszukommen, wenn die Daten nur in Feldern gespeichert werden und das Verhalten im Umgang mit ihnen unverĂ€ndert bleibt. Wenn in der Klasse typisierte Implementierungen der Methoden equals(), hashCode() und toString() verwendet werden, kann auf deren explizite Definition verzichtet werden:
public record BankTransaction(LocalDate date,
double amount,
String description) {}Diese AnkĂŒndigung fĂŒhrt automatisch zur Implementierung der Methoden equals(), hashCode() und toString() zusĂ€tzlich zum Konstruktor und den Methoden, die die DatenĂ€nderung steuern (Getter).
- und standardmĂ€Ăig die UnterstĂŒtzung der neuen âswitchâ-Ausdrucksform hinzugefĂŒgt, die keinen âbreakâ-Operator erfordert, die es ermöglicht, wiederholte Labels zu kombinieren und die nicht nur als Anweisung, sondern auch als Ausdruck verwendet werden kann.
var log = switch (event) {
case PLAY -> âDer Benutzer hat die Play-Taste betĂ€tigtâ;
case STOP, PAUSE -> âDer Benutzer benötigt eine Pauseâ;
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield âUnbekanntes Ereignisâ + message +
â geloggt am â + now;
}
}; - Erweiterte experimentelle UnterstĂŒtzung â der neuen Form von Textliteralen, die es ermöglichen, mehrzeilige Textdaten ohne Escape-Zeichen in den Quellcode einzufĂŒgen und die ursprĂŒngliche Formatierung des Textes im Block beizubehalten. Ein Block wird durch drei doppelte AnfĂŒhrungszeichen umschlossen. In Java 14 bieten Textblöcke UnterstĂŒtzung fĂŒr die Escape-Sequenz â\sâ zur Definition eines Leerzeichens und â\â zur Verkettung mit der nĂ€chsten Zeile (Umgehung des Zeilenumbruchs, wenn eine sehr lange Zeile ausgegeben werden soll). Zum Beispiel statt des Codes
String html = "<HTML>" +
"\n\t" + "<BODY>" +
â\n\t\tâ + ââJava 14 ist da!â
â +
"\n\t" + "</BODY>" +
"\n" + "</HTML>";es kann angegeben werden:
String html = """
<HTML>
<BODY>âJava 14\
ist da!"</H1>
</BODY>
</HTML>"""; - Die Informationsgehaltsdiagnose wurde bei AusnahmefĂ€llen erweitert. . Wenn zuvor die Fehlermeldung lediglich auf die Zeilennummer verwies, wird jetzt detailliert beschrieben, welche Methode die Ausnahme verursacht hat. Die erweiterte Diagnostik kann derzeit nur beim Starten mit dem Flag â-XX:+ShowCodeDetailsInExceptionMessagesâ aktiviert werden. Beispielsweise fĂŒhrt die Angabe dieses Flags zu einer Ausnahme in der Zeile
var name = user.getLocation().getCity().getName();
die die folgende Meldung ausgibt:
Exception in thread âmainâ java.lang.NullPointerException: Cannot invoke âLocation.getCity()â
weil der RĂŒckgabewert von âUser.getLocation()â null ist.
at NullPointerExample.main(NullPointerExample.java:5):5)was es ermöglicht zu verstehen, dass die Methode Location.getCity() nicht aufgerufen wurde und User.getLocation() einen null-Wert zurĂŒckgegeben hat.
- eine Vorabversion des jpackage-Tools, das das Erstellen von Paketen fĂŒr eigenstĂ€ndige Java-Anwendungen ermöglicht. Das Werkzeug basiert auf javapackager aus JavaFX und ermöglicht die Erstellung von Paketen in Formaten, die fĂŒr verschiedene Plattformen typisch sind (msi und exe fĂŒr Windows, pkg und dmg fĂŒr macOS, deb und rpm fĂŒr Linux). Die Pakete enthalten alle erforderlichen AbhĂ€ngigkeiten.
- Im Garbage Collector G1 ein neuer Speichermanagementmechanismus, der die spezifischen Anforderungen von groĂen Systemen, die die -Architektur verwenden, berĂŒcksichtigt. Der neue Speicherverteiler wird mit dem Flag â+XX:+UseNUMAâ aktiviert und ermöglicht eine erhebliche Leistungssteigerung auf NUMA-Systemen.
- API zur Echtzeitverfolgung von JFR-Ereignissen (JDK Flight Recorder), zum Beispiel zur Implementierung einer kontinuierlichen Ăberwachung.
- das Modul jdk.nio.mapmode, das neue Modi (READ_ONLY_SYNC, WRITE_ONLY_SYNC) fĂŒr die Erstellung von abgebildeten Byte-Puffern (MappedByteBuffer) anbietet, die auf nichtflĂŒchtigen Speicher (NVM) verweisen.
- eine Vorabversion der API Foreign-Memory Access, die es Java-Anwendungen ermöglicht, sicher und effizient auf Speicherbereiche auĂerhalb des Java-Heaps zuzugreifen, indem sie mit neuen Abstraktionen wie MemorySegment, MemoryAddress und MemoryLayout arbeiten.
- veraltete Ports fĂŒr das Betriebssystem Solaris und die SPARC-Prozessoren (Solaris/SPARC, Solaris/x64 und Linux/SPARC), mit der Absicht, diese Ports in Zukunft zu entfernen. Der Ăbergang der genannten Ports in den Status veraltet wird der Community ermöglichen, die Entwicklung neuer Funktionen fĂŒr OpenJDK zu beschleunigen, ohne Zeit mit der Wartung von Solaris- und SPARC-spezifischen Merkmalen zu verbringen.
- den Garbage Collector CMS (Concurrent Mark Sweep), der vor zwei Jahren als veraltet gekennzeichnet wurde und nicht mehr gewartet wird (der Garbage Collector G1 hat den CMS bereits ersetzt). DarĂŒber hinaus, Veraltete Anwendung der Kombinationsalgorithmen fĂŒr die Garbage Collection ParallelScavenge und SerialOld (Start mit den Optionen â-XX:+UseParallelGC -XX:-UseParallelOldGCâ).
- Experimentelle UnterstĂŒtzung des Garbage Collectors ZGC (Z Garbage Collector) auf den Plattformen macOS und Windows (zuvor nur unter Linux unterstĂŒtzt). ZGC arbeitet im passiven Modus und minimiert so weit wie möglich die Verzögerungen durch die Garbage Collection (Die Stop-Zeit bei Verwendung von ZGC ĂŒbersteigt nicht 10 ms.) und kann sowohl mit kleinen als auch mit riesigen Heaps von mehreren Hundert Megabyte bis zu mehreren Terabyte arbeiten.
- Werkzeuge und API zum Komprimieren von JAR-Dateien unter Verwendung des Algorithmus Pack200.
Quelle: opennet.ru
