Хабрахабр

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

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

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

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

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

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

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

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

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

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

230: Microbenchmark Suite

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

325: Switch Expressions (Preview)

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

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

334: JVM Constants API

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

340: One AArch64 Port, Not Two

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

341: Default CDS Archives

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

344: Abortable Mixed Collections for G1

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

346: Promptly Return Unused Committed Memory from G1

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

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

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

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

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

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

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

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