Ang pagpagawas sa Java SE 16

Human sa unom ka bulan nga pag-uswag, gipagawas sa Oracle ang Java SE 16 (Java Platform, Standard Edition 16), nga naggamit sa open-source nga OpenJDK nga proyekto isip usa ka reperensiya nga pagpatuman. Ang Java SE 16 nagmintinar sa atrasado nga pagkaangay sa nangaging mga pagpagawas sa plataporma sa Java; ang tanan nga gisulat kaniadto nga mga proyekto sa Java molihok nga walay mga pagbag-o kung gilansad sa ilawom sa bag-ong bersyon. Andam-sa-instalar nga pagtukod sa Java SE 16 (JDK, JRE ug Server JRE) giandam alang sa Linux (x86_64, AArch64), Windows ug macOS. Gipalambo sa proyekto sa OpenJDK, ang pagpatuman sa Java 16 nga reperensiya hingpit nga bukas nga tinubdan ubos sa lisensya sa GPLv2, nga adunay mga eksepsiyon sa GNU ClassPath nga nagtugot sa dinamikong pagsumpay sa mga komersyal nga produkto.

Ang Java SE 16 giklasipikar ingon usa ka kinatibuk-ang pagpagawas sa suporta ug magpadayon nga makadawat mga update hangtod sa sunod nga pagpagawas. Ang sanga sa Long Term Support (LTS) kinahanglan nga Java SE 11, nga magpadayon nga makadawat mga update hangtod sa 2026. Ang sunod nga pagpagawas sa LTS gikatakda sa Septyembre 2021. Pahinumdum kami kanimo nga sugod sa pagpagawas sa Java 10, ang proyekto gibalhin sa usa ka bag-ong proseso sa pag-uswag, nga nagpasabut nga usa ka mas mubo nga siklo alang sa pagporma sa mga bag-ong pagpagawas. Ang bag-ong kagamitan naugmad na karon sa usa ka kanunay nga gi-update nga master branch, nga naglakip sa andam na nga mga pagbag-o ug gikan diin ang mga sanga gisanga matag unom ka bulan aron mapalig-on ang mga bag-ong pagpagawas.

Sa pagpangandam alang sa bag-ong pagpagawas, ang kalamboan mibalhin gikan sa Mercurial version control system ngadto sa Git ug sa GitHub collaborative development platform. Ang paglalin gilauman nga mapauswag ang pasundayag sa mga operasyon sa repository, madugangan ang kahusayan sa pagtipig, maghatag access sa mga pagbag-o sa tibuuk nga kasaysayan sa proyekto, mapaayo ang suporta alang sa pagrepaso sa code, ug hatagan ang mga API sa pag-automate sa mga daloy sa trabaho. Dugang pa, ang paggamit sa Git ug GitHub naghimo sa proyekto nga mas madanihon sa mga nagsugod ug mga developer nga naanad sa Git.

