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

в 17:46, , рубрики: java, java 13, JDK, jdk 13, joker, joker 2019, jokerconf, jokerconf 2019, Компиляторы, Программирование

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

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

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

JEP 351: ZGC: Uncommit Unused Memory

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

JEP 350: Dynamic CDS Archives

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

JEP 353: Reimplement the Legacy Socket API

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

JEP 354: Switch Expressions

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

int j = switch (day) {
    case MONDAY  -> 0;
    case TUESDAY -> 1;
    default      -> {
        int k = day.toString().length();
        int result = f(k);
        yield result;
    }
};

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

JEP 355: Text Blocks

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

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

String html = "<html>n" +
              "    <body>n" +
              "        <p>Hello, PHP!</p>n" +
              "    </body>n" +
              "</html>n";

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

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

Предупреждение

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

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

Автор: olegchir

Источник


* - обязательные к заполнению поля