Java SE 22 платформ болон OpenJDK 22 нээлттэй лавлагааны хэрэгжилтийг гаргасан

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

Java SE 22 нь ердийн дэмжлэгийн хувилбар гэж ангилдаг бөгөөд дараагийн хувилбар хүртэл шинэчлэлтүүдийг хүлээн авах болно. Урт хугацааны дэмжлэг (LTS) салбар нь Java SE 21 эсвэл Java SE 17 байх ёстой бөгөөд энэ нь 2031, 2029 он хүртэл (ерөнхийдөө 2028, 2026 он хүртэл) шинэчлэлтүүдийг хүлээн авах боломжтой. Java SE 11-ийн LTS салбарын олон нийтийн дэмжлэг өнгөрсөн есдүгээр сард дууссан боловч өргөтгөсөн дэмжлэг 2032 он хүртэл үргэлжилнэ. Java SE 8-ийн LTS салбарын өргөтгөсөн дэмжлэг 2030 он хүртэл үргэлжилнэ.

Java 10-ийг гаргаснаас хойш төсөл нь шинэ хөгжүүлэлтийн процесст шилжсэн нь шинэ хувилбаруудыг бий болгох богино мөчлөгийг илтгэж байгааг сануулъя. Байнга шинэчлэгдэж байдаг нэг мастер салбарт шинэ функцийг хөгжүүлсэн бөгөөд үүнд бэлэн өөрчлөлтүүд багтаж, шинэ хувилбаруудыг тогтворжуулахын тулд зургаан сар тутамд салбаруудыг салбарладаг.

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

  • G1 хог цуглуулагч нь бүс нутгийг тогтоох дэмжлэгийг агуулдаг бөгөөд энэ нь Жава объектуудын байршлыг санах ойд түр зуур засах боломжийг олгодог бөгөөд хог цуглуулагч тэднийг зөөхөөс сэргийлж, эдгээр объектын лавлагааг Java болон эх код хооронд найдвартай дамжуулах боломжийг олгодог. Pinning нь танд хоцролтыг багасгаж, JNI (Java Native Interface)-ийн чухал бүсүүдийг эх кодоор ажиллуулах үед хог цуглуулахыг идэвхгүй болгох боломжийг олгодог (эдгээр хэсгүүдийг ажиллуулах явцад JVM нь уралдааны нөхцөл байдлаас зайлсхийхийн тулд тэдгээртэй холбоотой чухал объектуудыг хөдөлгөж болохгүй). Бэхэлгээ нь хог цуглуулагчийн нүднээс чухал объектуудыг арилгадаг бөгөөд энэ нь тогтоогдоогүй газруудыг үргэлжлүүлэн цэвэрлэх боломжтой.
  • super(...)-ыг дуудахын өмнө илэрхийлэлийг бүтээгчид зааж өгөхийн тулд урьдчилсан функцийг нэмсэн бөгөөд хэрэв тэдгээр илэрхийлэл нь тухайн үүсгэгчийн үүсгэсэн жишээнд хамаарахгүй бол удамшсан анги үүсгэгчээс эх анги үүсгэгчийг тодорхой дууддаг. class Outer { void hello() { System.out.println("Сайн уу"); } анги Өвөр { Өвөр() { сайн уу(); мундаг(); } } }
  • FFM (Гадаад функц ба санах ой) API нь тогтворжсон бөгөөд JNI (Java Native Interface) ашиглахгүйгээр гадаад номын сангаас функцуудыг дуудаж, JVM-ийн гадна санах ойд хандах замаар Java программуудыг гадаад код, өгөгдөлтэй харилцах боломжийг олгосон.
  • Нэргүй хувьсагч болон загвар тааруулахад зориулсан дэмжлэгийг идэвхжүүлсэн - дуудлага хийхдээ ашиглагдаагүй боловч шаардлагатай хувьсагч болон хэв маягийн оронд "_" тэмдэгтийг зааж өгөх боломжтой. // was String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // одоо та String pageName = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Java ангиллын файлуудыг задлан шинжлэх, үүсгэх, хөрвүүлэхэд зориулж Class-File API-ийн урьдчилсан хэрэгжилтийг санал болгож байна. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(байт); байт[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("дибаг"))) { classBuilder.with(ce); } } });
  • Java хэрэгсэл нь хэд хэдэн кодын файл эсвэл урьдчилан эмхэтгэсэн ангийн номын сан хэлбэрээр нийлүүлсэн Java програмуудыг эдгээр файлуудыг тусад нь хөрвүүлэхгүйгээр, бүтээх системийг тохируулахгүйгээр ажиллуулах боломжийг олгодог. Шинэ функц нь өөр өөр ангиллын кодыг тусад нь файл болгон хуваасан програмуудыг ажиллуулахад хялбар болгодог. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Сайн уу!"); } }

    Жишээлбэл, "Prog.java" болон "Helper.java" гэсэн хоёр файлаас бүрдсэн програмыг ажиллуулахын тулд одоо "java Prog.java"-г ажиллуулахад хангалттай бөгөөд энэ нь Prog классыг эмхэтгэх, Helper классын лавлагааг тодорхойлох, Туслах файлыг олж хөрвүүлэх.java болон үндсэн аргыг дуудах.

  • Стринг загварууд болон текст блокуудаас гадна хэрэгжүүлсэн String Templates-ийн хоёр дахь урьдчилсан хэрэгжилтийг нэмсэн. Мөр загварууд нь + операторыг ашиглахгүйгээр текстийг тооцоолсон илэрхийлэл, хувьсагчтай хослуулах боломжийг олгодог. Илэрхийллийг орлуулах нь \{..} орлуулалтыг ашиглан хийгддэг бөгөөд орлуулсан утгуудын зөв эсэхийг шалгахын тулд тусгай зохицуулагчийг холбож болно. Жишээлбэл, SQL хөдөлгүүр нь SQL кодод орлуулж буй утгуудыг шалгаж, java.sql.Statement объектыг гаралт болгон буцаадаг бол JSON процессор нь JSON орлуулалтын зөв эсэхийг хянаж, JsonNode-ийг буцаадаг. Стринг query = "СОНГОХ * FROM Person p WHERE p." + шинж чанар + " = '" + утга + "'"; // was Statement query = SQL.""" SELECT * FROM Person p WHERE p.\{property} = '\{утга}'"""; // болсон
  • X86_64 болон AArch64 процессорууд дээрх векторын зааврыг ашиглан гүйцэтгэдэг векторын тооцоолол хийх функцээр хангаж, олон утгыг (SIMD) нэгэн зэрэг ашиглах боломжийг олгодог Vector API-ийн долоо дахь урьдчилан үзэх хувилбар нэмэгдсэн. HotSpot JIT хөрвүүлэгчийн скаляр үйлдлүүдийг автоматаар векторжуулах боломжуудаас ялгаатай нь шинэ API нь параллель өгөгдөл боловсруулах векторжуулалтыг тодорхой хянах боломжийг олгодог.
  • Өөрийн завсрын үйлдлүүдийг тодорхойлоход туслах өргөтгөсөн Stream API-ийн урьдчилсан хэрэгжилт нэмэгдсэн бөгөөд энэ нь одоо байгаа суурилуулсан завсрын үйлдлүүд нь хүссэн өгөгдлийг хувиргахад хангалтгүй тохиолдолд хэрэг болно. Төрөлх зохицуулагчид хэрэглэгчийн тодорхойлсон зохицуулагчийг ашиглан урсгалын элементүүдийг боловсруулдаг Stream::gather(Gatherer) шинэ завсрын үйлдлийг ашиглан холбогддог. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(шинэ WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Туршилтанд зориулж Structured Concurrency-д зориулсан туршилтын API-ийн хоёр дахь хувилбарыг санал болгосон бөгөөд энэ нь өөр өөр хэлхээнд гүйцэтгэсэн олон даалгаврыг нэг блок болгон боловсруулах замаар олон урсгалтай програмуудыг хөгжүүлэхэд хялбар болгодог.
  • Нийтийн/статик мэдэгдлүүд, аргументуудын массив дамжуулалт болон ангийн мэдэгдэлтэй холбоотой бусад байгууллагуудаас татгалзаж болох "үндсэн" аргын далд хэлбэрээр зарласан ангиудын хоёр дахь урьдчилсан хэрэгжилтийг нэмсэн. // нийтийн анги байсан HelloWorld { public static void main(String[] args) { System.out.println("Сайн уу ертөнц!"); } } // одоо та main() { System.out.println("Сайн уу, Дэлхий!"); }
  • Хамрах хүрээг хамарсан утгуудын хоёр дахь урьдчилан харах хэрэгжилтийг нэмсэн бөгөөд энэ нь өөрчлөгдөшгүй өгөгдлийг хэлхээнүүд дээр хуваалцах, өгөгдлийг хүүхэд хэлхээ хооронд үр дүнтэй солилцох боломжийг олгодог (утга нь өвлөгдөнө). Scoped Values ​​нь thread-local variables механизмыг солих зорилгоор боловсруулагдаж байгаа бөгөөд маш олон тооны виртуаль хэлхээг (мянган эсвэл сая хэлхээ) ашиглахад илүү үр дүнтэй байдаг. Scoped Values ​​болон thread-local variables-ийн гол ялгаа нь эхнийх нь нэг удаа бичигдсэн, цаашид өөрчлөх боломжгүй бөгөөд зөвхөн урсгалын гүйцэтгэлийн хугацаанд л боломжтой хэвээр байх явдал юм.
  • Зэрэгцээ хог цуглуулагч нь том массив объектуудтай ажиллахад гүйцэтгэлийг сайжруулсан. Оновчлол нь том массив объект бүхий зарим туршилтуудад объект хайж эхлэхээс өмнө саатлыг 20% бууруулах боломжтой болгосон.

Нэмж дурдахад та JavaFX 22 график интерфэйс бүхий програм үүсгэх платформын шинэчлэлтийг нийтэлж байгааг тэмдэглэж болно.

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

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