Java SE 16 vÀljalaskmine

PĂ€rast kuue kuu arendust on Oracle vĂ€lja andnud Java SE 16 (Java Platform, Standard Edition 16), mille standardrakenduseks on avatud projekt OpenJDK. Java SE 16 sĂ€ilitab tagurpidi ĂŒhilduvuse varasemate Java platvormi vĂ€ljaannetega, mistĂ”ttu töötavad kĂ”ik varem kirjutatud Java projektid muutumatul kujul uue versiooni all. Java SE 16 (JDK, JRE ja Server JRE) paigaldamiseks on ette valmistatud versioonid Linuxile (x86_64, AArch64), Windowsile ja macOS-ile. OpenJDK projekti raames vĂ€lja töötatud Java 16 standardrakendus on tĂ€ielikult avatud GPLv2 litsentsi all koos GNU ClassPath eranditega, mis lubavad dĂŒnaamilist sidumist kommertstooteid.

Java SE 16 liigitatakse tavapĂ€rase toe jaotiste hulka, mille uuendusi antakse vĂ€lja seni, kuni ilmub jĂ€rgmine versioon. Pikaajalise toe (LTS) haru jaoks tuleks kasutada Java SE 11, mille uuendused antakse vĂ€lja kuni 2026. aastani. JĂ€rgmine LTS-versioon on planeeritud 2021. aasta septembrisse. Tuletame meelde, et alates Java 10 vĂ€ljaandmisest on projekt muutnud arendamisprotsessi, mis tĂ€hendab lĂŒhemaid uusi vĂ€ljaannete tsĂŒkleid. Uusi funktsioone arendatakse nĂŒĂŒd ĂŒhes pidevalt vĂ€rskendatud master-harus, kuhu kaasatakse juba valmis muudatused ja kust harud stabiliseerimiseks jagunevad iga kuue kuu tagant.

Uue vĂ€ljaande ettevalmistamisel on arendus ĂŒleviidud versioonihalduse sĂŒsteemist Mercurial Git-i ja koostööplatvormile GitHub. Oodatakse, et migreerimine tĂ”stab vĂ€ljaande jĂ”udlust, suurendab salvestuse efektiivsust, vĂ”imaldab juurdepÀÀsu muudatustele kogu projekti ajaloo jooksul, parandab koodi ĂŒlevaatamise tuge ja vĂ”imaldab kasutada API-d tööprotsesside automatiseerimiseks. Lisaks teeb Git-i ja GitHub-i kasutamine projekti uustulnukatele ja arendajatele, kes on harjunud Git-iga, atraktiivsemaks.

