Java SE 16 izlaidums

Pēc sešu mēnešu izstrādes uzņēmums Oracle laidis klajā Java SE 16 platformu (Java Platform, Standard Edition 16), kuras atsauces īstenojums ir atvērtais projekts OpenJDK. Java SE 16 saglabā atpakaļsaderību ar iepriekšējām Java platformas versijām, visi iepriekš rakstītie Java projekti darbosies bez izmaiņām, palaižot jaunajā versijā. Gatavās instalējamās Java SE 16 (JDK, JRE un Server JRE) versijas ir sagatavotas Linux (x86_64, AArch64), Windows un macOS. OpenJDK projektā izstrādātais Java 16 atsauces īstenojums ir pilnībā atvērts GPLv2 licencei ar GNU ClassPath izņēmumiem, kas atļauj dinamiski saistīt ar komerciāliem produktiem.

Java SE 16 pieder parastā atbalsta versiju kategorijai, kurai atjauninājumi tiks izdoti līdz nākamajai izlaišanai. Kā ilgtermiņa atbalsta (LTS) versija ieteicams izmantot Java SE 11, kuram atjauninājumi tiks izdoti līdz 2026. gadam. Nākamais LTS izlaidums plānots 2021. gada septembrī. Atgādinām, ka, sākot ar Java 10 izlaišanu, projekts ir pārgājis uz jaunu izstrādes procesu, kas paredz īsāku jauno izlaidumu veidošanas ciklu. Jaunā funkcionalitāte tagad attīstās vienā pastāvīgi atjauninātā master zarā, kurā iekļaujas gatavas izmaiņas un no kuras reizi sešos mēnešos tiek izveidotas stabilizācijas nozares jaunajiem izlaidumiem.

Jaunā izlaiduma sagatavošanā izstrāde ir pārcelta no versiju vadības sistēmas Mercurial uz Git un sadarbības platformu GitHub. Tiek gaidīts, ka migrācija paaugstinās veiktspēju operācijās ar repozitoriju, uzlabos uzglabāšanas efektivitāti, nodrošinās piekļuvi izmaiņām visā projekta vēsturē, uzlabos koda pārskatīšanas atbalstu un izmantos API darba plūsmu automatizēšanai. Turklāt Git un GitHub izmantošana padara projektu pievilcīgāku iesācējiem un izstrādātājiem, kuri ir pieraduši pie Git.

