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

Релиз-кандидат JDK 12: Shenandoah, G1, JMH, Arm64. Баги в Swing наносят ответный удар

240 дней прошло с момента выпуска JEP 3: JDK Release Process [1], и адская машина по производству новых версий останавливаться не желает. А значит, настало время очередного релиз-кандидата [2]. Это период, когда все мосты сожжены, баги с приоритетами P2-P5 уже ничего не значат, и дни до релиза сочтены.

Релиз-кандидат JDK 12: Shenandoah, G1, JMH, Arm64. Баги в Swing наносят ответный удар - 1

Баги

Не все баги с приоритетом P1 закрыты. Ознакомиться с полным списком проблем можно в багтрекере [3]. И тут нас ожидает самое странное: все они относятся строго к Swing при использовании GTKLookAndFeel.

Уже мысленно сказали: «Да что с этими ребятами в Свинге не так?». На этот раз «виноваты» не они. Если кто вдруг не знает, Gtk — это свободный тулкит для разработки графических интерфейсов, особенно на операционной системе GNU/Linux для X11 и Wayland.

Начиная с Gtk 3.20 у них поменялся способ [8] работы со многими стилями и виджетами. Вместо классов стилей и имен типов теперь используются имена элементов. Gtk 3.20 вышел 21 марта 2016 [9] года, и это был очень масштабный [10] релиз — 28933 коммита и Wayland по умолчанию. Вообще, весь Gnome стал выглядеть слегка по-другому.

Релиз-кандидат JDK 12: Shenandoah, G1, JMH, Arm64. Баги в Swing наносят ответный удар - 2

Неудивительно, что в Swing могли кое-что забыть и не протестировать. Часть багов сдвинули в приоритете на P2 и перенесли на JDK 13. Например, вот этот баг про то [11], что Motif в MacOS, как бы помягче сказать, более не является столь актуальной графической средой:

Релиз-кандидат JDK 12: Shenandoah, G1, JMH, Arm64. Баги в Swing наносят ответный удар - 3

Будет забавно, если на Хабре кто-то действительно всё ещё использует Motif и AWT. Надеюсь, двенадцатый JDK не отменят из-за этого, иначе это будет самый эпический фейл в джаве за всю её молодую новую релизную историю.

Фичи

JEP-ы в этом списке будут перечислены не по важности, а исключительно по порядковому номеру. Это чтобы вы вдруг не подумали, что Шенанда и JMH попали наверх из-за личных симпатий.

189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) [12]

Неплохо бы, чтобы оно произошло ещё год назад, и Шенанда попала в LTS. Ладно, дождались — и на том спасибо. Shenandoah — это низкопаузный коллектор, добивающийся своей низкопаузности за счёт многопоточной фазы эвакуации. Причем паузы не зависят от размера хипа, поэтому можно смело ворочить терабайтными хипами на проде.

230: Microbenchmark Suite [13]

В JDK добавляется набор тестов, основанный на JMH, да и сам JMH тоже. Лежит в jdk/jdk/test/micro/org/openjdk/bench. JMH — это фреймворк для создания, сборки, запуска и анализа микробенчмарков для Java и других JVM-языков, написанный сами понимаете кем [14]. JMH сейчас де-факто является стандартом для микробенчмарков, и появление подобных JEP-ов — вопрос времени.

325: Switch Expressions (Preview) [15]

Вместо тысячи описаний:

int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};

334: JVM Constants API [16]

Цель в том, чтобы предоставить набор типов для формального моделирования описаний классов, методов и других сущностей в рантайме и классфайле и натянуть их на основные классы вроде String или Class. Они живут в пакетах вроде java.lang.invoke.constant и есть не просят, а на сам патч можно взглянуть здесь [17].

340: One AArch64 Port, Not Two [18]

Старый порт arm64 выброшен на мороз, а вот 32-битный ARM и aarch64 — активно пилятся. За существование этих портов нужно благодарить в том числе компании RedHat и BellSoft [19] (кстати, офис BellSoft расположен в Питере, рядом с бывшим офисом компании Oracle). К релизу JDK 12 мы постараемся получить от представителей компании более развёрнутый комментарий.

341: Default CDS Archives [20]

Как фича CDS нам был давно доступен, но было непонятно, зачем каждый раз самостоятельно писать -Xshare:dump, если дефолтный результат выполнения этой команды немножко предсказуем ещё на этапе создания дистрибутива JDK. Эту досадную оплошность починят в JDK 12, архив CDS будет генериться создателями дистрибутива, даже для ночных билдов (при условии что они 64-битные и нативные, не для кросс-компиляции).

