جاوا SE 14 ریلیز

ترقی کے چھ ماہ کے بعد، اوریکل جاری کیا پلیٹ فارم جاوا SE 14 (جاوا پلیٹ فارم، سٹینڈرڈ ایڈیشن 14)، اوپن سورس اوپن جے ڈی کے پروجیکٹ کو حوالہ کے نفاذ کے طور پر استعمال کیا جاتا ہے۔ Java SE 14 جاوا پلیٹ فارم کی پچھلی ریلیز کے ساتھ پسماندہ مطابقت کو برقرار رکھتا ہے؛ نئے ورژن کے تحت چلنے پر پہلے سے لکھے گئے تمام جاوا پروجیکٹ بغیر کسی تبدیلی کے کام کریں گے۔ جاوا SE 14 تعمیرات (JDK، JRE اور سرور JRE) انسٹال کرنے کے لیے تیار تیار لینکس (x86_64)، ونڈوز اور میکوس کے لیے۔ اوپن جے ڈی کے پروجیکٹ کے ذریعہ تیار کردہ حوالہ عمل درآمد جاوا 14۔ GPLv2 لائسنس کے تحت مکمل طور پر اوپن سورس ہے، جس میں GNU ClassPath مستثنیات تجارتی مصنوعات کے ساتھ متحرک لنکنگ کی اجازت دیتا ہے۔

Java SE 14 کو ایک عام سپورٹ ریلیز کے طور پر درجہ بندی کیا گیا ہے اور اگلی ریلیز تک اپ ڈیٹس موصول ہوتے رہیں گے۔ لانگ ٹرم سپورٹ (LTS) برانچ Java SE 11 ہونی چاہیے، جو 2026 تک اپ ڈیٹس وصول کرتی رہے گی۔ Java 8 کی پچھلی LTS برانچ دسمبر 2020 تک سپورٹ کی جائے گی۔ اگلی LTS ریلیز ستمبر 2021 کو شیڈول ہے۔ آئیے ہم آپ کو یاد دلاتے ہیں کہ جاوا 10 کی ریلیز کے ساتھ ہی، پروجیکٹ نے ایک نئے ترقیاتی عمل کی طرف رخ کیا، جس کا مطلب نئی ریلیزز کی تشکیل کے لیے ایک چھوٹا سا دور ہے۔ نئی فعالیت اب ایک مسلسل اپ ڈیٹ شدہ ماسٹر برانچ میں تیار کی گئی ہے، جس میں ریڈی میڈ تبدیلیاں شامل ہیں اور جس سے ہر چھ ماہ بعد برانچز کی جاتی ہیں تاکہ نئی ریلیز کو مستحکم کیا جا سکے۔