Java 16 uuendustest vÔib vÀlja tuua:

  • Lisatud eksperimentaalne moodul jdk.incubator.vector, mis rakendab API Vector, pakkudes funktsioone vektorkalkulatsioonide tegemiseks, mis toimub x86_64 ja AArch64 protsessorite vektori instruktsioonide abil ning vĂ”imaldab samaaegselt rakendada operatsioone mitmele vÀÀrtusele (SIMD). Erinevalt HotSpot JIT-kogujast, mis toetab automaatset vektorimist skalaarkalkulatsioonide jaoks, vĂ”imaldab uus API selgelt hallata vektoreid andmete paralleelseks töötlemiseks.
  • JDK ja VM HotSpot C++ koodis on lubatud kasutada C++14 spetsifikatsioonis ilmunud vĂ”imalusi. Varem lubati kasutada C++98/03 standardeid.
  • ZGC (Z Garbage Collector), mis töötab passiivreĆŸiimis ja pĂŒĂŒab vĂ”imalikult vĂ€he vĂ€hendada prĂŒgikoristuse pĂ”hjustatud viivitusi, on saanud vĂ”imaluse paralleelseks töötlemiseks voogude steikide puhul ilma rakenduse voogude peatamiseta. ZGC-s on nĂŒĂŒd alles vaid need peatamised, mis pĂ”hjustavad pidevaid viivitusi, mis tavaliselt ei ĂŒleta vaid mĂ”ningaid sadu mikrosekundeid.
  • Unix-sokkide (AF_UNIX) tugi on lisatud klassides SocketChannel, ServerSocketChannel ja java.nio.channels.
  • On vĂ€lja töötatud ports Linuxi Alpine distributsioonile koos standardse C teegiga musl, mis on populaarne konteinerite, mikroteenuste, pilveteenuste ja sisseehitatud sĂŒsteemide keskkondades. Selle porti abil saavad Java programmid töötada nagu tavalised rakendused. Lisaks saab jlink-iga eemaldada kĂ”ik kasutamata moodulid ja moodustada minimaalne keskkond, mis on piisav rakenduse kĂ€itamiseks, vĂ”imaldades luua spetsiifilisi kompaktseid kujutisi.
  • On rakendatud Elastic Metaspace mehhanism, mis optimeerib mĂ€lu eraldamise ja taastamise toiminguid, mis on seotud klasside metateabega (metaspace) JVM HotSpotis. Elastic Metaspace'i kasutamine vĂ€hendab mĂ€lu fragmenteerimist, alandab klasside laadimise kulusid ning mĂ”jufaktorina parandab pikaajaliste serverite rakenduste jĂ”udlust, pakkudes operatsioonisĂŒsteemile kiiremat vabastamist mittekasutatud klasside metateabega hĂ”ivatud mĂ€lu. Klasside vĂ€ljavoolu jĂ€rel mĂ€lu vabastamise reĆŸiimi valimiseks on ette nĂ€htud variant „-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)”.
  • JDK port on Windows systems with AArch64 architecture has been added.
  • A third preliminary version of the Foreign-Memory Access API has been proposed, allowing Java applications to safely and efficiently access memory areas outside the Java heap, manipulating new abstractions MemorySegment, MemoryAddress, and MemoryLayout.
  • An experimental Foreign Linker API has been implemented, providing access from Java to native code. Together with the Foreign-Memory API, this new interface significantly simplifies the creation of wrappers around common shared libraries.
  • A jpackage utility has been added, enabling the creation of packages for self-contained Java applications. This utility is based on the javapackager from JavaFX and allows packages to be created in formats native to various platforms (msi and exe for Windows, pkg and dmg for macOS, deb and rpm for Linux). The packages include all necessary dependencies.
  • Strict encapsulation of all internal JDK elements is now enabled by default, except for critical APIs such as sun.misc.Unsafe. The value of the ‘—illegal-access’ option is now set to ‘deny’ by default instead of ‘permit’, which will block attempts to access most internal classes, methods, and fields from code. To bypass this restriction, the option ‘—illegal-access=permit’ should be used.
  • The implementation of pattern matching in the ‘instanceof’ operator has been stabilized, allowing local variables to be directly assigned for accessing the checked value. For example, you can now write ‘if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}’ without explicitly defining ‘String s = (String) obj’. Previously: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Now you can avoid defining ‘Group group = (Group) obj’: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • The implementation of the ‘record’ keyword has been stabilized, providing a compact way to define classes, allowing for the omission of explicit definitions of various low-level methods such as equals(), hashCode(), and toString(), in cases where data is stored only in fields, and the behavior of working with them does not change. When typical implementations of the methods equals(), hashCode(), and toString() are used in a class, there is no need for their explicit definition: public record BankTransaction(LocalDate date, double amount, String description) {}

    See mÀÀratlemine toob automaatselt kaasa meetodite equals(), hashCode() ja toString() teostuste lisamise koos konstruktoriga ja meetoditega, mis kontrollivad andmete muutmist (getter).

  • Esitati teine eelnĂ”u kinnitatud („sealed“) klasside ja liideste kohta, mida teised klassid ja liidesed ei saa pĂ€rida, laiendada ega implementatsiooni ĂŒle kirjutada. Kinnitatud klassid pakuvad ka deklaratiivsemat viisi superservere kasutamise piiramiseks kui ligipÀÀsukoodid, mis pĂ”hinevad lubatud alamsuunade otse 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 veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster