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 анықтамалық іске асыру коммерциялық өнімдермен динамикалық байланыстыруға мүмкіндік беру үшін GNU ClassPath ерекшеліктері бар GPLv2 лицензиясы бойынша толық ашық көзі болып табылады.

Java SE 17 2029 жылға дейін жаңартуларды алуды жалғастыратын Ұзақ мерзімді қолдау (LTS) шығарылымы ретінде жіктеледі. Алдыңғы Java 16 кезеңдік нұсқасы үшін жаңартулар тоқтатылды. Java 11 алдыңғы LTS тармағына 2026 жылға дейін қолдау көрсетіледі. Келесі LTS шығарылымы 2024 жылдың қыркүйегіне жоспарланған. Естеріңізге сала кетейік, Java 10 шығарылымынан бастап жоба жаңа шығарылымдарды қалыптастырудың қысқа циклін білдіретін жаңа әзірлеу процесіне көшті. Жаңа функционалдылық енді бір үнемі жаңартылып отыратын негізгі бөлімде әзірленді, ол дайын өзгерістерді қамтиды және жаңа шығарылымдарды тұрақтандыру үшін филиалдар жарты жылда бір рет тармақталады.

Java 17-дағы жаңа мүмкіндіктер мыналарды қамтиды:

  • «Ауыстыру» өрнектеріндегі үлгіні сәйкестендірудің эксперименталды жүзеге асырылуы ұсынылады, ол «регистр» белгілеріндегі нақты мәндерді емес, бір уақытта мәндер қатарын қамтитын икемді шаблондарды қолдануға мүмкіндік береді, олар үшін бұрын ауыр мәндерді пайдалану қажет болды. “if...else” өрнектерінің тізбектері. Сонымен қатар, «қосқыштың» NULL мәндерін өңдеу мүмкіндігі бар. Объект o = 123L; Жол пішімделген = ауыстырғыш (o) { case Integer 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.simple.Square {…}
  • x86_64 және AArch64 процессорларында векторлық нұсқауларды қолдану арқылы орындалатын және бірнеше мәндерге (SIMD) бір уақытта операцияларды қолдануға мүмкіндік беретін векторлық есептеулерге арналған функцияларды қамтамасыз ететін Vector API екінші алдын ала қарауы ұсынылады. Скалярлық операцияларды автовекторлау үшін HotSpot JIT компиляторында берілген мүмкіндіктерден айырмашылығы, жаңа API деректерді параллель өңдеу үшін векторизацияны анық басқаруға мүмкіндік береді.
  • Қолданбаларға Java орындалу уақытынан тыс кодпен және деректермен әрекеттесуге мүмкіндік беретін шетелдік функция және жад API алдын ала қарауы қосылды. Жаңа API JVM емес функцияларды тиімді шақыруға және JVM басқармайтын жадқа қол жеткізуге мүмкіндік береді. Мысалы, сыртқы ортақ кітапханалардан функцияларды шақыруға және JNI қолданбастан процесс деректеріне қол жеткізуге болады.
  • Java 2D API, ал ол өз кезегінде Swing API интерфейсін қуаттайтын macOS рендеринг механизмі Metal graphics 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 экрандарындағы пайдаланушы интерфейсін жақсарту үшін үлкен белгішелерді жүктеу үшін javax.swing.filechooser.FileSystemView.getSystemIcon әдісін қосты.
  • java.net.DatagramSocket API бөлек java.net.MulticastSocket API қажетсіз Multicast топтарына қосылуға қолдау көрсетеді.
  • HotSpot VM C2 JIT компиляторындағы аралық кодты көрсетудің интерактивті визуализациясын қамтамасыз ететін IGV (Ideal Graph Visualizer) утилитасы жетілдірілді.
  • 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

пікір қалдыру