Выпуск Java SE 15

В Java SE 15 сoxрaнeнa oбрaтнaя сoвмeстимoсть с прoшлыми выпускaми плaтфoрмы Java, всe рaнee нaписaнныe Java-прoeкты бeз измeнeний будут рaбoтoспoсoбны присутствие зaпускe пoд упрaвлeниeм нoвoй вeрсии. Гoтoвыe ради устaнoвки сбoрки Java SE 15 (JDK, JRE и Server JRE) пoдгoтoвлeны ради Linux (x86_64), Windows и macOS. Java SE 15 oтнeсён к кaтeгoрии выпускoв с oбычным срoкoм пoддeржки, oбнoвлeния интересах кoтoрoгo будут выпускaться дo слeдующeгo рeлизa. Прoшлaя LTS-вeткa Java 8 будeт пoддeрживaться дo дeкaбря 2020 гoдa. Слeдующий LTS-рeлиз намечен нате сентябрь 2021 года. Напомним, как начиная с выпуска Java 10 редакция перешёл на новый процесс разработки, подразумевающий сильнее короткий цикл формирования новых релизов. Новая функциональность данный) момент развивается в одной постоянно обновляемой master-ветке, в которую включаются сделано готовые изменения и от которой однова в шесть месяцев ответвляются ветки пользу кого стабилизации новых выпусков. Из новшеств Java 15 не запрещается отметить: Встроена поддержка алгоритма создания численный подписи EdDSA (Edwards-Curve Digital Signature Algorithm RFC 8032). Предложенная свершение EdDSA не зависит от аппаратных платформ, защищена через атак по сторонним каналам (гарантированно постоянное время всех вычислений) и после производительности опережает существующую реализацию ECDSA, написанную для языке Си, при том а уровне защиты. Например, EdDSA около использовании эллиптической кривой со 126-битным ключом демонстрирует продуктивность аналогичную ECDSA с эллиптической кривой secp256r1 и 128-битным ключом. Добавлена экспериментальная сохранение запечатанных ("sealed") классов и интерфейсов, которые мало-: неграмотный могут использоваться другими классами и интерфейсами чтобы наследования, расширения или переопределения реализации. Запечатанные классы и предоставляют более декларативный способ ограничения использования суперкласса, нежели модификаторы доступа, основанный на явном перечислении подклассов, разрешённых с целью расширения. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {...} Добавлена опора скрытых классов, которые не могут -побывать) использованы напрямую байткодом других классов. Ключевым назначением скрытых классов является утилизация во фреймворках, динамически генерирующих классы нет слов время выполнения и использующих их окольным путем, через отражение. Подобные классы ординарно имеют ограниченный жизненный цикл, вследствие чего их поддержание для доступа с статически сгенерированных классов не оправдано и приведёт не более к увеличению потребления памяти. Скрытые классы опять же позволяют обойтись без нестандартного API sun.misc.Unsafe::defineAnonymousClass, тот или другой намечен на удаление в будущем. Стабилизирован и признан готовым на повсеместного использования сборщик мусора ZGC (Z Garbage Collector). ZGC работает в пассивном режиме, в какой мере это возможно минимизирует задержки с-за сборки мусора (время остановки рядом использовании ZGC не превышает 10 мс.) и может трудиться как с небольшими, так и с огромными кучами, размером через нескольких сотен мегабайт до многих терабайт. Стабилизирован и признан готовым на повсеместного использования сборщик мусора Shenandoah, экспериментирующий с минимальными приостановками (Low-Pause-Time Garbage Collector). Shenandoah разработан компанией Red Hat и примечателен использованием алгоритма, сокращающего дата остановок во время сборки мусора по (по грибы) счёт проведения чистки параллельно с выполнением Java-приложений. Размер вносимых сборщиком мусора задержек предсказуем и маловыгодный зависит от размера кучи, т.е. с целью куч в 200 MB и 200 GB задержки будут идентичны (безлюдный (=малолюдный) выходят за пределы 50 мс и обыденно укладываются в 10 мс); Стабилизирована и введена в жало поддержка текстовых блоков - новой склад строковых литералов, позволяющих включать в начальный код многострочные текстовые данные сверх применения в них экранирования символов и сохраняя исходное форматирования текста в блоке. Паспарту блока осуществляется тремя двойными кавычками. Возьмем, вместо кода String html = "‹HTML›" + "\n\t" + "‹BODY›" + "\n\t\t" + "‹H1›\"Java 15 is here!\"‹/H1›" + "\n\t" + "‹/BODY›" + "\n" + "‹/HTML›"; есть указать: String html = """ ‹HTML› ‹BODY› ‹H1›"Java 15\ is here!"‹/H1› ‹/BODY› ‹/HTML›"""; Переработан API Legacy DatagramSocket. Старые реализации java.net.DatagramSocket и java.net.MulticastSocket, заменены получи и распишись современную реализацию, более простую пользу кого отладки и сопровождения, а также совместимую с виртуальными потоками, развиваемыми в рамках проекта Loom. Бери случай возможного нарушения совместимости с существующим кодом бабушка реализация не удалена и может -побывать) активирована при помощи опции jdk.net.usePlainDatagramSocketImpl. Предложена вторая экспериментальная исполнение сопоставления c образцом в операторе "instanceof", которая позволяет махом определить локальную переменную для обращения к проверенному значению. Как например, можно сразу писать "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" за исключением. Ant. с явного определения "String s = (String) obj". Было: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Ноне можно обойтись без определения "Group group = (Group) obj": if (obj instanceof Group group) { var entries = group.getEntries(); } Предложена вторая экспериментальная материализация ключевого слова "record", предоставляющего компактную форму к определения классов, позволяющую обойтись минус явного определения различных низкоуровневых методов, таких точь в точь equals(), hashCode() и toString(), в случаях, часом данные сохраняются только в полях, норов работы с которыми не меняется. Предложен другой предварительный вариант API Foreign-Memory Access, позволяющий Java-приложениям не подвергаясь опасности и эффективно получить доступ к областям памяти, кроме кучи Java, манипулируя новыми абстракциями MemorySegment, MemoryAddress и MemoryLayout. Отключена и объявлена устаревшей искусность оптмизации Biased Locking, применявшаяся в HotSpot JVM угоду кому) сокращения накладных расходов из-после блокировок. Данная техника потеряла жгучесть на системах с атомарными инструкциями, предоставляемыми современными CPU, и усердствовать трудоёмка для сопровождения из-после своей сложности. Объявлен устаревшим машина RMI Activation, который будет удалён в одном с следующих выпусков. Отмечается, что RMI Activation устарел, переведён в жанр опции ещё в Java 8 и почти неважный (=маловажный) применяется в современной практике. Удалён JavaScript-указатель Nashorn, который был объявлен устаревшим в Java SE 11. Удалены порточки для ОС Solaris и процессоров SPARC (Solaris/SPARC, Solaris/x64 и Linux/SPARC). Устранение указанных портов позволит сообществу подогнать разработку новых возможностей OpenJDK, безвыгодный тратя время на поддержание особенностей, специфичных во (избежание Solaris и SPARC. Источник: http://www.opennet.ru/opennews/art.shtml?num=53717