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