UtgÄvan av Java SE 16

Efter sex mÄnaders utveckling har Oracle lanserat plattformen Java SE 16 (Java Platform, Standard Edition 16), vars referensimplementering Àr det öppna projektet OpenJDK. Java SE 16 behÄller bakÄtkompatibilitet med tidigare versioner av Java-plattformen, och alla tidigare skrivna Java-projekt kommer att fungera utan Àndringar nÀr de körs med den nya versionen. InstallationsfÀrdiga byggnader av Java SE 16 (JDK, JRE och Server JRE) Àr förberedda för Linux (x86_64, AArch64), Windows och macOS. Den referensimplementering av Java 16 som utvecklats inom ramen för OpenJDK-projektet Àr helt öppen under GPLv2-licensen med undantag för GNU ClassPath som tillÄter dynamisk lÀnkning mot kommersiella produkter.

Java SE 16 klassificeras som en version med normal supportperiod, med uppdateringar som kommer att slÀppas fram till nÀsta version. För en version med lÄngsiktig support (LTS) ska Java SE 11 anvÀndas, med uppdateringar som kommer att slÀppas fram till 2026. NÀsta LTS-version Àr planerad till september 2021. Vi pÄminner om att projektet har övergÄtt till en ny utvecklingsprocess sedan slÀppet av Java 10, vilket innebÀr en kortare cykel för nya versioner. Den nya funktionaliteten utvecklas nu i en stÀndigt uppdaterad master-gren, dÀr fÀrdiga Àndringar inkluderas och frÄn vilken grenar för stabilisering av nya utgÄvor avvikas var sjÀtte mÄnad.

Vid förberedelsen av den nya versionen har utvecklingen övergÄtt frÄn versionshanteringssystemet Mercurial till Git och plattformen för samarbete GitHub. Det förvÀntas att migrationen kommer att öka prestandan för operationer med förrÄdet, förbÀttra lagringseffektiviteten, ge tillgÄng till Àndringar genom hela projektets historia, förbÀttra stödet för kodgranskning och aktivera API för automatisering av arbetsflöden. Dessutom gör anvÀndningen av Git och GitHub projektet mer attraktivt för nybörjare och utvecklare som Àr vana vid Git.

