Java SE 20 vrystelling

Na ses maande se ontwikkeling het Oracle die Java SE 20 (Java Platform, Standard Edition 20) platform vrygestel, wat die OpenJDK oopbronprojek as 'n verwysingsimplementering gebruik. Met die uitsondering van die verwydering van sommige verouderde kenmerke, handhaaf Java SE 20 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 20 (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 20-verwysingsimplementering volledig oopbron onder die GPLv2-lisensie met GNU ClassPath-uitsonderings om dinamiese koppeling met kommersiële produkte toe te laat.

Java SE 20 word gekategoriseer as 'n gereelde ondersteuningsvrystelling, met opdaterings wat voor die volgende vrystelling vrygestel moet word. Die langtermynondersteuningstak (LTS) behoort Java SE 17 te wees, wat opdaterings tot 2029 sal ontvang. Onthou 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 reeds voltooide veranderinge insluit en waaruit takke elke ses maande vertak word om nuwe vrystellings te stabiliseer.

Nuwe kenmerke in Java 20 sluit in:

  • Daar is voorlopige ondersteuning vir Scoped Values, wat toelaat dat onveranderlike data oor drade gedeel word en data doeltreffend tussen kinderdrade uitgeruil kan word (waardes word geërf). Omvangwaardes word ontwikkel om die draad-plaaslike veranderlikes-meganisme te vervang en is meer doeltreffend wanneer baie groot getalle virtuele drade (duisende of miljoene drade) gebruik word. Die belangrikste verskil tussen Scoped Values ​​en draad-plaaslike veranderlikes is dat eersgenoemde een keer geskryf word, nie in die toekoms verander kan word nie en slegs beskikbaar bly vir die duur van die draad se uitvoering. klas Bediener { finale statiese ScopedValue CURRENT_USER = nuwe ScopedValue(); void dien (Versoek versoek, Reaksie reaksie) { var level = (request. isAuthorized()? ADMIN: GAS); var gebruiker = nuwe gebruiker(vlak); ScopedValue.where(CURRENT_USER, gebruiker).run(() -> Application.handle(request, response)); } } klas Databasisbestuurder { DBConnection oop() { var gebruiker = Server.CURRENT_USER.get(); if (!user.canOpen()) gooi nuwe InvalidUserException(); gee nuwe DBConnection (...); } }
  • 'n Tweede voorskou van rekordpatrone is bygevoeg, wat die patroonpassingsfunksie wat in Java 16 bekendgestel is, uitgebrei word om die waardes van rekordklasse te ontleed. Byvoorbeeld: rekord Point(int x, int y) {} statiese leemte drukSom(Object obj) { if (obj instansievan Punt p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • 'n Vierde voorlopige implementering van patroonpassing in "skakelaar"-stellings is bygevoeg, wat toelaat dat "geval"-etikette nie presiese waardes gebruik nie, maar buigsame patrone wat 'n reeks waardes gelyktydig dek, waarvoor dit voorheen nodig was om omslagtig te gebruik kettings van "as ... anders" uitdrukkings. statiese String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer 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(); }; }
  • 'n Tweede voorlopige implementering van die FFM (Foreign Function & Memory) API is bygevoeg, wat jou toelaat om die interaksie van Java-programme met eksterne kode en data te organiseer deur funksies van eksterne biblioteke op te roep en toegang tot geheue buite die JVM te verkry.
  • 'n Tweede voorskou van virtuele drade is bygevoeg, wat liggewig drade is wat die skryf en instandhouding van hoëprestasie multi-draadtoepassings aansienlik vergemaklik.
  • Bygevoeg 'n tweede eksperimentele API vir gestruktureerde parallelisme, wat die ontwikkeling van multi-threaded toepassings vereenvoudig deur verskeie take wat in verskillende drade loop as 'n enkele blok te behandel.
  • 'n Vyfde voorskou van die Vector API is bygevoeg, wat funksies verskaf vir vektorberekeninge wat uitgevoer word met behulp van vektorinstruksies op x86_64- en AArch64-verwerkers en laat toe 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.

Bron: opennet.ru

Voeg 'n opmerking