میں سے بدعات جاوا 14۔ ایک کر سکتے ہیں مارک:

  • Добавлена экспериментальная поддержка پیٹرن ملاپ "instanceof" آپریٹر میں، جو آپ کو چیک شدہ قدر تک رسائی کے لیے فوری طور پر مقامی متغیر کی وضاحت کرنے کی اجازت دیتا ہے۔ مثال کے طور پر، آپ "اسٹرنگ s = (اسٹرنگ) آبجیکٹ" کی واضح وضاحت کیے بغیر فوری طور پر "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" لکھ سکتے ہیں۔

    تھا:

    اگر (گروپ کا اعتراض) {
    گروپ گروپ = (گروپ) obj;
    var اندراجات = group.getEntries();
    }

    اب آپ "گروپ گروپ = (گروپ) آبجیکٹ" کی تعریف کے بغیر کر سکتے ہیں:

    اگر (گروپ گروپ کا اعتراض) {
    var اندراجات = group.getEntries();
    }

  • Добавлена экспериментальная поддержка нового ключевого слова «ریکارڈ"، جو کلاسز کی وضاحت کے لیے ایک کمپیکٹ فارم فراہم کرتا ہے، جس سے آپ کو واضح طور پر مختلف نچلی سطح کے طریقوں کی وضاحت کرنے سے گریز کرنے کی اجازت ملتی ہے جیسے equals()، hashCode() اور toString() ان صورتوں میں جہاں ڈیٹا صرف ان فیلڈز میں اسٹور کیا جاتا ہے جن کا رویہ تبدیل نہیں ہوتا ہے۔ جب کوئی کلاس equals()، hashCode() اور toString() طریقوں کے معیاری نفاذ کا استعمال کرتی ہے، تو یہ ان کی واضح تعریف کے بغیر کر سکتی ہے:

    عوامی ریکارڈ بینک ٹرانزیکشن (مقامی تاریخ کی تاریخ،
    ڈبل رقم
    اسٹرنگ کی تفصیل) {}

    یہ اعلان کنسٹرکٹر اور گیٹر کے طریقوں کے علاوہ برابر ()، ہیش کوڈ() اور ٹو سٹرنگ () طریقوں کے نفاذ کو خود بخود شامل کر دے گا۔

  • Стандартизирована и включена по умолчанию поддержка новой формы выражений «switch», не требующей указания оператора «break», позволяющей объединять повторяющиеся метки и допускающей использование не только в форме оператора, но и как выражения.

    var log = switch (event) {
    case PLAY -> «User has triggered the play button»;
    case STOP, PAUSE -> «User needs a break»;
    default -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield «Unknown event » + message +
    » logged on » + now;
    }
    };

  • Расширена экспериментальная поддержка ٹیکسٹ بلاکس — новой формы строковых литералов, позволяющих включать в исходный код многострочные текстовые данные без применения в них экранирования символов и сохраняя исходное форматирования текста в блоке. Обрамление блока осуществляется тремя двойными кавычками. В Java 14 в текстовых блоках реализована поддержка escape-последовательности «\s» для определения одного пробела и «\» для объединения со следующей строкой (игнорирования перевода строки, когда нужно вывести очень длинную строку). Например, вместо кода

    اسٹرنگ html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"جاوا 1 یہاں ہے!\" » +
    "\n\t" + " » +
    "\n" + " "

    آپ وضاحت کر سکتے ہیں:

    اسٹرنگ html = """


    »جاوا 1\
    یہاں ہے!

    """;

  • Расширена информативность диагностики при возникновении исключений NullPointerException. Если раньше сообщение об ошибке лишь ссылалось на номер строки, то теперь в нём детализируется какой из методов вызвал исключение. Расширенная диагностика пока включается только при запуске с флагом «-XX:+ShowCodeDetailsInExceptionMessages». Например, при указании данного флага исключение в строке

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

    приведёт к выводу сообщения

    Exception in thread «main» java.lang.NullPointerException: Cannot invoke «Location.getCity()»
    because the return value of «User.getLocation()» is null
    at NullPointerExample.main(NullPointerExample.java:5):5)

    которое позволяет понять, что метод Location.getCity() не был вызван, а User.getLocation() вернул значение null.

  • لاگو کیا предварительный вариант утилиты jpackage, позволяющей создавать пакеты для самодостаточных (self-contained) Java-приложений. Утилита базируется на javapackager из JavaFX и позволяет формировать пакеты в форматах, родных для различных платформ (msi и exe для Windows, pkg и dmg для macOS, deb и rpm для Linux). Пакеты включают все необходимые зависимости.
  • В сборщик мусора G1 شامل کیا новый механизм распределения памяти, учитывающий специфику работу на крупных системах, использующих архитектуру NUMA. Новый распределитель памяти включается при помощи флага «+XX:+UseNUMA» и позволяет существенно поднять производительность на NUMA-системах.
  • شامل کیا گیا۔ API для отслеживания на лету событий JFR (JDK Flight Recorder), например для организации непрерывного мониторинга.
  • شامل کیا گیا۔ модуль jdk.nio.mapmode, предлагающий новые режимы (READ_ONLY_SYNC, WRITE_ONLY_SYNC) для создания отображаемых байтовых буферов (MappedByteBuffer), ссылающихся на энергонезависимую память (NVM).
  • لاگو کیا предварительный вариант API Foreign-Memory Access, позволяющий Java-приложениям безопасно и эффективно получить доступ к областям памяти, вне кучи Java, манипулируя новыми абстракциями MemorySegment, MemoryAddress и MemoryLayout.
  • Объявлены устаревшими порты для ОС Solaris и процессоров SPARC (Solaris/SPARC, Solaris/x64 и Linux/SPARC) c намерением удалить данные порты в будущем. Перевод указанных портов в разряд устаревших позволит сообществу ускорить разработку новых возможностей OpenJDK, не тратя время на поддержание особенностей, специфичных для Solaris и SPARC.
  • حذف کر دیا گیا۔ сборщик мусора CMS (Concurrent Mark Sweep), который два года назад был отмечен устаревшим и остался без сопровождения (на смену CMS давно пришёл сборщик мусора G1). Кроме того, اعلان کیا устаревшим применение комбинации алгоритмов сборки мусора ParallelScavenge и SerialOld (запуск с опциями «-XX:+UseParallelGC -XX:-UseParallelOldGC»).
  • Обеспечена экспериментальная поддержка сборщика мусора ZGC (Z Garbage Collector) на платформах macOS и Windows (ранее поддерживался только в Linux). ZGC работает в пассивном режиме, насколько это возможно минимизирует задержки из-за сборки мусора (время остановки при использовании ZGC не превышает 10 мс.) и может работать как с небольшими, так и с огромными кучами, размером от нескольких сотен мегабайт до многих терабайт.
  • حذف کر دیا گیا۔ инструментарий и API для сжатия JAR-файлов с использованием алгоритма Pack200.

ماخذ: opennet.ru

نیا تبصرہ شامل کریں