자바 SE 14 릴리스

XNUMX개월 간의 개발 끝에 Oracle은 출시 플랫폼 자바 SE 14 (Java Platform, Standard Edition 14) 오픈 소스 OpenJDK 프로젝트가 참조 구현으로 사용됩니다. Java SE 14는 이전 Java 플랫폼 릴리스와의 호환성을 유지하며, 이전에 작성된 모든 Java 프로젝트는 새 버전에서 실행될 때 변경 없이 작동합니다. 즉시 설치 가능한 Java SE 14 빌드(JDK, JRE 및 서버 JRE) 준비된 Linux(x86_64), Windows 및 macOS용. OpenJDK 프로젝트에서 개발된 참조 구현 자바 14 상용 제품과의 동적 연결을 허용하는 GNU ClassPath 예외를 포함하여 GPLv2 라이센스에 따른 완전한 오픈 소스입니다.

Java SE 14는 일반 지원 릴리스로 분류되며 다음 릴리스까지 계속 업데이트를 받을 예정입니다. LTS(장기 지원) 분기는 Java SE 11이어야 하며 2026년까지 계속 업데이트를 받을 수 있습니다. Java 8의 이전 LTS 분기는 2020년 2021월까지 지원됩니다. 다음 LTS 릴리스는 10년 XNUMX월로 예정되어 있습니다. Java XNUMX 릴리스부터 프로젝트가 새로운 개발 프로세스로 전환되었으며, 이는 새 릴리스 형성 주기가 더 짧아졌음을 의미합니다. 이제 새로운 기능은 지속적으로 업데이트되는 하나의 마스터 브랜치에서 개발됩니다. 여기에는 기성 변경 사항이 포함되어 있으며 새 릴리스를 안정화하기 위해 XNUMX개월마다 브랜치가 분기됩니다.

으로 혁신 자바 14 하나는 수 :

  • Добавлена экспериментальная поддержка 패턴 매칭 "instanceof" 연산자에서 로컬 변수를 즉시 정의하여 확인된 값에 액세스할 수 있습니다. 예를 들어, "String s = (String) obj"를 명시적으로 정의하지 않고도 "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}"를 즉시 작성할 수 있습니다.

    그것은 :

    if(obj 인스턴스of그룹) {
    그룹 그룹 = (그룹)obj;
    var 항목 = group.getEntries();
    }

    이제 "Group group = (Group) obj" 정의 없이도 수행할 수 있습니다.

    if (obj 인스턴스of 그룹 그룹) {
    var 항목 = group.getEntries();
    }

  • Добавлена экспериментальная поддержка нового ключевого слова «기록"는 클래스 정의를 위한 간결한 형식을 제공하므로 동작이 변경되지 않는 필드에만 데이터가 저장되는 경우 equals(), hashCode() 및 toString()과 같은 다양한 하위 수준 메서드를 명시적으로 정의하지 않아도 됩니다. 클래스가 equals(), hashCode() 및 toString() 메서드의 표준 구현을 사용하는 경우 명시적인 정의 없이도 수행할 수 있습니다.

    공공 기록 BankTransaction(LocalDate 날짜,
    두 배의 금액
    문자열 설명) {}

    이 선언은 생성자 및 getter 메서드 외에도 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" + " \"Java 1가 출시되었습니다!\" » +
    "\n\t" + " » +
    "\n" + " ";

    다음을 지정할 수 있습니다.

    문자열 HTML = """


    »자바 1\
    여기에!

    """;

  • Расширена информативность диагностики при возникновении исключений NullPointer 예외. Если раньше сообщение об ошибке лишь ссылалось на номер строки, то теперь в нём детализируется какой из методов вызвал исключение. Расширенная диагностика пока включается только при запуске с флагом «-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

코멘트를 추가