Хабрахабр

Только что вышла Java 13. ZGC начал делиться памятью, CDS сам запоминает классы, и другие чудеса техники

Гонка началась с весеннего выпуска JDK 12, состоявшегося 19 марта, а форк от основной ветки произошел 13 июня. Сегодня вышла новая версия джавы — Java/JDK 13. Кого-то мы там по пути потеряли вроде JEP 343: Packaging Tool, но в целом всё норм, и пора пожинать плоды.

Под катом будет небольшой обзор свежих JEP-ов, вошедших в этот выпуск. Скачать новый релиз можно по ссылке.

Ну или по крайней мере, такова идея. Как вы знаете, в JDK 11 у нас появился новый блестящий GC — ZGC, масштабируемый, быстрый и низкопаузный. Shenandoah и G1 давным-давно начали делиться, и поведение ZGC выглядело преступно нерукопожатно. Довольно серьезной проблемой в нем было то, что он вел себя как собака на сене и не отдавал занятую память, даже если она оказалась не нужна. Ну что ж, теперь всё починено, сразу после таймаута в -XX:ZUncommitDelay мы получаем свои байтики назад.

К сожалению, раньше было как-то немного тупо, что нужно самому многократно перезапускать приложение, формируя список таких классов, а потом еще и руками дампить по этому списку. Сама фича CDS позволяет складывать загружаемые классы в общий архив, тем самым ускоряя запуск и уменьшая количество растрачиваемой оперативной памяти. Теперь работают роботы, а не человек: когда выставлена опция -XX:ArchiveClassesAtExit, классы сбрасываются в архив автоматически после нормальной остановки приложения.


Stuart Marks — Doctor Deprecator, Consulting Member Of Technical Staff at Oracle + olegchir на Oracle Code One, считаные минуты после анонса Java 13

Socket и java.net. Во всех (уже устаревших теперь) джавах, net. Проблему решили тем, что написали свежую реализацию, использующую ту же внутреннюю инфраструктуру, что и NIO, поэтому ей почти не нужно своего нативного кода. ServerSocket основываются на адской смеси Java и C-кода, от вида которого плачут даже самые закаленные теоретики перформанса. Если интересно под капотом, то смотреть нужно класс NioSocketImpl. Ну и еще, это не легаси, написали всё красиво и пригодно к переезду на файберы из проекта Loom.

Switch Expressions — это первью-фича, позволяющая писать код вида: Продолжаем готовиться к приходу паттерн-матчинга.

int j = switch (day)
};

Как видим в примере, со времен JDK 12 у нас есть одно косметическое изменение: break поменяли на yield, теперь всё как у всех нормальных людей.

«Передайте товарищу Сталину — произошла чудовищная ошибка». JEP 326: Raw String Literals отправился под нож, но дело его живёт! Текстовые блоки — это новая превью-фича, которая позволяет обходиться без экранирования, она сама форматирует строки удобным образом, варит кофе с пенкой и чудесным образом даёт контроль над форматом получившейся строки.

Более приземлённо, теперь любой похапэшник без необходимости изучать JSP может написать что-то вроде:

String html = """ <html> <body> <p>Hello, world</p> </body> </html> """;

А начинающий DBA сможет строить карьеру, начав со следующего кода:

String query = """ SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = 'NEW DEHLI' ORDER BY `EMP_ID`, `LAST_NAME`; """;


Звучит немного угрожающе

Настоящий полный обзор должен включать ещё и всестороннее рассмотрение интересных тактических нововведений и обзор багов в багтрекере. Обзор JEP-ов — малая часть того, что можно и нужно рассказать про новую Java. Мы с командой сейчас находимся на Oracle Code One — к сожалению, сидя на докладах или опершись о стенд Liberica JDK — довольно сложно написать что-то настолько длинное. Возможно, кто-то (lany, ау!) сможет продолжить эту работу. В любом случае, это тема для совсем другого хабрапоста.


Брайан Гёц — Architect for the Java Language at Oracle + olegchir на Oracle Code One

Билеты, как всегда, можно приобрести на официальном сайте. А ещё у нас есть конференция Joker, на которой можно обсудить нужность перехода на Java 13, сроки перехода на ZGC, объемы запасов попкорна, необходимых после введения Text Blocks и другие актуальные вопросы.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть