Publikimi i Java SE 17

Pas gjashtë muajsh zhvillimi, Oracle ka lëshuar platformën Java SE 17 (Java Platform, Standard Edition 17), e cila përdor projektin OpenJDK me burim të hapur si një zbatim referencë. Me përjashtim të heqjes së disa veçorive të vjetruara, Java SE 17 ruan përputhshmërinë e prapambetur me versionet e mëparshme të platformës Java—shumica e projekteve Java të shkruara më parë do të vazhdojnë të funksionojnë pa modifikuar kur ekzekutohen sipas versionit të ri. Ndërtimet e instalueshme të Java SE 17 (JDK, JRE dhe Server JRE) përgatiten për Linux (x86_64, AArch64), Windows (x86_64) dhe macOS (x86_64, AArch64). Zhvilluar nga projekti OpenJDK, zbatimi i referencës Java 17 është plotësisht me burim të hapur nën licencën GPLv2 me përjashtime të GNU ClassPath për të lejuar lidhjen dinamike me produktet komerciale.

Java SE 17 klasifikohet si një version i Mbështetjes Afatgjatë (LTS), i cili do të vazhdojë të marrë përditësime deri në vitin 2029. Përditësimet për versionin e mëparshëm të Java 16 janë ndërprerë. Dega e mëparshme LTS e Java 11 do të mbështetet deri në vitin 2026. Lëshimi tjetër i LTS është planifikuar për shtator 2024. Ju kujtojmë se duke filluar me lëshimin e Java 10, projekti kaloi në një proces të ri zhvillimi, duke nënkuptuar një cikël më të shkurtër për formimin e versioneve të reja. Funksionaliteti i ri është zhvilluar tani në një degë kryesore të përditësuar vazhdimisht, e cila përfshin ndryshime të gatshme dhe nga e cila degët degëzohen çdo gjashtë muaj për të stabilizuar publikimet e reja.

Karakteristikat e reja në Java 17 përfshijnë:

  • Propozohet një zbatim eksperimental i përputhjes së modeleve në shprehjet "ndërprerës", i cili lejon përdorimin jo të vlerave të sakta në etiketat "rast", por shablloneve fleksibël që mbulojnë një sërë vlerash menjëherë, për të cilat më parë ishte e nevojshme të përdoreshin të rëndë. zinxhirë shprehjesh “nëse... tjetër”. Përveç kësaj, "switch" ka aftësinë për të trajtuar vlerat NULL. Objekti o = 123L; String formatted = switch (o) { case Numri i plotë i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Mbështetje e stabilizuar për klasat dhe ndërfaqet e mbyllura, të cilat nuk mund të përdoren nga klasa dhe ndërfaqe të tjera për të trashëguar, zgjeruar ose anashkaluar zbatimin. Klasat e mbyllura ofrojnë gjithashtu një mënyrë më deklarative për të kufizuar përdorimin e një superklase sesa modifikuesit e aksesit, bazuar në renditjen e qartë të nënklasave të lejuara për zgjerim. paketa com.shembull.gjeometri; Lejet e formës së klasës së mbyllur publike com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Propozohet një vrojtim i dytë i Vector API, i cili ofron funksione për llogaritjet e vektorit që ekzekutohen duke përdorur udhëzime vektoriale në procesorët x86_64 dhe AArch64 dhe lejojnë që operacionet të zbatohen njëkohësisht në vlera të shumta (SIMD). Ndryshe nga aftësitë e ofruara në përpiluesin HotSpot JIT për vektorizimin automatik të operacioneve skalare, API i ri bën të mundur kontrollin e qartë të vektorizimit për përpunimin paralel të të dhënave.
  • U shtua një pamje paraprake e API-së së funksionit të huaj dhe kujtesës, e cila lejon aplikacionet të ndërveprojnë me kodin dhe të dhënat jashtë kohës së ekzekutimit të Java. API i ri ju lejon të telefononi në mënyrë efikase funksione jo-JVM dhe të përdorni memorien që nuk menaxhohet nga JVM. Për shembull, mund të telefononi funksione nga bibliotekat e jashtme të përbashkëta dhe të përdorni të dhënat e procesit pa përdorur JNI.
  • Motori i interpretimit të macOS që fuqizon Java 2D API, i cili nga ana tjetër fuqizon Swing API, është përshtatur për të përdorur API-në e grafikës Metal. Platforma macOS vazhdon të përdorë OpenGL si parazgjedhje dhe aktivizimi i mbështetjes Metal kërkon vendosjen e "-Dsun.java2d.metal=true" dhe të paktën ekzekutimin e macOS 10.14.x.
  • U shtua një port për platformën macOS/AArch64 (kompjuterët Apple bazuar në çipat e rinj Apple M1). Një veçori e veçantë e portit është mbështetja për mekanizmin e mbrojtjes së memories W^X (Write XOR Execute), në të cilin faqet e kujtesës nuk mund të aksesohen njëkohësisht për shkrim dhe ekzekutim. (kodi mund të ekzekutohet vetëm pasi shkrimi është i çaktivizuar, dhe shkrimi në një faqe memorie është i mundur vetëm pasi ekzekutimi është i çaktivizuar).
  • U kthye në përdorimin e vetëm semantikës striktefp për shprehjet me pikë lundruese. Mbështetja për semantikën "e parazgjedhur", e disponueshme që nga lëshimi i Java 1.2, është ndërprerë, duke përfshirë thjeshtimet për të punuar në sisteme me bashkëprocesorë matematikorë shumë të vjetër x87 (pas ardhjes së udhëzimeve SSE2, nevoja për semantikë shtesë u zhduk).
  • Janë zbatuar lloje të reja ndërfaqesh për gjeneruesit e numrave pseudorandom dhe janë zbatuar algoritme shtesë për gjenerim më të mirë të numrave të rastit. Aplikacioneve u jepet mundësia të zgjedhin një algoritëm për gjenerimin e numrave pseudorandom. Mbështetje e përmirësuar për gjenerimin e rrymave të rastësishme të objekteve.
  • Enkapsulimi i rreptë i detyrueshëm i të gjitha pjesëve të brendshme të JDK, me përjashtim të API-ve kritike si p.sh. sun.misc.Unsafe. Enkapsulimi i rreptë bllokon përpjekjet nga kodi për të hyrë në klasat, metodat dhe fushat e brendshme. Më parë, modaliteti i rreptë i kapsullimit mund të çaktivizohej duke përdorur opsionin "--ilegal-access=permit", por kjo tani është zhvlerësuar. Aplikacionet që kërkojnë qasje në klasat, metodat dhe fushat e brendshme duhet t'i përcaktojnë ato në mënyrë eksplicite duke përdorur opsionin --add-opens ose atributin Add-Opens në skedarin manifest.
  • Aplikacioneve u jepet aftësia për të përcaktuar filtrat e deserializimit të të dhënave, të cilat mund të jenë të ndjeshme ndaj kontekstit dhe të zgjidhen në mënyrë dinamike bazuar në operacionet specifike të deserializimit. Filtrat e specifikuar janë të zbatueshëm për të gjithë makinën virtuale (gjerë JVM), d.m.th. mbulojnë jo vetëm vetë aplikacionin, por edhe bibliotekat e palëve të treta të përdorura në aplikacion.
  • Swing ka shtuar metodën javax.swing.filechooser.FileSystemView.getSystemIcon për të ngarkuar ikona të mëdha për të përmirësuar ndërfaqen në ekranet me DPI të lartë.
  • java.net.DatagramSocket API ofron mbështetje për t'u lidhur me grupet Multicast pa pasur nevojë për një API të veçantë java.net.MulticastSocket.
  • Shërbimi IGV (Ideal Graph Visualizer) është përmirësuar, duke ofruar vizualizim interaktiv të përfaqësimit të kodit të ndërmjetëm në përpiluesin HotSpot VM C2 JIT.
  • Në JavaDoc, për analogji me përpiluesin javac, kur del një gabim, tani tregohet numri i rreshtit problematik në skedarin burimor dhe vendndodhja e gabimit.
  • U shtua vetia native.encoding, duke pasqyruar emrin e kodimit të karaktereve të sistemit (UTF-8, koi8-r, cp1251, etj.).
  • Ndërfaqja java.time.InstantSource është shtuar, duke lejuar manipulimin e kohës pa iu referuar një zone kohore.
  • U shtua API java.util.HexFormat për konvertimin në paraqitje heksadecimal dhe anasjelltas.
  • Një modalitet i vrimës së zezë është shtuar në përpilues, i cili çaktivizon operacionet e eliminimit të kodit të vdekur, të cilat mund të përdoren gjatë kryerjes së testeve të performancës.
  • U shtua opsioni "-Xlog:async" në Runtime për të regjistruar regjistrat në modalitetin asinkron.
  • Kur krijoni lidhje të sigurta, TLS 1.3 aktivizohet si parazgjedhje (më parë përdorej TLS 1.2).
  • API i Applet i deklaruar më parë i vjetëruar (java.applet.Applet*, javax.swing.JApplet), i cili u përdor për të ekzekutuar aplikacionet Java në shfletues, është zhvendosur në kategorinë e paracaktuar për heqje (ka humbur rëndësinë pas përfundimit të mbështetjes për shtojcën Java për shfletues).
  • Menaxheri i Sigurisë, i cili prej kohësh ka humbur rëndësinë e tij dhe rezultoi i padeklaruar pas përfundimit të mbështetjes për shtojcën e shfletuesit, është zhvendosur në kategorinë e atyre të planifikuar për heqje.
  • Mekanizmi i aktivizimit RMI është hequr, i cili është i vjetëruar, i zbritur në kategorinë e një opsioni në Java 8 dhe pothuajse nuk përdoret kurrë në praktikën moderne.
  • Një përpilues eksperimental që mbështet JIT (vetëm në kohë) për përpilimin dinamik të kodit Java për HotSpot JVM, si dhe mënyrën e përpilimit paraprak (AOT, para kohe) të klasave në kodin e makinës përpara fillimit të makinës virtuale , është hequr nga SDK. Përpiluesi është shkruar në Java dhe i bazuar në punën e projektit Graal. Vihet re se mirëmbajtja e kompajlerit kërkon shumë punë, gjë që nuk justifikohet kur nuk ka kërkesë nga zhvilluesit.

Burimi: opennet.ru

Shto një koment