До версии 8 версия Java выпускалась раз в 3 года, поэтому версий с большим количеством функций было немного.
Поэтому было сложно выпустить новую версию Java, а разработчикам было сложно обновить свои приложения из-за большого количества включенных изменений.
Этот темп больше не соответствует реальности ИТ-мира, где все происходит все быстрее и быстрее! Поэтому Java architects решили публиковать версию каждые 6 месяцев (следовательно, фиксированный график)
В каждой версии включены все готовые функции, те, которые не готовы, будут предоставлены в следующей версии (не более поздней версии).
1) Новые функции в языке Java ● |/Метод forEach() Java 8 представила метод forEach в java.lang. Повторяющийся интерфейс, так что при написании кода мы фокусируемся только на бизнес-логике.
● Лямбда-выражение Самой большой новой функцией Java 8 является поддержка лямбда-выражений на уровне языка (Project Lambda). Синтаксис лямбда-выражений (аргумент) -> (тело).
● Методы интерфейса по умолчанию и статические методы До java 8 интерфейс в java мог иметь только абстрактные методы. Все методы интерфейсов по умолчанию являются общедоступными и абстрактными. Java 8 позволяет интерфейсам иметь методы по умолчанию и статические методы.
-Методы по умолчанию: Причина, по которой у нас есть методы по умолчанию в интерфейсах, заключается в том, чтобы позволить разработчикам добавлять новые методы в интерфейсы, не затрагивая классы, реализующие эти интерфейсы.
-Статические методы: в интерфейсах аналогичны методам по умолчанию, за исключением того, что мы не можем переопределять эти методы в классах, реализующих эти интерфейсы. Например, в новом потоковом интерфейсе есть много статических методов. Это облегчает поиск “вспомогательных” методов, поскольку они могут быть расположены непосредственно в интерфейсе, а не в другом классе , таком как StreamUtil или Streams.
● Функциональный интерфейс В Java 8 функциональный интерфейс определяется как интерфейс с ровно одним абстрактным методом. Это относится даже к интерфейсам, которые были созданы с помощью предыдущих версий Java. Java 8 поставляется с несколькими новыми функциональными интерфейсами в пакете java.util.function. -Функция – принимает объект типа T и возвращает R. -Поставщик – просто возвращает объект типа T. -Предикат – возвращает логическое значение на основе ввода типа T. -Потребитель – выполняет действие с данным объектом типа T.
● Ссылки на методы Ссылки на методы – это особый тип лямбда-выражений. Они часто используются для создания простых лямбда-выражений путем ссылки на существующие методы. Существует четыре вида ссылок на методы: -Статические методы -Методы экземпляров конкретных объектов -Методы экземпляров произвольного объекта определенного типа – -Конструктор
2) Новые функции в библиотеках Java ● |/Потоковый API Интерфейс потока является такой фундаментальной частью Java 8.
Мы можем использовать Java Stream API для реализации внутренней итерации, что лучше, потому что java framework контролирует итерацию.
Интерфейс потока поддерживает шаблон map/filter/reduce и выполняется лениво, образуя основу (наряду с лямбдами) для программирования в функциональном стиле в Java 8.
Существуют также соответствующие примитивные потоки (IntStream, Двойной поток и длинный поток) по соображениям производительности.
В Java 8 интерфейс коллекции имеет два метода для создания потока: -stream():Возвращает последовательный поток, рассматривающий коллекцию в качестве источника.
-Параллельный поток(): Возвращает параллельный поток, рассматривающий коллекцию в качестве источника.
● Необязательно Java 8 поставляется с дополнительным классом в пакете java.util для предотвращения возвращаемых значений null (и, следовательно, исключения NullPointerException).
Если значение присутствует, функция is Present() вернет значение true, а функция get() вернет значение. Потоковые операции терминала возвращают необязательный объект. Некоторые из этих методов: -Дополнительное сокращение (накопитель двоичного оператора) -Дополнительный минимум (Компаратор супер T> компаратор) -Дополнительный макс (Компаратор супер T> компаратор) -Дополнительный поиск первым () -() -Необязательно найти любой()
● API даты/времени В Java 8 представлен новый API даты и времени, который устраняет следующие недостатки старого API даты и времени: – Не потокобезопасен – Плохой дизайн – Сложная обработка часовых поясов
API даты и времени Java 8 состоит из следующих пакетов: 1.Пакет java.time: Это базовый пакет нового Java Date Time API. такие как LocalDate, Localtime, LocalDateTime, Мгновенный, Период, Продолжительность и т.д. Все эти классы являются неизменяемыми и потокобезопасными.
- пакет java.time.chrono: Этот пакет определяет общие API-интерфейсы для календарных систем, отличных от ISO. Мы можем расширить класс AbstractChronology, чтобы создать нашу собственную календарную систему.
- пакет java.time.temporal: Этот пакет содержит временные объекты, и мы можем использовать его для определения конкретной даты или времени, связанных с объектом даты/времени. Например, мы можем использовать их, чтобы узнать первый или последний день месяца. Вы можете легко идентифицировать эти методы, потому что они всегда имеют формат “с XXX”.
- пакет java.time.zone: Этот пакет содержит классы для поддержки различных часовых поясов и их правил.
Java 9 включала улучшенную поддержку многогигабайтных куч, улучшенную интеграцию с собственным кодом, другой сборщик мусора по умолчанию (G1, для “более короткого времени отклика”) и самонастраивающуюся JVM.
● Модульная система платформы Java (проект Jigsaw) Это новый вид программного компонента Java, который можно использовать для сбора кода Java (классов и пакетов). Основная цель этого проекта – легко масштабировать приложение до небольших устройств. В Java 9 сам JDK разделен на набор модулей, чтобы сделать его более легким. Это также позволяет нам разрабатывать модульные приложения.
° Оболочка: интерактивная ВЕРСИЯ Java Оболочка представляет собой инструмент REPL (цикл чтения и печати) и запускается из командной строки. Это интерактивный инструмент оболочки Java, он позволяет нам выполнять Java-код из оболочки и немедленно выводит вывод.
● Улучшения API процессов Java улучшила свой API процессов в версии Java 9, они добавили пару новых классов и методов для облегчения контроля и управления. Два новых интерфейса в API процесса:
- java.lang. Ручка процесса
- java.lang. Ручка процесса. Инфо
● Частные методы Интерфейса В Java 9 мы можем создавать частные методы внутри интерфейса. Интерфейс позволяет нам объявлять частные методы, которые помогают совместно использовать общий код между неабстрактными методами.
● Методы фабрики коллекций Java Методы фабрики – это особый тип статических методов, которые используются для создания неизменяемых экземпляров коллекций. Это означает, что мы можем использовать эти методы для создания списка, набора и карты небольшого количества элементов. Он не поддается изменению, поэтому добавление нового элемента приведет к появлению java.lang. Исключение неподдерживаемой операции
● Улучшение API потока API Streams, возможно, является одним из лучших улучшений стандартной библиотеки Java за долгое время. В Java 9 улучшен API потока, и в интерфейс потока добавлены 4 новых метода: iterate(), dropWhile(), takeWhile(), ofNullable().
● Реактивные потоки Java SE 9 API реактивных потоков – это платформа публикации/подписки для реализации асинхронных, масштабируемых и параллельных приложений. Реактивные потоки – это асинхронная обработка потока, поэтому должны быть Издатель и Подписчик. Издатель публикует поток данных, а Подписчик потребляет эти данные.
● HTTP 2 Клиент В Java 9 появился новый способ выполнения HTTP-вызовов. Эта давно назревшая замена старому API HttpURLConnection также поддерживает WebSockets и протокол HTTP/2. Он поддерживает как синхронный (режим блокировки), так и асинхронный режимы.
● Сборщик мусора G1 Сборщик мусора “Мусор-первый”, он же G1, представляет собой параллельный многопоточный GC. В основном он работает вместе с потоками приложений (очень похоже на GC с одновременной разверткой меток) и предназначен для обеспечения более короткого и предсказуемого времени паузы при сохранении высокой пропускной способности.
° Другие новые функции -API для обхода стека -Фильтровать Входящие Данные Сериализации -Отказаться от API апплета -Отменить конкатенацию строк -Усовершенствованный Способ Обработки -Java API и сервис регистрации платформы -Компактные строки -API синтаксического анализа для Nashorn -Javadoc Поиск -HTML5 Явадок
Java 10 – это самый быстрый выпуск версии java за ее 23-летнюю историю. Java подвергалась критике за ее медленный рост и эволюцию, но Java 10 просто разрушила эту концепцию.
● Вывод типа локальной переменной Вывод типа локальной переменной – самая большая новая функция в Java 10 для разработчиков. Подобно Javascript, Kotlin и Scala, not Java также будет иметь ключевое слово very, которое позволяет объявлять локальную переменную без указания ее типа.
● Управление версиями выпуска на основе времени Начиная с выпуска JDK 10, Java приняла новый график выпуска нового выпуска каждые шесть месяцев. Существует много споров о том, является ли это практическим подходом или нет, крупные компании также оценили стабильность и низкие темпы изменений Java до сих пор.
Oracle отреагировала на эти проблемы и продолжает предлагать долгосрочные выпуски на регулярной основе, но также и с более длительными интервалами. И после Java 8, это Java 11, которая снова получит долгосрочную поддержку.
На самом деле поддержка Java 9 и Java 10 только что закончилась, так как Java 11 вышла.
● Класс приложения – Обмен данными Эта функция расширяет существующую функцию CDS, позволяя помещать классы приложений в общий архив, чтобы улучшить запуск и объем памяти.
Общая идея заключалась в том, что при первом запуске JVM все загруженное было сериализовано и сохранено в файле на диске, который можно было перезагрузить при будущих запусках JVM.
Это означало, что несколько экземпляров JVM совместно использовали метаданные класса, поэтому не нужно было загружать их все каждый раз.
● Параллельный полный GC для G1 Сборщик мусора G1 был установлен по умолчанию в JDK 9.Однако полный GC для G1 использовал однопоточный алгоритм marksweepcompact.
Это было изменено на параллельный алгоритм компактной разметки в Java 10, эффективно сокращающий время остановки во время полного GC.
Это изменение не улучшит производительность сборщика мусора в лучшем случае, но оно значительно снизит задержки в наихудшем случае.
● Интерфейс сборщика мусора Это еще одна интересная и полезная функция Java 10, которая улучшает изоляцию кода различных сборщиков мусора за счет введения общего интерфейса сборщика мусора.
Это поможет в будущем добавить новый GC без изменения существующей кодовой базы, а также поможет в удалении или обслуживании предыдущего GC.
● Корневые сертификаты С Java 10 Oracle имеет корневые сертификаты с открытым исходным кодом в Программа корневого центра сертификации Oracle Java SE для того, чтобы сделать сборки OpenJDK более привлекательными для разработчиков и уменьшить различия между этими сборками и сборками Oracle JDK.
● Поток-Локальные рукопожатия Это внутренняя функция JVM для повышения производительности. Эта функция предоставляет способ выполнения обратного вызова в потоках без выполнения глобальной точки безопасности виртуальной машины. Сделайте возможным и дешевым остановку отдельных потоков, а не только всех потоков или ни одного.
° Добавлены API -Интерфейсы Списка, Карты и Набора добавляются с помощью метода статической копии (Коллекции). Он возвращает неизменяемый список, карту или набор, содержащий предоставленные записи. Для Списка, если данный список впоследствии будет изменен, возвращенный список не будет отражать такие изменения.
-Необязательно и его примитивные вариации получают метод orElseThrow(). Это точно так же, как get(), однако javadoc утверждает, что это предпочтительная альтернатива, чем get().
-Класс Коллекционеров получает различные методы для сбора неизменяемых коллекций (Набор, Список, Карта).
Java 11 является вторым выпуском LTS после Java 8. Начиная с Java 11, Oracle JDK больше не будет бесплатным для коммерческого использования.
● Запуск Java-файла Мы можем избежать этапа компиляции. Мы можем выполнить компиляцию в одной команде. Мы используем команду java. Он будет неявно компилироваться без сохранения the.class файл.
● ° Строковые методы Java
2) lines(): возвращает ссылку на поток строк, которые являются подстроками, которые мы получили после разделения по строкам.
3) полоса(), начальная полоса() и завершающая полоса: удалите пробелы из начала, конца и примечания строки. Это “Юникод-ориентированная” эволюция trim();
4) repeat(): метод повторяет строку, для которой он вызывается, столько раз, сколько он получает.
● Использование var в лямбда-выражениях Начиная с Java 11, мы можем использовать ключевое слово var в лямбда-выражениях.
При использовании var в лямбда-выражении мы должны использовать его для всех параметров, и мы не можем смешивать его с использованием определенных типов.
● Управление Доступом На Основе Вложений До Java 11 Java позволяла классам и интерфейсам быть вложенными друг в друга. Эти вложенные типы имеют неограниченный доступ друг к другу, в том числе к закрытым полям, методам и конструкторам.
Начиная с Java 11, в классе class появились новые методы, которые помогают нам получать информацию о созданном гнезде. Эти методы включают следующее: Getnesthost() : Это возвращает узел гнезда гнезда, к которому принадлежит этот объект класса getNestMembers() : Это возвращает массив, содержащий объекты класса, представляющие всех членов гнезда, к которому принадлежит этот объект класса isNestemateOf() : Это определяет, является ли данный класс оценкой объекта этого класса
● Эпсилон: Сборщик Мусора Без Операций Начиная с Java 11, JVM имеет экспериментальную функцию, которая позволяет нам запускать JVM без какого-либо фактического восстановления памяти.
Цель состоит в том, чтобы обеспечить полностью пассивную реализацию сборщика мусора с ограниченным лимитом распределения и минимально возможной задержкой.
● Масштабируемый GC с низкой задержкой ZGC Начиная с Java 11, мы можем использовать ZGC. Этот новый GC доступен в качестве экспериментальной функции. ZGC – это масштабируемый сборщик мусора с низкой задержкой. Он выполняет дорогостоящую работу одновременно, не останавливая выполнение потоков приложений более чем на 10 мс.
● HTTP-клиент Начиная с Java 11, API HTTP-клиента более стандартизирован. Новый API поддерживает как HTTP/1.1, так и HTTP/2. Новый API также поддерживает веб-сайты HTML5.
● Чтение и запись файлов В Java 11 представлены два новых метода, которые значительно облегчают чтение и запись строк из файлов и в файлы: ReadString() , WriteString()
● Бортовой самописец Бортовой самописец, который ранее был коммерческим дополнением в Oracle JDK, теперь доступен с открытым исходным кодом, поскольку Oracle JDK сам по себе больше не является бесплатным.
JFR – это инструмент профилирования, используемый для сбора данных диагностики и профилирования из запущенного приложения Java.
Его накладные расходы на производительность незначительны и обычно составляют менее 1%. Следовательно, его можно использовать в производственных приложениях.
Java 12 была запущена 19 марта 2019 года, что является частью шестимесячного цикла выпуска. Это версия, не относящаяся к LTS. Следовательно, у него не будет долгосрочной поддержки.
● Изменения JVM – Шенандоа Сборщик мусора с низким временем паузы: Java 12 добавляет Шенандоа, экспериментальный алгоритм сбора мусора, для сокращения времени паузы сбора мусора за счет выполнения работ по эвакуации одновременно с запуском потоков Java.
-Быстрый возврат неиспользуемой выделенной памяти: G1 для автоматического возврата оперативной памяти Java в операционную систему в режиме ожидания. Эта память освобождается в разумные сроки при очень низкой активности приложений.
–Очаровательные смешанные коллекции для G1: Повышение эффективности G1 включает в себя возможность прерывания смешанных коллекций G1, если они могут превысить установленный целевой показатель паузы. Это делается путем разделения смешанного набора коллекций на обязательные и необязательные.
-Архивы компакт-дисков по умолчанию: Конечная цель состоит в том, чтобы улучшить процесс сборки JDK путем создания архива совместного использования данных классов (CDS). Среди целей этой функции: 1) Увеличить время запуска “из коробки”. 2) Избавьтесь от необходимости запускать -Xshare: дамп, чтобы извлечь выгоду из компакт-дисков.
● Переключать выражения Есть два основных изменения для переключения в Java с помощью этого JEP: 1) Введение синтаксиса case L ->, который устраняет необходимость в операторах break, поскольку выполняются только операторы рядом с ->. 2) переключатель может быть выражением, поэтому он может иметь значение или возвращать значение.
● Метод несоответствия файлов. В Java 12 добавлен следующий метод сравнения двух файлов:
Этот метод возвращает позицию первого несоответствия или -1L, если несоответствия нет.
● Форматирование компактных чисел Java 12 расширяет существующие API-интерфейсы форматирования чисел, обеспечивая поддержку форматирования компактных чисел с учетом локали. Теперь такие числа, как 1000 (например), могут быть отформатированы как “1K” (короткий стиль) или “1 тысяча” (длинный стиль).
● Подбирающие коллекционеры Teeing Collector – это новая утилита для сбора данных, представленная в API Streams. Этот коллектор имеет три аргумента – два коллектора и Би-функцию. Все входные значения передаются каждому коллектору, и результат доступен в Би-функции.
● Строки Java Новые методы
1) java.язык. Строка:
-отступ(int n): Регулирует отступ каждой строки этой строки на основе значения n и нормализует символы окончания строки.
-Если n > 0, то в начале каждой строки вставляется n пробелов (U+0020). –Если n < 0, то пробелы аптона удаляются из начала каждой строки. Если данная строка не содержит достаточного количества пробелов, то все начальные символы пробела удаляются. Символ табуляции также обрабатывается как один символ. -Если, то строка остается неизменной. Однако терминаторы строк по-прежнему нормализованы
– R преобразование(функция суперстрока,? расширяет R> f): Этот метод позволяет применить функцию к этой строке. суперстрока,? расширяет R> f): Этот метод позволяет применить функцию к этой строке.
2) API констант JVM:
Методы API констант не очень часто используются для обычных задач, связанных с разработкой.
-Необязательно опишите констебля (): Возвращает необязательный параметр, содержащий номинальный дескриптор для этого экземпляра, который является самим экземпляром.
-Строка resolveConstantDesc(обработчики методов. Поиск поиска): Разрешает этот экземпляр как константу Desc, результатом которой является сам экземпляр.
#Java 13 наиболее важных функций с примерами#
Java 13 была выпущена для производственного использования 17 сентября 2019 года. В Java 13 не так много функций, специфичных для разработчиков, из-за 6-месячного цикла выпуска.
● Переключать выражения Изначально мы видели выражения переключения в JDK 12. Выражения switch в Java 13 основаны на предыдущей версии, добавив новый оператор yield.
● Текстовые блоки Текстовые блоки для многострочных строк, таких как встроенные JSON, XML, HTML и т.д. Это позволяет нам легко создавать многострочные строки. Многострочная строка должна быть заключена в пару тройных двойных кавычек.
Ранее, чтобы встроить JSON в наш код, мы объявляли его как строковый литерал:
Теперь это полезно для простого создания строк HTML и JSON в нашей Java-программе:
Кроме того, java.lang. Строка теперь имеет три новых метода для работы с текстовыми блоками: 1) форматированный (объект… аргументы): это похоже на метод формат строки(). Он добавлен для поддержки форматирования с помощью текстовых блоков.
2) stripIndent(): используется для удаления случайных пробелов из начала и конца каждой строки в текстовом блоке. Этот метод используется текстовыми блоками и сохраняет относительный отступ содержимого.
3) перевести Escapes(): возвращает строку, значением которой является эта строка, с escape-последовательностями, переведенными как в строковом литерале.
● Динамический архив компакт-дисков Совместное использование данных классов (CDS) уже некоторое время является важной особенностью виртуальной машины Java HotSpot. Это позволяет совместно использовать метаданные класса между различными виртуальными машинами, чтобы сократить время запуска и объем памяти. Теперь создание архива компакт-дисков и его использование стало намного проще.
● ZGC: Незафиксированная Неиспользуемая Память Сборщик мусора Z был представлен в Java 11 как механизм сбора мусора с низкой задержкой. Это добавляет короткое время паузы перед очисткой памяти кучи. Но неиспользуемая память не возвращалась в операционную систему.
Начиная с Java 13, ZGC теперь возвращает незафиксированную память операционной системе по умолчанию.
● Метод filesystems.newFileSystem() Три новых метода были добавлены в класс FILESYSTEMS, чтобы упростить использование поставщиков файловых систем, которые обрабатывают содержимое файла как файловую систему: -newFileSystem(путь) –новая Файловая система (Путь, Карта) -Новая файловая система (Путь, Карта, загрузчик классов)
● Фабрики DOM и SAX с поддержкой пространства имен Появились новые методы создания экземпляров фабрик DOM и SAX с поддержкой пространства имен: -новый экземпляр по умолчанию() –новый экземпляр() –новый экземпляр(строка factoryClassName, загрузчик классов ClassLoader)
● Разные изменения Java 13 дала нам еще несколько заметных изменений: -java.time – добавлено новое официальное название японской эпохи -javax.crypto – поддержка MS криптографии следующего поколения (CNG) -javax.security – свойство jdk.sasl.Отключенные механизмы добавлены для отключения механизмов SASL -javax.xml.crypto – введены новые строковые константы для представления канонических URI XML 1.1 -javax.xml.анализаторы – добавлены новые методы для создания экземпляров фабрик DOM и SAX с поддержкой пространств имен -Поддержка Unicode обновлена до версии 12.1 -Добавлена поддержка канонизации основного имени Kerberos и межрелигиозных ссылок
В соответствии с традицией шестимесячного цикла, Java 14, еще одна версия, не относящаяся к LTS, планируется выпустить 17 марта 2020 года.
● Переключение выражений Переключение выражений после сохранения функции предварительного просмотра в последних двух выпусках – Java 12 и Java 13 наконец-то получили постоянный статус в Java 14.
● Сопоставление шаблонов для экземпляра/| Старый способ преобразования типа в другой тип – это:
Новый путь – это:
В приведенном выше коде экземпляр jd будет назначен только в том случае, если объект имеет тип Journaldev. Область действия переменной ограничена только условным блоком.
● Полезные исключения NullPointerExceptions Улучшение сообщения об исключении NullPointerExceptions, генерируемого JVM.
До Java 14:
Java 14 представила новую функцию JVM, которая дает лучшую информацию с помощью более описательного стека, как показано ниже:
● Записи Нам нужно написать много малоценного повторяющегося кода, чтобы ответственно написать простой класс носителей данных: конструкторы, средства доступа, equals(), hashCode(), toString() и т.д. Чтобы избежать этого повторяющегося кода, в Java планируется использовать record.
До Java 14:
После Java 14:
Кроме того, мы можем добавить дополнительные поля, методы и конструктор в запись следующим образом:
Несколько важных вещей, которые следует отметить о записях: -Запись не может ни расширять класс, ни быть расширена другим классом. Это заключительный урок. -Записи Может Реализовывать Интерфейсы. -Записи поддерживают несколько конструкторов. -Записи Разрешить Изменение Методов Доступа. – Записи не могут быть абстрактными. -Записи не могут расширять какой-либо другой класс и не могут определять поля экземпляра внутри тела. Поля экземпляра должны быть определены только в описании состояния. -Объявленные поля являются закрытыми и окончательными. -Тело записи допускает статические поля и методы.
● Текстовые блоки Текстовые блоки были введены в качестве функции предварительного просмотра в Java 13 с целью упрощения создания многострочных строковых литералов. Это полезно для простого создания строк запросов HTML и JSON или SQL.
В Java 14 текстовые блоки все еще находятся в предварительном просмотре с некоторыми новыми дополнениями: -Обратная косая черта для отображения красиво выглядящих многострочных блоков строк. -\s используется для учета завершающих пробелов, которые по умолчанию игнорируются компилятором. Он сохраняет все пространства, присутствующие перед ним.
● API доступа к внешней памяти Эффективный Java API должен быть представлен в Java 14 JDK, который позволяет приложениям Java безопасно и эффективно получать доступ к внешней памяти, хранящейся вне кучи Java. API доступа к внешней памяти представляет три основные абстракции: Сегмент памяти, Адрес памяти и Расположение памяти.
Java 15 (Java SE 15) и его набор для разработки Java 15 (JDK15) с открытым исходным кодом были выпущены 15 сентября 2020 года.
● Закрытые классы Запечатанные классы существуют в Kotlin уже некоторое время, и Java 15 наконец-то вводит эту функцию для лучшего контроля над наследованием. Класс может быть запечатан с помощью модификатора запечатан .
Таким образом, приведенный выше код означает, что только классам, определенным после ключевого слова разрешения , разрешается расширять класс запечатанного транспортного средства.
Каждый разрешенный класс должен быть задан с явным модификатором. Он может быть либо окончательным, либо запечатанным, либо не запечатанным: – Разрешенный подкласс, объявленный окончательным, не может быть расширен дальше. -Разрешенный подкласс, объявленный закрытым, может быть расширен дальше, но только за счет классов, разрешенных подклассом. -Разрешенный подкласс может быть объявлен непечатанным, может быть расширен любым классом. Суперкласс не может ограничивать подклассы, расположенные ниже по этой иерархии классов.
● Скрытые классы Хотя большинство разработчиков не получат от них прямой выгоды, любой, кто работает с динамическим байт-кодом или языками JVM, скорее всего, найдет их полезными.
Цель скрытых классов состоит в том, чтобы разрешить создание классов во время выполнения, которые невозможно обнаружить.
Такие классы, как эти, обычно имеют короткий жизненный цикл, и, следовательно, скрытые классы разработаны таким образом, чтобы быть эффективными как при загрузке, так и при выгрузке.
● API внешней памяти Доступ к внешней памяти уже является инкубационной функцией Java 14. В Java 15 цель состоит в том, чтобы продолжить его инкубационный статус, добавив несколько новых функций: -Новый API VarHandle для настройки дескрипторов доступа к памяти var -Поддержка параллельной обработки сегмента памяти с использованием интерфейса Spliterator -Расширенная поддержка сопоставленных сегментов памяти -Возможность манипулировать адресами и разыменовывать их, поступая от таких вещей, как собственные вызовы
● Сборщики мусора В Java 15 и ZGC, и Шенандоа больше не будут экспериментальными. Обе будут поддерживаться конфигурациями, которые команды могут выбрать для использования, в то время как сборщик G1 останется по умолчанию.
● Движок JavaScript Nashorn Следует отметить, что движок JavaScript Nashorn, первоначально представленный в Java 8, теперь удален. С недавним внедрением GraalVM и других технологий виртуальных машин стало ясно, что Нашорну больше нет места в экосистеме JDK.
В этой статье представлена эволюция Java от Java 8 до Java 15.
Java значительно эволюционировала как язык и как экосистема с тех пор, как Java 8 была выпущена более шести лет назад, добавив множество новых функций, которые помогают сделать Java конкурентоспособным вариантом по сравнению с другими конкурентами на основе JVM.
Оригинал: “https://dev.to/wejdi_gh/how-java-has-advanced-in-the-past-6-years-from-java-8-to-java-15-4gj3”