Eldono de Java SE 17

Post ses monatoj da evoluo, Oracle publikigis Java SE 17 (Java Platform, Standard Edition 17), kiu uzas la OpenJDK malfermfontecan projekton kiel sian referencan efektivigon. Escepte de la forigo de kelkaj malnoviĝintaj funkcioj, Java SE 17 konservas malantaŭan kongruon kun antaŭaj eldonoj de la Java platformo - la plej multaj antaŭe verkitaj Java-projektoj funkcios sen ŝanĝoj kiam ili funkcias sub la nova versio. Pretaj instalaĵoj de Java SE 17 (JDK, JRE kaj Server JRE) estas pretaj por Linukso (x86_64, AArch64), Vindozo (x86_64) kaj macOS (x86_64, AArch64). Disvolvita de la OpenJDK-projekto, la referenca efektivigo de Java 17 estas plene malfermfonta laŭ la permesilo GPLv2, kun GNU ClassPath-esceptoj permesantaj dinamikan ligon kun komercaj produktoj.

Java SE 17 estas klasita kiel eldono de Longdaŭra Subteno (LTS), kiu daŭre ricevos ĝisdatigojn ĝis 2029. Ĝisdatigoj por la antaŭa Java 16 mejloŝtona eldono estis nuligitaj. La antaŭa LTS-filio de Java 11 estos subtenata ĝis 2026. La venonta LTS-eldono estas planita por septembro 2024. Ni memorigu vin, ke ekde la liberigo de Java 10, la projekto ŝanĝis al nova evoluprocezo, kio implicas pli mallongan ciklon por la formado de novaj eldonoj. Nova funkcieco nun estas evoluigita en unu konstante ĝisdatigita majstra branĉo, kiu inkluzivas pretajn ŝanĝojn kaj de kiuj branĉoj estas disbranĉigitaj ĉiujn ses monatojn por stabiligi novajn eldonojn.

