Java SE 17 vrystelling

Na ses maande se ontwikkeling het Oracle die Java SE 17 (Java Platform, Standard Edition 17) platform vrygestel, wat die OpenJDK oopbronprojek as 'n verwysingsimplementering gebruik. Met die uitsondering van die verwydering van sommige verouderde kenmerke, handhaaf Java SE 17 terugwaartse versoenbaarheid met vorige vrystellings van die Java-platform - die meeste voorheen geskrewe Java-projekte sal steeds sonder verandering werk wanneer dit onder die nuwe weergawe uitgevoer word. Gereed-vir-installeer-geboue van Java SE 17 (JDK, JRE en Server JRE) word voorberei vir Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). Ontwikkel deur die OpenJDK-projek, is die Java 17-verwysingsimplementering volledig oopbron onder die GPLv2-lisensie met GNU ClassPath-uitsonderings om dinamiese koppeling met kommersiële produkte toe te laat.

Java SE 17 word geklassifiseer as 'n langtermynondersteuning (LTS)-vrystelling, wat tot 2029 opdaterings sal ontvang. Opdaterings vir die vorige Java 16-mylpaalvrystelling is gestaak. Die vorige LTS-tak van Java 11 sal tot 2026 ondersteun word. Die volgende LTS-vrystelling is geskeduleer vir September 2024. Laat ons u daaraan herinner dat die projek begin met die vrystelling van Java 10 oorgeskakel het na 'n nuwe ontwikkelingsproses, wat 'n korter siklus vir die vorming van nuwe vrystellings impliseer. Nuwe funksionaliteit word nou ontwikkel in een voortdurend bygewerkte meestertak, wat klaargemaakte veranderinge insluit en waaruit takke elke ses maande vertak word om nuwe vrystellings te stabiliseer.

