Na zes maanden ontwikkeling heeft Oracle het platform (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) voor Linux (x86_64), Windows en macOS. De referentie-implementatie, ontwikkeld binnen het OpenJDK-project, 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 :
- ondersteuning voor het EdDSA-handtekeningalgoritme (Edwards-Curve Digital Signature Algorithm) ). 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.
- 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 {…} - 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 . 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 ze overschrijden Ondersteuning voor - tekstblokken is gestabiliseerd en geïntroduceerd in de taal — 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>
"""; - 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. . 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 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();
} - tweede experimentele implementatie van het sleutelwoord "", 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).
- 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.
- 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.
- als verouderd mechanisme , 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.
- JavaScript-engine , dat als verouderd werd beschouwd in Java SE 11.
- 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
