Java SE 17 vÀljaanne

PĂ€rast kuue kuu arendust on Oracle vĂ€lja andnud Java SE 17 platvormi (Java Platform, Standard Edition 17), mille etalonversioonina kasutatakse avatud projekti OpenJDK. VĂ€lja arvatud mĂ”ned vananenud vĂ”imalused, sĂ€ilitab Java SE 17 tagasiĂŒhilduvuse varasemate Java vĂ€ljaannetega - enamik varem loodud Java projekte töötab uue versiooni all muutusteta. Paigaldamiseks valmis Java SE 17 kogumid (JDK, JRE ja Server JRE) on saadaval Linuxile (x86_64, AArch64), Windowsile (x86_64) ja macOS-ile (x86_64, AArch64). OpenJDK projekti raames vĂ€lja töötatud Java 17 etalonversioon on tĂ€ielikult avatud GPLv2 litsentsi alusel, mis sisaldab GNU ClassPath'i erandeid, mis lubavad dĂŒnaamilist sidumist kaubanduslike toodetega.

Java SE 17 on klassifitseeritud pikaajalise toe (LTS) vĂ€ljaandena, mille vĂ€rskendused ilmuvad kuni aastani 2029. Eelmise vahepealse vĂ€ljaande Java 16 vĂ€rskenduste vĂ€ljaandmine on lĂ”petatud. Eelmise LTS haru Java 11 toetamine kestab kuni 2026. aastani. JĂ€rgmine LTS vĂ€ljaanne on kavandatud septembriks 2024. Peame meeles, et alates Java 10 vĂ€ljaandest on projekt ĂŒleminekut uuele arendusprotsessile, mis hĂ”lmab lĂŒhemaid uute vĂ€ljaannete tsĂŒkleid. Uued funktsionaalsused arenevad nĂŒĂŒd ĂŒhes pidevalt uuendatavas master-harus, kuhu lisatakse juba valmis muudatused ja millest harunevad iga kuue kuu tagant uute vĂ€ljaannete stabiilsuse tagamiseks harud.

