Java SE 15-release

Na zes maanden ontwikkeling is Oracle vrijgegeven het platform JavaSE 15 (Java Platform, Standard Edition 15), wordt het open-source OpenJDK-project gebruikt als referentie-implementatie. Java SE 15 onderhoudt achterwaartse compatibiliteit met eerdere releases van het Java-platform; alle eerder geschreven Java-projecten zullen zonder wijzigingen werken wanneer ze onder de nieuwe versie worden gelanceerd. Kant-en-klare Java SE 15-builds (JDK, JRE en Server JRE) bereid voor Linux (x86_64), Windows en macOS. Referentie-implementatie ontwikkeld door het OpenJDK-project Java 15 is volledig open source onder de GPLv2-licentie, met GNU ClassPath-uitzonderingen die dynamische koppeling met commerciële producten mogelijk maken.

Java SE 15 is geclassificeerd als een algemene ondersteuningsrelease en zal updates blijven ontvangen tot de volgende release. De Long Term Support (LTS)-tak zou Java SE 11 moeten zijn, die tot 2026 updates zal blijven ontvangen. De vorige LTS-tak van Java 8 wordt ondersteund tot december 2020. De volgende LTS-release staat gepland voor september 2021. Laten we u eraan herinneren dat het project vanaf de release van Java 10 is overgestapt op een nieuw ontwikkelingsproces, wat een kortere cyclus voor de vorming van nieuwe releases inhield. Nieuwe functionaliteit wordt nu ontwikkeld in één voortdurend bijgewerkte masterbranch, die kant-en-klare wijzigingen bevat en van waaruit elke zes maanden branches worden vertakt om nieuwe releases te stabiliseren.

Van innovaties Java 15 men kan mark:

  • Ingebouwd ondersteuning voor het EdDSA (Edwards-Curve Digital Signature Algorithm) algoritme voor het maken van digitale handtekeningen RFC 8032). De voorgestelde EdDSA-implementatie is niet afhankelijk van hardwareplatforms, is beschermd tegen zijkanaalaanvallen (constante tijd van alle berekeningen is verzekerd) en presteert sneller dan de bestaande ECDSA-implementatie geschreven in C-taal, met hetzelfde beschermingsniveau. EdDSA die een elliptische curve met een 126-bits sleutel gebruikt, vertoont bijvoorbeeld vergelijkbare prestaties als ECDSA met een secp256r1 elliptische curve en een 128-bits sleutel.
  • Toegevoegd experimentele ondersteuning voor verzegelde klassen en interfaces, die niet door andere klassen en interfaces kunnen worden gebruikt om de implementatie te erven, uit te breiden of te overschrijven. Verzegelde klassen bieden ook een meer declaratieve manier om het gebruik van een superklasse te beperken dan toegangsmodificatoren, gebaseerd op het expliciet opsommen van de subklassen die zijn toegestaan ​​voor uitbreiding.

    pakket com.voorbeeld.geometrie;

    openbare verzegelde klasse Vorm
    staat com.example.polar.Circle toe,
    com.voorbeeld.quad.Rechthoek,
    com.voorbeeld.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 om te worden gebruikt in raamwerken die tijdens runtime dynamisch klassen genereren en deze indirect gebruiken, via reflection. Dergelijke klassen hebben doorgaans een beperkte levenscyclus, dus het onderhouden ervan voor toegang vanuit statisch gegenereerde klassen is niet gerechtvaardigd en zal alleen maar leiden tot een groter geheugengebruik. Verborgen klassen elimineren ook de noodzaak van de niet-standaard API sun.misc.Unsafe::defineAnonymousClass, die in de toekomst zal worden verwijderd.
  • De afvalverzamelaar ZGC (Z Garbage Collector) is gestabiliseerd en wordt erkend als klaar voor wijdverbreid gebruik. ZGC werkt in passieve modus, minimaliseert de latentie als gevolg van garbagecollection zoveel mogelijk (de blokkeertijd bij gebruik van ZGC bedraagt ​​niet meer dan 10 ms) en kan werken met zowel kleine als enorme heaps, variërend in grootte van enkele honderden megabytes tot vele terabytes.
  • Gestabiliseerd en klaar bevonden voor algemeen gebruik
    vuilnisman Shenandoah, werken met minimale pauzes (Low-Pause-Time Garbage Collector). Shenandoah is ontwikkeld door Red Hat en valt op door het gebruik van een algoritme dat de wachttijd tijdens het ophalen van afval verkort door het opruimen parallel uit te voeren met de uitvoering van Java-applicaties. De grootte van de vertragingen die door de garbage collector worden geïntroduceerd, is voorspelbaar en hangt niet af van de grootte van de hoop, d.w.z. voor hopen van 200 MB en 200 GB zullen de vertragingen identiek zijn (kom er niet uit langer dan 50 ms en gewoonlijk binnen 10 ms);

  • Ondersteuning is gestabiliseerd en in de taal geïntroduceerd tekstblokken - een nieuwe vorm van letterlijke tekenreeksen waarmee u tekstgegevens van meerdere regels in de broncode kunt opnemen zonder gebruik te maken van teken-escaping en waarbij de originele tekstopmaak in het blok behouden blijft. Het blok wordt omlijst door drie dubbele aanhalingstekens.

    In plaats van code bijvoorbeeld

    Tekenreeks html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 is er!\" » +
    "\n\t" + " » +
    "\n" + " ";

    u kunt opgeven:

    Tekenreeks html = """


    »Java 1\
    is hier!

    """;

  • Opnieuw ontworpen Verouderde DatagramSocket-API. De oude implementaties van java.net.DatagramSocket en java.net.MulticastSocket zijn vervangen door een moderne implementatie die eenvoudiger te debuggen en te onderhouden is, en ook compatibel is met virtuele streams die binnen het project zijn ontwikkeld Loom. In geval van mogelijke incompatibiliteit met bestaande code is de oude implementatie niet verwijderd en kan deze worden ingeschakeld met behulp van de optie jdk.net.usePlainDatagramSocketImpl.
  • Tweede experimentele implementatie voorgesteld patroonafstemming in de operator “instanceof”, waarmee u onmiddellijk een lokale variabele kunt definiëren om toegang te krijgen tot de gecontroleerde waarde. U kunt bijvoorbeeld onmiddellijk schrijven “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” zonder expliciet “String s = (String) obj” te definiëren.

    Het was:

    if (obj-instantie van groep) {
    Groepsgroep = (Groeps)obj;
    var vermeldingen = group.getEntries();
    }

    Nu kun je het doen zonder de definitie “Groepsgroep = (Groeps) obj”:

    if (obj-instantievan groepsgroep) {
    var vermeldingen = group.getEntries();
    }

  • Suggereerde tweede experimentele implementatie van het trefwoord "record", dat een compacte vorm biedt voor het definiëren van klassen, waardoor u kunt voorkomen dat u expliciet verschillende methoden op laag niveau definieert, zoals equals(), hashCode() en toString() in gevallen waarin gegevens alleen worden opgeslagen in velden waarvan het gedrag niet verandert. Wanneer een klasse standaardimplementaties van de methoden equals(), hashCode() en toString() gebruikt, kan deze het doen zonder hun expliciete definitie:

    openbaar record BankTransaction(LocalDate date,
    dubbel bedrag
    Tekenreeksbeschrijving) {}

    Deze declaratie voegt automatisch implementaties toe van de methoden equals(), hashCode() en toString() naast de methoden constructor en getter.

  • Voorgesteld een tweede preview van de Foreign-Memory Access API, waarmee Java-applicaties veilig en efficiënt toegang kunnen krijgen tot geheugengebieden buiten de Java-heap door de nieuwe MemorySegment-, MemoryAddress- en MemoryLayout-abstracties te manipuleren.
  • Gehandicapt en heeft de Biased Locking-optimalisatietechniek die in de HotSpot JVM wordt gebruikt om de vergrendelingsoverhead te verminderen, afgeschaft. Deze techniek heeft zijn relevantie verloren op systemen met atomaire instructies van moderne CPU's, en is vanwege de complexiteit ervan te arbeidsintensief om te onderhouden.
  • Aangekondigd verouderd mechanisme RMI-activering, die in een toekomstige release zal worden verwijderd. Opgemerkt wordt dat RMI-activering verouderd is, gedegradeerd tot de categorie van een optie in Java 8 en in de moderne praktijk bijna nooit wordt gebruikt.
  • VERWIJDERD JavaScript-engine neushoorn, die is verouderd in Java SE 11.
  • Verwijderd poorten voor Solaris OS- en SPARC-processors (Solaris/SPARC, Solaris/x64 en Linux/SPARC). Door deze poorten te verwijderen, kan de gemeenschap de ontwikkeling van nieuwe OpenJDK-functies versnellen zonder tijd te verspillen aan het onderhouden van Solaris- en SPARC-specifieke functies.

Bron: opennet.ru

Voeg een reactie