344: Abortable Mixed Collections for G1 [21]

Эта фича нужна внутренним механизмам сборщика мусора G1, чтобы он чаще укладывался в требования по продолжительности паузы. Бывает так, что можно определить, когда G1 раз за разом неправильно оценивает сложность сборки, особенно для старых регионов. В этот момент можно испугаться и начать собирать инкрементально, шаг за шагом, и после каждого шага иметь возможность сборку прервать. Утверждается, что это позволит лучше укладываться в ожидаемое время сборки.

346: Promptly Return Unused Committed Memory from G1 [22]

Сейчас G1 отдаёт commited-память операционной системе или при full GC, или при параллельной сборке. И то и другое G1 всячески пытается избежать, за что ему спасибо. Но это же означает, что память пожирается как не в себя, и заставить G1 исторгнуть память обратно можно только каким-то внешним способом. Особенно это печально для всяких докеров и прочих хипстеров без терабайтов оперативной памяти на сервере. Вместо этого предлагается делать так же, как уже умеет Шенанда или GenCon из OpenJ9 — определять недостаточную утилизацию хипа и, соответственно, уменьшать его использование. На каких-то тестах на Томкате это позволило уменьшить расход памяти почти в два раза.

Выводы

Это был обзор по верхам, а подробный разбор фич постараемся сделать ближе к релизу в виде отдельных статей — переводов JEP-ов, скринкастов с бенчмарками или ещё чего-то такого. Теперь надо ждать релиза, который намечен на 19 марта.

Минутка рекламы. Совсем скоро, 5-6 апреля, пройдёт конференция JPoint, на которой соберётся огромное количество людей, знающих толк в JDK и всевозможных новых фичах. Например, точно будет Саймон Риттер из Азула с докладом «JDK 12: Pitfalls for the unwary» [23]. Самое правильное место, чтобы обсудить свежий релиз! Подробней о JPoint можно узнать на официальном сайте [24].

Автор: Олег Чирухин

Источник [25]


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

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

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

[1] JEP 3: JDK Release Process: http://openjdk.java.net/jeps/3

[2] время очередного релиз-кандидата: https://mail.openjdk.java.net/pipermail/jdk-dev/2019-February/002583.html

[3] в багтрекере: https://bugs.openjdk.java.net/browse/JDK-8218469?filter=33410

[4] JScrollBar display issue with GTKLookAndFeel: https://bugs.openjdk.java.net/browse/JDK-8218470?filter=33410

[5] JProgressBar display issue with GTKLookAndFeel: https://bugs.openjdk.java.net/browse/JDK-8218472?filter=33410

[6] JOptionPane display issue with GTKLookAndFeel: https://bugs.openjdk.java.net/browse/JDK-8218473?filter=33410

[7] JTextPane display issue with GTKLookAndFeel: https://bugs.openjdk.java.net/browse/JDK-8218479?filter=33410

[8] поменялся способ: https://developer.gnome.org/gtk3/stable/ch32s10.html

[9] 21 марта 2016: https://github.com/GNOME/gtk/releases?after=3.20.0

[10] масштабный: https://help.gnome.org/misc/release-notes/3.20/

[11] вот этот баг про то: https://bugs.openjdk.java.net/browse/JDK-8177960

[12] Shenandoah: A Low-Pause-Time Garbage Collector (Experimental): http://openjdk.java.net/jeps/189

[13] Microbenchmark Suite: http://openjdk.java.net/jeps/230

[14] сами понимаете кем: https://shipilev.net/

[15] 325: Switch Expressions (Preview): http://openjdk.java.net/jeps/325

[16] JVM Constants API: http://openjdk.java.net/jeps/334

[17] взглянуть здесь: http://cr.openjdk.java.net/~vromero/constant.api/webrev.04/constants.api.patch

[18] One AArch64 Port, Not Two: http://openjdk.java.net/jeps/340

[19] BellSoft: http://bell-sw.com

[20] Default CDS Archives: http://openjdk.java.net/jeps/341

[21] Abortable Mixed Collections for G1: http://openjdk.java.net/jeps/344

[22] Promptly Return Unused Committed Memory from G1: http://openjdk.java.net/jeps/346

[23] «JDK 12: Pitfalls for the unwary»: https://jpoint.ru/talks/35kmzgw4ds3gyt849hbaeo/?utm_source=habr&utm_medium=440314

[24] официальном сайте: https://jpoint.ru/?utm_source=habr&utm_medium=440314

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