Paglabas ng Java SE 15

Pagkatapos ng anim na buwan ng pag-unlad, Oracle pinakawalan platform JavaSE 15 (Java Platform, Standard Edition 15), ang open-source na OpenJDK na proyekto ay ginagamit bilang isang reference na pagpapatupad. Ang Java SE 15 ay nagpapanatili ng backward compatibility sa mga nakaraang release ng Java platform; lahat ng naunang naisulat na mga proyekto ng Java ay gagana nang walang pagbabago kapag tumakbo sa ilalim ng bagong bersyon. Ready-to-install Java SE 15 build (JDK, JRE at Server JRE) nakahanda para sa Linux (x86_64), Windows at macOS. Pagpapatupad ng sanggunian na binuo ng proyekto ng OpenJDK Java 15 ay ganap na open source sa ilalim ng lisensya ng GPLv2, na may mga pagbubukod sa GNU ClassPath na nagpapahintulot sa dynamic na pag-link sa mga komersyal na produkto.

Ang Java SE 15 ay inuri bilang pangkalahatang release ng suporta at patuloy na makakatanggap ng mga update hanggang sa susunod na release. Ang sangay ng Long Term Support (LTS) ay dapat na Java SE 11, na patuloy na makakatanggap ng mga update hanggang 2026. Ang nakaraang LTS branch ng Java 8 ay susuportahan hanggang Disyembre 2020. Ang susunod na paglabas ng LTS ay naka-iskedyul para sa Setyembre 2021. Paalalahanan ka namin na simula sa paglabas ng Java 10, lumipat ang proyekto sa isang bagong proseso ng pag-unlad, na nagpapahiwatig ng mas maikling cycle para sa pagbuo ng mga bagong release. Ang bagong functionality ay binuo na ngayon sa isang patuloy na ina-update na master branch, na kinabibilangan ng mga handa nang pagbabago at kung saan ang mga branch ay sinasanga bawat anim na buwan upang patatagin ang mga bagong release.

