Java SE 15 vrystelling

Na ses maande van ontwikkeling, Oracle vrygelaat platform JavaSE 15 (Java Platform, Standard Edition 15), wat die open source OpenJDK-projek as 'n verwysingsimplementering gebruik. Java SE 15 handhaaf terugwaartse versoenbaarheid met vorige vrystellings van die Java-platform, en alle voorheen geskrewe Java-projekte sal sonder veranderings werk wanneer dit onder die nuwe weergawe bekendgestel word. Gereed om Java SE 15-bou te installeer (JDK, JRE en Server JRE) voorberei vir Linux (x86_64), Windows en macOS. Verwysingsimplementering ontwikkel deur die OpenJDK-projek Java 15 volledig oopbron onder die GPLv2-lisensie met GNU ClassPath-uitsonderings wat dinamiese koppeling met kommersiële produkte moontlik maak.

Java SE 15 word geklassifiseer as 'n gereelde ondersteuningsvrystelling en sal voortgaan om opdaterings te ontvang tot die volgende vrystelling. Die langtermynondersteuningstak (LTS) behoort Java SE 11 te wees, wat tot 2026 opdaterings sal ontvang. Die vorige LTS-tak van Java 8 sal tot Desember 2020 ondersteun word. Die volgende LTS-vrystelling is geskeduleer vir September 2021. Laat ons u daaraan herinner dat die projek begin met die vrystelling van Java 10 na 'n nuwe ontwikkelingsproses oorgeskakel het, 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.

Van innovasies Java 15 kan 'n mens merk:

  • Ingeboude ondersteuning vir die EdDSA (Edwards-Curve Digital Signature Algorithm) digitale handtekeningskeppingsalgoritme RFC 8032). Die voorgestelde EdDSA-implementering is nie afhanklik van hardewareplatforms nie, is beskerm teen sykanaalaanvalle (konstante tyd van alle berekeninge word verseker) en is vinniger in werkverrigting as die bestaande ECDSA-implementering wat in C-taal geskryf is, met dieselfde vlak van beskerming. Byvoorbeeld, EdDSA wat 'n elliptiese kurwe met 'n 126-bis-sleutel gebruik, vertoon soortgelyke werkverrigting as ECDSA met 'n secp256r1 elliptiese kurwe en 'n 128-bis-sleutel.
  • Bygevoeg eksperimentele 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 toe,
    com.example.quad.Recangle,
    com.example.quad.simple.Square {...}

  • Bygevoeg ondersteuning vir verborge klasse wat nie direk deur die greepkode van ander klasse gebruik kan word nie. Die sleuteldoel van verborge klasse is om gebruik te word in raamwerke wat klasse dinamies tydens looptyd genereer en indirek gebruik, d.m.v. besinning. Sulke klasse het gewoonlik 'n beperkte lewensiklus, dus die instandhouding van hulle vir toegang vanaf staties gegenereerde klasse is nie geregverdig nie en sal slegs lei tot verhoogde geheueverbruik. Versteekte klasse skakel ook die behoefte uit vir die nie-standaard API sun.misc.Unsafe::defineAnonymousClass, wat na verwagting in die toekoms verwyder sal word.
  • Die ZGC (Z Garbage Collector) vullisverwyderaar is gestabiliseer en word erken as gereed vir wydverspreide gebruik. ZGC werk in passiewe modus, minimaliseer vertraging as gevolg van vullisversameling soveel as moontlik (stalleertyd wanneer ZGC gebruik word nie 10 ms oorskry nie.) en kan met beide klein en groot hope werk, wat wissel in grootte van etlike honderde megagrepe tot baie teragrepe.
  • Gestabiliseer en gereed gevind vir algemene gebruik
    vullis versamelaar Shenandoah, werk met minimale pouses (Lae-pouse-tyd vullisverwyderaar). Shenandoah is ontwikkel deur Red Hat en is opvallend vir sy gebruik van 'n algoritme wat die stalletjietyd tydens vullisversameling verminder deur opruiming te doen parallel met die uitvoering van Java-toepassings. Die grootte van die vertragings wat deur die vullisverwyderaar ingestel is, is voorspelbaar en hang nie af van die grootte van die hoop nie, m.a.w. vir hope van 200 MB en 200 GB sal die vertragings identies wees (moenie uitkom nie meer as 50 ms en gewoonlik binne 10 ms);

  • Ondersteuning is gestabiliseer en in die taal ingestel teksblokkies - 'n nuwe vorm van string letterlikes wat jou toelaat om multi-reël teks data in die bronkode in te sluit sonder om karakter ontsnap en die behoud van die oorspronklike teks formatering in die blok. Die blok word omraam deur drie dubbele aanhalingstekens.

    Byvoorbeeld, in plaas van kode

    String html = " »+
    "\n\t" + " »+
    "\n\t\t" + " \"Java 1 is hier!\" »+
    "\n\t" + " »+
    "\n" + " ";

    jy kan spesifiseer:

    String html = """


    »Java 1\
    is hier!

    """;

  • Herontwerp Legacy DatagramSocket API. Die ou implementerings van java.net.DatagramSocket en java.net.MulticastSocket is vervang met 'n moderne implementering wat makliker is om te ontfout en in stand te hou, en ook versoenbaar is met virtuele strome wat binne die projek ontwikkel is loom. In die geval van moontlike onverenigbaarheid met bestaande kode, is die ou implementering nie verwyder nie en kan dit geaktiveer word deur die jdk.net.usePlainDatagramSocketImpl opsie te gebruik.
  • Tweede eksperimentele implementering voorgestel patroon ooreenstem in die "instanceof"-operateur, wat jou toelaat om onmiddellik 'n plaaslike veranderlike te definieer om toegang tot die gemerkte waarde te verkry. Byvoorbeeld, jy kan dadelik skryf "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" sonder om uitdruklik "String s = (String) obj" te definieer.

    Was:

    if (obj instansie van groep) {
    Groepgroep = (Groep)obj;
    var inskrywings = group.getEntries();
    }

    Nou kan jy sonder die definisie "Groepgroep = (Groep) obj" klaarkom:

    if (obj-instansie van groepgroep) {
    var inskrywings = group.getEntries();
    }

  • Voorgestelde tweede eksperimentele implementering van die sleutelwoord "rekord", wat 'n kompakte vorm bied om klasse te definieer, sodat jy nie eksplisiet verskeie laevlakmetodes soos equals(), hashCode() en toString() kan definieer in gevalle waar data slegs in velde gestoor word waarvan die gedrag nie verander nie. Wanneer 'n klas standaardimplementerings van die equals(), hashCode() en toString() metodes gebruik, kan dit sonder hul eksplisiete definisie klaarkom:

    publieke rekord Banktransaksie (LocalDate datum,
    dubbele bedrag
    Stringbeskrywing) {}

    Hierdie verklaring sal outomaties implementerings van die equals(), hashCode() en toString()-metodes byvoeg tot die konstruktor- en getter-metodes.

  • Voorgestelde 'n tweede voorskou van die Foreign-Memory Access API, wat Java-toepassings in staat stel om veilig en doeltreffend toegang tot geheuestreke buite die Java-hoop te verkry deur die nuwe MemorySegment-, MemoryAddress- en MemoryLayout-abstraksies te manipuleer.
  • Gestrem en het die Bevooroordeelde Sluiting-optimaliseringstegniek wat in die HotSpot JVM gebruik word om sluitingsbokoste te verminder, opgeskort. Hierdie tegniek het sy relevansie verloor op stelsels met atoominstruksies wat deur moderne SVE's verskaf word, en is te arbeidsintensief om te onderhou weens die kompleksiteit daarvan.
  • Aangekondig verouderde meganisme RMI aktivering, wat in 'n toekomstige vrystelling verwyder sal word. Daar word kennis geneem dat RMI-aktivering verouderd is, verskuif na die kategorie van 'n opsie in Java 8 en byna nooit in moderne praktyk gebruik word nie.
  • Geskrap JavaScript-enjin renoster, wat in Java SE 11 opgeskort is.
  • Verwyder poorte vir Solaris OS en SPARC verwerkers (Solaris/SPARC, Solaris/x64 en Linux/SPARC). Deur hierdie poorte te verwyder, sal die gemeenskap die ontwikkeling van nuwe OpenJDK-kenmerke kan versnel sonder om tyd te mors om Solaris- en SPARC-spesifieke kenmerke te onderhou.

Bron: opennet.ru

Voeg 'n opmerking