Ar Γ΄l chwe mis o ddatblygu, mae Oracle wedi rhyddhau Java SE 24 (Java Platform, Standard Edition 24), sy'n defnyddio'r prosiect ffynhonnell agored OpenJDK fel ei weithrediad cyfeirio. Ac eithrio cael gwared ar rai nodweddion sydd wedi darfod, mae Java SE 24 yn cynnal cydnawsedd Γ΄l-Γ΄l Γ’ datganiadau blaenorol o blatfform Javaβbydd y rhan fwyaf o brosiectau Java a ysgrifennwyd yn flaenorol yn rhedeg heb eu newid wrth redeg o dan y fersiwn newydd. Mae adeiladau parod i'w gosod o Java SE 24 (JDK, JRE, a Server JRE) wedi'u paratoi ar gyfer Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Wedi'i ddatblygu gan y prosiect OpenJDK, mae gweithrediad cyfeirio Java SE 24 yn gwbl ffynhonnell agored o dan y drwydded GPLv2 gyda'r Eithriad GNU ClassPath, sy'n caniatΓ‘u cysylltu deinamig Γ’ chynhyrchion masnachol.
Mae Java SE 24 wedi'i gategoreiddio fel rhyddhad cymorth rheolaidd, gyda diweddariadau'n cael eu rhyddhau tan y rhyddhad nesaf. Dylai'r gangen cymorth hirdymor (LTS) fod yn Java SE 21 neu Java SE 17, gyda diweddariadau'n cael eu rhyddhau tan 2031 a 2029, yn y drefn honno (ar gael yn gyffredinol tan 2028 a 2026). Bydd cymorth estynedig ar gyfer cangen Java SE 8 LTS yn parhau tan 2030, a Java SE 11 tan 2032. Y rhyddhad LTS nesaf fydd rhyddhad yr hydref o Java SE 25.
Ymhlith y 24 o ddatblygiadau arloesol a gynigir yn Java SE:
- Cynigir modd casglu sbwriel cynhyrchiol arbrofol, Shenandoah. Mae'n prosesu gwrthrychau hen a rhai a grΓ«wyd yn ddiweddar ar wahΓ’n i wella effeithlonrwydd casglu gwrthrychau byrhoedlog. Mae'r modd newydd yn darparu trwybwn mwy rhagweladwy, yn wydn i amrywiadau llwyth, ac yn lleihau'r defnydd o gof yn ystod casglu sbwriel. Nod amserlennydd Shenandoah yw lleihau amser segur casglu sbwriel trwy gyflawni mwy o waith ochr yn ochr Γ’ gweithredu cymhwysiad Java.
- Mae'r JVM HotSpot yn gweithredu cefnogaeth arbrofol ar gyfer penawdau gwrthrych cryno, gan leihau eu maint ar systemau 64-bit o 96 i 64 bit (o 12 i 8 beit). Mae lleihau maint y pennawd yn lleihau maint y pentwr ac yn gwella effeithlonrwydd y storfa.
- Mae casglwr sbwriel G1 wedi symleiddio gweithrediad rhwystrau sy'n monitro mynediad cof rhaglen. Yn y fersiwn newydd, mae gweithrediadau ehangu rhwystrau wedi'u symud i gam diweddarach o'r broses lunio yn y C2 JIT. Mae profion yn dangos bod y symudiad hwn yn lleihau gorbenion y crynhoydd C2 JIT 10-20%, yn dibynnu ar y rhaglen.
- Ychwanegwyd API ar gyfer defnyddio ffwythiannau deillio allweddi cryptograffig (KDFs), sy'n caniatΓ‘u cynhyrchu allweddi ychwanegol o'r hyd gofynnol yn seiliedig ar allwedd gyfrinachol (e.e., cyfrinair) a set ddata mympwyol. Mae API KDF ar hyn o bryd mewn statws rhagolwg.
- Mae llwytho a chysylltu dosbarthiadau ymlaen llaw wedi'i ychwanegu. Mae'r newid hwn yn cyflymu cychwyn HotSpot JVM trwy ddarparu dosbarthiadau a ddefnyddir yn y rhaglen sydd eisoes wedi'u llwytho a'u cysylltu. Yn ystod lansiad cyntaf y rhaglen, caiff cyflwr yr holl ddosbarthiadau ei fflysio i'r storfa a'i ddefnyddio ar gyfer lansiadau dilynol i gyflymu llwytho.
- Ychwanegwyd API Class-File ar gyfer dadansoddi, cynhyrchu a throsi ffeiliau dosbarth Java.
FfeilDdosbarth cf = FfeilDdosbarth.of(); ModelDdosbarthModelDdosbarth = cf.parse(bytes); byte[] newBytes = cf.build(ModelDdosbarth.thisClass().asSymbol(), AdeiladyddDdosbarth -> { for (ElfenDdosbarth ce : ModelDdosbarth) { if (!(ce instanceof ModelDull mm && mm.methodName().stringValue().startsWith("debug"))) { AdeiladyddDdosbarth.with(ce); } } });
- Mae API Stream estynedig wedi'i ychwanegu sy'n cefnogi diffinio gweithrediadau canolradd personol, a all fod yn ddefnyddiol mewn achosion lle nad yw'r gweithrediadau canolradd adeiledig presennol yn ddigonol ar gyfer y trawsnewidiad data a ddymunir. Mae trinwyr personol wedi'u cysylltu gan ddefnyddio'r gweithrediad canolradd Stream::gather(Gatherer) newydd, sy'n prosesu elfennau nant trwy gymhwyso trinwr a ddiffiniwyd gan y defnyddiwr iddynt. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- Cynigir pedwerydd gweithrediad rhagarweiniol o Werthoedd Cwmpas. Mae'r rhain yn caniatΓ‘u rhannu data na ellir ei newid ar draws edafedd a chyfnewid data yn effeithlon rhwng edafedd plant (etifeddir gwerthoedd). Mae Gwerthoedd Cwmpas wedi'u cynllunio i ddisodli'r mecanwaith newidyn lleol-edafedd ac maent yn fwy effeithlon pan gΓ’nt eu defnyddio gyda nifer fawr iawn o edafedd rhithwir (miloedd a miliynau o edafedd). Y prif wahaniaeth rhwng Gwerthoedd Cwmpas a newidynnau lleol-edafedd yw eu bod yn cael eu hysgrifennu unwaith, na ellir eu haddasu, ac yn parhau i fod yn hygyrch dim ond am hyd gweithrediad yr edafedd.
- Mae paru patrymau bellach yn cynnwys cefnogaeth ragarweiniol ar gyfer defnyddio mathau cyntefig (int, byte, char, a mathau sylfaenol eraill nad ydynt yn wrthrychau) ym mhob math o dempled, y gweithredwr instanceof, a blociau switch. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { β¦ b β¦ }
- Mae'r nawfed gweithrediad rhagarweiniol o'r Vector API wedi'i ryddhau. Mae'n darparu swyddogaethau ar gyfer cyfrifiadau fector a gyflawnir gan ddefnyddio cyfarwyddiadau fector prosesydd x86_64 ac AArch64 ac yn galluogi gweithrediad ar yr un pryd ar werthoedd lluosog (SIMD). Yn wahanol i awto-fectoreiddio gweithrediadau sgalar y crynhoydd HotSpot JIT, mae'r API newydd yn caniatΓ‘u rheolaeth benodol dros fectoreiddio ar gyfer prosesu data cyfochrog.
- Mae cefnogaeth ar gyfer cydamseru edafedd rhithwir heb eu pinio i edafedd penodol i blatfform wedi'i weithredu. Mae edafedd rhithwir mewn dull cydamserol neu fynegiant mewn cyflwr cloi bellach yn rhyddhau eu hedau platfform, gan ganiatΓ‘u i edafedd rhithwir eraill ei ddefnyddio. Mae hyn yn cynyddu nifer yr edafedd rhithwir sydd ar gael yn sylweddol ac yn gwella graddadwyedd cymwysiadau aml-edau.
- Ychwanegwyd trydydd drafft o nodwedd sy'n caniatΓ‘u i fynegiadau mewn adeiladwyr ragflaenu'r alwad i super(β¦), a ddefnyddir i alw adeiladwr dosbarth rhiant yn benodol o adeiladwr dosbarth deilliedig, cyn belled nad yw'r mynegiadau hynny'n cyfeirio at yr achos sy'n cael ei greu gan yr adeiladwr. class Outer { void hello() { System.out.println("Helo"); } class Inner { Inner() { hello(); super(); } } }
- Mae'r cyfleustodau jlink yn gweithredu cefnogaeth ar gyfer creu delweddau amser rhedeg heb ddefnyddio ffeiliau JMOD, sy'n caniatΓ‘u lleihau maint y JDK tua 25%.
- Ychwanegwyd ail weithrediad rhagarweiniol o'r datganiad "import module M", gan ganiatΓ‘u mewnforio pob pecyn a allforir gan y modiwl penodedig ar yr un pryd. Mae'r newid hwn yn symleiddio ailddefnyddio llyfrgelloedd modiwlaidd yn sylweddol, gan ganiatΓ‘u i lyfrgelloedd a dosbarthiadau gael eu cynnwys heb nodi eu safle yn hierarchaeth y pecynnau. Er enghraifft, bydd nodi "import module java.base" yn mewnforio pob un o'r 54 pecyn sydd wedi'u cynnwys yn y modiwl java.base, a fyddai wedi gofyn am gyfeiriadau unigol o'r blaen ("import java.io.*," "import java.util.*," ac ati).
- Ychwanegwyd pedwerydd gweithrediad rhagarweiniol o ddosbarthiadau wedi'u datgan yn ymhlyg ac enghreifftiau dienw o'r dull "main", y gellir ei wneud heb ddatganiadau cyhoeddus/statig, gan basio arae o ddadleuon, ac endidau eraill sy'n gysylltiedig Γ’ datganiad dosbarth. // oedd dosbarth cyhoeddus HelloWorld { public static void main(String[] args) { System.out.println("Helo byd!"); } } // nawr gallwch chi void main() { System.out.println("Helo, Byd!"); }
- Mae pedwerydd drafft yr API Cyfochredd Strwythuredig, sy'n symleiddio datblygiad cymwysiadau aml-edau trwy drin tasgau lluosog sy'n rhedeg ar wahanol edafedd fel un uned, wedi'i ryddhau i'w brofi.
- Mae APIs KeyPairGenerator, Signature, a KeyFactory wedi cael eu diweddaru i gefnogi algorithmau ML-KEM (CRYSTALS-Kyber) ac ML-DSA (CRYSTALS-Dilithium), sydd wedi'u safoni gan y Sefydliad Cenedlaethol Safonau a Thechnoleg (NIST) ac sy'n gallu gwrthsefyll ymosodiadau grym brwd ar gyfrifiaduron cwantwm. Mae'r algorithmau hyn yn defnyddio dulliau cryptograffig yn seiliedig ar ddatrys problemau damcaniaethol dellt, y mae eu hamser datrysiad yn union yr un fath ar gyfrifiaduron confensiynol a chwantwm.
- Mae casglwr sbwriel ZGC wedi dileu cefnogaeth ar gyfer y modd an-gynhyrchiol, nad yw'n gwahaniaethu rhwng gwrthrychau "hen" ac "ifanc". Gan ddechrau gyda Java SE 23, modd cynhyrchiol y ZGC yw'r rhagosodyn.
- Ychwanegwyd rhybuddion am ddefnyddio APIs JNI (Java Native Interface) a FFM (Foreign Function & Memory) i baratoi datblygwyr ar gyfer mynediad cyfyngedig i ddata API oherwydd cynnwys modd uniondeb mewn datganiad yn y dyfodol sy'n gwahardd rhyngweithio Γ’ chod brodorol yn ddiofyn.
- Mae neges rhybudd bellach yn cael ei harddangos wrth ddefnyddio dulliau mynediad cof oddi ar y pentwr (y tu allan i'r JVM) a ddarperir gan y dosbarth sun.misc.Unsafe. Argymhellir defnyddio'r API VarHandle ar gyfer cyrchu cof oddi ar y pentwr a rhyngweithio Γ’ chod allanol. Cafodd cefnogaeth i sun.misc.Unsafe ei ddirymu yn y datganiad blaenorol.
- Mae Rheolwr Diogelwch, a oedd wedi colli ei berthnasedd ers tro byd ac nad oedd ei angen mwyach ar Γ΄l i gefnogaeth yr ategyn porwr ddod i ben, wedi'i analluogi. Cafodd Rheolwr Diogelwch ei ddirymu yn Java 17. Bwriedir dileu cod y Rheolwr Diogelwch yn llwyr mewn datganiad yn y dyfodol.
- Tynnwyd cod i gefnogi platfform OS 32-bit Windows ar systemau x86. Mae'r porthladd Java ar gyfer systemau x86 32-bit wedi'i ddirymu ac mae wedi'i drefnu i'w ddileu (bydd y gefnogaeth yn dod i ben) Linux ar systemau x86 32-bit).
Hefyd yn werth nodi yw rhyddhau diweddariad i'r platfform JavaFX 24 ar gyfer creu cymwysiadau GUI a datganiad newydd o'r peiriant rhithwir cyffredinol GraalVM, sy'n cefnogi rhedeg cymwysiadau yn JavaScript (Node.js), Python, Ruby, R, unrhyw iaith JVM (Java, Scala, Clojure, Kotlin), ac ieithoedd y gellir cynhyrchu cod bit LLVM ar eu cyfer (C, C++, Rust). Yn ogystal Γ’ chefnogaeth JDK 24, mae'r fersiwn newydd o GraalVM yn cynnwys optimeiddiadau ar gyfer tasgau dysgu peirianyddol, cefnogaeth well ar gyfer llunio cod bit Java i god brodorol, ac ychwanegu'r mecanwaith SkipFlow i leihau maint ffeiliau gweithredadwy a lleihau amser llunio.
Ffynhonnell: opennet.ru
