Java SE 20-ի թողարկում

Վեց ամիս մշակումից հետո Oracle-ը թողարկեց Java SE 20-ը (Java Platform, Standard Edition 20), որն օգտագործում է բաց կոդով OpenJDK նախագիծը որպես հղման իրականացում: Բացառությամբ որոշ հնացած գործառույթների հեռացման, Java SE 20-ը պահպանում է հետընթաց համատեղելիությունը Java պլատֆորմի նախորդ թողարկումների հետ. նախկինում գրված Java նախագծերի մեծ մասը կաշխատի առանց փոփոխությունների, երբ գործարկվի նոր տարբերակով: Java SE 20-ի (JDK, JRE և Server JRE) տեղադրման համար պատրաստ կառուցումները պատրաստված են Linux (x86_64, AArch64), Windows (x86_64) և macOS (x86_64, AArch64) համար: OpenJDK նախագծի կողմից մշակված Java 20 հղումների իրականացումը լիովին բաց կոդով է GPLv2 լիցենզիայի ներքո, GNU ClassPath բացառություններով, որոնք թույլ են տալիս դինամիկ կապ հաստատել առևտրային արտադրանքների հետ:

Java SE 20-ը դասակարգվում է որպես սովորական աջակցության թողարկում և կշարունակի թարմացումներ ստանալ մինչև հաջորդ թողարկումը: Երկարաժամկետ աջակցության (LTS) մասնաճյուղը պետք է լինի Java SE 17, որը կշարունակի թարմացումներ ստանալ մինչև 2029 թվականը: Հիշեցնենք, որ Java 10-ի թողարկումից սկսած՝ նախագիծն անցավ զարգացման նոր գործընթացի՝ ենթադրելով ավելի կարճ ցիկլ նոր թողարկումների ձևավորման համար։ Նոր ֆունկցիոնալությունն այժմ մշակվում է մեկ անընդհատ թարմացվող գլխավոր մասնաճյուղում, որը ներառում է պատրաստի փոփոխություններ և որից մասնաճյուղերը բաժանվում են յուրաքանչյուր վեց ամիսը մեկ՝ նոր թողարկումները կայունացնելու համար:

Java 20-ի նոր հնարավորությունները ներառում են.

  • Գոյություն ունի Scoped Values-ի նախնական աջակցություն, որը թույլ է տալիս անփոփոխ տվյալներ փոխանակել շղթաների միջով և արդյունավետ կերպով փոխանակել տվյալները երեխայի թելերի միջև (արժեքները ժառանգվում են): Scoped Values-ը մշակվում է՝ փոխարինելու thread-local variables մեխանիզմը և ավելի արդյունավետ են, երբ օգտագործում են շատ մեծ թվով վիրտուալ թելեր (հազար կամ միլիոնավոր թելեր): Scoped Values-ի և thread-local փոփոխականների միջև հիմնական տարբերությունն այն է, որ առաջինները գրվում են մեկ անգամ, ապագայում չեն կարող փոփոխվել և հասանելի են մնում միայն թելի կատարման տևողության ընթացքում: class Server { վերջնական ստատիկ ScopedValue CURRENT_USER = new ScopedValue(); void serve (Հայցման հարցում, պատասխանի պատասխան) ​​{ var level = (հարցում. isAuthorized()? ADMIN : GUEST); var user = նոր օգտվող (մակարդակ); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(խնդրանք, պատասխան)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); եթե (!user.canOpen()) նետի նոր InvalidUserException(); վերադարձնել նոր DBCconnection (...); } }
  • Ավելացվել է գրառումների օրինաչափությունների երկրորդ նախադիտումը, որն ընդլայնում է Java 16-ում ներդրված օրինաչափությունների համընկնման հատկությունը՝ գրառումների դասերի արժեքները վերլուծելու համար: Օրինակ՝ գրառում Point(int x, int y) {} static void printSum(Object obj) {if (obj instanceof Point p) {int x = px(); int y = py(); System.out.println(x+y); } }
  • Ավելացվել է «անջատիչ» հայտարարություններում օրինաչափությունների համապատասխանության չորրորդ նախնական իրականացումը, որը թույլ է տալիս «case» պիտակներին օգտագործել ոչ թե ճշգրիտ արժեքներ, այլ ճկուն օրինաչափություններ, որոնք ընդգրկում են միանգամից մի շարք արժեքներ, որոնց համար նախկինում անհրաժեշտ էր օգտագործել ծանր: «եթե... ուրիշ» արտահայտությունների շղթաներ: static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); լռելյայն -> o.toString(); }; }
  • Ավելացվել է FFM (Օտար գործառույթ և հիշողություն) API-ի երկրորդ նախնական ներդրումը, որը թույլ է տալիս կազմակերպել Java ծրագրերի փոխազդեցությունը արտաքին կոդի և տվյալների հետ՝ արտաքին գրադարաններից կանչելու գործառույթների և JVM-ից դուրս հիշողություն մուտք գործելու միջոցով:
  • Ավելացվել է վիրտուալ թելերի երկրորդ նախադիտումը, որոնք թեթև թելեր են, որոնք մեծապես հեշտացնում են գրելը և պահպանել բարձր արդյունավետությամբ բազմաթելային հավելվածները:
  • Ավելացվեց երկրորդ փորձնական API-ը կառուցվածքային զուգահեռության համար, որը հեշտացնում է բազմաշերտ հավելվածների զարգացումը` տարբեր թելերում աշխատող բազմաթիվ առաջադրանքները դիտարկելով որպես մեկ բլոկ:
  • Ավելացվել է Vector API-ի հինգերորդ նախադիտումը, որն ապահովում է վեկտորային հաշվարկների գործառույթներ, որոնք կատարվում են x86_64 և AArch64 պրոցեսորների վրա վեկտորային հրահանգների միջոցով և թույլ են տալիս միաժամանակ կիրառվել բազմաթիվ արժեքների (SIMD) վրա: Ի տարբերություն HotSpot JIT կոմպիլյատորում տրված հնարավորությունների՝ սկալյար գործողությունների ավտոմատ վեկտորացման համար, նոր API-ն հնարավորություն է տալիս բացահայտորեն վերահսկել վեկտորացումը տվյալների զուգահեռ մշակման համար:

Source: opennet.ru

Добавить комментарий