Novaj funkcioj en Java 17 inkluzivas:

  • Estas proponita eksperimenta efektivigo de ŝablona kongruo en "ŝanĝaj" esprimoj, kiu ebligas uzi ne precizajn valorojn en "kazaj" etikedoj, sed flekseblajn ŝablonojn kovrantajn serion da valoroj samtempe, por kiuj antaŭe estis necese uzi maloportuna. ĉenoj de “se... alie” esprimoj. Krome, "ŝaltilo" havas la kapablon pritrakti NULL-valorojn. Objekto o = 123L; Ŝnuro formatita = switch (o) { case Entjero i -> String.format("int %d", i); case Long l -> String.format("longa %d", l); case Double d -> String.format("duobla %f", d); case String s -> String.format("String %s", s); defaŭlta -> o.toString(); };
  • Stabiligita subteno por sigelitaj klasoj kaj interfacoj, kiuj ne povas esti uzataj de aliaj klasoj kaj interfacoj por heredi, etendi aŭ superregi la efektivigon. Sigelitaj klasoj ankaŭ disponigas pli deklaran manieron limigi la uzon de superklaso ol alirmodifiloj, surbaze de eksplicite listigado de la subklasoj permesitaj por etendaĵo. pako com.example.geometry; publika sigelita klaso Formo permesas com.example.polusa.Circle, com.example.quad.Rektangulo, com.example.quad.simple.Kvadrato {…}
  • Dua antaŭprezento de la Vektora API estas proponita, kiu disponigas funkciojn por vektoraj kalkuloj, kiuj estas ekzekutitaj per vektoraj instrukcioj sur x86_64 kaj AArch64-procesoroj kaj permesas operaciojn esti aplikataj samtempe al multoblaj valoroj (SIMD). Male al la kapabloj disponigitaj en la HotSpot JIT-kompililo por aŭto-vektorizado de skalaraj operacioj, la nova API ebligas eksplicite kontroli vektorigon por paralela datumtraktado.
  • Aldonis antaŭprezenton de la Foreign Function & Memory API, kiu permesas al aplikaĵoj interagi kun kodo kaj datumoj ekster la Java rultempo. La nova API permesas vin efike voki ne-JVM-funkciojn kaj aliri ne-JVM-administritan memoron. Ekzemple, vi povas voki funkciojn de eksteraj komunaj bibliotekoj kaj aliri procezajn datumojn sen uzi JNI.
  • La macOS-bildiga motoro kiu funkciigas la Java 2D API, kiu siavice funkciigas la Swing API, estis adaptita por uzi la Metal-grafikan API. La macOS-platformo daŭre uzas OpenGL defaŭlte, kaj ebligi Metal-subtenon postulas agordi "-Dsun.java2d.metal=true" kaj almenaŭ ruli macOS 10.14.x.
  • Aldonis havenon por la platformo macOS/AArch64 (komputiloj Apple bazitaj sur la novaj blatoj Apple M1). Speciala trajto de la haveno estas subteno por la W^X (Write XOR Execute) memorprotekta mekanismo, en kiu memorpaĝoj ne povas esti samtempe aliritaj por skribo kaj ekzekuto. (kodo povas esti efektivigita nur post kiam skribo estas malŝaltita, kaj skribi al memorpaĝo estas ebla nur post kiam ekzekuto estas malŝaltita).
  • Revenis al uzado de nur strikta fp-semantiko por glitkomaj esprimoj. Subteno por la "defaŭlta" semantiko, havebla ekde la liberigo de Java 1.2, estis nuligita, inkluzive de simpligoj por labori pri sistemoj kun tre malnovaj x87 matematikaj kunprocesoroj (post la apero de SSE2 instrukcioj, la bezono de plia semantiko malaperis).
  • Novaj specoj de interfacoj al pseŭdohazardaj nombrogeneratoroj estis efektivigitaj, kaj kromaj algoritmoj estis efektivigitaj por pli bona generacio de hazardaj nombroj. Aplikoj ricevas la ŝancon elekti algoritmon por generi pseŭdohazarajn nombrojn. Plibonigita subteno por generado de hazardaj objektofluoj.
  • Devigita strikta enkapsuligo de ĉiuj internoj de JDK, kun la escepto de kritikaj APIoj kiel sun.misc.Unsafe. Strikta enkapsuligo blokas provojn de kodo aliri internajn klasojn, metodojn kaj kampojn. Antaŭe, strikta enkapsuliga reĝimo povus esti malŝaltita uzante la opcion "--illegal-access=permit", sed ĉi tio nun estis malrekomendita. Aplikoj kiuj postulas aliron al internaj klasoj, metodoj kaj kampoj devus eksplicite difini ilin uzante la opcion --add-opens aŭ la atributon Add-Opens en la manifestdosiero.
  • Aplikoj ricevas la kapablon difini datumajn deseriigajn filtrilojn, kiuj povas esti kuntekst-sentemaj kaj dinamike elektitaj surbaze de specifaj deseriigaj operacioj. La specifitaj filtriloj estas aplikeblaj al la tuta virtuala maŝino (tute JVM), t.e. kovras ne nur la aplikaĵon mem, sed ankaŭ la triapartajn bibliotekojn uzatajn en la aplikaĵo.
  • Swing aldonis la javax.swing.filechooser.FileSystemView.getSystemIcon-metodon por ŝargi grandajn ikonojn por plibonigi la UI sur ekranoj de Alta DPI.
  • La java.net.DatagramSocket API provizas subtenon por konektiĝi al Multicast-grupoj sen la bezono de aparta java.net.MulticastSocket API.
  • La IGV (Ideal Graph Visualizer) utileco estis plibonigita, provizante interagan bildigon de meza koda reprezentado en la HotSpot VM C2 JIT-kompililo.
  • En JavaDoc, analoge kun la javac-kompililo, kiam eraro estas eligita, la nombro de la problema linio en la fontdosiero kaj la loko de la eraro nun estas indikitaj.
  • Aldonita la native.encoding posedaĵo, reflektante la nomon de la sistema signokodigo (UTF-8, koi8-r, cp1251, ktp.).
  • La interfaco java.time.InstantSource estis aldonita, permesante tempomanipuladon sen referenco al horzono.
  • Aldonita java.util.HexFormat API por konverti al deksesuma reprezento kaj inverse.
  • Nigratrua reĝimo estis aldonita al la kompililo, kiu malfunkciigas malfunkciajn kodajn eliminoperaciojn, kiuj povas esti uzitaj dum farado de spektaklotestoj.
  • Aldonita "-Xlog:async" opcio al Runtime por registri protokolojn en nesinkrona reĝimo.
  • Kiam oni establas sekurajn konektojn, TLS 1.3 estas ebligita defaŭlte (antaŭe TLS 1.2 estis uzata).
  • La antaŭe deklarita malnoviĝinta Applet-API (java.applet.Applet*, javax.swing.JApplet), kiu estis uzata por ruli Java-aplikaĵojn en la retumilo, estis movita al la kategorio de planita por forigo (perdita graveco post la fino de subteno. por la Java kromaĵo por retumiloj).
  • Sekureca Administranto, kiu delonge perdis sian gravecon kaj montriĝis nepostulita post la fino de subteno por la retumila kromaĵo, estis movita al la kategorio de tiuj planitaj por forigo.
  • La mekanismo de RMI Aktivigo estis forigita, kiu estas malaktuala, forigita al la kategorio de opcio en Java 8 kaj preskaŭ neniam estas uzata en moderna praktiko.
  • Eksperimenta kompililo kiu apogas JIT (ĝustatempa) por dinamika kompilo de Java kodo por HotSpot JVM, same kiel la reĝimon de anticipa kompilo (AOT, antaŭtempa) de klasoj en maŝinkodon antaŭ komenci la virtualan maŝinon , estis forigita de la SDK. La kompililo estis skribita en Java kaj bazita sur la laboro de la projekto Graal. Oni rimarkas, ke prizorgado de kompililo postulas multan laboron, kio ne estas pravigita kiam ne estas postulo de programistoj.

fonto: opennet.ru

Aldoni komenton