Ang mga bag-ong bahin sa Java 16 naglakip sa:

  • Gidugang ang eksperimento nga module jdk.incubator.vector nga adunay pagpatuman sa Vector API, nga naghatag mga function alang sa mga kalkulasyon sa vector nga gihimo gamit ang mga panudlo sa vector sa x86_64 ug AArch64 nga mga processor ug gitugotan ang mga operasyon nga magamit nga dungan sa daghang mga kantidad (SIMD). Sukwahi sa mga kapabilidad nga gihatag sa HotSpot JIT compiler alang sa auto-vectorization sa scalar operations, ang bag-ong API nagtugot kanimo nga klarong makontrol ang vectorization alang sa parallel data processing.
  • Ang JDK ug VM HotSpot code nga gisulat sa C++ gitugotan sa paggamit sa mga feature nga gipaila sa C++14 specification. Kaniadto, gitugotan ang mga sumbanan sa C++ 98/03.
  • Ang ZGC (Z Garbage Collector), nga naglihok sa passive mode ug nagpamenos sa mga paglangay tungod sa pagkolekta sa basura kutob sa mahimo, nakadugang sa abilidad sa pagproseso sa mga thread stack nga managsama nga walay paghunong sa mga thread sa aplikasyon. Ang ZGC karon aduna na lang trabaho nga nanginahanglan og suspension, nga adunay kanunay nga mga paglangan, kasagaran dili molapas sa pipila ka gatus ka microseconds.
  • Gidugang nga suporta alang sa Unix sockets (AF_UNIX) sa SocketChannel, ServerSocketChannel ug java.nio.channels nga mga klase.
  • Usa ka pantalan ang gipatuman alang sa Linux distribution Alpine nga adunay standard C library musl, nga popular sa mga palibot alang sa mga sudlanan, microservices, cloud ug embedded system. Ang gisugyot nga pantalan sa ingon nga mga palibot nagtugot kanimo sa pagpadagan sa mga programa sa Java sama sa mga regular nga aplikasyon. Dugang pa, gamit ang jlink, mahimo nimong tangtangon ang tanan nga wala magamit nga mga module ug maghimo usa ka gamay nga palibot nga igo aron mapadagan ang aplikasyon, nga nagtugot kanimo sa paghimo og mga compact nga imahe nga piho sa aplikasyon.
  • Ang mekanismo sa Elastic Metaspace gipatuman, nga nag-optimize sa mga operasyon sa paggahin ug pagbalik sa memorya nga giokupar sa class metadata (metaspace) sa JVM HotSpot. Ang paggamit sa Elastic Metaspace makapakunhod sa memory fragmentation, makapamenos sa class loader overhead, ug usab adunay mapuslanon nga epekto sa performance sa dugay na nga mga aplikasyon sa server tungod sa mas paspas nga pagbalik sa memorya nga giokupar sa wala magamit nga metadata sa klase ngadto sa operating system. Aron mapili ang mode sa pagpagawas sa panumduman pagkahuman sa pagdiskarga sa mga klase, ang kapilian nga "-XX: MetaspaceReclaimPolicy=(balanse | agresibo | wala)" gitanyag.
  • Gidugang ang usa ka pantalan sa JDK alang sa mga sistema sa Windows nga nagdagan sa hardware nga adunay mga processor nga gibase sa arkitektura sa AArch64.
  • Gisugyot ang ikatulo nga preview sa Foreign-Memory Access API, nga nagtugot sa mga aplikasyon sa Java nga luwas ug episyente nga maka-access sa mga rehiyon sa memorya sa gawas sa Java heap pinaagi sa pagmaniobra sa bag-ong MemorySegment, MemoryAddress, ug MemoryLayout abstractions.
  • Usa ka eksperimento nga Foreign Linker API ang gipatuman, nga naghatag og access gikan sa Java ngadto sa lumad nga code. Kauban sa Foreign-Memory API, ang bag-ong interface sa programming nagpadali sa paghimo og mga wrapper sa naandan nga gipaambit nga mga librarya.
  • Gidugang ang jpackage utility, nga nagtugot kanimo sa paghimo og mga pakete alang sa kaugalingon nga mga aplikasyon sa Java. Ang utility gibase sa javapackager gikan sa JavaFX ug nagtugot kanimo sa paghimo og mga pakete sa mga format nga lumad sa lainlaing mga plataporma (msi ug exe para sa Windows, pkg ug dmg alang sa macOS, deb ug rpm alang sa Linux). Ang mga pakete naglakip sa tanan nga gikinahanglan nga dependencies.
  • Ang estrikto nga encapsulation sa tanang JDK internals gi-enable pinaagi sa default, gawas sa mga kritikal nga API sama sa sun.misc.Unsafe. Ang bili sa "--illegal-access" nga kapilian gitakda na karon sa "pagdumili" imbes sa "pagtugot" pinaagi sa default, nga makababag sa mga pagsulay gikan sa code aron ma-access ang kadaghanan sa internal nga mga klase, mga pamaagi ug mga natad. Aron malaktawan ang pagdili, gamita ang kapilian nga "-illegal-access=permit".
  • Ang pagpatuman sa pattern matching sa operator nga "instanceof" na-stabilize, nga nagtugot kanimo sa paghubit dayon sa usa ka lokal nga variable nga nagtumong sa gisusi nga kantidad. Pananglitan, mahimo nimong isulat dayon ang "kung (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" nga walay klarong pagpasabot sa "String s = (String) obj". Mao: kung (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Karon mahimo nimong buhaton nga dili ipasabot ang β€œGroup group = (Group) obj”: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Ang pagpatuman sa "record" nga keyword gipalig-on, nga naghatag og usa ka compact nga porma alang sa mga kahulugan sa klase nga nagwagtang sa panginahanglan sa dayag nga paghubit sa nagkalain-laing ubos nga lebel nga mga pamaagi sama sa equals(), hashCode() ug toString() sa mga kaso diin ang data gitipigan. lamang sa mga uma, nga dili kini mausab. Sa diha nga ang usa ka klase naggamit sa standard nga pagpatuman sa equals(), hashCode() ug toString() nga mga pamaagi, mahimo kini nga walay klaro nga kahulugan: public record BankTransaction(LocalDate date, double amount, String description) {}

    Kini nga deklarasyon awtomatik nga makadugang sa mga pagpatuman sa equals(), hashCode() ug toString() nga mga pamaagi dugang sa constructor ug getter method.

  • Gisugyot ang ikaduhang draft alang sa mga selyado nga klase ug mga interface nga dili magamit sa ubang mga klase ug mga interface aron makapanunod, mapalugway, o ma-override ang mga pagpatuman. Ang mga selyado nga klase naghatag usab ug usa ka labi ka deklaratibo nga paagi aron mapugngan ang paggamit sa usa ka superclass kaysa sa mga modifier sa pag-access, base sa klaro nga paglista sa mga subclass nga gitugotan alang sa extension. package com.example.geometry; public sealed class Mga permiso sa porma com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Source: opennet.ru

Idugang sa usa ka comment