Uitgave van Java SE 15

Na zes maanden ontwikkeling heeft Oracle heeft uitgebracht het platform Java SE 15 (Java Platform, Standard Edition 15), waarvan de referentie-implementatie het open-source project OpenJDK gebruikt. Java SE 15 behoudt de achterwaartse compatibiliteit met eerdere versies van het Java-platform, zodat alle eerder geschreven Java-projecten zonder wijzigingen kunnen draaien op de nieuwe versie. De gebruiksklare installaties van Java SE 15 (JDK, JRE en Server JRE) poorten voorbereid voor Linux (x86_64), Windows en macOS. De referentie-implementatie, ontwikkeld binnen het OpenJDK-project, Java 15 is volledig open onder de GPLv2-licentie met uitzonderingen van GNU ClassPath, die dynamisch linken met commerciële producten toestaan.

Java SE 15 valt onder de reguliere ondersteuningsversies, waarvan updates zullen worden uitgebracht tot de volgende release. Voor een lange termijn ondersteuningsbranch (LTS) moet Java SE 11 worden gebruikt, waarvan updates tot 2026 zullen worden uitgebracht. De vorige LTS-branch, Java 8, zal worden ondersteund tot december 2020. De volgende LTS-releases zijn gepland voor september 2021. Ter herinnering, vanaf de release van Java 10 is het project overgestapt op een nieuw ontwikkelingsproces met kortere cycli voor nieuwe releases. Nieuwe functionaliteit wordt nu ontwikkeld in één continue masterbranch, waarin al afgeronde wijzigingen worden opgenomen, en die elke zes maanden wordt vertakt voor stabilisatie van nieuwe releases.