Bland nyheterna i Java 16 kan nÀmnas:

  • En experimentell modul jdk.incubator.vector har lagts till med en implementering av API:et Vector, som tillhandahĂ„ller funktioner för vektorberĂ€kningar som utförs med hjĂ€lp av vektorinstruktioner frĂ„n processorerna x86_64 och AArch64. Detta möjliggör samtidig tillĂ€mpning av operationer pĂ„ flera vĂ€rden (SIMD). Till skillnad frĂ„n de funktioner för automatisk vektorisering av skalĂ€ra operationer som tillhandahĂ„lls av JIT-kompilatorn HotSpot, tillĂ„ter det nya API:et explicit kontroll över vektoriseringen för parallell databehandling.
  • I JDK- och VM-koden för HotSpot, skriven i C++, Ă€r anvĂ€ndning av funktioner som introducerats i C++14-specifikationen nu tillĂ„ten. Tidigare var endast C++98/03-standarder tillĂ„tna.
  • Den passiva skrĂ€phanteraren ZGC (Z Garbage Collector) har fĂ„tt möjlighet till parallell behandling av trĂ„darnas stackar utan att stoppa körningen av applikationstrĂ„darna. I ZGC Ă„terstĂ„r nu endast de som krĂ€ver stopp av arbetet, vilka vanligtvis har konstanta fördröjningar som sĂ€llan överstiger nĂ„gra hundra mikrosekunder.
  • I klasserna SocketChannel, ServerSocketChannel och java.nio.channels har stöd för Unix-sockets (AF_UNIX) lagts till.
  • En port för Linux-distributionen Alpine med standard C-biblioteket musl, som Ă€r populĂ€r i container-, mikrotjĂ€nst-, moln- och inbĂ€ddade system, har implementerats. Den föreslagna porten tillĂ„ter körning av Java-program som vanliga applikationer i sĂ„dana miljöer. Dessutom kan jlink anvĂ€ndas för att ta bort alla oanvĂ€nda moduler och skapa en minimal miljö som Ă€r tillrĂ€cklig för att köra applikationen, vilket möjliggör skapandet av kompaktanpassade bilder för specifika applikationer.
  • En mekanism för Elastic Metaspace har implementerats, vilket optimerar allokering och Ă„terlĂ€mning av minne som anvĂ€nds av klassmetadata (metaspace) i JVM HotSpot. AnvĂ€ndningen av Elastic Metaspace minskar minnesfragmentering, minskar overheaden i klassladdaren och har en positiv effekt pĂ„ prestandan hos serverapplikationer som körs under lĂ€ngre tid, genom snabbare Ă„terlĂ€mning av minne till operativsystemet som anvĂ€nds av oanvĂ€nd klassmetadata. För att vĂ€lja minnesfrigöringslĂ€ge efter avladdning av klasser har alternativet "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)" föreslagits.
  • JDK-porten har lagts till för Windows-system som kör pĂ„ processorer med AArch64-arkitektur.
  • Ett tredje preliminĂ€rt förslag pĂ„ API:t Foreign-Memory Access har föreslagits, vilket gör det möjligt för Java-applikationer att sĂ€kert och effektivt fĂ„ tillgĂ„ng till minnesomrĂ„den utanför Java-högen genom att manipulera nya abstraktioner som MemorySegment, MemoryAddress och MemoryLayout.
  • Ett experimentellt API för Foreign Linker har implementerats, vilket ger Java-tillgĂ„ng till nativ kod. Tillsammans med API:t Foreign-Memory förenklar det nya programgrĂ€nssnittet avsevĂ€rt skapandet av bindningar till vanliga delade bibliotek.
  • Verktyget jpackage har lagts till, vilket möjliggör skapandet av paket för sjĂ€lvstĂ€ndiga Java-applikationer. Verktyget bygger pĂ„ javapackager frĂ„n JavaFX och gör det möjligt att skapa paket i format som Ă€r inhemska för olika plattformar (msi och exe för Windows, pkg och dmg för macOS, deb och rpm för Linux). Paketen inkluderar alla nödvĂ€ndiga beroenden.
  • StrĂ€ng inkapsling av alla interna element i JDK Ă€r nu aktiverad som standard, förutom kritiska API:er som sun.misc.Unsafe. VĂ€rdet pĂ„ alternativet "—illegal-access" Ă€r nu som standard instĂ€llt pĂ„ "deny" istĂ€llet för "permit", vilket kommer att blockera försök att fĂ„ tillgĂ„ng till de flesta interna klasser, metoder och fĂ€lt frĂ„n kod. För att kringgĂ„ begrĂ€nsningen bör alternativet "—illegal-access=permit" anvĂ€ndas.
  • Implementeringen av mönstermatchning i "instanceof"-operatorn har stabiliserats, vilket gör det möjligt att omedelbart definiera en lokal variabel för att referera till det kontrollerade vĂ€rdet. Till exempel kan man skriva "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" utan att uttryckligen definiera "String s = (String) obj". Tidigare: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Nu kan man undvika att definiera "Group group = (Group) obj": if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Implementeringen av nyckelordet "record" har stabiliserats, vilket ger en kompakt form för klassdefinitioner och gör det möjligt att undvika uttrycklig definition av olika lĂ„gnivĂ„metoder som equals(), hashCode() och toString() i fall dĂ€r data endast lagras i fĂ€lt och dĂ€r beteendet för dessa inte Ă€ndras. NĂ€r en klass anvĂ€nder typiska implementationer av metoderna equals(), hashCode() och toString() kan den klara sig utan att uttryckligen definiera dem: public record BankTransaction(LocalDate date, double amount, 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).

  • Ett andra preliminĂ€rt förslag pĂ„ förseglade ("sealed") klasser och grĂ€nssnitt har presenterats, som inte kan anvĂ€ndas av andra klasser och grĂ€nssnitt för arv, utökning eller överskrivning av implementation. Förseglade klasser erbjuder ocksĂ„ ett mer deklarativt sĂ€tt att begrĂ€nsa anvĂ€ndningen av superklassen, jĂ€mfört med Ă„tkomstmodifikatorer, baserat pĂ„ en tydlig förteckning över underklasser som fĂ„r utökas. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {
}

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster