Java SE 16 väljaanne

Kuue kuu arendustöö järel avaldas Oracle Java SE 16 (Java Platform, Standard Edition 16) platvormi, mille alusena kasutatakse avatud projekti OpenJDK. Java SE 16 säilitab ühilduvuse varasemate Java platvormide väljaannetega, mistõttu kõik varem kirjutatud Java projektid töötavad uuema versiooniga ilma muudatusteta. Java SE 16 (JDK, JRE ja Server JRE) installitavad kooskõlastused on valmistatud Linuxi (x86_64, AArch64), Windowsi ja macOS-i jaoks. Avatud projekti OpenJDK raames välja töötatud Java 16 viimistletud versioon on täielikult avatud GPLv2 litsentsi alla koos GNU ClassPath eranditega, mis lubavad dünaamilist sidumist kaubanduslike toodetega.

Java SE 16 kuulub tavalise toe versioonide hulka, mille jaoks uuendusi antakse välja järgmise versioonini. Pikaajalise toe versioonina (LTS) tuleks kasutada Java SE 11, mille uuendusi antakse välja kuni 2026. aastani. Järgmine LTS-versioon on kavandatud 2021. aasta septembris. Tuletame meelde, et alates Java 10 versioonist on projekt üle läinud uuele arendusprotsessile, mis hõlmab lühemat uute versioonide väljalaskmise tsüklit. Uus funktsionaalsus areneb nüüd ühes pidevalt värskendatud master-harus, kuhu lisatakse valmis muudatused ja millest harud stabiliseerimise jaoks eralduvad iga kuue kuu järel.

Uue väljaande ettevalmistamisel on arendustöö tõ statud versioonihalduse süsteemilt Mercurial Git'ile ja koostööplatvormile GitHub. Oodatakse, et migratsioon suurendab hoidla operatsioonide jõudlust, parandab salvestamise efektiivsust, tagab juurdepääsu muudatustele kogu projekti ajaloo vältel ning parandab koodi ülevaatamise tuge ja võimaldab automaatsete töövoogude jaoks API kasutamist. Lisaks teeb Git'i ja GitHub'i kasutamine projekti atraktiivsemaks uutele tulijatele ja arendajatele, kes on harjunud Git'iga.

Java 16 uuendustest võib märkida:

  • Eksperimentaalne moodul jdk.incubator.vector on lisatud, mis rakendab Vector API, pakkudes funktsioone vektorkalkulatsioonide jaoks, mida teostatakse x86_64 ja AArch64 protsessorite vektoriinstruktsioonide abil, võimaldades korraga rakendada operatsioone mitme väärtuse (SIMD) suhtes. Erinevalt HotSpot JIT kompilaatorist pakutavatest automaatvektoriseerimise võimalustest skalaarses operatsioonis, võimaldab uus API selgelt hallata vektoriseerimist andmete paralleelseks töötlemiseks.
  • JDK ja HotSpot VM-i C++-koodis on lubatud kasutada C++14 spetsifikatsiooniga tutvustatud võimalusi. Varasemalt oli lubatud kasutada C++98/03 standardeid.
  • ZGC (Z Garbage Collector) prügikorjajal, mis töötab passiivrežiimis ja püüab minimeerida prügikoristusega seotud viivitusi, on lisatud võimalus töövoogude kohalike mälupulkade paralleelseks töötlemiseks ilma rakenduse töövoogude peatamiseta. ZGC-s on nüüd alles ainult need peatamist vajavad osad, mis põhjustavad pidevaid viivitusi, mis tavaliselt ei ületa mõningaid sadoone mikrosekundeid.
  • SocketChannel, ServerSocketChannel ja java.nio.channels klassides on lisatud Unix-soketite (AF_UNIX) tugi.
  • Alpine'i Linuxi jaotusele on rakendatud port, mis kasutab standardset C raamatukogu musl ja mis on populaarne konteinerite, mikroteenuste, pilveteenuste ja sisseehitatud süsteemide keskkondades. Antud port võimaldab sellistes keskkondades käivitada Java programme nagu tavalisi rakendusi. Lisaks võimaldab jlink eemaldada kõik mittetäidetud moodulid ning luua minimaalne keskkond, mis on piisav rakenduse tööks, tänu millele on võimalik luua spetsiifilisi kompaktseid pilte konkreetselt rakenduse jaoks.
  • On rakendatud Elastic Metaspace mehhanism, mis optimeerib mäluhaldusoperatsioone, mis on seotud klasside metainformatsiooni (metaspace) eraldamise ja vabastamisega JVM HotSpotis. Elastic Metaspace'i kasutamine vähendab mälu fragmenteerimist, alandab klasside laadimisega seotud kulusid ning parandab pikaajaliste serverirakenduste jõudlust, kuna vabastatakse operatsioonisüsteemile kiiremini need klasside mittetäidetud metainformatsioonist vabanevad mälud. Klassi väljaviskamise järgselt mälu vabastamise režiimi valimiseks on pakutud valikut "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)".
  • JDK port on Windows systems running on AArch64 architecture has been added.
  • A third preview of the Foreign-Memory Access API has been proposed, allowing Java applications to access off-heap memory areas safely and efficiently, manipulating new abstractions MemorySegment, MemoryAddress, and MemoryLayout.
  • An experimental Foreign Linker API has been implemented, providing access from Java to native code. Along with the Foreign-Memory API, this new interface significantly simplifies creating bindings over standard shared libraries.
  • The jpackage utility has been added, allowing the creation of packages for self-contained Java applications. The utility is based on javapackager from JavaFX and allows generating packages in formats native to various platforms (msi and exe for Windows, pkg and dmg for macOS, deb and rpm for Linux). Packages include all necessary dependencies.
  • Vaikimisi on JDK kõigi sisemistelementide range kapseldamine sisse lülitatud, välja arvatud kriitilised API-d, nagu sun.misc.Unsafe. Valik «—illegal-access» on nüüd vaikimisi seadistatud «deny» asemel «permit», mis takistab koodist enamikku sisemisi klasse, meetodeid ja välju külastada. Piirangu ületamiseks tuleb kasutada valikut «—illegal-access=permit».
  • Pattern matching teates «instanceof» on stabiliseeritud, võimaldades koheselt määrata kohalikku muutujat kontrollitud väärtusele viitamiseks. Näiteks on võimalik kirjutada «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» ilma, et oleks vaja selgelt määrata «String s = (String) obj». Olid: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Nüüd saab ilma määratlemata «Group group = (Group) obj»: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Stabiilitud on võtmesõna „record“ rakendamine, mis pakub kompaktset vormi klasside määratlemiseks, võimaldades vältida erinevate madala taseme meetodite, nagu equals(), hashCode() ja toString(), avalikku määratlemist juhul, kui andmed salvestatakse ainult väljadele, mille käitumine ei muutu. Kui klassis kasutatakse tüüpilisi meetodite equals(), hashCode() ja toString() rakendusi, saab nendes meetodites ilma nende avaliku määratlemiseta hakkama: public record BankTransaction(LocalDate date, double amount, String description) {}

    See deklareerimine toob automaatselt kaasa meetodite equals(), hashCode() ja toString() rakenduste lisamise koos konstruktorite ja andmete muutmise (getterite) juhtimise meetoditega.

  • Esitati teine eelnõu pitseeritud („sealed”) klasside ja liideste jaoks, mida teised klassid ja liidesed ei saa pärida, laiendada ega oma rakendusi ümber kirjutada. Pitseeritud klassid pakuvad ka deklareerivamat viisi, kuidas piirata superklassi kasutamist, võrreldes juurdepääsukaitsemodifikaatoritega, mis põhinevad lubatud alamklasside loetlemisel. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster