Java SE 14 чыгаруу

Алты ай иштеп чыккандан кийин, Oracle бошотулду платформа JavaSE 14 (Java Platform, Standard Edition 14), ачык булактуу OpenJDK долбоору маалымдама ишке ашыруу катары колдонулат. Java SE 14 Java платформасынын мурунку релиздери менен артка шайкештикти сактайт; мурда жазылган бардык Java долбоорлору жаңы версияда ишке киргизилгенде эч кандай өзгөрүүсүз иштейт. Орнотууга даяр Java SE 14 түзүмдөрү (JDK, JRE жана Server JRE) даяр Linux (x86_64), Windows жана macOS үчүн. OpenJDK долбоору тарабынан иштелип чыккан маалымдама ишке ашыруу Java 14 GPLv2 лицензиясы боюнча толук ачык булак болуп саналат, GNU ClassPath бөтөнчөлөрү коммерциялык өнүмдөр менен динамикалык байланышты камсыз кылат.

Java SE 14 жалпы колдоо чыгаруу катары классификацияланган жана кийинки релизге чейин жаңыртууларды ала берет. Узак мөөнөттүү колдоо (LTS) бутагы Java SE 11 болушу керек, ал жаңыртууларды 2026-жылга чейин ала берет. Java 8дин мурунку LTS бутагы 2020-жылдын декабрына чейин колдоого алынат. Кийинки LTS релизи 2021-жылдын сентябрына пландаштырылган. Эске сала кетсек, Java 10 чыгарылгандан баштап, долбоор жаңы релиздерди түзүү үчүн кыскараак циклди билдирген жаңы иштеп чыгуу процессине өткөн. Жаңы функциялар азыр дайыма жаңыланып туруучу бир башкы бутакта иштелип чыккан, ал даяр өзгөртүүлөрдү камтыйт жана жаңы релиздерди турукташтыруу үчүн ар бир жарым жылда бир бутактан турат.