Ng mga inobasyon Java 15 maaari markahan:

  • Naka-built-in suporta para sa EdDSA (Edwards-Curve Digital Signature Algorithm) digital signature creation algorithm RFC 8032). Ang iminungkahing pagpapatupad ng EdDSA ay hindi nakasalalay sa mga platform ng hardware, pinoprotektahan mula sa mga pag-atake sa side-channel (tinitiyak ang pare-parehong oras ng lahat ng mga kalkulasyon) at mas mabilis ang pagganap kaysa sa umiiral na pagpapatupad ng ECDSA na nakasulat sa wikang C, na may parehong antas ng proteksyon. Halimbawa, ang EdDSA na gumagamit ng isang elliptic curve na may 126-bit key ay nagpapakita ng katulad na pagganap sa ECDSA na may secp256r1 elliptic curve at isang 128-bit na key.
  • Idinagdag pang-eksperimentong suporta para sa mga selyadong klase at interface, na hindi magagamit ng ibang mga klase at interface upang mamana, mapalawig, o ma-override ang pagpapatupad. Nagbibigay din ang mga selyadong klase ng mas deklaratibong paraan upang paghigpitan ang paggamit ng superclass kaysa sa mga modifier ng access, batay sa tahasang paglilista ng mga subclass na pinapayagan para sa extension.

    package com.example.geometry;

    pampublikong selyadong klase Hugis
    pinahihintulutan ang com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Idinagdag suporta para sa mga nakatagong klase na hindi direktang magagamit ng bytecode ng ibang mga klase. Ang pangunahing layunin ng mga nakatagong klase ay ang magamit sa mga balangkas na dynamic na bumubuo ng mga klase sa runtime at hindi direktang ginagamit ang mga ito, sa pamamagitan ng pagmuni-muni. Ang ganitong mga klase ay karaniwang may limitadong ikot ng buhay, kaya ang pagpapanatili ng mga ito para sa pag-access mula sa mga statically generated na klase ay hindi makatwiran at hahantong lamang sa pagtaas ng pagkonsumo ng memorya. Tinatanggal din ng mga nakatagong klase ang pangangailangan para sa hindi karaniwang API na sun.misc.Unsafe::defineAnonymousClass, na nakatakdang alisin sa hinaharap.
  • Ang ZGC (Z Garbage Collector) garbage collector ay na-stabilize at kinikilala bilang handa na para sa malawakang paggamit. Gumagana ang ZGC sa passive mode, pinapaliit ang latency dahil sa koleksyon ng basura hangga't maaari (stall time kapag gumagamit ng ZGC ay hindi lalampas sa 10 ms.) at maaaring gumana sa parehong maliliit at malalaking tambak, mula sa ilang daang megabytes hanggang sa maraming terabytes.
  • Pinatatag at natagpuang handa para sa pangkalahatang paggamit
    basurero Shenandoah, nagtatrabaho nang may kaunting pag-pause (Low-Pause-Time Garbage Collector). Ang Shenandoah ay binuo ng Red Hat at kapansin-pansin sa paggamit nito ng isang algorithm na nagpapababa sa oras ng stall sa panahon ng pagkolekta ng basura sa pamamagitan ng pagpapatakbo ng paglilinis kasabay ng pagpapatupad ng mga Java application. Ang laki ng mga pagkaantala na ipinakilala ng kolektor ng basura ay mahuhulaan at hindi nakadepende sa laki ng tambak, i.e. para sa mga tambak na 200 MB at 200 GB ang mga pagkaantala ay magiging magkapareho (wag kang lalabas lampas sa 50 ms at kadalasan sa loob ng 10 ms);

  • Ang suporta ay pinatatag at ipinakilala sa wika mga bloke ng teksto - isang bagong anyo ng mga string literal na nagbibigay-daan sa iyong isama ang multi-line na data ng text sa source code nang hindi gumagamit ng character na tumatakas at pinapanatili ang orihinal na pag-format ng text sa block. Ang bloke ay naka-frame sa pamamagitan ng tatlong double quote.

    Halimbawa, sa halip na code

    String html = " Β» +
    "\n\t" + " Β» +
    "\n\t\t" + " \"Narito na ang Java 1!\" Β» +
    "\n\t" + " Β» +
    "\n" + " ";

    maaari mong tukuyin:

    String html = """


    Β»Java 1\
    Nandito!

    """;

  • Reworked Legacy DatagramSocket API. Ang mga lumang pagpapatupad ng java.net.DatagramSocket at java.net.MulticastSocket ay napalitan ng modernong pagpapatupad na mas madaling i-debug at mapanatili, at tugma din sa mga virtual stream na binuo sa loob ng proyekto Loom. Sa kaso ng posibleng hindi pagkakatugma sa umiiral na code, ang lumang pagpapatupad ay hindi naalis at maaaring paganahin gamit ang opsyon na jdk.net.usePlainDatagramSocketImpl.
  • Iminungkahi ang pangalawang pang-eksperimentong pagpapatupad pagtutugma ng pattern sa operator na "instanceof", na nagbibigay-daan sa iyong agad na tukuyin ang isang lokal na variable upang ma-access ang nasuri na halaga. Halimbawa, maaari mong isulat kaagad ang β€œif (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” nang hindi tahasang tinutukoy ang β€œString s = (String) obj”.

    Ito ay:

    kung (obj instanceof Group) {
    Pangkat ng pangkat = (Pangkat) obj;
    var entries = group.getEntries();
    }

    Magagawa mo na ngayon nang walang kahulugan na "Group group = (Group) obj":

    if (obj instanceof Group group) {
    var entries = group.getEntries();
    }

  • Iminungkahi pangalawang eksperimental na pagpapatupad ng keyword na "talaan", na nagbibigay ng isang compact na form para sa pagtukoy ng mga klase, na nagbibigay-daan sa iyong iwasan ang tahasang pagtukoy sa iba't ibang mga mababang antas na pamamaraan tulad ng equals(), hashCode() at toString() sa mga kaso kung saan ang data ay nakaimbak lamang sa mga field na ang pag-uugali ay hindi nagbabago. Kapag ang isang klase ay gumagamit ng mga karaniwang pagpapatupad ng equals(), hashCode() at toString() na mga pamamaraan, magagawa nito nang wala ang kanilang tahasang kahulugan:

    pampublikong record BankTransaction(LocalDate date,
    dobleng halaga
    Paglalarawan ng string) {}

    Ang deklarasyon na ito ay awtomatikong magdaragdag ng mga pagpapatupad ng equals(), hashCode() at toString() na mga pamamaraan bilang karagdagan sa mga pamamaraan ng constructor at getter.

  • Iminungkahi pangalawang preview ng Foreign-Memory Access API, na nagpapahintulot sa mga Java application na ligtas at mahusay na ma-access ang mga rehiyon ng memorya sa labas ng Java heap sa pamamagitan ng pagmamanipula sa bagong MemorySegment, MemoryAddress, at MemoryLayout abstraction.
  • Hindi pinagana at hindi na ginagamit ang diskarte sa pag-optimize ng Biased Locking na ginamit sa HotSpot JVM upang bawasan ang pag-lock sa itaas. Ang diskarteng ito ay nawala ang kaugnayan nito sa mga system na may atomic na mga tagubilin na ibinigay ng mga modernong CPU, at masyadong matrabaho upang mapanatili dahil sa pagiging kumplikado nito.
  • Inanunsyo hindi napapanahong mekanismo Pag-activate ng RMI, na aalisin sa isang release sa hinaharap. Napansin na ang RMI Activation ay luma na, nai-relegate sa kategorya ng isang opsyon sa Java 8 at halos hindi na ginagamit sa modernong pagsasanay.
  • Tinanggal JavaScript engine rhino, na hindi na ginagamit sa Java SE 11.
  • Tinanggal mga port para sa mga processor ng Solaris OS at SPARC (Solaris/SPARC, Solaris/x64 at Linux/SPARC). Ang pag-alis sa mga port na ito ay magbibigay-daan sa komunidad na mapabilis ang pagbuo ng mga bagong tampok ng OpenJDK nang hindi nag-aaksaya ng oras sa pagpapanatili ng mga partikular na tampok ng Solaris at SPARC.

Pinagmulan: opennet.ru

Magdagdag ng komento