Шта је ново у Јави 17?

Верзија за дугорочну подршку (ЛТС) језика Јава и платформе за време извршавања Јава 17 покренута је 14. септембра 2021. Хајде да сазнамо шта је ново у Јави 17 и да ли треба да га надоградите.

Многе апликације користе старије верзије Јаве, укључујући старије ЛТС верзије Јаве: Јава 11 и Јава 8.

Зашто би предузећа требало да надограде на најновију верзију Јава? Надоградња на Јава 17 захтева напор, углавном да би се што боље искористиле нове карактеристике и функције унутар ЈВМ-а.

Многа предузећа користе Доцкер и Доцкер слике за лак прелазак на Јава 17 уз минималан труд и време. Програмери могу да дефинишу своје цевоводе за континуирану интеграцију/примену (ЦИ/ЦД) и покрећу све у Доцкер сликама. Ово неће утицати на друге тимове који користе старије Јава верзије, јер могу да користе старе Доцкер слике.

ЈАВА 17 Карактеристике

Подршка за мацОС и ААрцх64

Једна од критичних ЈВМ функција додатих овој верзији је побољшање подршке за мацОС на ААрцх64 архитектури користећи ЈЕП 391. Подржаће најновију серију процесора (М1) које је Аппле објавио са својим рачунарима у прошлој години.

То није нужно велика ствар за кориснике на тим платформама јер су неки добављачи лансирали верзије ЈДК-а које подржавају ову архитектуру и чак враћају подршку са Јаве 8. Међутим, званични печат одобрења је од суштинског значаја да би се обезбедило будуће одржавање и подршка платформа. За поређење, подршка за Линук/ААрцх64 платформу је додата у Јаву 9 и Виндовс/ААрцх64 у Јави 16.

Запечаћене класе

Запечаћене класе је функција која је представљена у Јави 17. Функција запечаћене класе је завршила своју пробну фазу и постала је званична платформа и језик у Јави 17. Омогућава програмеру да наведе дозвољене подтипове које тип може имати и спречити друге да га прошире или спроводе на начин који није предвиђен.

Запечаћене класе такође омогућавају компајлеру да генерише грешке у време компајлирања када покушате да конвертујете незапечаћени тип у недозвољени подтип. Јава 17 такође доноси нови цевовод за рендеровање за АВТ/Свинг апликације које раде на мацОС-у користећи Аппле Метал АПИ уместо ОпенГЛ-а. Има побољшани АПИ и побољшане функције за генерисање случајних бројева.

  Како променити Гоогле позадину на Цхромебоок-у

Промене, брисања и ограничења у Јави 17

Јава 17 такође доноси неколико промена, брисања и нових ограничења.

Енкапсулација ЈДК интерних делова

Једна промена је завршетак процеса енкапсулације ЈДК Интерналс. Први пут је ово уведено у Јави 9 и давало би упозорења током времена рада када би корисник покушао да користи рефлексију или слично да заобиђе уобичајена ограничења за коришћење интерних АПИ-ја. Додати су и аргументи командне линије да би се регулисало ово понашање.

Од Јаве 9, креирани су различити АПИ-ји који нуде јединствен начин за обављање најчешће коришћених задатака; корисници би интерно користили ове АПИ-је. Са Јавом 16, подразумевана вредност је промењена са упозорења на онемогућавање приступа до избацивања изузетка. Међутим, користи аргумент командне линије да промени понашање.

Са Јава 17, аргумент командне линије је елиминисан и могуће је деактивирати ово ограничење. То значи да је сав неовлашћени приступ тим интерним АПИ-јима сада заштићен.

Увек строга семантика са плутајућим зарезом

Додатно „уклањање“ се може описати као поновно увођење семантике увек строге плутајуће тачке. Јава 1.2 је увела модификације подразумеване семантике са помичним зарезом у Јави које омогућавају ЈВМ-у да тргује са малом прецизношћу у прорачунима са покретним зарезом како би се побољшале перформансе. У класама и методама где је морала да се користи строга семантика, додата је кључна реч стрицтфп. Од тада, различити типови скупа инструкција су уведени у ЦПУ-е, чинећи да се стриктна семантика с помичним зарезом користи без непотребних трошкова. Потреба за имплементацијом подразумеване или строге семантике је елиминисана.

Јава 17 уклања претходну подразумевану семантику, а све операције са покретним зарезом се стриктно извршавају. Термин стрицтфпис је још увек присутан. Међутим, то нема ефекта и изазива упозорење у време компајлирања.

Компилација унапред (АОТ).

Јава 9 је увела компилацију унапред (АОТ) као експерименталну функцију која користи Граал компајлер, а ЈИТ код је написан помоћу Јаве. Јава 10 је учинила Граал компајлер употребљивим као ЈИТ компајлер у ОпенЈДК тако што је укључио ЈВМЦИ интерфејс. Од када је објављен, дошло је до великог побољшања. Граал компајлер је видео огроман напредак и има свој ЈВМ под именом ГраалВМ.

РМИ активација

Активација РМИ је елиминисана у ЈЕП 407 након његовог уклањања из Јаве 8 и коначно застарео и означен као услов за уклањање у оквиру Јаве 15. РМИ Ацтиватион је обезбедио метод за омогућавање ресурса дистрибуираних објеката на захтев користећи РМИ. Међутим, имао је минималну употребу, а боља алтернатива је доступна у садашњости. На остатак РМИ не утиче елиминација активационог дела.

Уклањање АПИ-ја аплета

Апплет АПИ је коначно одређен за уклањање од стране ЈЕП 398, првобитно уклоњен у Јави 9. АПИ за Апплет је обезбедио начин да се интегришу Јава АВТ/Свинг контроле у ​​веб страницу у оквиру претраживача. Међутим, ниједан савремени претраживач то не може подржати, што значи да су Апплети у суштини били недоступни током последње деценије.

  МонгоДБ Схардинг: Практични водич корак по корак

Менаџер безбедности

Најважније одрицање је да је то менаџер безбедности ( ЈЕП 411). Сецурити Манагер је већ неко време у употреби од Јаве 1.0. Дизајниран је да ограничи шта Јава може да ради локално на машини, као што је ограничавање приступа мрежама, датотекама и другим мрежним ресурсима. Такође покушава да заштити код у заштићеном окружењу који није поуздан тако што блокира рефлексију и специфичне АПИ-је.

Крај Сецурити Манагер-а је почео у Јави 12. Аргумент командне линије је додат да би се блокирало коришћење безбедносног менаџера током времена извршавања. Промена направљена у Јави 17 значи да ће се упозорење током извршавања генерисати у ЈВМ-у када покушате да подесите Сецурити Манагер, било из командне линије или динамички током времена извршавања.

Функције инкубатора и прегледа

Многи су се питали да ли ће Јава 17 имати било какве функције прегледа и инкубатора, с обзиром да је Јава 17 промовисана као верзија са дугорочним подршком. Јава 17 има два модула инкубатора и функцију прегледа!

Вецтор АПИ

Векторски АПИ ( ЈЕП 414) је тренутно у другој фази инкубатора. АПИ омогућава програмерима да дефинишу векторско израчунавање које ће ЈИТ компајлер затим конвертовати у одговарајућу векторску инструкцију коју подржава ЦПУ архитектура на којој ЈВМ ради (на пример, користећи оне из скупова инструкција ССЕ или АВКС).

Раније су програмери морали да користе скаларне функције или да праве изворне библиотеке које су биле специфичне за платформу. Имплементација Вецтор АПИ-ја у Јави такође обезбеђује беспрекоран резервни механизам који је био компликован у ранијим верзијама.

Стандардизација Вецтор АПИ-ја омогућава класама унутар ЈДК-а да га користе. Методе Јава Арраис мисматцх() могу се променити тако да се покрећу на Јави уместо тога, елиминишући захтев за одржавањем и писањем више имплементација специфичних за платформу унутар ЈВМ-а.

Стране функције и АПИ за меморију

Додатна функција инкубатора се зове Фореигн Фунцтион & Мемори АПИ ( ЈЕП 412). То је еволуција и спајање два друга инкубатор модула Јава 16 који је Тхе Фореигн Линкер АПИ ( ЈЕП 389) и АПИ за спољну меморију ( ЈЕП 393). Оба обезбеђују приступ изворној меморији и коду коришћењем статички типованог програмирања написаног у Јави.

Паттерн Матцхинг фор Свитцх

Последња карактеристика прегледа језика укљученог у Јаву 17 је укључивање Паттерн Матцхинг фор Свитцх ( ЈЕП 406). Ова језичка функција проширује изразе и исказе прекидача према типу, слично синтакси која се користи кроз Паттерн Матцхинг (ЈЕП 394), који је постао стандард са Јавом 16.

  Поправите грешку истекла Фацебоок сесије на Андроиду

У прошлости, ако сте желели да извршите различите радње на основу динамичке природе објекта, од вас би се захтевало да конструишете иф-елсе ланац користећи инстанцу провера као што су:

String type(Object o) {
  if (o instanceof List) {
    return "A List of things.";
  }
  else if (o instanceof Map) {
    return "A Map! It has keys and values.";
  }
  else if (o instanceof String) {
    return "This is a string.";
  }
  else {
    return "This is something else.";
  }
}

Комбиновањем израза прекидача као и нове функције подударања шаблона за прекидаче, процес се може свести на нешто слично:

String type(Object o) {
  return switch (o) {
    case List l -> "A List of things.";
    case Map m -> "A Map! It has keys and values.";
    case String s -> "This is a string.";
    default -> "This is something else.";
  };
}

Као што сте можда приметили, постоји декларација променљиве у процесу провере. Као и друге варијабле у Паттерн-у, подударање инстанце указује да је овај објекат проверен типом и пребачен и да је доступан из променљиве унутар своје тренутне области.

Функција прегледа је још један корак ка подударању шаблона. Следећи корак је да се укључи могућност деконструкције низова и записа.

Да ли треба да надоградите на Јава 17?

Да, морате стално да надограђујете на најновију верзију, али не од првог дана. Софтвер и библиотеке које користите можда нису ажурирани да би укључили компатибилност са Јавом 17, тако да ћете можда морати да сачекате неко време док се то не заврши.

Ако сте заглавили са ЛТС верзијом Јаве као што је Јава 8 или Јава 11, постоје бројне опције унутар језика и унутар самог ЈВМ-а које захтевају надоградњу до Јава 17. Пошто је то издање за дугорочно одржавање, постоји велика је шанса да ће и ваше производно окружење на крају бити ажурирано на Јаву 17.

Ако започињете потпуно нови пројекат или сте у процесу припреме вашег пројекта за Јаву 17, прелазак на Јаву 17 пре него касније је вероватно најефикаснији избор јер смањује трошкове селидбе. Ово такође омогућава програмерима који раде на пројекту да искористе све најновије функције и оперативну страну.

Можете искористити многа побољшања која су се десила у протеклих неколико година, као што је побољшана подршка за контејнере који раде на Јави, као и нове имплементације сакупљача смећа са малим кашњењем.