После шести месяцев разработки компания Oracle выпустила платформу Java SE 13 (Java Platform, Standard Edition 13), в качестве эталонной реализации которой используется открытый проект OpenJDK. В Java SE 13 сохранена обратная совместимость с прошлыми выпусками платформы Java, все ранее написанные Java-проекты без изменений будут работоспособны при запуске под управлением новой версии. Готовые для установки сборки Java SE 13 (JDK, JRE и Server JRE) подготовлены для Linux (x86_64), Solaris, Windows и macOS. Разработанная в рамках проекта OpenJDK эталонная реализация Java 13 полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с коммерческими продуктами.
Java SE 13 отнесён к категории выпусков с обычным сроком поддержки, обновления для которого будут выпускаться до следующего релиза. В качестве ветки с длительным сроком поддержки (LTS) следует использовать Java SE 11, обновления для которого будут выпускаться до 2026 года. Прошлая LTS-ветка Java 8 будет поддерживаться до декабря 2020 года. Следующий LTS-релиз намечен на сентябрь 2021 года. Напомним, что начиная с выпуска Java 10 проект перешёл на новый процесс разработки, подразумевающий более короткий цикл формирования новых релизов. Новая функциональность теперь развивается в одной постоянно обновляемой master-ветке, в которую включаются уже готовые изменения и от которой раз в шесть месяцев ответвляются ветки для стабилизации новых выпусков. На март следующего года запланирован выпуск Java 14, предварительные сборки которого уже доступны для тестирования.
Из новшеств Java 13 можно отметить:
- Добавлена поддержка динамического дополнения архивов CDS (Class-Data Sharing), обеспечивающих совместный доступ приложений к общим классам. При помощи CDS общие классы могут размещаться в отдельном совместно используемом архиве, что позволяет ускорить запуск приложений и снизить накладные расходы. В новой версии добавлены средства для динамического архивирования классов после окончания выполнения приложения. Помещённые в архив классы включают все загруженные в процессе работы программы классы и сопутствующие библиотеки, которые отсутствовали в изначально предоставленном базовом CDS-архиве;
- В сборщик мусора ZGC (Z Garbage Collector) добавлена поддержка возвращения неиспользуемой памяти операционной системе;
- Задействована переработанная реализация API Legacy Socket (java.net.Socket и java.net.ServerSocket), которая проще в сопровождении и отладке. Кроме того, предложенную реализацию проще будет адаптировать для работы с новой системой потоков в пространстве пользователя (fibers), развиваемых в рамках проекта Loom;
- Продолжено развитие новой формы выражений «switch». Добавлена экспериментальная (Preview) возможность использования «switch» в форме не только оператора, но и как выражения. Например, теперь можно использовать конструкции вида:
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};или
System.out.println(
switch (k) {
case 1 -> «one»
case 2 -> «two»
default -> «many»
}
);В будущем на базе данной возможности планируется реализовать поддержку сопоставления по шаблонам;
- Добавлена экспериментальная поддержка текстовых блоков — новой формы строковых литералов, позволяющих включать в исходный код многострочные текстовые данные без применения в них экранирования символов и сохраняя исходное форматирования текста в блоке. Обрамление блока осуществляется тремя двойными кавычками. Например, вместо выражения
String query = «SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n» +
«WHERE `CITY` = ‘INDIANAPOLIS’\n» +
«ORDER BY `EMP_ID`, `LAST_NAME`;\n»;теперь можно применять конструкцию:
String query = «»»
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = ‘INDIANAPOLIS’
ORDER BY `EMP_ID`, `LAST_NAME`;
«»»; - Закрыто 2126 отчётов об ошибках, из которых 1454 устранены сотрудниками Oracle, а 671 сторонними участниками, из которых шестая часть изменений внесена независимыми разработчиками, а остальное представителями таких компаний, как IBM, Red Hat, Google, Loongson, Huawei, ARM и SAP.