PÄc seÅ”u mÄneÅ”u izstrÄdes Oracle izlaida Java SE 16 (Java Platform, Standard Edition 16), kas izmanto OpenJDK projektu kÄ atsauces ievieÅ”anu. Java SE 16 saglabÄ atpakaļejoÅ”u saderÄ«bu ar iepriekÅ”Äjiem Java platformas laidieniem; visi iepriekÅ” rakstÄ«tie Java projekti darbosies bez izmaiÅÄm, kad tie tiks palaisti jaunajÄ versijÄ. InstalÄÅ”anai gatavas Java SE 16 (JDK, JRE un Server JRE) versijas ir sagatavotas operÄtÄjsistÄmai Linux (x86_64, AArch64), Windows un macOS. IzstrÄdÄts OpenJDK projektÄ, Java 16 atsauces ievieÅ”ana ir pilnÄ«bÄ atvÄrta pirmkoda saskaÅÄ ar GPLv2 licenci, ar GNU ClassPath izÅÄmumiem, kas ļauj dinamiski izveidot saiti ar komerciÄliem produktiem.
Java SE 16 ir klasificÄts kÄ vispÄrÄja atbalsta laidiens, un tas turpinÄs saÅemt atjauninÄjumus lÄ«dz nÄkamajam laidienam. IlgtermiÅa atbalsta (LTS) filiÄlei vajadzÄtu bÅ«t Java SE 11, kas turpinÄs saÅemt atjauninÄjumus lÄ«dz 2026. gadam. NÄkamais LTS izlaidums ir paredzÄts 2021. gada septembrÄ«. AtgÄdinÄm, ka, sÄkot ar Java 10 izlaiÅ”anu, projekts pÄrgÄja uz jaunu izstrÄdes procesu, kas nozÄ«mÄ Ä«sÄku ciklu jaunu laidienu veidoÅ”anai. Jauna funkcionalitÄte tagad ir izstrÄdÄta vienÄ pastÄvÄ«gi atjauninÄtajÄ galvenajÄ filiÄlÄ, kas ietver gatavas izmaiÅas un no kuras filiÄles tiek atzarotas ik pÄc seÅ”iem mÄneÅ”iem, lai stabilizÄtu jaunus izdevumus.
Gatavojoties jaunajam laidienam, izstrÄde ir pÄrvietota no Mercurial versiju kontroles sistÄmas uz Git un GitHub sadarbÄ«bas izstrÄdes platformu. Paredzams, ka migrÄcija uzlabos repozitorija darbÄ«bu veiktspÄju, palielinÄs krÄtuves efektivitÄti, nodroÅ”inÄs piekļuvi izmaiÅÄm visÄ projekta vÄsturÄ, uzlabos atbalstu koda pÄrskatÄ«Å”anai un ļaus API automatizÄt darbplÅ«smas. TurklÄt Git un GitHub izmantoÅ”ana padara projektu pievilcÄ«gÄku iesÄcÄjiem un izstrÄdÄtÄjiem, kas pieraduÅ”i pie Git.
JaunÄs Java 16 funkcijas ietver:
- Pievienots eksperimentÄlais modulis jdk.incubator.vector ar Vector API ievieÅ”anu, kas nodroÅ”ina vektoru aprÄÄ·inu funkcijas, kas tiek veiktas, izmantojot vektoru instrukcijas uz x86_64 un AArch64 procesoriem, un ļauj operÄcijas pielietot vienlaicÄ«gi vairÄkÄm vÄrtÄ«bÄm (SIMD). AtŔķirÄ«bÄ no HotSpot JIT kompilatora piedÄvÄtajÄm iespÄjÄm skalÄro darbÄ«bu automÄtiskai vektorizÄcijai, jaunais API ļauj skaidri kontrolÄt vektorizÄciju paralÄlai datu apstrÄdei.
- C++ valodÄ rakstÄ«tajam JDK un VM HotSpot kodam ir atļauts izmantot C++14 specifikÄcijÄ ieviestos lÄ«dzekļus. IepriekÅ” bija atļauti C++98/03 standarti.
- ZGC (Z Garbage Collector), kas darbojas pasÄ«vÄ režīmÄ un pÄc iespÄjas samazina kavÄÅ”anos atkritumu savÄkÅ”anas dÄļ, ir pievienojis iespÄju paralÄli apstrÄdÄt pavedienu kaudzes, neapturot lietojumprogrammu pavedienus. ZGC tagad ir tikai darbs, kas prasa apturÄÅ”anu, kam ir pastÄvÄ«ga aizkave, parasti nepÄrsniedzot dažus simtus mikrosekundes.
- KlasÄm SocketChannel, ServerSocketChannel un java.nio.channels ir pievienots atbalsts Unix ligzdÄm (AF_UNIX).
- Linux izplatÄ«Å”anai Alpine ir ieviests ports ar standarta C bibliotÄku musl, kas ir populÄrs konteineru, mikropakalpojumu, mÄkoÅa un iegulto sistÄmu vidÄs. PiedÄvÄtais ports Å”ÄdÄs vidÄs ļauj palaist Java programmas kÄ parastÄs lietojumprogrammas. TurklÄt, izmantojot jlink, jÅ«s varat noÅemt visus neizmantotos moduļus un izveidot minimÄlu vidi, kas ir pietiekama lietojumprogrammas palaiÅ”anai, kas ļauj izveidot lietojumprogrammai specifiskus kompaktus attÄlus.
- Ir ieviests Elastic Metaspace mehÄnisms, kas optimizÄ JVM HotSpot klases metadatu (metaspace) aizÅemtÄs atmiÅas pieŔķirÅ”anas un atgrieÅ”anas operÄcijas. Elastic Metaspace izmantoÅ”ana samazina atmiÅas sadrumstalotÄ«bu, samazina klases ielÄdÄtÄja izmaksas, kÄ arÄ« labvÄlÄ«gi ietekmÄ ilgstoÅ”i darbinÄmu servera lietojumprogrammu veiktspÄju, jo operÄtÄjsistÄmÄ ÄtrÄk tiek atgriezta atmiÅa, ko aizÅem neizmantotie klases metadati. Lai izvÄlÄtos atmiÅas atbrÄ«voÅ”anas režīmu pÄc nodarbÄ«bu izkrauÅ”anas, tiek piedÄvÄta opcija ā-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)ā.
- Ir pievienots JDK ports Windows sistÄmÄm, kas darbojas ar aparatÅ«ru ar procesoriem, kuru pamatÄ ir AArch64 arhitektÅ«ra.
- Ir ierosinÄts treÅ”ais sveÅ”Äs atmiÅas piekļuves API priekÅ”skatÄ«jums, kas ļauj Java lietojumprogrammÄm droÅ”i un efektÄ«vi piekļūt atmiÅas reÄ£ioniem Ärpus Java kaudzes, manipulÄjot ar jaunajÄm MemorySegment, MemoryAddress un MemoryLayout abstrakcijÄm.
- Ir ieviesta eksperimentÄla Foreign Linker API, kas nodroÅ”ina piekļuvi no Java vietÄjam kodam. KopÄ ar Foreign-Memory API jaunais programmÄÅ”anas interfeiss ievÄrojami atvieglo iesaiÅojumu izveidi, izmantojot parastÄs koplietotÄs bibliotÄkas.
- Pievienota utilÄ«ta jpackage, kas ļauj izveidot pakotnes atseviŔķÄm Java lietojumprogrammÄm. LietderÄ«ba ir balstÄ«ta uz JavaFX javapackage, un tÄ Ä¼auj izveidot pakotnes formÄtos, kas ir raksturÄ«gi dažÄdÄm platformÄm (msi un exe operÄtÄjsistÄmai Windows, pkg un dmg operÄtÄjsistÄmai MacOS, deb un rpm operÄtÄjsistÄmai Linux). PaketÄs ir iekļautas visas nepiecieÅ”amÄs atkarÄ«bas.
- PÄc noklusÄjuma ir iespÄjota visu JDK iekÅ”Äjo elementu stingra iekapsulÄÅ”ana, izÅemot kritiskÄs API, piemÄram, sun.misc.Unsafe. Opcijas ā--illegal-accessā vÄrtÄ«ba tagad pÄc noklusÄjuma ir iestatÄ«ta uz āliegtā, nevis āpermitā, kas bloÄ·Äs mÄÄ£inÄjumus no koda piekļūt lielÄkajai daļai iekÅ”Äjo klaÅ”u, metožu un lauku. Lai apietu ierobežojumu, izmantojiet opciju ā-illegal-access=permitā.
- Modeļu saskaÅoÅ”anas ievieÅ”ana operatorÄ āinstanceofā ir stabilizÄta, kas ļauj nekavÄjoties definÄt lokÄlo mainÄ«go, lai atsauktos uz pÄrbaudÄ«to vÄrtÄ«bu. PiemÄram, varat uzreiz uzrakstÄ«t āif (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}ā, nepÄrprotami nedefinÄjot āString s = (String) objā. Bija: if (obj instanceof Group) { Group group = (Group) obj; var ieraksti = group.getEntries(); } Tagad jÅ«s varat iztikt, nedefinÄjot āGrupa grupa = (Grupa) objā: if (obj instanceof Group group) { var entries = group.getEntries(); }
- AtslÄgvÄrda "ieraksts" ievieÅ”ana ir stabilizÄta, nodroÅ”inot kompaktu formu klaÅ”u definÄ«cijÄm, kas novÄrÅ” nepiecieÅ”amÄ«bu skaidri definÄt dažÄdas zema lÄ«meÅa metodes, piemÄram, vienÄds(), hashCode() un toString() gadÄ«jumos, kad tiek glabÄti dati. tikai laukos.ar kuriem tas nemainÄs. Ja klasÄ tiek izmantotas vienÄds(), hashCode() un toString() metožu standarta implementÄcijas, tÄ var iztikt bez to skaidras definÄ«cijas: publisks ieraksts BankTransaction(LocalDate datums, dubultÄ summa, Virknes apraksts) {}
Å Ä« deklarÄcija papildus konstruktora un ieguvÄja metodÄm automÄtiski pievienos arÄ« vienÄds(), hashCode() un toString() metožu implementÄcijas.
- Otrs projekts ir ierosinÄts slÄgtÄm klasÄm un saskarnÄm, kuras nevar izmantot citas klases un saskarnes, lai mantotu, paplaÅ”inÄtu vai ignorÄtu implementÄcijas. AizzÄ«mogotÄs klases nodroÅ”ina arÄ« deklaratÄ«vÄku veidu, kÄ ierobežot virsklases izmantoÅ”anu nekÄ piekļuves modifikatori, pamatojoties uz nepÄrprotamu paplaÅ”inÄÅ”anai atļauto apakÅ”klaÅ”u uzskaitÄ«jumu. pakotne com.example.geometry; publiska slÄgtÄ klase Forma atļauj com.example.polar.Circle, com.example.quad.TaisnstÅ«ris, com.example.quad.vienkÄrÅ”s.KvadrÄts {ā¦}
Avots: opennet.ru