Java SE 17 vÀljalase

PĂ€rast kuue kuu arendustöö on Oracle vĂ€lja lasknud Java SE 17 platvormi (Java Platform, Standard Edition 17), mille referentsrakenduseks on avatud projekt OpenJDK. VĂ€lja arvatud mĂ”ned aegunud funktsioonide eemaldamised, sĂ€ilitab Java SE 17 tagasitagamise ĂŒhilduvuse eelnevate Java versioonidega — enamik varasematest Java projektidest töötab uue versiooni all ilma mingeid muudatusi tegemata. Installatsiooni jaoks valmis Java SE 17 kogumikud (JDK, JRE ja Server JRE) on ette valmistatud Linuxi (x86_64, AArch64), Windowsi (x86_64) ja macOSi (x86_64, AArch64) jaoks. OpenJDK projekti raames arendatud Java 17 referentsrakendus on tĂ€ielikult avatud GPLv2 litsentsi alusel koos GNU ClassPath'i eranditega, mis lubavad dĂŒnaamilist sidumist kommertsprodukteriga.

Java SE 17 kuulub pikaajalise toetuse (LTS) vĂ€ljaannete kategooriasse, mille vĂ€rskendused ilmuvad kuni 2029. aastani. Java 16 varasema vahevĂ€ljaande vĂ€rskenduste vĂ€ljaandmine on peatatud. Varasem LTS-haru Java 11 toetust jĂ€tkatakse kuni 2026. aastani. JĂ€rgmine LTS-vĂ€ljaanne on planeeritud 2024. aasta septembriks. Tuletame meelde, et alates Java 10 vĂ€ljaandest on projekt lĂ€inud ĂŒle uuele arendusprotsessile, mis hĂ”lmab lĂŒhemat uusversioonide vĂ€ljalaske tsĂŒklit. Uued funktsioonid arenevad nĂŒĂŒd ĂŒhes pidevalt uuenevas master-harus, kuhu lisatakse juba valminud muudatused ja millest jagunetakse iga kuue kuu tagant uusversioonide stabiilsuse harudeks.

Java 17 uudistest vÔib esile tÔsta:

  • Katseline eksperimentaalne teostus mustrimise otstarbel vĂ€ljendites "switch", mis vĂ”imaldab "case" mĂ€rgendites kasutada mitte tĂ€pset vÀÀrtust, vaid paindlikke mustreid, mis katavad korraga seeria vÀÀrtusi, mille jaoks tuli varem kasutada mahukaid "if
else" lauseid. Samuti on "switch" sees tagatud NULL vÀÀrtuste töötlemise vĂ”imalused. Object o = 123L; String formatted = switch (o) { case Integer 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(); };
  • Stabiliseeritud on suletud ("sealed") klasside ja liideste tugi, mida ei saa kasutada teiste klasside ja liideste poolt pĂ€rimise, laiendamise vĂ”i teostuse ĂŒlekirjutamise jaoks. Suletud klassid pakuvad ka deklareerivamat viisi ĂŒlemklassi kasutamise piirimiseks kui juurdepÀÀsukohandajad, mis pĂ”hinevad lubatud alla klasside selges loendis, mis on lubatud laiendamiseks. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {
}
  • Esitatud on teine eelnev rakendus API Vector, mis pakub vektorite arvutamise funktsioone, mida tĂ€idetakse x86_64 ja AArch64 protsessorite vektorite kĂ€skudega, vĂ”imaldades samaaegselt rakendada operatsioonid mitmele vÀÀrtusele (SIMD). Erinevalt HotSpot JIT-kogumiku pakutud automaatvektoriseerimise vĂ”imetest skalaarkĂ€skude osas vĂ”imaldab uus API selgelt hallata vektorizatsiooni andmete paralleelseks töötlemiseks.
  • Lisatud on eelnev rakendus API Foreign Function & Memory, mille abil rakendused saavad suhelda koodi ja andmetega, mis asuvad vĂ€ljaspool Java runtime'i. Uus API vĂ”imaldab tĂ”husalt kutsuda ĂŒles funktsioone, mis ei tööta JVM-is, ja pÀÀseda ligi JVM-ist mittehallatavale mĂ€lule. NĂ€iteks saab kutsuda ĂŒles funktsioone vĂ€lisest jagatud teegist ja pÀÀseda ligi protsessi andmetele ilma JNI kasutamata.
  • macOS jaoks mĂ”eldud renderdamismootor, mis toetab Java 2D API-d, mis omakorda on seotud Swing API-ga, kohandatud Metal graafilise API kasutamiseks. MacOS-il jÀÀb vaikimisi kasutusele OpenGL, kuid Metal toega töötamiseks on vajalik seada parameeter „-Dsun.java2d.metal=true” ja kasutada vĂ€hemalt macOS 10.14.x versiooni.
  • Lisatud port macOS/AArch64 platvormile (Apple'i arvutid, mis pĂ”hinevad uutest Apple M1 kiipidest). Porti eripĂ€ra on W^X (Write XOR Execute) mĂ€lu kaitsemehhanismi tugi, kus mĂ€lu lehekĂŒljed ei saa olla samaaegselt kirjutamiseks ja tĂ€itmiseks kĂ€ttesaadavad. (koodi saab tĂ€ita ainult pĂ€rast kirjutamise keelamist ja lehekĂŒljel saab kirjutada ainult pĂ€rast tĂ€itmise keelamist).
  • Tagasi on toodud ainult range (strictfp) semantika ujuvate komade vĂ€ljendite jaoks. Peatatud on alates Java 1.2 versioonist toetatud „default” semantika, mis sisaldas lihtsustusi vĂ€ga vanade x87 matemaatikakoprosessoritega sĂŒsteemide jaoks (pĂ€rast SSE2 instruktsioonide kasutuselevĂ”ttu kadus vajadus tĂ€iendava semantika jĂ€rele).
  • Uute pseudojuhuslike numbrite generaatorite liideste tĂŒĂŒbid on rakendatud ning lisaks on ellu viidud tĂ€iendavad algoritmid juhuslike numbrite kvaliteetseks genereerimiseks. Rakendustele on antud vĂ”imalus valida pseudojuhuslike numbrite genereerimise algoritm. Olemasolevaid juhuslike objektide voogude genereerimise toetust on parandatud.
  • On rakendatud kohustuslik rangelt kapseldamine kĂ”igist JDK sisemistest elementidest, vĂ€lja arvatud kriitilised API-d, nĂ€iteks sun.misc.Unsafe. Rangelt kapseldamine blokeerib katse suhelda koodis sisemiste klasside, meetodite ja vĂ€ljadega. Varem sai ranget kapseldamist vĂ€lja lĂŒlitada valikuga "—illegal-access=permit", kuid nĂŒĂŒd on see dekaareerimisele lĂ€hedal. Rakenduste jaoks, mis vajavad ligipÀÀsu sisemistele klassidele, meetoditele ja vĂ€ljadele, tuleb need selgelt mÀÀrata valikuga "—add-opens" vĂ”i manifestifaili Add-Opens atribuudi abil.
  • Rakendustele on antud vĂ”imalus mÀÀratleda filtreid andmete deserialiseerimiseks, mis vĂ”ivad sĂ”ltuda kontekstist ja olla dĂŒnaamiliselt valitud, et siduda teatud deserialiseerimisoperatsioonidega. MÀÀratud filtrid on kohaldatavad kogu virtuaalmasinas (JVM-laia), st. hĂ”lmavad mitte ainult rakendust, vaid ka rakenduses kasutatavaid kolmanda osapoole teeke.
  • Swing'i juurde on lisatud meetod javax.swing.filechooser.FileSystemView.getSystemIcon, mis vĂ”imaldab laadida suuremaid ikooni, parandades kasutajaliidese kujundust kĂ”rge pikslitihedusega ekraanidel (HighDPI).
  • API java.net.DatagramSocket on rakendatud toega Multicast gruppide ĂŒhendamiseks ilma eraldi API java.net.MulticastSocket kasutamiseta.
  • On tĂ€iustatud utiliiti IGV (Ideal Graph Visualizer), mis pakub interaktiivset visuaalset esitust JIT-kompilaatori HotSpot VM C2 vahepealsest koodiesitusest.
  • JavaDoc'is, sarnaselt kompilandriga javac, tuuakse nĂŒĂŒd veateate vĂ€ljundis vĂ€lja probleemse rea number allikafailis ja vea koht.
  • Lisatud omadus native.encoding, mis kajastab sĂŒsteemi mĂ€rgikoode (UTF-8, koi8-r, cp1251 jne).
  • Lisatud liides java.time.InstantSource, mis vĂ”imaldab ajaga manipuleerimist ajavööndist sĂ”ltumatult.
  • Lisatud API java.util.HexFormat, mis vĂ”imaldab teisendada kuueteistkĂŒmnendisse ja vastupidi.
  • Kompilaatorisse on lisatud blackhole reĆŸiim, mis keelab kasutamata koodi erandid (dead-code elimination), mida saab kasutada jĂ”udluse testimisel.
  • Runtime'i on lisatud valik „-Xlog:async“ logide asĂŒnkroonseks salvestamiseks.
  • Kaitstud ĂŒhenduste loomisel on vaikimisi kasutusele vĂ”etud TLS 1.3 (varasema TLS 1.2 asemel).
  • Varem aegunud API Applet (java.applet.Applet*, javax.swing.JApplet), mida kasutati Java rakenduste kĂ€ivitamiseks brauseris, on viidud kustutamiseks planeeritute kategooriasse (sest Java brauseriplaadi toetamine on lĂ”petatud).
  • Aegunud ja enam ei kasutatav Security Manager on viidud kustutamiseks planeeritute kategooriasse, kuna selle tugi brauseri pistikprogrammidele on lĂ”petatud.
  • RMI Activation mehhanism on eemaldatud, kuna see on vananenud, viidatud Java 8-sse ja seda ei rakendata enam tĂ€napĂ€eva praktikas.
  • SDK-st eemaldati eksperimentaalne kompilaator, mis toetas JIT (just-in-time) Java koodi dĂŒnaamiliseks kompileerimiseks HotSpot JVM-ile, samuti AOT (ahead-of-time) klasside prognoositava kompileerimise reĆŸiim masinkoodiks enne virtuaalmasina kĂ€ivitamist. Kompilaator oli kirjutatud Java keeles ja pĂ”hines Graal projekti tulemustel. MĂ€rgitakse, et kompilaatori hooldamine nĂ”uab suurt töömahtu, mis ei ole Ă”igustatud arendajate nĂ”udmise puudumise tingimustes.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster