Java SE 17 хувилбар

Зургаан сарын турш хөгжүүлсний дараа Oracle нь OpenJDK нээлттэй эхийн төслийг лавлагаа болгон ашигладаг Java SE 17 (Java Platform, Standard Edition 17) платформыг гаргасан. Зарим нэг хуучирсан функцуудыг хассанаас бусад тохиолдолд Java SE 17 нь Java платформын өмнөх хувилбаруудтай хоцрогдсон нийцтэй байдлыг хадгалж байдаг - өмнө нь бичигдсэн ихэнх Java төслүүд шинэ хувилбар дээр ажиллах үед ямар ч өөрчлөлтгүйгээр ажиллах болно. Java SE 17 (JDK, JRE болон Server JRE)-ийн суулгахад бэлэн хувилбаруудыг Linux (x86_64, AArch64), Windows (x86_64) болон macOS (x86_64, AArch64)-д зориулан бэлтгэсэн. OpenJDK төслөөс боловсруулсан Java 17 лавлагааны хэрэгжилт нь GPLv2 лицензийн дагуу бүрэн нээлттэй эх сурвалж бөгөөд GNU ClassPath-ийн онцгой тохиолдлуудад арилжааны бүтээгдэхүүнтэй динамик холболт хийх боломжийг олгодог.

Java SE 17 нь Урт хугацааны дэмжлэг (LTS) хувилбар гэж ангилагдсан бөгөөд 2029 он хүртэл шинэчлэлтүүдийг хүлээн авах болно. Өмнөх Java 16 хувилбарын шинэчлэлтүүд зогссон. Java 11-ийн өмнөх LTS салбарыг 2026 он хүртэл дэмжих болно. Дараагийн LTS хувилбарыг 2024 оны 10-р сард гаргахаар төлөвлөж байна. Java XNUMX-ийг гаргаснаас хойш төсөл нь шинэ хөгжүүлэлтийн процесст шилжсэн нь шинэ хувилбаруудыг бий болгох богино мөчлөгийг илтгэж байгааг сануулъя. Байнга шинэчлэгдэж байдаг нэг мастер салбарт шинэ функцийг хөгжүүлсэн бөгөөд үүнд бэлэн өөрчлөлтүүд багтаж, шинэ хувилбаруудыг тогтворжуулахын тулд зургаан сар тутамд салбаруудыг салбарладаг.

Java 17-ийн шинэ боломжууд:

  • "Шилжүүлэгч" илэрхийлэлд хэв маягийг тааруулах туршилтын хэрэгжилтийг санал болгож байна, энэ нь "тохиолдлын" шошгон дээр яг тодорхой утгуудыг биш, харин өмнө нь төвөгтэй ашиглах шаардлагатай байсан хэд хэдэн утгыг нэг дор багтаасан уян хатан загваруудыг ашиглах боломжийг олгодог. “хэрэв... өөрөөр” илэрхийллийн хэлхээ. Нэмж дурдахад "switch" нь NULL утгыг зохицуулах чадвартай. Объект o = 123L; Мөр форматлагдсан = шилжүүлэгч (o) { case Бүхэл тоо i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("давхар %f", d); case String s -> String.format("String %s", s); анхдагч -> o.toString(); };
  • Битүүмжилсэн ангиуд болон интерфэйсүүдийн тогтворжсон дэмжлэгийг бусад ангиуд болон интерфэйсүүд хэрэгжүүлэлтийг өвлөх, өргөтгөх, хүчингүй болгоход ашиглах боломжгүй. Битүүмжилсэн ангиуд нь өргөтгөл хийх зөвшөөрөгдсөн дэд ангиудыг тодорхой жагсаасан үндсэн дээр хандалтын хувиргагчаас илүү супер ангийн хэрэглээг хязгаарлах илүү тунхаглалтай арга юм. багц com.example.geometry; нийтийн битүүмжилсэн анги Дүрсийг зөвшөөрнө com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.энгийн.Дөрвөлжин {…}
  • X86_64 болон AArch64 процессорууд дээр векторын зааврыг ашиглан гүйцэтгэдэг вектор тооцоололд зориулсан функцуудыг хангадаг, олон утгыг (SIMD) нэгэн зэрэг ашиглах боломжийг олгодог Vector API-ийн хоёр дахь урьдчилан үзэх хувилбарыг санал болгож байна. HotSpot JIT хөрвүүлэгчийн скаляр үйлдлүүдийг автоматаар векторжуулах боломжуудаас ялгаатай нь шинэ API нь параллель өгөгдөл боловсруулах векторжуулалтыг тодорхой хянах боломжийг олгодог.
  • Гадаад функц ба санах ойн API-г урьдчилан үзэхийг нэмсэн бөгөөд энэ нь програмуудад Java-ийн ажиллах хугацаанаас гадуур код болон өгөгдөлтэй харилцах боломжийг олгодог. Шинэ API нь JVM бус функцуудыг үр ашигтайгаар дуудаж, JVM удирддаггүй санах ойд хандах боломжийг олгоно. Жишээлбэл, та JNI ашиглахгүйгээр гадаад хуваалцсан номын сангаас функцуудыг дуудаж, процессын өгөгдөлд хандах боломжтой.
  • Java 2D API-г тэжээж, улмаар Swing API-г ажиллуулдаг macOS дүрслэх хөдөлгүүрийг Метал график API ашиглахад тохируулсан. macOS платформ нь өгөгдмөлөөр OpenGL-г үргэлжлүүлэн ашигладаг бөгөөд Металл дэмжлэгийг идэвхжүүлэхийн тулд "-Dsun.java2d.metal=true" тохиргоог хийж, наад зах нь macOS 10.14.x-г ажиллуулах шаардлагатай.
  • macOS/AArch64 платформын портыг нэмсэн (Apple-ийн шинэ M1 чип дээр суурилсан Apple компьютерууд). Портын онцгой шинж чанар нь санах ойн хуудсуудыг бичих, гүйцэтгэхэд нэгэн зэрэг хандах боломжгүй W^X (Write XOR Execute) санах ойн хамгаалалтын механизмыг дэмждэг. (кодыг бичихийг идэвхгүй болгосны дараа л гүйцэтгэх боломжтой бөгөөд санах ойн хуудас руу бичих нь зөвхөн гүйцэтгэлийг идэвхгүй болгосны дараа л боломжтой).
  • Хөвөгч цэгийн илэрхийлэлд зөвхөн strictfp семантик ашиглах руу буцсан. Java 1.2 хувилбарыг гаргаснаас хойш ашиглах боломжтой "анхдагч" семантикийн дэмжлэгийг зогсоосон бөгөөд үүнд маш хуучин x87 математикийн сопроцессортой системүүд дээр ажиллахад хялбарчлагдсан (SSE2 заавар гарсны дараа нэмэлт семантикийн хэрэгцээ алга болсон).
  • Хуурамч санамсаргүй тоо үүсгэгчийн интерфейсийн шинэ төрлүүд хэрэгжиж, санамсаргүй тоонуудыг илүү сайн үүсгэх нэмэлт алгоритмуудыг хэрэгжүүлсэн. Програмууд нь псевдор санамсаргүй тоо үүсгэх алгоритмыг сонгох боломжийг олгодог. Санамсаргүй объектын урсгал үүсгэхэд зориулсан сайжруулсан дэмжлэг.
  • Sun.misc.Unsafe гэх мэт чухал API-аас бусад бүх JDK-н дотоод хэсгүүдийн хатуу бүрхүүлийг хэрэгжүүлсэн. Хатуу капсулжуулалт нь кодоос дотоод анги, арга, талбарт хандах оролдлогыг блоклодог. Өмнө нь "--illegal-access=permit" сонголтыг ашиглан хатуу инкапсулын горимыг идэвхгүй болгож болох байсан ч одоо үүнийг цуцалсан. Дотоод анги, арга, талбарт хандах шаардлагатай програмууд нь манифест файл дахь --add-opens сонголт эсвэл Add-Opens шинж чанарыг ашиглан тэдгээрийг тодорхой тодорхойлох ёстой.
  • Аппликейшнүүдэд өгөгдлийн цуваа тайлах шүүлтүүрийг тодорхойлох боломжийг олгодог бөгөөд энэ нь контекст мэдрэмтгий байж, тодорхой цуваа тайлах үйлдлүүд дээр үндэслэн динамикаар сонгогдох боломжтой. Заасан шүүлтүүрүүд нь виртуал машиныг бүхэлд нь (JVM-өргөн) ашиглах боломжтой, өөрөөр хэлбэл. зөвхөн програм өөрөө төдийгүй программд ашиглагдаж буй гуравдагч этгээдийн сангуудыг хамарна.
  • Swing нь өндөр DPI дэлгэц дээрх UI-г сайжруулахын тулд том дүрсүүдийг ачаалах javax.swing.filechooser.FileSystemView.getSystemIcon аргыг нэмсэн.
  • Java.net.DatagramSocket API нь тусдаа java.net.MulticastSocket API шаардлагагүйгээр Multicast бүлгүүдтэй холбогдоход дэмжлэг үзүүлдэг.
  • IGV (Ideal Graph Visualizer) хэрэглүүрийг сайжруулж, HotSpot VM C2 JIT хөрвүүлэгч дэх завсрын кодын дүрслэлийг интерактив дүрслэлээр хангасан.
  • JavaDoc дээр javac хөрвүүлэгчтэй зүйрлэснээр алдаа гарах үед эх файл дахь асуудалтай мөрийн дугаар болон алдааны байршлыг зааж өгсөн болно.
  • Системийн тэмдэгтийн кодчилолын нэрийг тусгасан native.encoding шинж чанарыг нэмсэн (UTF-8, koi8-r, cp1251 гэх мэт).
  • java.time.InstantSource интерфэйс нэмэгдсэн бөгөөд энэ нь цагийн бүсийг заахгүйгээр цагийг удирдах боломжийг олгодог.
  • Арван аравтын тоо болон эсрэгээр нь хувиргах java.util.HexFormat API нэмсэн.
  • Гүйцэтгэлийн туршилт хийх үед ашиглаж болох үхсэн кодыг арилгах үйлдлийг идэвхгүй болгодог хар нүхний горимыг хөрвүүлэгчид нэмсэн.
  • Асинхрон горимд бүртгэл бичихийн тулд Runtime-д “-Xlog: async” сонголтыг нэмсэн.
  • Аюулгүй холболт үүсгэх үед TLS 1.3 нь анхдагчаар идэвхждэг (өмнө нь TLS 1.2 ашиглаж байсан).
  • Хөтөч дээр Java програмуудыг ажиллуулахад ашиглаж байсан, өмнө нь зарласан хуучирсан Applet API (java.applet.Applet*, javax.swing.JApplet) нь устгахаар төлөвлөж буй ангилалд шилжсэн (дэмжлэг дууссаны дараа хамааралгүй болсон) хөтчүүдэд зориулсан Java залгаас).
  • Аюулгүй байдлын менежер нь удаан хугацааны туршид хамааралгүй болж, хөтчийн залгаасын дэмжлэг дууссаны дараа нэхэмжлэхгүй болсон бөгөөд устгахаар төлөвлөсөн хүмүүсийн ангилалд шилжсэн.
  • RMI идэвхжүүлэх механизмыг устгасан бөгөөд энэ нь хуучирсан, Java 8-ийн сонголтын ангилалд багтсан бөгөөд орчин үеийн практикт бараг ашиглагддаггүй.
  • HotSpot JVM-д зориулсан Java кодын динамик эмхэтгэлд зориулсан JIT (цаг хугацаанд нь) болон виртуал машиныг эхлүүлэхийн өмнө ангиудыг машин код болгон урьдчилан эмхэтгэх горимыг (AOT, хугацаанаас нь өмнө) дэмждэг туршилтын хөрвүүлэгч. , SDK-ээс хасагдсан. Хөрвүүлэгчийг Java хэл дээр бичсэн бөгөөд Graal төслийн ажилд үндэслэсэн. Хөрвүүлэгчийн засвар үйлчилгээ нь маш их хөдөлмөр шаарддаг бөгөөд энэ нь хөгжүүлэгчдийн эрэлт хэрэгцээ байхгүй үед үндэслэлгүй гэдгийг тэмдэглэжээ.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх