Veröffentlichung von Java SE 15

Nach sechsmonatiger Entwicklung hat die Firma Oracle hat plattforms Java SE 15 (Java Platform, Standard Edition 15), dessen Referenzimplementierung das OpenJDK-Projekt nutzt. Java SE 15 gewĂ€hrleistet die AbwĂ€rtskompatibilitĂ€t mit frĂŒheren Versionen der Java-Plattform; alle zuvor geschriebenen Java-Projekte funktionieren ohne Änderungen unter der neuen Version. Installationsfertige Builds von Java SE 15 (JDK, JRE und Server JRE) wurden vorbereitet fĂŒr Linux (x86_64), Windows und macOS. Die Referenzimplementierung wurde im Rahmen des OpenJDK-Projekts entwickelt Java 15 ist vollstĂ€ndig unter der GPLv2-Lizenz mit Ausnahmen von GNU ClassPath geöffnet, die dynamische Bindungen an kommerzielle Produkte erlauben.

Java SE 15 gehört zur Kategorie der Versionen mit gewöhnlichem Supportzeitraum, fĂŒr die Updates bis zur nĂ€chsten Veröffentlichung bereitgestellt werden. FĂŒr Versionen mit langfristigem Support (LTS) sollte Java SE 11 verwendet werden, fĂŒr die Updates bis 2026 bereitgestellt werden. Die vorherige LTS-Version, Java 8, wird bis Dezember 2020 unterstĂŒtzt. Die nĂ€chste LTS-Version wird fĂŒr September 2021 erwartet. Zur Erinnerung: Ab der Veröffentlichung von Java 10 ist das Projekt auf einen neuen Entwicklungsprozess umgestiegen, der einen kĂŒrzeren Zyklus fĂŒr die Erstellung neuer Versionen vorsieht. Neue Funktionen werden nun in einem durchgehend aktualisierten Master-Zweig entwickelt, der bereits fertige Änderungen enthĂ€lt und von dem alle sechs Monate Zweige zur Stabilisierung neuer Versionen abgezweigt werden.

