Kutolewa kwa Java SE17

Baada ya miezi sita ya maendeleo, Oracle ilitoa Java SE 17 (Jukwaa la Java, Toleo la Kawaida la 17), ambayo hutumia mradi wa OpenJDK wa chanzo-wazi kama utekelezaji wa marejeleo. Isipokuwa kuondolewa kwa baadhi ya vipengele vilivyopitwa na wakati, Java SE 17 hudumisha upatanifu wa nyuma na matoleo ya awali ya jukwaa la Java - miradi mingi ya Java iliyoandikwa hapo awali itafanya kazi bila mabadiliko inapoendeshwa chini ya toleo jipya. Miundo iliyo tayari kusakinishwa ya Java SE 17 (JDK, JRE na Server JRE) imetayarishwa kwa ajili ya Linux (x86_64, AArch64), Windows (x86_64) na macOS (x86_64, AArch64). Iliyoundwa na mradi wa OpenJDK, utekelezaji wa marejeleo ya Java 17 ni chanzo wazi kabisa chini ya leseni ya GPLv2, na vighairi vya GNU ClassPath vinavyoruhusu kuunganisha kwa nguvu na bidhaa za kibiashara.

Java SE 17 imeainishwa kama toleo la Msaada wa Muda Mrefu (LTS), ambalo litaendelea kupokea masasisho hadi 2029. Masasisho ya toleo la awali la Java 16 yamekatishwa. Tawi la awali la LTS la Java 11 litatumika hadi 2026. Toleo linalofuata la LTS limepangwa Septemba 2024. Hebu tukumbushe kwamba kuanzia na kutolewa kwa Java 10, mradi ulibadilika kwa mchakato mpya wa maendeleo, ikimaanisha mzunguko mfupi wa uundaji wa matoleo mapya. Utendaji mpya sasa unakuzwa katika tawi moja kuu lililosasishwa kila mara, ambalo linajumuisha mabadiliko yaliyotengenezwa tayari na ambayo matawi hukatwa kila baada ya miezi sita ili kuleta utulivu wa matoleo mapya.

