Efter sex mÄnaders utveckling har företaget Oracle plattformen (Java Platform, Standard Edition 15), vars referensimplementation anvÀnder det öppna projektet OpenJDK. Java SE 15 upprÀtthÄller bakÄtkompatibilitet med tidigare versioner av Java-plattformen, sÄ alla tidigare skrivna Java-projekt kommer att fungera utan Àndringar nÀr de körs med den nya versionen. InstallationsfÀrdiga paket för Java SE 15 (JDK, JRE och Server JRE) för Linux (x86_64), Windows och macOS. Den referensimplementation som utvecklats inom ramen för OpenJDK Àr helt öppen under GPLv2-licensen med undantag för GNU ClassPath, som tillÄter dynamisk lÀnkning med kommersiella produkter.
Java SE 15 klassificeras som en version med vanlig support, dÀr uppdateringar kommer att slÀppas fram till nÀsta version. För en lÄngsiktig supportversion (LTS) bör Java SE 11 anvÀndas, vars uppdateringar kommer att slÀppas fram till 2026. Den tidigare LTS-versionen Java 8 kommer att stödjas fram till december 2020. NÀsta LTS-version Àr planerad till september 2021. Kom ihÄg att frÄn och med Java 10 har projektet övergÄtt till en ny utvecklingsprocess som innebÀr en kortare cykel för att skapa nya versioner. Ny funktionalitet utvecklas nu i en stÀndigt uppdaterad mastergren, som inkluderar fÀrdiga Àndringar, och frÄn vilken grenar för stabilisering av nya versioner avknoppas var sjÀtte mÄnad.
Av :
- stöd för algoritmen för skapande av digitala signaturer EdDSA (Edwards-Curve Digital Signature Algorithm ). Den föreslagna implementeringen av EdDSA Àr oberoende av hÄrdvaruplattformar, skyddad mot attacker genom sidokanaler (alla berÀkningar genomförs pÄ konstant tid) och övertrÀffar den nuvarande implementeringen av ECDSA, skriven i C, med samma sÀkerhetsnivÄ. Till exempel, EdDSA med en elliptisk kurva med 126-bitars nyckel visar prestanda motsvarande ECDSA med den elliptiska kurvan secp256r1 och 128-bitars nyckel.
- experimentell stöd för förseglade ("sealed") klasser och grÀnssnitt som inte kan anvÀndas av andra klasser och grÀnssnitt för arv, utvidgning eller överskrivning av implementation. Förseglade klasser erbjuder ocksÄ ett mer deklarativt sÀtt att begrÀnsa anvÀndning av superklassen Àn Ätkomstmodifikatorer, baserat pÄ en explicit upprÀkning av underklasser som fÄr utvidgas.
package com.example.geometry;
public sealed class Shape
permits com.example.polar.Circle,
com.example.quad.Rectangle,
com.example.quad.simple.Square {âŠ} - stöd för dolda klasser som inte kan anvĂ€ndas direkt av bytekod frĂ„n andra klasser. Huvudsyftet med dolda klasser Ă€r anvĂ€ndningen i ramverk som dynamiskt genererar klasser vid körning och anvĂ€nder dem indirekt, genom Dessa klasser har vanligtvis en begrĂ€nsad livslĂ€ngd, sĂ„ att underhĂ„lla dem för Ă„tkomst frĂ„n statiskt genererade klasser Ă€r inte motiverat och kommer enbart att leda till ökad minnesanvĂ€ndning. Dolda klasser möjliggör ocksĂ„ undvikande av det icke-standardiserade API:t sun.misc.Unsafe::defineAnonymousClass, som Ă€r planerat för borttagning i framtiden.
- ZGC (Z Garbage Collector) har stabiliserats och erkÀnns nu som redo för allmÀnt bruk. ZGC arbetar i passivt lÀge och minimerar sÄ mycket som möjligt förseningar pÄ grund av skrÀpinsamling (stopp-tid vid anvÀndning av ZGC överstiger inte 10 ms) och kan fungera med bÄde smÄ och stora högar, frÄn flera hundra megabyte till flera terabyte.
- Stabiliserat och erkÀnt som redo för allmÀnt bruk
skrĂ€pinsamlare , som arbetar med minimala avbrott (Low-Pause-Time Garbage Collector). Shenandoah utvecklades av Red Hat och Ă€r anmĂ€rkningsvĂ€rt för att anvĂ€nda en algoritm som minskar stopp-tider under skrĂ€pinsamling genom att utföra stĂ€dning parallellt med körning av Java-applikationer. Tiden för skrĂ€pinsamlarens förseningar Ă€r förutsĂ€gbara och oberoende av högarna, dvs. för högar pĂ„ 200 MB och 200 GB kommer fördröjningarna att vara desamma ( inte 50 ms och ligger vanligen inom 10 ms); - Stöd för â en ny form av strĂ€ngliteral som möjliggör införande av flerlinjedata i koden utan att anvĂ€nda teckenescapning och behĂ„lla den ursprungliga formateringen i blocket. Blocket omges av tre dubbla citattecken.
Till exempel, istÀllet för koden
String html = "" +
"\n\t" + "" +
"\n\t\t" + "\"Java 15 Àr hÀr!\"
" +
"\n\t" + "" +
"\n" + "";kan man ange:
String html = """
<HTML>
<BODY>"Java 15\"
Àr hÀr!"
</BODY>
"""; - API:n Legacy DatagramSocket. De gamla implementationerna av java.net.DatagramSocket och java.net.MulticastSocket har ersatts med en modern implementering som Àr enklare att debugga och underhÄlla, samt kompatibel med virtuella trÄdar som utvecklas inom projektet . För att hantera eventuell kompatibilitetsproblem med befintlig kod har den gamla implementationen inte tagits bort och kan aktiveras med alternativet jdk.net.usePlainDatagramSocketImpl.
- En andra experimentell implementation föreslÄs i "instanceof"-operatorn, vilket gör det möjligt att direkt definiera en lokal variabel för att referera till det kontrollerade vÀrdet. Till exempel kan man direkt skriva "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" utan att explicit definiera "String s = (String) obj".
Förut:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}Nu kan man klara sig utan att definiera "Group group = (Group) obj":
if (obj instanceof Group group) {
var entries = group.getEntries();
} - record", som erbjuder en kompakt form för klassdefinitioner och gör det möjligt att undvika explicit definition av olika lÄgnivÄmetoder som equals(), hashCode() och toString(), i fall dÀr data endast lagras i fÀlt vars beteende inte förÀndras. NÀr typiska implementationer av metoderna equals(), hashCode() och toString() anvÀnds i klassen, kan man klara sig utan deras explicita definition:double amount,
String description) {}
Denna deklaration kommer att leda till automatisk tillÀgg av implementationer av metoderna equals(), hashCode() och toString() samt konstruktorn och metoder som kontrollerar datamodifiering (getter).
String description) {}Denna deklaration kommer att leda till automatisk tillÀgg av implementationerna av metoderna equals(), hashCode() och toString() utöver konstruktorn och metoderna som kontrollerar dataÀndringar (getter).
- den andra preliminÀra versionen av API Foreign-Memory Access, som möjliggör för Java-applikationer att sÀkert och effektivt fÄ Ätkomst till minnesomrÄden utanför Java-heapet, genom att manipulera nya abstraktioner som MemorySegment, MemoryAddress och MemoryLayout.
- och den förÄldrade tekniken för optimering Biased Locking, som anvÀndes i HotSpot JVM för att minska overhead frÄn lÄs. Denna teknik har blivit obsolet pÄ system med atomÀra instruktioner som tillhandahÄlls av moderna CPU:er, och Àr för komplex för att underhÄllas.
- en förÄldrad mekanism , som kommer att tas bort i en av de kommande versionerna. Noteras att RMI Activation har blivit förÄldrad, klassificerades som en valmöjlighet redan i Java 8 och anvÀnds nÀstan inte i modern praktik.
- JavaScript-motorn , som blev förÄldrad i Java SE 11.
- portar för Solaris OS och SPARC-processorer (Solaris/SPARC, Solaris/x64 och Linux/SPARC). Borttagningen av dessa portar kommer att möjliggöra för samhÀllet att pÄskynda utvecklingen av nya funktioner i OpenJDK, utan att slösa tid pÄ att underhÄlla funktioner specifika för Solaris och SPARC.
KĂ€lla: opennet.ru
