Java SE 23 болон OpenJDK 23 хувилбаруудыг гаргасан

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

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

Java SE-д санал болгож буй 23 шинэчлэлийн дунд:

  • ZGC (Generation Z Хог цуглуулагч) хог цуглуулагчийн ажиллах горим нь "хуучин" болон "залуу" объектуудыг тусад нь боловсруулах замаар анхдагчаар идэвхжсэн бөгөөд энэ нь саяхан үүссэн объектуудыг богино хугацаанд цэвэрлэх үр ашгийг нэмэгдүүлдэг. Generational ZGC-ийг ашиглах нь нөөцийг хуваарилах явцад лангуу үүсэх эрсдлийг бууруулж, хог хаягдал цуглуулах явцад CPU-ийн ачаалал, санах ойн зарцуулалтыг бууруулдаг. Apache Cassandra 4-тэй Generational ZGC-ийг турших нь тогтмол овоолгын хэмжээтэйгээр дамжуулах чадвар 4 дахин нэмэгдэж, тогтмол дамжуулах чадвартай бол овоолгын хэмжээ дөрөвний нэгээр буурсан байна.
  • JavaDoc нь HTML болон JavaDoc @ шошгуудын хольцын оронд ашиглах боломжтой тайлбар дахь кодыг баримтжуулахын тулд Markdown ашиглах дэмжлэгийг нэмсэн.
    Java SE 23 болон OpenJDK 23 хувилбаруудыг гаргасан
  • Загвар тааруулах механизмыг бүх төрлийн загвар, "instanceof" мэдэгдэл, "шилжүүлэх" блокуудад энгийн төрлүүдийг (int, байт, char болон бусад объектын бус үндсэн төрлүүдийг) ашиглах урьдчилсан дэмжлэгтэйгээр сайжруулсан. шилжүүлэгч (x.getStatus()) { тохиолдол 0 -> “за”; тохиолдол 1 -> "анхааруулах"; тохиолдол 2 -> "алдаа"; case int i -> “үл мэдэгдэх төлөв: ” + i; } if (i instanceof byte b) { … b … }
  • Заасан модулиар экспортолсон бүх багцыг нэг дор импортлохын тулд нэг "импортын модуль M" мэдэгдлийг ашиглах урьдчилсан дэмжлэгийг нэмсэн. Энэхүү өөрчлөлт нь модульчлагдсан номын сангуудын дахин ашиглалтыг ихээхэн хялбарчилж, багцын шатлалд байр сууриа тодорхойлохгүйгээр номын сан, ангиудыг оруулах боломжийг танд олгоно. Жишээлбэл, "импортын модуль java.base" гэж зааж өгснөөр java.base модульд багтсан бүх 54 багцыг импортлох бөгөөд өмнө нь тусад нь дурдах шаардлагатай байсан ("import java.io.*", "import java.util.*" ” гэх мэт).

    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);

  • Vector API-ийн найм дахь урьдчилан харах нь x86_64 болон AArch64 процессорууд дээр векторын зааврыг ашиглан гүйцэтгэгддэг вектор тооцооллын функцуудыг өгдөг бөгөөд үйлдлүүдийг олон утгуудад (SIMD) нэгэн зэрэг ашиглах боломжийг олгодог. HotSpot JIT хөрвүүлэгчийн скаляр үйлдлүүдийг автоматаар векторжуулах боломжуудаас ялгаатай нь шинэ API нь параллель өгөгдөл боловсруулах векторжуулалтыг тодорхой хянах боломжийг олгодог.
  • Сонгосон хэл дээр үндэслэн текстийг форматлах, харуулах, уншихын тулд java.io.Console ангид формат, printf, readPassword болон readLine аргуудыг нэмсэн. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", шинэ Date()) 2024 оны 16 сарын XNUMX
  • Өргөтгөсөн 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]]
  • Нийтийн/статик мэдэгдлүүд, аргументуудын массив дамжуулалт болон ангийн мэдэгдэлтэй холбоотой бусад объектуудаас татгалзаж болох "үндсэн" аргын далд зарласан ангиудын гурав дахь урьдчилсан хэрэгжилтийг нэмсэн. // нийтийн анги байсан HelloWorld { public static void main(String[] args) { System.out.println("Сайн уу ертөнц!"); } } // одоо та main() { System.out.println("Сайн уу, Дэлхий!"); }
  • Хэрэв тэдгээр илэрхийлэл нь тухайн үүсгэгчийн үүсгэсэн жишээнд хамаарахгүй бол удамшсан классын үүсгэгчээс эх ангийн үүсгэгчийг тодорхой дууддаг super(...)-ыг дуудахаасаа өмнө бүтээгчид илэрхийлэлийг зааж өгөх боломжийг олгодог функцийн хоёр дахь урьдчилан харах боломжийг нэмсэн. class Outer { void hello() { System.out.println("Сайн уу"); } анги Өвөр { Өвөр() { сайн уу(); супер(); } } }
  • Хамрах хүрээний утгын гурав дахь урьдчилан харах хэрэгжилтийг нэмсэн бөгөөд энэ нь өөрчлөгдөшгүй өгөгдлийг хэлхээнүүдээр хуваалцах, өгөгдлийг хүүхэд хэлхээ хооронд үр дүнтэй солилцох боломжийг олгодог (утга нь өвлөгдөнө). Scoped Values ​​нь thread-local variables механизмыг солих зорилгоор боловсруулагдаж байгаа бөгөөд маш олон тооны виртуаль хэлхээг (мянган эсвэл сая хэлхээ) ашиглахад илүү үр дүнтэй байдаг. Scoped Values ​​болон thread-local variables-ийн гол ялгаа нь эхнийх нь нэг удаа бичигдсэн, цаашид өөрчлөх боломжгүй бөгөөд зөвхөн урсгалын гүйцэтгэлийн хугацаанд л боломжтой хэвээр байх явдал юм.
  • Туршилтанд зориулж Structured Concurrency API-ийн гурав дахь урьдчилан үзэх хувилбарыг санал болгосон бөгөөд энэ нь өөр өөр хэлхээнд ажиллаж байгаа олон даалгавруудыг нэг блок болгон боловсруулах замаар олон урсгалтай програмуудыг хөгжүүлэхэд хялбаршуулсан болно.
  • sun.misc.Unsafe ангиас өгсөн гадаад санах ойд нэвтрэх аргуудыг (JVM-ээс гадна) хуучирсан бөгөөд устгахаар төлөвлөсөн. Бөөн санах ойд хандах, гадаад кодтой харилцахын тулд VarHandle API болон FFM (Гадаад функц ба санах ой) API ашиглахыг зөвлөж байна.

Нэмж дурдахад бид JavaFX 23 график интерфэйстэй програм үүсгэх платформын шинэчлэлтийг нийтэлж, GraalVM JIT хөрвүүлэгчийг үндсэн Oracle JDK 23-д оруулсныг тэмдэглэж болно.

Мөн JavaScript (Node.js), Python, Ruby, R, JVM (Java, Scala, Clojure, Kotlin) болон бусад хэл дээр ажилладаг програмуудыг дэмждэг GraalVM бүх нийтийн виртуал машины шинэ хувилбарыг танилцуулж байна. Үүнд LLVM бит код үүсгэж болно (C, C++, Rust). JDK 23-ыг дэмжихээс гадна шинэ хувилбар нь санах ойн зарцуулалт, гүйцэтгэгдэх кодын хэмжээг оновчтой болгож, JIT эмхэтгэлийг ашиглан Python болон WebAssembly-г Java код руу оруулах хэрэгслүүдэд бүрэн дэмжлэг үзүүлдэг.

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

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