การเปิดตัว Java SE 14

หลังจากหกเดือนของการพัฒนา Oracle ปล่อยออกมา พลาทโฟรมุส JavaSE 14 (แพลตฟอร์ม Java, Standard Edition 14) โครงการโอเพ่นซอร์ส OpenJDK ถูกใช้เป็นการดำเนินการอ้างอิง Java SE 14 รักษาความเข้ากันได้แบบย้อนหลังกับแพลตฟอร์ม Java รุ่นก่อนหน้า โครงการ Java ที่เขียนไว้ก่อนหน้านี้ทั้งหมดจะทำงานโดยไม่มีการเปลี่ยนแปลงเมื่อเปิดตัวภายใต้เวอร์ชันใหม่ พร้อมติดตั้ง Java SE 14 builds (JDK, JRE และ Server JRE) เตรียมไว้ สำหรับ Linux (x86_64), Windows และ macOS การใช้งานอ้างอิงที่พัฒนาโดยโครงการ OpenJDK 14 Java เป็นโอเพ่นซอร์สโดยสมบูรณ์ภายใต้ใบอนุญาต GPLv2 โดยมีข้อยกเว้น GNU ClassPath ช่วยให้สามารถเชื่อมโยงแบบไดนามิกกับผลิตภัณฑ์เชิงพาณิชย์ได้

Java SE 14 จัดเป็นรุ่นสนับสนุนทั่วไป และจะยังคงรับการอัปเดตต่อไปจนกว่าจะมีรุ่นถัดไป สาขาการสนับสนุนระยะยาว (LTS) ควรเป็น Java SE 11 ซึ่งจะได้รับการอัปเดตต่อไปจนถึงปี 2026 Java 8 สาขา LTS ก่อนหน้าจะได้รับการสนับสนุนจนถึงเดือนธันวาคม 2020 LTS รุ่นถัดไปมีกำหนดในเดือนกันยายน 2021 เราขอเตือนคุณว่าตั้งแต่การเปิดตัว Java 10 เป็นต้นไป โปรเจ็กต์ได้เปลี่ยนไปใช้กระบวนการพัฒนาใหม่ ซึ่งหมายถึงวงจรที่สั้นลงสำหรับการก่อตัวของรีลีสใหม่ ขณะนี้ฟังก์ชันการทำงานใหม่ได้รับการพัฒนาในสาขาหลักที่ได้รับการอัปเดตอย่างต่อเนื่อง ซึ่งรวมถึงการเปลี่ยนแปลงสำเร็จรูปและสาขาที่จะแตกแขนงทุก ๆ หกเดือนเพื่อรักษาเสถียรภาพของการออกใหม่

ของ นวัตกรรม 14 Java หนึ่งสามารถ เครื่องหมาย:

  • Добавлена экспериментальная поддержка การจับคู่รูปแบบ ในตัวดำเนินการ "instanceof" ซึ่งช่วยให้คุณกำหนดตัวแปรท้องถิ่นได้ทันทีเพื่อเข้าถึงค่าที่เลือก ตัวอย่างเช่น คุณสามารถเขียน “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” ได้ทันทีโดยไม่ต้องกำหนด “String s = (String) obj” อย่างชัดเจน

    มันเป็น:

    ถ้า (obj อินสแตนซ์ของกลุ่ม) {
    กลุ่ม กลุ่ม = (กลุ่ม)obj;
    รายการ var = group.getEntries();
    }

    ตอนนี้คุณสามารถทำได้โดยไม่มีคำจำกัดความ "Group group = (Group) obj":

    ถ้า (obj อินสแตนซ์ของกลุ่มกลุ่ม) {
    รายการ var = group.getEntries();
    }

  • Добавлена экспериментальная поддержка нового ключевого слова «ระเบียน" ซึ่งมีรูปแบบที่กะทัดรัดสำหรับการกำหนดคลาส ซึ่งช่วยให้คุณหลีกเลี่ยงการกำหนดวิธีการระดับต่ำต่างๆ อย่างชัดเจน เช่น เท่ากับ(), hashCode() และ toString() ในกรณีที่ข้อมูลถูกจัดเก็บเฉพาะในฟิลด์ที่พฤติกรรมไม่เปลี่ยนแปลง เมื่อคลาสใช้งานมาตรฐานของเมธอดเท่ากับ(), hashCode() และ toString() ก็สามารถทำได้โดยไม่ต้องมีคำจำกัดความที่ชัดเจน:

    บันทึกสาธารณะ ธุรกรรมทางธนาคาร (วันที่ LocalDate,
    จำนวนสองเท่า
    คำอธิบายสตริง) {}

    การประกาศนี้จะเพิ่มการใช้งานเมธอดเท่ากับ(), hashCode() และ toString() โดยอัตโนมัติ นอกเหนือจากเมธอด Constructor และ Getter

  • Стандартизирована и включена по умолчанию поддержка новой формы выражений «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" + " \"Java 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 เพิ่ม новый механизм распределения памяти, учитывающий специфику работу на крупных системах, использующих архитектуру นูมา. Новый распределитель памяти включается при помощи флага «+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

เพิ่มความคิดเห็น