Paglabas ng Java SE 17

Pagkatapos ng anim na buwan ng pag-unlad, inilabas ng Oracle ang platform ng Java SE 17 (Java Platform, Standard Edition 17), na gumagamit ng OpenJDK open source na proyekto bilang isang reference na pagpapatupad. Maliban sa pag-alis ng ilang mga hindi na ginagamit na feature, ang Java SE 17 ay nagpapanatili ng backward compatibility sa mga nakaraang release ng Java platformβ€”ang karamihan sa mga naunang naisulat na mga proyekto sa Java ay gagana pa rin nang walang pagbabago kapag pinapatakbo sa ilalim ng bagong bersyon. Ang mga mai-install na build ng Java SE 17 (JDK, JRE, at Server JRE) ay inihanda para sa Linux (x86_64, AArch64), Windows (x86_64), at macOS (x86_64, AArch64). Binuo ng proyekto ng OpenJDK, ang pagpapatupad ng Java 17 reference ay ganap na open source sa ilalim ng lisensya ng GPLv2 na may mga pagbubukod sa GNU ClassPath upang payagan ang dynamic na pag-link sa mga komersyal na produkto.

Ang Java SE 17 ay inuri bilang isang Long Term Support (LTS) na release, na patuloy na makakatanggap ng mga update hanggang 2029. Ang mga update para sa nakaraang Java 16 milestone release ay hindi na ipinagpatuloy. Ang nakaraang LTS branch ng Java 11 ay susuportahan hanggang 2026. Ang susunod na paglabas ng LTS ay naka-iskedyul para sa Setyembre 2024. 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.