Uit veranderingen Java 15 kan check:

  • Ingebouwd ondersteuning voor het EdDSA-handtekeningalgoritme (Edwards-Curve Digital Signature Algorithm) RFC 8032). De voorgestelde implementatie van EdDSA is onafhankelijk van hardwareplatforms, beschermd tegen aanvallen via zijkanalen (constante tijd voor alle berekeningen) en biedt betere prestaties dan de bestaande ECDSA-implementatie geschreven in C, met hetzelfde beveiligingsniveau. Bijvoorbeeld, EdDSA met een elliptische curve van 126-bits sleutel vertoont prestaties vergelijkbaar met ECDSA met de elliptische curve secp256r1 en een sleutel van 128 bits.
  • Toegevoegd experimentele ondersteuning van sealed-klassen en -interfaces die niet door andere klassen en interfaces voor overerving, uitbreiding of implementatie kunnen worden gebruikt. Sealed-klassen bieden ook een meer declaratieve manier om het gebruik van een superklasse te beperken dan toegangsmodifiers, gebaseerd op het expliciet vermelden van toegestane subklassen voor uitbreiding.

    package com.example.geometry;

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

  • Toegevoegd ondersteuning voor verborgen klassen die niet rechtstreeks door de bytecode van andere klassen kunnen worden gebruikt. Het belangrijkste doel van verborgen klassen is het gebruik in frameworks die klassen dynamisch genereren tijdens runtime en deze indirect gebruiken via reflectie. Dergelijke klassen hebben meestal een beperkte levensduur, dus het onderhouden ervan voor toegang vanuit statisch gegenereerde klassen is niet gerechtvaardigd en zal alleen leiden tot een verhoogd geheugengebruik. Verborgen klassen maken het ook mogelijk om zonder de niet-standaard API sun.misc.Unsafe::defineAnonymousClass te functioneren, die in de toekomst wordt verwijderd.
  • De ZGC (Z Garbage Collector) is gestabiliseerd en erkend als gereed voor algemeen gebruik. ZGC werkt in een passieve modus en minimaliseert, waar mogelijk, de vertragingen veroorzaakt door garbage collection (de pauzetijd bij gebruik van ZGC bedraagt niet meer dan 10 ms) en kan werken met zowel kleine als enorme heaps, variërend van enkele honderden megabytes tot meerdere terabytes.
  • De garbage collector
    Shenandoah , die werkt met minimale pauzes (Low-Pause-Time Garbage Collector). Shenandoah is ontwikkeld door Red Hat en is opmerkelijk vanwege het gebruik van een algoritme dat de pauzetijden tijdens garbage collection vermindert door het opruimen parallel uit te voeren met het uitvoeren van Java-applicaties. De vertragingen veroorzaakt door de garbage collector zijn voorspelbaar en zijn onafhankelijk van de grootte van de heap, wat betekent dat voor heaps van 200 MB en 200 GB de vertragingen identiek zijn (ze overschrijdenniet de 50 ms en liggen meestal rond de 10 ms); Ondersteuning voor
  • tekstblokken is gestabiliseerd en geïntroduceerd in de taal tekstblokken — nieuwe vormen van stringliteralen waarmee je meerregelige tekstgegevens zonder het ontsnappen van karakters in de broncode kunt opnemen en tegelijkertijd de oorspronkelijke opmaak van de tekst in het blok behoudt. Het omhulsel van het blok gebeurt met drie dubbele aanhalingstekens.

    Bijvoorbeeld, in plaats van de code

    String html = "" +
    "\n\t" + "" +
    «\n\t\t» + «

    \"Java 15 is here!\"

    » +
    "\n\t" + "" +
    "\n" + "";

    kan worden aangegeven:

    String html = """
    <HTML>
    <BODY>

    "Java 15\"
    is here!"


    </BODY>
    """;

  • Hervormd API Legacy DatagramSocket. Oude implementaties van java.net.DatagramSocket en java.net.MulticastSocket zijn vervangen door een moderne implementatie die makkelijker te debuggen en onderhouden is en bovendien compatibel is met virtuele threads die in het kader van het project worden ontwikkeld. Loom. Voor het geval er mogelijk compatibiliteitsproblemen met bestaande code optreden, is de oude implementatie niet verwijderd en kan deze worden geactiveerd met de optie jdk.net.usePlainDatagramSocketImpl.
  • Een tweede experimentele implementatie is voorgesteld patroonmatching met de operator 'instanceof', waarmee je direct een lokale variabele kunt definiëren voor toegang tot de gecontroleerde waarde. Bijvoorbeeld, je kunt direct schrijven "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" zonder expliciete definitie van "String s = (String) obj".

    Was:

    if (obj instanceof Group) {
    Group group = (Group) obj;
    var entries = group.getEntries();
    }

    Nu kun je zonder de definitie "Group group = (Group) obj".

    if (obj instanceof Group group) {
    var entries = group.getEntries();
    }

  • Een tweede experimentele implementatie van het sleutelwoord "record", dat een compacte vorm biedt voor het definiëren van klassen, zodat je kunt vermijden dat je verschillende laagdrempelige methoden zoals equals(), hashCode() en toString() expliciet hoeft te definiëren, in gevallen waarin de gegevens alleen in velden worden opgeslagen, waarvan het gedrag ongewijzigd blijft. Wanneer de typische implementaties van de methoden equals(), hashCode() en toString() in een klasse worden gebruikt, is er geen expliciete definitie nodig:

    public record BankTransaction(LocalDate date,
    double amount,
    String description) {}

    Deze aankondiging zal leiden tot de automatische toevoeging van implementaties van de methoden equals(), hashCode() en toString() naast de constructor en de methoden die de gegevenswijziging controleren (getter).

  • Voorgesteld de tweede voorlopige versie van de API Foreign-Memory Access, die Java-applicaties veilige en efficiënte toegang biedt tot geheugenruimten buiten de Java-heap, door middel van de nieuwe abstracties MemorySegment, MemoryAddress en MemoryLayout.
  • Uitgeschakeld en wordt beschouwd als verouderd, de optimalisatietechniek Biased Locking, die werd toegepast in de HotSpot JVM om overhead door blokkeringen te verminderen. Deze techniek is niet meer relevant op systemen met atomische instructies, die worden aangeboden door moderne CPU's, en is te arbeidsintensief om te onderhouden vanwege de complexiteit.
  • Aangekondigd als verouderd mechanisme RMI Activation, dat zal worden verwijderd in een van de volgende uitgaven. Opgemerkt wordt dat RMI Activation verouderd is, al in Java 8 naar de status van optie is verschoven en bijna niet meer in de moderne praktijk wordt toegepast.
  • Verwijderd JavaScript-engine Nashorn, dat als verouderd werd beschouwd in Java SE 11.
  • Verwijderd poorten voor het OS Solaris en SPARC-processors (Solaris/SPARC, Solaris/x64 en Linux/SPARC). Het verwijderen van deze poorten stelt de gemeenschap in staat om de ontwikkeling van nieuwe mogelijkheden voor OpenJDK te versnellen, zonder tijd te verspillen aan het onderhouden van kenmerken die specifiek zijn voor Solaris en SPARC.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster