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