No jaunumiem Java 16 var izcelt:

  • Pievienots eksperimentālais modulis jdk.incubator.vector ar Vector API realizāciju, kas nodrošina funkcijas vektoru aprēķiniem, kas tiek veikti, izmantojot x86_64 un AArch64 procesoru vektoru instrukcijas, ļaujot vienlaikus veikt operācijas uz vairākiem vērtībām (SIMD). Atšķirībā no HotSpot JIT kompilatora piedāvātajām automātiskās vektorizācijas iespējām skalāro operāciju veikšanai, jaunais API ļauj skaidri kontrolēt vektorizāciju datu paralēlai apstrādei.
  • JDK un VM HotSpot kodā, kas rakstīts C++, ir atļauts izmantot C++14 specifikācijā pieejamās iespējas. Agrāk bija atļauts izmantot C++98/03 standartus.
  • ZGC (Z Garbage Collector) atkritumu savācējs, kas darbojas pasīvā režīmā un cik vien iespējams mazina aizturi atkritumu savākšanas dēļ, ir ieguvis iespēju paralēli apstrādāt pavedienu stekus bez programmu pavedienu izpildes apturēšanas. Tagad ZGC ir palikuši tikai tie, kuru darbība ir nepieciešama, kas rada pastāvīgas aiztures, parasti nepārsniedzot dažas simtas mikrosekundes.
  • SocketChannel, ServerSocketChannel un java.nio.channels klasēs ir pievienota UNIX soketu (AF_UNIX) atbalsts.
  • Tiek īstenots portējums Linux Alpine izplatīšanai ar standarta C bibliotēku musl, kas ir populāra konteineru, mikropakalpojumu, mākoņa un iebūvēto sistēmu vidē. Ieteiktais portējums šādās vidēs ļauj palaist Java programmas kā parastas aplikācijas. Turklāt, izmantojot jlink, ir iespējams noņemt visus neizmantotos moduļus un izveidot minimālu vidi, kas ir pietiekama aplikācijas izpildei, ļaujot izveidot konkrētām aplikācijām kompakta attēlus.
  • Ir īstenota Elastic Metaspace mehānisms, optimizējot atmiņas piešķiršanas un atgriešanas operācijas, kādas veic klasifikācijas metadati (metaspace) JVM HotSpot. Elastic Metaspace izmantošana samazina atmiņas fragmentāciju, samazina slodzes izmaksas klasifikatora iekraujē, kā arī pozitīvi ietekmē ilgstoši veiktu servera aplikāciju veiktspēju, ātrāk atgriežot operētājsistēmai atmiņu, ko aizņem neizmantoti klasifikācijas metadati. Atmiņas atbrīvošanas režīma izvēlei pēc klasifikācijas izsniegšanas ir ieteikta opcija "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)".
  • Tika pievienots JDK ports Windows sistēmām, kas darbojas uz AArch64 arhitektūras procesoriem.
  • Ieteikts trešais priekšskatījuma variants Foreign-Memory Access API, kas ļauj Java lietotnēm droši un efektīvi piekļūt atmiņas apgabaliem ārpus Java kaudzes, manipulējot ar jaunām abstrakcijām MemorySegment, MemoryAddress un MemoryLayout.
  • Ieviests eksperimentāls Foreign Linker API, kas nodrošina piekļuvi nativam kodam no Java. Kopā ar Foreign-Memory API jaunais programmatūras saskarne ievērojami atvieglo saistījumu veidošanu ar parastām koplietojamām bibliotēkām.
  • Pievienots rīks jpackage, kas ļauj veidot pakas pašpietiekamām Java lietotnēm. Šis rīks balstās uz javapackager no JavaFX un ļauj izveidot pakas formātos, kas ir dabiski dažādām platformām (msi un exe Windows, pkg un dmg macOS, deb un rpm Linux). Pakas ietver visas nepieciešamās atkarības.
  • Noklusējuma iestatījumā iekļauta stingra JDK iekšējo elementu iesaiņošana, izņemot kritiskos API, piemēram, sun.misc.Unsafe. Opcijas «—illegal-access» vērtība tagad pa nolūkā ir iestatīta uz «deny», nevis «permit», kas radīs mēģinājumu piekļuves bloķēšanu, kā rezultātā lielākā daļa iekšējo klasēm, metožu un laukiem būs nepieejami. Lai apietu ierobežojumu, nepieciešams izmantot opciju «—illegal-access=permit».
  • Stabilizēta parauga saskaņošanas izpilde operatorā «instanceof», kas ļauj uzreiz noteikt lokālo mainīgo pārbaudītajam vērtīgam. Piemēram, tagad var rakstīt «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}», neizjaucot «String s = (String) obj». Agrāk: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Tagad var rīkoties bez «Group group = (Group) obj» definēšanas: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Stabilizēta atslēgvārda «record» izpilde, kas piedāvā kompakto veidu, kā definēt klases, ļaujot izvairīties no dažādu zemāka līmeņa metožu, piemēram, equals(), hashCode() un toString(), skaidri definēšanas, kad dati tiek glabāti tikai laukos, kuriem uzvedība nemainās. Kad klasē tiek izmantotas veidnes metožu implementations, jāiztiek bez to skaidras definēšanas: public record BankTransaction(LocalDate date, double amount, String description) {}

    Šis paziņojums nov leads pie automātiskas equals(), hashCode() un toString() metožu implementāciju pievienošanas papildus konstruktoram un metodēm, kas kontrolē datu izmaiņas (getter).

  • Ieteikts otra priekšizdevuma variantu noslēgtajiem («sealed») klasēm un interfeisiem, kuri nevar tikt izmantoti citu klašu un interfeisu mantošanai, paplašināšanai vai implementācijas pārrakstīšanai. Noslēgtās klases arī piedāvā deklaratīvāku veidu, kā ierobežot superklases izmantošanu, salīdzinot ar piekļuves modifikatoriem, balstoties uz skaidru atļauto apakšklašu uzskaitījumu. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Avots: opennet.lv

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster