Java SE 16 laidiens

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

Pievieno komentāru