Aus Neuheiten Java 15 kann man vermerken:

  • Integriert UnterstĂŒtzung des EdDSA-Signaturalgorithmus (Edwards-Curve Digital Signature Algorithm) RFC 8032). Die vorgeschlagene EdDSA-Implementierung ist plattformunabhĂ€ngig, resistent gegen Angriffe ĂŒber SeitenkanĂ€le (alle Berechnungen erfolgen in konstanter Zeit) und ĂŒbertrifft hinsichtlich der Leistung die bestehende ECDSA-Implementierung, die in C geschrieben ist, bei gleichem Schutzniveau. Zum Beispiel zeigt EdDSA unter Verwendung einer elliptischen Kurve mit einem 126-Bit-SchlĂŒssel eine Leistung, die der von ECDSA mit der elliptischen Kurve secp256r1 und einem 128-Bit-SchlĂŒssel entspricht.
  • HinzugefĂŒgt Experimentelle UnterstĂŒtzung fĂŒr versiegelte („sealed“) Klassen und Schnittstellen, die von anderen Klassen und Schnittstellen nicht zur Vererbung, Erweiterung oder Überlagerung der Implementierung verwendet werden können. Versiegelte Klassen bieten außerdem eine deklarativere Möglichkeit, die Verwendung einer Superklasse zu beschrĂ€nken als Zugriffsmodifikatoren, indem sie explizit eine Liste von Unterklassen angeben, die zur Erweiterung zugelassen sind.

    package com.example.geometry;

    public sealed class Shape
    permits com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {
}

  • HinzugefĂŒgt UnterstĂŒtzung fĂŒr versteckte Klassen, die nicht direkt von den Bytecodes anderer Klassen verwendet werden können. Der Hauptzweck versteckter Klassen besteht darin, in Frameworks verwendet zu werden, die wĂ€hrend der Laufzeit Klassen dynamisch generieren und diese indirekt ĂŒber Reflexion. Solche Klassen haben normalerweise eine begrenzte Lebensdauer, weshalb ihre UnterstĂŒtzung fĂŒr den Zugriff aus statisch generierten Klassen nicht gerechtfertigt ist und nur zu einem erhöhten Speicherverbrauch fĂŒhrt. Versteckte Klassen ermöglichen auch den Verzicht auf die nicht standardmĂ€ĂŸige API sun.misc.Unsafe::defineAnonymousClass, die in Zukunft entfernt werden soll.
  • Der Garbage Collector ZGC (Z Garbage Collector) wurde stabilisiert und als bereit fĂŒr den breiten Einsatz anerkannt. ZGC arbeitet im passiven Modus, minimiert so weit wie möglich Verzögerungen durch Garbage Collection (die Stop-Zeit bei Verwendung von ZGC ĂŒberschreitet 10 ms nicht) und kann sowohl mit kleinen als auch mit riesigen Haufen von mehreren hundert Megabyte bis hin zu vielen Terabyte arbeiten.
  • Wurde stabilisiert und als bereit fĂŒr den breiten Einsatz anerkannt
    Garbage Collector Shenandoah, der mit minimalen Unterbrechungen (Low-Pause-Time Garbage Collector) arbeitet. Shenandoah wurde von Red Hat entwickelt und zeichnet sich durch die Verwendung eines Algorithmus aus, der die Stop-Zeiten wĂ€hrend der Garbage Collection verringert, indem die Bereinigung parallel zur AusfĂŒhrung von Java-Anwendungen erfolgt. Die vom Garbage Collector verursachten Verzögerungen sind vorhersehbar und hĂ€ngen nicht von der HaufengrĂ¶ĂŸe ab, d.h. fĂŒr Haufen von 200 MB und 200 GB sind die Verzögerungen identisch (ĂŒberschreiten nicht 50 ms und liegen normalerweise bei 10 ms);
  • Die UnterstĂŒtzung fĂŒr Textblöcke wurde stabilisiert und in die Sprache eingefĂŒhrt — eine neue Form von Zeichenliteralen, die es ermöglicht, mehrzeilige Textdaten in den Quellcode einzufĂŒgen, ohne Zeichen maskieren zu mĂŒssen, und die ursprĂŒngliche Formatierung des Textes im Block beizubehalten. Der Block wird durch drei doppelte AnfĂŒhrungszeichen umschlossen.

    Zum Beispiel kann anstelle von

    String html = "<HTML>" +
    "\n\t" + "<BODY>" +
    "\n\t\t" + "<H1>\"Java 15 ist da!\"</H1>" +
    "\n\t" + "</BODY>" +
    "\n" + "</HTML>";

    es kann angegeben werden:

    String html = """
    <HTML>
    <BODY>
    <H1>"Java 15\
    ist da!"</H1>
    </BODY>
    </HTML>""";

  • Überarbeitet API Legacy DatagramSocket. Alte Implementierungen von java.net.DatagramSocket und java.net.MulticastSocket wurden durch eine moderne Implementierung ersetzt, die einfacher zu debuggen und zu warten ist und die mit den virtuellen Threads kompatibel ist, die im Rahmen des Projekts entwickelt werden. Loom. Um mögliche KompatibilitĂ€tsprobleme mit bestehendem Code zu vermeiden, wurde die alte Implementierung nicht entfernt und kann mit der Option jdk.net.usePlainDatagramSocketImpl aktiviert werden.
  • Eine zweite experimentelle Implementierung wurde vorgeschlagen Musterabgleich 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();
    }

  • Vorgeschlagen die zweite experimentelle Implementierung des SchlĂŒsselworts „record“, 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).

  • Vorgeschlagen der zweite Vorab-Entwurf der API fĂŒr den Zugriff auf fremden Speicher, der es Java-Anwendungen ermöglicht, sicher und effizient auf Speicherseiten außerhalb des Java-Haufs zuzugreifen, indem neue Abstraktionen wie MemorySegment, MemoryAddress und MemoryLayout verwendet werden.
  • Deaktiviert und die Technik der Biased Locking, die in der HotSpot JVM zur Reduzierung der Kosten durch Sperren verwendet wurde, wurde als veraltet erklĂ€rt. Diese Technik ist auf Systemen mit atomaren Anweisungen, die von modernen CPUs bereitgestellt werden, nicht mehr relevant und ist aufgrund ihrer KomplexitĂ€t zu wartungsintensiv.
  • Der Mechanismus RMI Activation wurde als veraltet erklĂ€rt, der in einer der nĂ€chsten Versionen entfernt wird. Es wird darauf hingewiesen, dass RMI Activation seit Java 8 als veraltet gilt und kaum noch in der modernen Praxis verwendet wird.
  • Entfernt Die JavaScript-Engine Nashorn, die in Java SE 11 als veraltet erklĂ€rt wurde.
  • Entfernt Ports fĂŒr das Betriebssystem Solaris und SPARC-Prozessoren (Solaris/SPARC, Solaris/x64 und Linux/SPARC). Das Entfernen der angegebenen Ports wird der Community ermöglichen, die Entwicklung neuer Funktionen fĂŒr OpenJDK zu beschleunigen, ohne Zeit mit der Pflege von spezifischen Besonderheiten fĂŒr Solaris und SPARC zu verschwenden.

Quelle: opennet.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster