Paglabas ng Java SE 16

Pagkatapos ng anim na buwan ng pag-unlad, inilabas ng Oracle ang Java SE 16 (Java Platform, Standard Edition 16), na gumagamit ng proyektong OpenJDK bilang isang reference na pagpapatupad. Ang Java SE 16 ay nagpapanatili ng backward compatibility sa mga nakaraang release ng Java platform; lahat ng naunang nakasulat na proyekto ng Java ay gagana nang walang pagbabago kapag inilunsad sa ilalim ng bagong bersyon. Ang mga ready-to-install na build ng Java SE 16 (JDK, JRE at Server JRE) ay inihanda para sa Linux (x86_64, AArch64), Windows at macOS. Binuo ng proyekto ng OpenJDK, ang pagpapatupad ng sanggunian ng Java 16 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 16 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 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.

Bilang paghahanda para sa bagong release, lumipat ang development mula sa Mercurial version control system patungo sa Git at sa GitHub collaborative development platform. Inaasahang mapapabuti ng paglilipat ang pagganap ng mga pagpapatakbo ng imbakan, pataasin ang kahusayan ng imbakan, magbigay ng access sa mga pagbabago sa buong kasaysayan ng proyekto, pagpapabuti ng suporta para sa pagsusuri ng code, at paganahin ang mga API na i-automate ang mga daloy ng trabaho. Bilang karagdagan, ang paggamit ng Git at GitHub ay ginagawang mas kaakit-akit ang proyekto sa mga baguhan at developer na nakasanayan sa Git.

Kasama sa mga bagong feature sa Java 16 ang:

  • Nagdagdag ng pang-eksperimentong module jdk.incubator.vector na may pagpapatupad ng Vector API, na nagbibigay ng mga function para sa mga kalkulasyon ng vector na ginagawa gamit ang mga tagubilin sa vector sa x86_64 at AArch64 na mga processor at pinapayagan ang mga operasyon na mailapat nang sabay-sabay sa maraming value (SIMD). Sa kaibahan sa mga kakayahan na ibinigay sa HotSpot JIT compiler para sa auto-vectorization ng scalar operations, pinapayagan ka ng bagong API na tahasang kontrolin ang vectorization para sa parallel na pagproseso ng data.
  • Ang JDK at VM HotSpot code na nakasulat sa C++ ay pinapayagang gumamit ng mga feature na ipinakilala sa C++14 na detalye. Dati, pinapayagan ang mga pamantayan ng C++98/03.
  • Ang ZGC (Z Garbage Collector), na gumagana sa passive mode at pinapaliit ang mga pagkaantala dahil sa pagkolekta ng basura hangga't maaari, ay nagdagdag ng kakayahang magproseso ng mga thread stack nang magkatulad nang hindi napo-pause ang mga application thread. Ang ZGC ay mayroon na ngayong trabaho na nangangailangan ng pagsususpinde, na may patuloy na pagkaantala, karaniwang hindi hihigit sa ilang daang microsecond.
  • Nagdagdag ng suporta para sa mga Unix socket (AF_UNIX) sa mga klase ng SocketChannel, ServerSocketChannel at java.nio.channels.
  • Ang isang port ay ipinatupad para sa Linux distribution Alpine na may karaniwang C library musl, na sikat sa mga environment para sa mga container, microservice, cloud at embedded system. Ang iminungkahing port sa mga ganitong kapaligiran ay nagbibigay-daan sa iyo na magpatakbo ng mga programa ng Java tulad ng mga regular na application. Bilang karagdagan, gamit ang jlink, maaari mong alisin ang lahat ng hindi nagamit na mga module at lumikha ng isang minimal na kapaligiran na sapat upang patakbuhin ang application, na nagbibigay-daan sa iyong lumikha ng mga compact na imahe na partikular sa application.
  • Ang mekanismo ng Elastic Metaspace ay ipinatupad, na nag-optimize sa mga operasyon ng paglalaan at pagbabalik ng memorya na inookupahan ng class metadata (metaspace) sa JVM HotSpot. Ang paggamit ng Elastic Metaspace ay nagpapababa ng memory fragmentation, binabawasan ang class loader overhead, at mayroon ding kapaki-pakinabang na epekto sa pagganap ng matagal nang tumatakbong mga application ng server dahil sa mas mabilis na pagbabalik ng memorya na inookupahan ng hindi nagamit na class metadata sa operating system. Para piliin ang memory release mode pagkatapos mag-unload ng mga klase, ang opsyong β€œ-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)” ay inaalok.
  • Ang isang JDK port ay idinagdag para sa mga Windows system na tumatakbo sa hardware na may mga processor batay sa AArch64 architecture.
  • Ang ikatlong preview ng Foreign-Memory Access API ay iminungkahi, 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.
  • Isang pang-eksperimentong Foreign Linker API ang ipinatupad, na nagbibigay ng access mula sa Java sa native code. Kasama ang Foreign-Memory API, ginagawang mas madali ng bagong interface ng programming ang paggawa ng mga wrapper kaysa sa mga nakabahaging library.
  • Idinagdag ang jpackage utility, na nagpapahintulot sa iyo na lumikha ng mga pakete para sa mga self-contained na Java application. Ang utility ay batay sa javapackager mula sa JavaFX at pinapayagan kang lumikha ng mga pakete sa mga format na katutubong sa iba't ibang mga platform (msi at exe para sa Windows, pkg at dmg para sa macOS, deb at rpm para sa Linux). Kasama sa mga package ang lahat ng kinakailangang dependencies.
  • Ang mahigpit na encapsulation ng lahat ng JDK internals ay pinagana bilang default, maliban sa mga kritikal na API gaya ng sun.misc.Unsafe. Ang halaga ng opsyong "--illegal-access" ay nakatakda na ngayong "tanggihan" sa halip na "pahintulutan" bilang default, na hahadlang sa mga pagtatangka mula sa code upang ma-access ang karamihan sa mga panloob na klase, pamamaraan at field. Upang i-bypass ang paghihigpit, gamitin ang opsyong β€œ-illegal-access=permit”.
  • Ang pagpapatupad ng pagtutugma ng pattern sa operator na "instanceof" ay na-stabilize, na nagbibigay-daan sa iyong agad na tukuyin ang isang lokal na variable upang sumangguni sa 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”. Was: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Ngayon ay magagawa mo nang hindi tinutukoy ang β€œGroup group = (Group) obj”: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Ang pagpapatupad ng "record" na keyword ay na-stabilize, na nagbibigay ng isang compact na form para sa mga kahulugan ng klase na nag-aalis ng pangangailangan na tahasang tukuyin ang iba't ibang mababang antas na pamamaraan tulad ng equals(), hashCode() at toString() sa mga kaso kung saan ang data ay nakaimbak lamang sa mga patlang.na hindi ito 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 talaan 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.

  • Ang pangalawang draft ay iminungkahi para sa mga selyadong klase at interface na hindi magagamit ng ibang mga klase at interface para magmana, mag-extend, o mag-override ng mga 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 Mga permit sa hugis com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Pinagmulan: opennet.ru

Magdagdag ng komento