чейин инновациялар Java 14 алат белги:

  • Эксперименттик колдоо кошулду үлгү дал келүү "instanceof" операторунда, ал дароо текшерилген мааниге жетүү үчүн локалдык өзгөрмөнү аныктоого мүмкүндүк берет. Мисалы, сиз дароо “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” деп “String s = (String) obj” деп так аныктамасыз эле жаза аласыз.

    Ал эле:

    if (obj instanceof Group) {
    Group group = (Group)obj;
    var enries = group.getEntries();
    }

    Эми сиз "Group group = (Group) obj" аныктамасы жок кыла аласыз:

    if (obj instanceof Group group) {
    var enries = group.getEntries();
    }

  • Жаңы ачкыч сөз үчүн эксперименталдык колдоо кошулду "жазуу", класстарды аныктоо үчүн компакт форманы камсыздайт, бул сизге төмөнкү деңгээлдеги ар кандай ыкмаларды, мисалы, equals(), hashCode() жана toString() ачык-айкын аныктоодон качууга мүмкүндүк берет, эгерде маалыматтар жүрүм-туруму өзгөрбөгөн талааларда гана сакталат. Класс equals(), hashCode() жана toString() методдорунун стандарттуу реализацияларын колдонгондо, ал алардын ачык аныктамасы жок жасай алат:

    БанкТранзакциясынын ачык жазуусу (ЖергиликтүүКүн датасы,
    эки эселенген сумма
    Саптын сүрөттөлүшү) {}

    Бул декларация конструктор жана алуучунун методдоруна кошумча түрдө equals(), hashCode() жана toString() методдорунун ишке ашырууларын автоматтык түрдө кошот.

  • Стандартташтырылган жана “которуу” туюнтмаларынын жаңы формасын колдоо демейки боюнча иштетилген, ал “тыныгуу” операторун көрсөтүүнү талап кылбайт, кайталануучу энбелгилерди бириктирүүгө мүмкүндүк берет жана оператор түрүндө гана эмес, ошондой эле билдирүү.

    var log = switch (окуя) {
    case PLAY -> "Колдонуучу ойнотуу баскычын иштетти";
    case STOP, PAUSE -> "Колдонуучуга тыныгуу керек";
    демейки -> {
    Стринг билдирүү = event.toString();
    LocalDateTime now = LocalDateTime.now();
    түшүм "Белгисиз окуя" + билдирүү +
    » кирди » + азыр;
    }
    };

  • Кеңейтилген эксперименталдык колдоо текст блоктору - сап литералдарынын жаңы формасы, бул көп саптуу тексттик маалыматтарды блокто символдорду колдонбостон жана баштапкы текст форматын сактабастан баштапкы кодго кошууга мүмкүндүк берет. Блок үч кош тырмакча менен жээктелген. Java 14те, текст блоктору азыр бир боштукту аныктоо үчүн "\s" качуу ырааттуулугун жана кийинки сап менен бириктирүү үчүн "\" ырааттуулугун колдойт (өтө узун сапты басып чыгаруу керек болгондо жаңы саптарды этибарга албай). Мисалы, коддун ордуна

    Сап html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 бул жерде!\" » +
    "\n\t" + " » +
    "\n" + " ";

    сиз белгилей аласыз:

    Сап html = """


    »Java 1\
    бул жерде!

    """;

  • Өзгөчө учурлар болгон учурда диагностиканын маалыматтык мазмуну кеңейтилди NullPointerException. Мурда ката кабары саптын номерине гана тиешелүү болсо, азыр кайсы ыкма өзгөчөлүккө себеп болгонун деталдаштырат. Өркүндөтүлгөн диагностика учурда "-XX:+ShowCodeDetailsInExceptionMessages" желеги менен иштетилгенде гана иштетилет. Мисалы, бул желекти көрсөтүүдө, сапта өзгөчөлүк

    var name = user.getLocation().getCity().getName();

    билдирүү пайда болот

    "Негизги" жиптеги өзгөчө жагдай java.lang.NullPointerException: "Location.getCity()" чакырылышы мүмкүн эмес
    анткени "User.getLocation()" кайтаруу мааниси нөл
    NullPointerExample.main(NullPointerExample.java:5):5)

    бул Location.getCity() методу чакырылбаганын жана User.getLocation() нөлгө кайтарылганын айкын кылат.

  • Аткарылган Өз алдынча Java тиркемелери үчүн пакеттерди түзүүгө мүмкүндүк берген jpackage утилитасынын алдын ала кароосу. Утилита JavaFXден javapackager'ге негизделген жана ар кандай платформаларда (Windows үчүн msi жана exe, macOS үчүн pkg жана dmg, Linux үчүн deb жана rpm) түпнуска форматтарда пакеттерди түзүүгө мүмкүндүк берет. Пакеттер бардык талап кылынган көз карандылыктарды камтыйт.
  • G1 таштанды жыйноочуга кошулду архитектурасын колдонуу менен чоң системаларда иштөөнүн өзгөчөлүктөрүн эске алган жаңы эстутумду бөлүштүрүү механизми NUMA. Жаңы эстутум бөлүштүргүч "+XX:+UseNUMA" желегин колдонуу менен иштетилген жана NUMA системаларында иштөөнү кыйла жакшыртат.
  • Кошулган JFR (JDK Flight Recorder) окуяларына учуу учурунда мониторинг жүргүзүү үчүн API, мисалы, үзгүлтүксүз мониторингди уюштуруу үчүн.
  • Кошулган jdk.nio.mapmode модулу, ал жаңы режимдерди (READ_ONLY_SYNC, WRITE_ONLY_SYNC) сунуштайт, ал туруксуз эстутумга (NVM) шилтеме берген байт буферлерин (MappedByteBuffer) түзүү үчүн.
  • Аткарылган Java колдонмолоруна жаңы MemorySegment, MemoryAddress жана MemoryLayout абстракцияларын манипуляциялоо аркылуу Java үймөгүнөн тышкаркы эстутум аймактарына коопсуз жана эффективдүү кирүүгө мүмкүндүк берүүчү тышкы эс тутумга кирүү API'нин алдын ала кароосу.
  • Жарыяланган Solaris OS жана SPARC процессорлору үчүн эскирген порттор (Solaris/SPARC, Solaris/x64 жана Linux/SPARC) келечекте бул портторду алып салуу ниети менен. Бул портторду жокко чыгаруу коомчулукка Solaris жана SPARC спецификалык өзгөчөлүктөрүн сактоого убакыт коротпостон, жаңы OpenJDK функцияларын иштеп чыгууну тездетүүгө мүмкүндүк берет.
  • Жок кылынды CMS (Concurrent Mark Sweep) таштанды жыйноочу, ал эки жыл мурун эскирген деп белгиленген жана эч кандай кароосуз калган (CMS эчак G1 таштанды жыйноочу менен алмаштырылган). Мындан тышкары, жарыялады ParallelScavenge жана SerialOld таштанды чогултуу алгоритмдеринин айкалышын колдонуу эскирген («-XX:+UseParallelGC -XX:-UseParallelOldGC» опциялары менен иштетиңиз).
  • ZGC (Z Garbage Collector) таштанды жыйгычына эксперименталдык колдоо macOS жана Windows платформаларында (мурда Linux'та гана колдоого алынган) берилген. ZGC пассивдүү режимде иштейт, мүмкүн болушунча таштанды чогултуунун күтүлүүсүн азайтат (ZGC колдонууда токтоп калуу убактысы 10 мс ашпайт.) жана өлчөмү бир нече жүз мегабайттан көп терабайтка чейин жеткен кичинекей да, чоң үймөктөр менен да иштей алат.
  • Өчүрүлдү Pack200 алгоритмин колдонуу менен JAR файлдарын кысуу үчүн Toolkit жана API.

Source: opennet.ru

Комментарий кошуу