Vipengele vipya katika Java 17 ni pamoja na:

  • Utekelezaji wa majaribio wa kulinganisha muundo katika misemo ya "switch" unapendekezwa, ambayo inaruhusu kutumia sio maadili halisi katika lebo za "kesi", lakini violezo vinavyoweza kubadilika vinavyofunika safu ya maadili mara moja, ambayo hapo awali ilikuwa muhimu kutumia. minyororo ya misemo ya "ikiwa ... vinginevyo". Kwa kuongeza, "switch" ina uwezo wa kushughulikia maadili NULL. Kitu o = 123L; Kamba iliyoumbizwa = kubadili (o) { case Integer i -> String.format("int %d", i); kesi Long l -> String.format("nde %d", l); kesi Double d -> String.format("double %f", d); kesi Kamba s -> String.format("Kamba %s", s); chaguo-msingi -> o.toString(); };
  • Usaidizi ulioimarishwa wa madarasa na violesura vilivyofungwa, ambavyo haviwezi kutumiwa na madarasa na violesura vingine kurithi, kupanua au kubatilisha utekelezaji. Madarasa yaliyofungwa pia hutoa njia dhahiri zaidi ya kuzuia matumizi ya darasa kuu kuliko virekebishaji vya ufikiaji, kulingana na kuorodhesha kwa uwazi mada ndogo zinazoruhusiwa kwa upanuzi. kifurushi com.example.jiometri; darasa lililofungwa kwa umma Vibali vya umbo com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Onyesho la kuchungulia la pili la API ya Vekta linapendekezwa, ambalo hutoa utendakazi kwa hesabu za vekta ambazo hutekelezwa kwa kutumia maagizo ya vekta kwenye vichakataji vya x86_64 na AArch64 na kuruhusu utendakazi kutumika kwa wakati mmoja kwa thamani nyingi (SIMD). Tofauti na uwezo uliotolewa katika mkusanyaji wa HotSpot JIT wa uwekaji vekta otomatiki wa shughuli za kadiri, API mpya huwezesha kudhibiti uwekaji vekta kwa uchakataji sambamba wa data.
  • Imeongeza onyesho la kukagua API ya Shughuli za Kigeni na Kumbukumbu, ambayo inaruhusu programu kuingiliana na msimbo na data nje ya muda wa utekelezaji wa Java. API mpya hukuruhusu kupiga simu kwa utendakazi zisizo za JVM na kufikia kumbukumbu isiyodhibitiwa na JVM. Kwa mfano, unaweza kupiga simu utendakazi kutoka kwa maktaba zilizoshirikiwa za nje na kufikia data ya mchakato bila kutumia JNI.
  • Injini ya utoaji ya macOS ambayo inawezesha API ya Java 2D, ambayo nayo inawezesha API ya Swing, imebadilishwa ili kutumia API ya michoro ya Metal. Mfumo wa macOS unaendelea kutumia OpenGL kwa chaguo-msingi, na kuwezesha usaidizi wa Metal kunahitaji kuweka "-Dsun.java2d.metal=true" na angalau kuendesha macOS 10.14.x.
  • Imeongeza bandari ya jukwaa la macOS/AArch64 (kompyuta za Apple kulingana na chipsi mpya za Apple M1). Kipengele maalum cha bandari ni usaidizi wa utaratibu wa ulinzi wa kumbukumbu wa W^X (Andika XOR Tekeleza), ambapo kurasa za kumbukumbu haziwezi kufikiwa kwa wakati mmoja kwa kuandika na kutekeleza. (msimbo unaweza kutekelezwa tu baada ya kuandika kuzima, na kuandika kwa ukurasa wa kumbukumbu kunawezekana tu baada ya utekelezaji kuzima).
  • Imerejeshwa kwa kutumia semantiki kali za fp pekee kwa misemo ya sehemu zinazoelea. Msaada wa semantiki "chaguo-msingi", inayopatikana tangu kutolewa kwa Java 1.2, imekoma, ikijumuisha kurahisisha kazi kwenye mifumo iliyo na vichakataji vya zamani sana vya x87 (baada ya ujio wa maagizo ya SSE2, hitaji la semantiki za ziada lilitoweka).
  • Aina mpya za violesura vya jenereta za nambari za uwongo zimetekelezwa, na kanuni za ziada zimetekelezwa kwa uzalishaji bora wa nambari nasibu. Maombi yanapewa fursa ya kuchagua algorithm ya kutengeneza nambari za pseudorandom. Usaidizi ulioboreshwa wa kutoa mitiririko ya kitu bila mpangilio.
  • Uwekaji maelezo madhubuti wa watumiaji wote wa ndani wa JDK, isipokuwa API muhimu kama vile sun.misc.Unsafe. Ufungaji mkali huzuia majaribio kutoka kwa msimbo kufikia madarasa ya ndani, mbinu na nyanja. Hapo awali, hali kali ya usimbaji inaweza kulemazwa kwa kutumia chaguo la "--illegal-access=permit", lakini hii sasa imeacha kutumika. Programu zinazohitaji ufikiaji wa madarasa ya ndani, mbinu na sehemu zinapaswa kufafanua kwa uwazi kwa kutumia --add-opens chaguo au sifa ya Ongeza-Fungua katika faili ya maelezo.
  • Programu hupewa uwezo wa kufafanua vichujio vya kuondoa data, ambavyo vinaweza kuathiri muktadha na kuchaguliwa kwa nguvu kulingana na shughuli mahususi za kuondoa bidhaa. Vichungi vilivyoainishwa vinatumika kwa mashine nzima ya kawaida (JVM-wide), i.e. usifunike tu programu yenyewe, bali pia maktaba za wahusika wengine zinazotumiwa katika programu.
  • Swing ameongeza mbinu ya javax.swing.filechooser.FileSystemView.getSystemIcon ili kupakia aikoni kubwa ili kuboresha UI kwenye skrini za DPI ya Juu.
  • API ya java.net.DatagramSocket hutoa usaidizi wa kuunganisha kwa vikundi vya Multicast bila hitaji la API tofauti ya java.net.MulticastSocket.
  • Huduma ya IGV (Ideal Graph Visualizer) imeboreshwa, ikitoa taswira shirikishi ya uwakilishi wa kati wa msimbo katika mkusanyaji wa HotSpot VM C2 JIT.
  • Katika JavaDoc, kwa mlinganisho na mkusanyaji wa javac, wakati kosa ni pato, nambari ya mstari wa shida kwenye faili ya chanzo na eneo la kosa sasa imeonyeshwa.
  • Imeongeza sifa ya native.encoding, inayoakisi jina la usimbaji wa herufi ya mfumo (UTF-8, koi8-r, cp1251, n.k.).
  • Kiolesura cha java.time.InstantSource kimeongezwa, na kuruhusu uchezaji wa saa bila kurejelea saa za eneo.
  • Imeongeza API ya java.util.HexFormat ya kubadilisha hadi uwakilishi wa heksadesimali na kinyume chake.
  • Hali ya shimo nyeusi imeongezwa kwa mkusanyaji, ambayo inazima shughuli za kuondoa misimbo iliyokufa, ambayo inaweza kutumika wakati wa kufanya majaribio ya utendakazi.
  • Imeongeza chaguo la "-Xlog:async" kwenye Muda wa Kuendesha ili kurekodi kumbukumbu katika hali ya asynchronous.
  • Wakati wa kuanzisha miunganisho salama, TLS 1.3 imewezeshwa kwa chaguo-msingi (awali TLS 1.2 ilitumika).
  • Applet API iliyotangazwa kuwa ya kizamani (java.applet.Applet*, javax.swing.JApplet), ambayo ilitumiwa kuendesha programu za Java kwenye kivinjari, imehamishwa hadi kwenye kategoria ya zilizopangwa kuondolewa (umuhimu uliopotea baada ya kumalizika kwa usaidizi. kwa programu-jalizi ya Java kwa vivinjari).
  • Kidhibiti cha Usalama, ambacho kimepoteza umuhimu wake kwa muda mrefu na hakijadaiwa baada ya kumalizika kwa usaidizi wa programu-jalizi ya kivinjari, kimehamishwa hadi kwenye kitengo cha zile zilizopangwa kuondolewa.
  • Utaratibu wa Uanzishaji wa RMI umeondolewa, ambao umepitwa na wakati, umeachwa kwa kategoria ya chaguo katika Java 8 na karibu haitumiki katika mazoezi ya kisasa.
  • Mkusanyaji wa majaribio unaotumia JIT (kwa wakati tu) kwa ujumuishaji unaobadilika wa msimbo wa Java kwa HotSpot JVM, na pia njia ya utayarishaji wa kutarajia (AOT, kabla ya wakati) wa madarasa kuwa msimbo wa mashine kabla ya kuanza mashine pepe. , imeondolewa kwenye SDK. Mkusanyaji aliandikwa kwa Java na kulingana na kazi ya mradi wa Graal. Inabainisha kuwa matengenezo ya mkusanyaji yanahitaji kazi nyingi, ambayo haifai wakati hakuna mahitaji kutoka kwa watengenezaji.

Chanzo: opennet.ru

Kuongeza maoni