Kasama sa mga bagong feature sa Java 17 ang:

  • Ang isang pang-eksperimentong pagpapatupad ng pagtutugma ng pattern sa mga "switch" na expression ay iminungkahi, na nagbibigay-daan sa paggamit ng hindi eksaktong mga halaga sa mga label na "case", ngunit nababaluktot na mga template na sumasaklaw sa isang serye ng mga halaga nang sabay-sabay, kung saan dati ay kinakailangan na gumamit ng masalimuot tanikala ng mga ekspresyong β€œkung...iba pa”. Bilang karagdagan, ang "switch" ay may kakayahang pangasiwaan ang mga NULL na halaga. Bagay o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Pinatatag na suporta para sa mga selyadong klase at interface, na hindi magagamit ng ibang mga klase at interface para magmana, mag-extend, o mag-override sa 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 {…}
  • Ang pangalawang preview ng Vector API ay iminungkahi, na nagbibigay ng mga function para sa mga kalkulasyon ng vector na isinasagawa gamit ang mga tagubilin ng vector sa x86_64 at AArch64 na mga processor at pinapayagan ang mga operasyon na mailapat nang sabay-sabay sa maramihang mga halaga (SIMD). Hindi tulad ng mga kakayahan na ibinigay sa HotSpot JIT compiler para sa auto-vectorization ng scalar operations, ginagawang posible ng bagong API na tahasang kontrolin ang vectorization para sa parallel na pagproseso ng data.
  • Nagdagdag ng preview ng Foreign Function & Memory API, na nagpapahintulot sa mga application na makipag-ugnayan sa code at data sa labas ng Java runtime. Binibigyang-daan ka ng bagong API na mahusay na tumawag sa mga function na hindi JVM at ma-access ang memory na hindi pinamamahalaan ng JVM. Halimbawa, maaari kang tumawag sa mga function mula sa mga external na shared library at ma-access ang data ng proseso nang hindi gumagamit ng JNI.
  • Ang macOS rendering engine na nagpapagana sa Java 2D API, na nagpapagana naman sa Swing API, ay inangkop para magamit ang Metal graphics API. Patuloy na ginagamit ng macOS platform ang OpenGL bilang default, at ang pagpapagana ng suporta sa Metal ay nangangailangan ng pagtatakda ng "-Dsun.java2d.metal=true" at hindi bababa sa pagpapatakbo ng macOS 10.14.x.
  • Nagdagdag ng port para sa macOS/AArch64 platform (Mga Apple computer batay sa bagong Apple M1 chips). Ang isang espesyal na tampok ng port ay suporta para sa W^X (Write XOR Execute) na mekanismo ng proteksyon ng memorya, kung saan ang mga pahina ng memorya ay hindi maaaring sabay na ma-access para sa pagsulat at pagpapatupad. (maaari lamang isagawa ang code pagkatapos i-disable ang pagsulat, at ang pagsusulat sa isang memory page ay posible lamang pagkatapos i-disable ang execution).
  • Ibinalik sa paggamit lamang ng strictfp semantics para sa mga floating point expression. Ang suporta para sa "default" na semantics, na magagamit mula noong inilabas ang Java 1.2, ay hindi na ipinagpatuloy, kabilang ang mga pagpapasimple para sa pagtatrabaho sa mga system na may napakatanda na x87 math coprocessors (pagkatapos ng pagdating ng mga tagubilin sa SSE2, ang pangangailangan para sa karagdagang semantics ay nawala).
  • Ang mga bagong uri ng mga interface sa mga pseudorandom number generator ay ipinatupad, at ang mga karagdagang algorithm ay ipinatupad para sa mas mahusay na henerasyon ng mga random na numero. Ang mga application ay binibigyan ng pagkakataon na pumili ng isang algorithm para sa pagbuo ng mga pseudorandom na numero. Pinahusay na suporta para sa pagbuo ng mga random na object stream.
  • Ipinatupad ang mahigpit na encapsulation ng lahat ng internal ng JDK, maliban sa mga kritikal na API gaya ng sun.misc.Unsafe. Hinaharang ng mahigpit na encapsulation ang mga pagtatangka mula sa code upang ma-access ang mga panloob na klase, pamamaraan, at field. Dati, maaaring i-disable ang mahigpit na encapsulation mode gamit ang opsyong "--illegal-access=permit", ngunit hindi na ito ginagamit. Ang mga application na nangangailangan ng access sa mga panloob na klase, pamamaraan, at field ay dapat na tahasang tukuyin ang mga ito gamit ang --add-opens na opsyon o ang Add-Opens attribute sa manifest file.
  • Ang mga application ay binibigyan ng kakayahang tumukoy ng mga filter ng deserialization ng data, na maaaring maging sensitibo sa konteksto at dynamic na pinili batay sa mga partikular na pagpapatakbo ng deserialization. Ang mga tinukoy na filter ay naaangkop sa buong virtual machine (JVM-wide), i.e. takpan hindi lamang ang application mismo, kundi pati na rin ang mga third-party na library na ginamit sa application.
  • Idinagdag ni Swing ang javax.swing.filechooser.FileSystemView.getSystemIcon na paraan upang mag-load ng malalaking icon upang mapahusay ang UI sa mga High DPI na screen.
  • Ang java.net.DatagramSocket API ay nagbibigay ng suporta para sa pagkonekta sa mga Multicast na grupo nang hindi nangangailangan ng hiwalay na java.net.MulticastSocket API.
  • Ang utility ng IGV (Ideal Graph Visualizer) ay napabuti, na nagbibigay ng interactive na visualization ng intermediate na representasyon ng code sa HotSpot VM C2 JIT compiler.
  • Sa JavaDoc, sa pamamagitan ng pagkakatulad sa javac compiler, kapag ang isang error ay output, ang bilang ng problemang linya sa source file at ang lokasyon ng error ay ipinahiwatig na ngayon.
  • Idinagdag ang native.encoding property, na nagpapakita ng pangalan ng system character encoding (UTF-8, koi8-r, cp1251, atbp.).
  • Ang interface ng java.time.InstantSource ay naidagdag, na nagpapahintulot sa pagmamanipula ng oras nang walang reference sa isang time zone.
  • Nagdagdag ng java.util.HexFormat API para sa pag-convert sa hexadecimal na representasyon at vice versa.
  • Ang isang blackhole mode ay idinagdag sa compiler, na hindi pinapagana ang dead-code elimination operations, na maaaring magamit kapag nagsasagawa ng mga pagsubok sa pagganap.
  • Idinagdag ang opsyong "-Xlog:async" sa Runtime upang mag-record ng mga log sa asynchronous mode.
  • Kapag nagtatatag ng mga secure na koneksyon, ang TLS 1.3 ay pinagana bilang default (dati ang TLS 1.2 ay ginamit).
  • Ang dating idineklara na hindi na ginagamit na Applet API (java.applet.Applet*, javax.swing.JApplet), na ginamit para magpatakbo ng mga Java application sa browser, ay inilipat sa kategoryang nakatakdang alisin (nawala ang kaugnayan pagkatapos ng pagtatapos ng suporta para sa Java plugin para sa mga browser).
  • Ang Security Manager, na matagal nang nawala ang kaugnayan nito at naging hindi na-claim pagkatapos ng pagtatapos ng suporta para sa browser plugin, ay inilipat sa kategorya ng mga nakaiskedyul para sa pag-alis.
  • Ang mekanismo ng RMI Activation ay inalis, na hindi na napapanahon, nai-relegate sa kategorya ng isang opsyon sa Java 8 at halos hindi na ginagamit sa modernong pagsasanay.
  • Isang pang-eksperimentong compiler na sumusuporta sa JIT (just-in-time) para sa dynamic na compilation ng Java code para sa HotSpot JVM, pati na rin ang mode ng anticipatory compilation (AOT, ahead-of-time) ng mga klase sa machine code bago simulan ang virtual machine , ay inalis mula sa SDK. Ang compiler ay isinulat sa Java at batay sa gawain ng Graal project. Nabanggit na ang pagpapanatili ng compiler ay nangangailangan ng maraming paggawa, na hindi makatwiran kapag walang demand mula sa mga developer.

Pinagmulan: opennet.ru

Magdagdag ng komento