Nuwe kenmerke in Java 17 sluit in:

  • 'n Eksperimentele implementering van patroonpassing in "skakelaar" uitdrukkings word voorgestel, wat dit moontlik maak om nie presiese waardes in "geval" etikette te gebruik nie, maar buigsame sjablone wat 'n reeks waardes gelyktydig dek, waarvoor dit voorheen nodig was om omslagtig te gebruik kettings van "as ... anders" uitdrukkings. Daarbenewens het "skakelaar" die vermoë om NULL-waardes te hanteer. Voorwerp o = 123L; String formatted = switch (o) { case Heelgetal i -> String.format("int %d", i); kas Lang l -> String.format("lang %d", l); geval Dubbel d -> String.format("dubbel %f", d); case String s -> String.format("String %s", s); verstek -> o.toString(); };
  • Gestabiliseerde ondersteuning vir verseëlde klasse en koppelvlakke, wat nie deur ander klasse en koppelvlakke gebruik kan word om die implementering te erf, uit te brei of te ignoreer nie. Verseëlde klasse bied ook 'n meer verklarende manier om die gebruik van 'n superklas as toegangswysigers te beperk, gebaseer op die eksplisiete lys van die subklasse wat vir uitbreiding toegelaat word. pakket com.example.geometry; publieke verseëlde klas Vorm laat com.example.polar.Circle, com.example.quad.Recangle, com.example.quad.simple.Square toe {…}
  • 'n Tweede voorskou van die Vector API word voorgestel, wat funksies verskaf vir vektorberekeninge wat uitgevoer word met behulp van vektorinstruksies op x86_64- en AArch64-verwerkers en toelaat dat bewerkings gelyktydig op veelvuldige waardes (SIMD) toegepas word. Anders as die vermoëns wat in die HotSpot JIT-samesteller voorsien word vir outo-vektorisering van skalêre bewerkings, maak die nuwe API dit moontlik om vektorisering vir parallelle dataverwerking eksplisiet te beheer.
  • Het 'n voorskou van die Foreign Function & Memory API bygevoeg, wat toepassings toelaat om met kode en data buite die Java-looptyd te kommunikeer. Die nuwe API laat jou toe om nie-JVM-funksies doeltreffend op te roep en toegang tot nie-JVM-bestuurde geheue te verkry. Byvoorbeeld, jy kan funksies van eksterne gedeelde biblioteke oproep en toegang tot prosesdata kry sonder om JNI te gebruik.
  • Die macOS-weergawe-enjin wat die Java 2D API aandryf, wat op sy beurt die Swing API aandryf, is aangepas om die Metal graphics API te gebruik. Die macOS-platform gebruik OpenGL by verstek, en om Metal-ondersteuning te aktiveer, vereis die instelling van "-Dsun.java2d.metal=true" en ten minste macOS 10.14.x.
  • Het 'n poort bygevoeg vir die macOS/AArch64-platform (Apple-rekenaars gebaseer op die nuwe Apple M1-skyfies). 'n Spesiale kenmerk van die poort is ondersteuning vir die W^X (Write XOR Execute) geheuebeskermingsmeganisme, waarin geheuebladsye nie gelyktydig vir skryf en uitvoering verkry kan word nie. (kode kan slegs uitgevoer word nadat skryf gedeaktiveer is, en skryf na 'n geheuebladsy is slegs moontlik nadat uitvoering gedeaktiveer is).
  • Teruggekeer na die gebruik van slegs strictfp semantiek vir drywende punt uitdrukkings. Ondersteuning vir die "verstek" semantiek, beskikbaar sedert die vrystelling van Java 1.2, is gestaak, insluitend vereenvoudigings vir die werk aan stelsels met baie ou x87 wiskundige medeverwerkers (na die koms van SSE2-instruksies het die behoefte aan bykomende semantiek verdwyn).
  • Nuwe tipes koppelvlakke na pseudo-willekeurige getalgenerators is geïmplementeer, en bykomende algoritmes is geïmplementeer vir beter generering van ewekansige getalle. Aansoeke kry die geleentheid om 'n algoritme te kies vir die generering van pseudo-willekeurige getalle. Verbeterde ondersteuning vir die generering van ewekansige voorwerpstrome.
  • Gedwing streng inkapseling van alle JDK internals, met die uitsondering van kritieke API's soos sun.misc.Unsafe. Streng inkapseling blokkeer pogings van kode om toegang tot interne klasse, metodes en velde te verkry. Voorheen kon streng inkapselingsmodus gedeaktiveer word deur die "--illegal-access=permit" opsie te gebruik, maar dit is nou afgekeur. Toepassings wat toegang tot interne klasse, metodes en velde vereis, moet hulle uitdruklik definieer deur die --add-opens-opsie of die Add-Opens-kenmerk in die manifeslêer te gebruik.
  • Aan toepassings word die vermoë gegee om data-deserialiseringsfilters te definieer, wat kontekssensitief en dinamies gekies kan word gebaseer op spesifieke deserialiseringsbewerkings. Die gespesifiseerde filters is van toepassing op die hele virtuele masjien (JVM-wyd), d.w.s. dek nie net die toepassing self nie, maar ook die derdeparty-biblioteke wat in die toepassing gebruik word.
  • Swing het die javax.swing.filechooser.FileSystemView.getSystemIcon-metode bygevoeg om groot ikone te laai om die UI op hoë DPI-skerms te verbeter.
  • Die java.net.DatagramSocket API bied ondersteuning om aan Multicast-groepe te koppel sonder dat 'n aparte java.net.MulticastSocket API nodig is.
  • Die IGV (Ideal Graph Visualizer) nut is verbeter en bied interaktiewe visualisering van intermediêre kode-voorstelling in die HotSpot VM C2 JIT-samesteller.
  • In JavaDoc, na analogie van die javac-samesteller, word die nommer van die problematiese reël in die bronlêer en die ligging van die fout nou aangedui wanneer 'n fout uitgevoer word.
  • Het die native.encoding-eienskap bygevoeg, wat die naam van die stelselkarakterkodering (UTF-8, koi8-r, cp1251, ens.) weerspieël.
  • Die java.time.InstantSource-koppelvlak is bygevoeg, wat tydmanipulasie moontlik maak sonder verwysing na 'n tydsone.
  • Bygevoeg java.util.HexFormat API vir omskakeling na heksadesimale voorstelling en omgekeerd.
  • 'n Swartgat-modus is by die samesteller gevoeg, wat dooiekode-elimineringsbewerkings deaktiveer, wat gebruik kan word wanneer prestasietoetse uitgevoer word.
  • Bygevoeg "-Xlog:async" opsie by Runtime om logs in asinchroniese modus op te neem.
  • Wanneer veilige verbindings tot stand gebring word, is TLS 1.3 by verstek geaktiveer (voorheen is TLS 1.2 gebruik).
  • Die voorheen verklaarde verouderde Applet-API (java.applet.Applet*, javax.swing.JApplet), wat gebruik is om Java-toepassings in die blaaier te laat loop, is geskuif na die kategorie vir verwydering (verlore relevansie na die einde van ondersteuning vir die Java-inprop vir blaaiers).
  • Sekuriteitsbestuurder, wat lankal sy relevansie verloor het en blyk te wees onopgeëis na die einde van ondersteuning vir die blaaier-inprop, is geskuif na die kategorie van diegene wat geskeduleer is vir verwydering.
  • Die RMI-aktiveringsmeganisme is verwyder, wat verouderd is, verskuif na die kategorie van 'n opsie in Java 8 en byna nooit in moderne praktyk gebruik word nie.
  • 'n Eksperimentele samesteller wat JIT (net-betyds) ondersteun vir dinamiese samestelling van Java-kode vir HotSpot JVM, sowel as die modus van antisiperende samestelling (AOT, voor die tyd) van klasse in masjienkode voordat die virtuele masjien begin word , is uit die SDK verwyder. Die samesteller is in Java geskryf en gebaseer op die werk van die Graal-projek. Daar word kennis geneem dat samestelleronderhoud baie arbeid verg, wat nie geregverdig is as daar geen aanvraag van ontwikkelaars is nie.

Bron: opennet.ru

Voeg 'n opmerking