Java 17 uuenduste seas on mÀrkimisvÀÀrseid uuendusi:

  • Pakutakse eksperimenteerimisversiooniga mustri sobitamist "switch" vĂ€ljendites, mis vĂ”imaldab "case" tunnustes kasutada mitte tĂ€pseid vÀÀrtusi, vaid paindlikke mustreid, mis katab kohe terve hulga vÀÀrtusi, mille jaoks tuli varem kasutada mahukaid "if...else" vĂ€ljendeid. Lisaks 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(); };
  • On stabiliseeritud suletud («sealed») klasside ja liideste toetus, mis ei saa olla teiste klasside ja liideste pĂ€rimiseks, laiendamiseks vĂ”i rakenduse ĂŒlekirjutamiseks kasutatud. Suletud klassid pakuvad ka deklaratiivsemat viisi superklasside kasutamise piiramise mÀÀratlemiseks kui ligipÀÀsumaandi, mis pĂ”hineb alamklasside selgesĂ”nalisel loetlemisel, mida on lubatud laiendada. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {
}
  • Pakutud on teine eelrealiseerimine API Vector, mis pakub funktsioone vektorite arvutamiseks, mida teostatakse x86_64 ja AArch64 protsessorite vektorite juhiste abil ning mis vĂ”imaldavad korraga rakendada operatsioone mitmele vÀÀrtusele (SIMD). Erinevalt HotSpot JIT-kompilaatori pakutud skalaarsĂŒsteemide automaatvektoriseerimise vĂ”imalustest, annab uus API vĂ”imaluse eksplicitse vektorisatsiooni juhtimiseks andmete paralleelseks töötlemiseks.
  • Lisatud on eelrealiseerimine API Foreign Function & Memory, mille abil saavad rakendused suhelda Java runtime'ist vĂ€ljaspool olevate koodide ja andmetega. Uus API vĂ”imaldab tĂ”husalt vĂ€liseid funktsioone, mis ei tööta JVM-is, kutsuda ja mĂ€lule, mida JVM ei kontrolli, ligi pÀÀseda. NĂ€iteks on vĂ”imalik kutsuda funktsioone vĂ€listest jagatud teekidest ja pÀÀseda protsessi andmetele ligi ilma JNI kasutamata.
  • MacOS-i renderdamise mootor, mis toetab Java 2D API tööd, mis omakorda on integreeritud Swing API-sse, on kohandatud metallilise graafika API kasutamiseks. MacOS-i platvormil jĂ€tkatakse OpenGL-i kasutamist vaikimisi, kuid Metal toe aktiveerimiseks on vajalik seadistada parameeter "-Dsun.java2d.metal=true" ja omada vĂ€hemalt macOS-i versiooni 10.14.x.
  • Lisatud on port macOS/AArch64 platvormile (Macintoshid, mis pĂ”hinevad uutel Apple M1 kiipidel). Porta eripĂ€ra on W^X (Write XOR Execute) mĂ€lu kaitse mehhanismi tugi, mille korral ei saa mĂ€lule korraga ligi pÀÀseda kirjutamiseks ja tĂ€itmiseks. (koodi saab tĂ€ita ainult siis, kui kirjutamine on keelatud, ja kirjutamine mĂ€llu on vĂ”imalik ainult pĂ€rast tĂ€itmise keelamist).
  • Tagasi on toodud ainult rangelt (strictfp) ujuvapunktide semantika. Toetamine, mis algas Java 1.2 vĂ€ljaandega, on lĂ”petatud, sealhulgas 'default' semantika, mis hĂ”lmas lihtsustusi vĂ€ga vanade x87 matemaatikaprotsessoritega töötamiseks (SSE2 juhiste tulek on hulpinud vajaduse tĂ€iendava semantika jĂ€rele).
  • Uued pseudojuhuslike arvude generaatorite liideste tĂŒĂŒbid on rakendatud ning tĂ€iendavad algoritmid pakkusid kvaliteetsemat juhuslike arvude genereerimist. Rakendused said vĂ”imaluse valida pseudojuhuslike arvude genereerimise algoritmi. Juhuslike objektide voogude genereerimise toetust on parendatud.
  • KĂ”ikide JDK siseelementide range kapseldamine on rakendatud, vĂ€lja arvatud kriitilised API-d, nagu sun.misc.Unsafe. Ranget kapseldamist blokeerib katsed ligipÀÀsuks siseklassidele, meetoditele ja vĂ€ljadele. Varem vĂ”is ranget kapseldamist vĂ€lja lĂŒlitada valiku '—illegal-access=permit' abil, kuid see on nĂŒĂŒd muutunud aegunud. Rakendustele, mis vajavad ligipÀÀsu siseklassidele, meetoditele ja vĂ€ljadele, tuleb need selgelt mÀÀratleda, kasutades valikut '—add-opens' vĂ”i Add-Opens atribuuti manifeerifailis.
  • Rakendustele on antud vĂ”imalus mÀÀrata andmete deserialiseerimise filtreid, mis vĂ”ivad sĂ”ltuda kontekstist ja mille valik on dĂŒnaamiline konkreetsete deserialiseerimise operatsioonide kontekstis. Kehtestatud filtrid kehtivad kogu virtuaalses masinas (JVM laialdaselt), st nad katab mitte ainult rakenduse, vaid ka rakenduses kasutatavad vĂ€lised teegid.
  • Swingi on lisatud meetod javax.swing.filechooser.FileSystemView.getSystemIcon suurte ikoonide laadimise jaoks, mis vĂ”imaldab parandada liidese loomist kĂ”rge pikseldihedusega ekraanidel (HighDPI).
  • API-s java.net.DatagramSocket on rakendatud Multicast-rĂŒhmadele ĂŒhenduse loomise toetust ilma eraldi API java.net.MulticastSocket kasutamise vajaduseta.
  • IGV (Ideal Graph Visualizer) tööriista on tĂ€iustatud, pakkudes interaktiivset visuaalset esitlust koodi vahevormist JIT-koodikogujas HotSpot VM C2.
  • JavaDoc-is, sarnaselt javac-iga, nĂ€idatakse nĂŒĂŒd veateate genereerimisel probleemse rea numbrit lĂ€htefailis ja vea asukohta.
  • Lisatud on native.encoding omadus, mis peegeldab sĂŒsteemi mĂ€rkide kodeeringu nime (UTF-8, koi8-r, cp1251 jne).
  • Lisatud on java.time.InstantSource liides, mis vĂ”imaldab ajaga manipuleerida ilma ajavööndiga seotust.
  • Lisatud on java.util.HexFormat API, et konverteerida kuuekĂŒmnendsĂŒsteemi esitusse ja tagasi.
  • Komplilaatorisse on lisatud blackhole reĆŸiim, mis keelab kasutamata koodi (dead-code elimination) erandite operatsioonid, mida saab kasutada jĂ”udlustestide lĂ€biviimisel.
  • Runtime'i on lisatud valik „-Xlog:async“, et logida logisid asĂŒnkroonses reĆŸiimis.
  • Kaitstud ĂŒhenduste seadistamisel on vaikimisi aktiveeritud TLS 1.3 (varem kasutati TLS 1.2).
  • Vanast API Applet (java.applet.Applet*, javax.swing.JApplet), mida kasutati Java rakenduste kĂ€itamiseks brauseris, on tĂ”lgitud kavandatuks eemaldamiseks (kaotas asjakohasuse brauserite jaoks Java plugina toe lĂ”petamisega).
  • Kaitsehaldur on tĂ”lgitud kavandatuks eemaldamiseks, kuna see on ammu kaotanud asjakohasuse ja ei olnud nĂ”udlik pĂ€rast brauseri plugina toe lĂ”petamist.
  • RMI Activation mehhanism, mis on vananenud, eemaldatud ja oli alustatud juba Java 8-s, ei ole tĂ€napĂ€eva praktikas enam palju kasutusel.
  • SDK-st on eemaldatud eksperimentaalne kompilaator, mis toetab JIT (just-in-time) Java koodi dĂŒnaamilist kompileerimist HotSpot JVM-i jaoks, samuti AOT (ahead-of-time) klasside kompileerimist masina koodi enne virtuaalse masina kĂ€ivitamist. Kompilaator kirjutati Java-s ja pĂ”hines Graali projekti arendustel. MĂ€rgitakse, et kompilaatori hooldamine nĂ”uab suurt tööjĂ”ukulusid, mis ei Ă”igusta end arvestades arendajate nĂ”udluse puudumist.

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster