- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

JEP 351: ZGC: Uncommit Unused Memory [3]

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

JEP 350: Dynamic CDS Archives [4]

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

JEP 353: Reimplement the Legacy Socket API [5]

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

JEP 354: Switch Expressions [6]

Продолжаем готовиться к приходу паттерн-матчинга. 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 [7]

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

Более приземлённо, теперь любой похапэшник без необходимости изучать 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 [9], ау!) сможет продолжить эту работу. Мы с командой сейчас находимся на Oracle Code One — к сожалению, сидя на докладах или опершись о стенд Liberica JDK — довольно сложно написать что-то настолько длинное. В любом случае, это тема для совсем другого хабрапоста.

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

Автор: olegchir

Источник [11]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/330357

Ссылки в тексте:

[1] JEP 343: Packaging Tool: https://openjdk.java.net/jeps/343

[2] по ссылке: https://jdk.java.net/13/

[3] JEP 351: ZGC: Uncommit Unused Memory: https://openjdk.java.net/jeps/351

[4] JEP 350: Dynamic CDS Archives: https://openjdk.java.net/jeps/350

[5] JEP 353: Reimplement the Legacy Socket API: https://openjdk.java.net/jeps/353

[6] JEP 354: Switch Expressions: https://openjdk.java.net/jeps/354

[7] JEP 355: Text Blocks: https://openjdk.java.net/jeps/355

[8] JEP 326: Raw String Literals: https://openjdk.java.net/jeps/326

[9] lany: https://habr.com/ru/users/lany/

[10] на официальном сайте: https://jokerconf.com/registration/?utm_source=habr&utm_medium=467789&utm_campaign=joker2019

[11] Источник: https://habr.com/ru/post/467789/?utm_campaign=467789&utm_source=habrahabr&utm_medium=rss