Eldono de Java SE 16

Post ses monatoj da evoluo, Oracle publikigis Java SE 16 (Java Platform, Standard Edition 16), kiu uzas la OpenJDK-projekton kiel referencan efektivigon. Java SE 16 konservas malantaŭan kongruon kun antaŭaj eldonoj de la Java-platformo; ĉiuj antaŭe skribitaj Java-projektoj funkcios sen ŝanĝoj kiam lanĉitaj sub la nova versio. Pretaj instalaĵoj de Java SE 16 (JDK, JRE kaj Server JRE) estas pretaj por Linukso (x86_64, AArch64), Vindozo kaj macOS. Disvolvita de la OpenJDK-projekto, la referenca efektivigo de Java 16 estas plene malfermfonta sub la permesilo GPLv2, kun GNU ClassPath-esceptoj permesantaj dinamikan ligon kun komercaj produktoj.

Java SE 16 estas klasifikita kiel ĝenerala subtena eldono kaj daŭre ricevos ĝisdatigojn ĝis la venonta eldono. La branĉo Long Term Support (LTS) devus esti Java SE 11, kiu daŭre ricevos ĝisdatigojn ĝis 2026. La venonta LTS-eldono estas planita por septembro 2021. 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.

En preparo por la nova eldono, evoluo moviĝis de la Mercurial-versia kontrolo-sistemo al Git kaj la kunlabora evoluiga platformo GitHub. La migrado estas atendita plibonigi la agadon de deponejo-operacioj, pliigi konservan efikecon, havigi aliron al ŝanĝoj dum la historio de la projekto, plibonigi subtenon por koda revizio kaj ebligi API-ojn aŭtomatigi laborfluojn. Krome, la uzo de Git kaj GitHub faras la projekton pli alloga por komencantoj kaj programistoj alkutimiĝintaj al Git.

Novaj funkcioj en Java 16 inkluzivas:

  • Aldonita eksperimenta modulo jdk.incubator.vector kun efektivigo de la Vector API, kiu disponigas funkciojn por vektoraj kalkuloj, kiuj estas faritaj per vektoraj instrukcioj sur x86_64 kaj AArch64-procesoroj kaj permesas operaciojn esti aplikataj samtempe al multoblaj valoroj (SIMD). Kontraste al la kapabloj provizitaj en la HotSpot JIT-kompililo por aŭtomata vektorizado de skalaraj operacioj, la nova API permesas al vi eksplicite kontroli vektorigon por paralela datumtraktado.
  • JDK kaj VM HotSpot-kodo skribita en C++ rajtas uzi funkciojn lanĉitajn en la C++14-specifo. Antaŭe, C++98/03-normoj estis permesitaj.
  • La ZGC (Z Rubo-Kolektanto), kiu funkcias en pasiva reĝimo kaj minimumigas prokrastojn pro rubkolekto kiel eble plej multe, aldonis la kapablon prilabori fadenstakojn paralele sen paŭzi aplikaĵfadenojn. La ZGC nun havas nur laboron kiu postulas suspendon, kiu havas konstantajn prokrastojn, kutime ne superante kelkajn centojn da mikrosekundoj.
  • Aldonita subteno por Uniksaj ingoj (AF_UNIX) al la klasoj SocketChannel, ServerSocketChannel kaj java.nio.channels.
  • Haveno estis efektivigita por la Linukso-distribuo Alpine kun la norma C-biblioteko musl, kiu estas populara en medioj por ujoj, mikroservoj, nubo kaj enkonstruitaj sistemoj. La proponita haveno en tiaj medioj permesas ruli Java-programojn kiel regulaj aplikoj. Krome, uzante jlink, vi povas forigi ĉiujn neuzatajn modulojn kaj krei minimuman medion sufiĉan por ruli la aplikaĵon, kiu ebligas al vi krei aplikaĵ-specifajn kompaktajn bildojn.
  • La Elastika Metaspaco-mekanismo estis efektivigita, optimumigante la operaciojn de asignado kaj resendado de memoro okupita per klasmetadatenoj (metaspaco) en JVM HotSpot. La uzo de Elastic Metaspace reduktas memorfragmentiĝon, reduktas klasŝargilon superkoste, kaj ankaŭ havas utilan efikon al la efikeco de longdaŭraj servilaj aplikoj pro pli rapida reveno de memoro okupita per neuzataj klasmetadatenoj al la operaciumo. Por elekti la memorliberigreĝimon post malŝarĝo de klasoj, la opcio "-XX:MetaspaceReclaimPolicy=(balanced|agresema|neniu)" estas ofertita.
  • JDK-haveno estis aldonita por Vindozaj sistemoj funkcianta per aparataro kun procesoroj bazitaj sur la AArch64-arkitekturo.
  • Tria antaŭprezento de la Foreign-Memory Access API estis proponita, permesante al Java-aplikoj sekure kaj efike aliri memorregionojn ekster la Java amaso manipulante la novajn abstraktaĵojn MemorySegment, MemoryAddress kaj MemoryLayout.
  • Eksperimenta Foreign Linker API estis efektivigita, disponigante aliron de Java ĝis indiĝena kodo. Kune kun la Foreign-Memory API, la nova programa interfaco faciligas krei envolvaĵojn super konvenciaj komunaj bibliotekoj.
  • Aldonita la ilo jpackage, kiu ebligas al vi krei pakaĵojn por memstaraj Java-aplikoj. La ilo baziĝas sur javapackager de JavaFX kaj permesas krei pakaĵojn en denaskaj formatoj al diversaj platformoj (msi kaj exe por Vindozo, pkg kaj dmg por macOS, deb kaj rpm por Linukso). La pakaĵoj inkluzivas ĉiujn postulatajn dependecojn.
  • Strikta enkapsuligo de ĉiuj internoj de JDK estas ebligita defaŭlte, kun la escepto de kritikaj APIoj kiel sun.misc.Unsafe. La valoro de la opcio "--illegal-access" nun estas agordita al "nei" anstataŭ "permeso" defaŭlte, kio blokos provojn de kodo por aliri la plej multajn internajn klasojn, metodojn kaj kampojn. Por preteriri la limigon, uzu la opcion "-illegal-access=permit".
  • La efektivigo de ŝablona kongruo en la "instanceof" operatoro estis stabiligita, kio permesas vin tuj difini lokan variablon por rilati al la kontrolita valoro. Ekzemple, vi povas tuj skribi "se (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" sen eksplicite difini "String s = (String) obj". Estis: if (obj instanceof Group) { Group group = (Group) obj; var enskriboj = group.getEntries (); } Nun vi povas fari sen difino de “Group group = (Group) obj”: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • La efektivigo de la "rekordo" ŝlosilvorto estis stabiligita, disponigante kompaktan formon por klasdifinoj kiu eliminas la bezonon eksplicite difini diversajn malaltnivelajn metodojn kiel ekzemple equals (), hashCode () kaj toString () en kazoj kie datenoj estas stokitaj. nur en kampoj.kun kiuj ĝi ne ŝanĝiĝas. Kiam klaso uzas normajn efektivigojn de la metodoj equals(), hashCode() kaj toString(), ĝi povas fari sen ilia eksplicita difino: publika rekordo BankTransaction(LocalDate dato, duobla kvanto, String-priskribo) {}

    Ĉi tiu deklaro aŭtomate aldonos efektivigojn de la metodoj equals(), hashCode() kaj toString() krom la metodoj konstruktilo kaj getter.

  • Dua skizo estas proponita por sigelitaj klasoj kaj interfacoj kiuj ne povas esti uzitaj per aliaj klasoj kaj interfacoj por heredi, etendi, aŭ superregi efektivigojn. 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 {…}

fonto: opennet.ru

Aldoni komenton