microJUG – Telegram
microJUG
979 subscribers
155 photos
1 video
2 files
237 links
Мысли о Java.
Основной канал: @miniJUG
Буст: https://news.1rj.ru/str/microJUG?boost
Чат: https://news.1rj.ru/str/micro_JUG
Таблица JEP'ов: https://minijug.org/jeps.html
Download Telegram
Кружка на работе. Как вам?
Как же хорошо, когда у тебя заботливые коллеги
Жалкая пародия / неповторимый оригинал
Какой оператор используете для XOR по boolean?
Anonymous Poll
40%
x ^ y
23%
x != y
36%
Никогда не задумывался
Ну что, как вам реклама в Телеграме? Спасибо хоть, что не казино Три Топора 🤣
Как подросла производительность сборщиков мусора с JDK 8 по JDK 17. Увеличилась пропускная способность, уменьшились паузы и уменьшилось потребление памяти (кроме ZGC). Поэтому, если вы тупо перейдёте на Java 17, даже без перекомпиляции, то автоматом всё станет быстрее.
Ссылка.
В Java 18 появился коммит, который убирает неявную ссылку из анонимного класса в соответствующий внешний класс, если внутренний класс его не использует. Это то, из-за чего раньше настоятельно рекомендовалось использовать лямбды вместо анонимных классов, потому что в лямбдах как раз эти ненужные ссылки не добавляются и объекты внешних классов очищаются вовремя. Теперь же анонимные классы и лямбды будут вести себя одинаково в этом плане. Правда пишут, что это изменение сломало некие тесты в JCK, но это пообещали исследовать и возможно коммит откатывать не придётся.
#java18
Что вы используете в продакшене? (для тех, кто всё ещё на Java 8, проголосуйте за 4-й вариант)
Final Results
48%
Готовый JDK
18%
Готовый JRE
1%
Собираем свой образ через jlink с нужными модулями
33%
Мы всё ещё на Java 8 (или старее)
YouTube-канал Java преодолел планку в 100 тысяч подписчиков. А вы подписаны?
microJUG
В Java 18 появился коммит, который убирает неявную ссылку из анонимного класса в соответствующий внешний класс, если внутренний класс его не использует. Это то, из-за чего раньше настоятельно рекомендовалось использовать лямбды вместо анонимных классов, потому…
Выбрасывание неявной ссылки на внешний класс уже попало в последнюю сборку JDK 18-ea+26. Откатывать, слава богу, ничего не будут. Я проверил, this$0 действительно исчезает, если анонимный класс не использует ссылку. Но есть один нюанс: если класс является Serializable и нету поля serialVersionUID, то ссылка остаётся :(. Например, в таком анонимном классе this$0 будет всё равно присутствовать:

new ArrayList<>() {
...
}

Сериализуемых классов в JDK весьма много. Например, практически все коллекции.

Так что новая оптимизация вылечит далеко не все случаи. А любителям double brace initialization придётся писать вот так, чтобы избежать ссылки:

var list = new ArrayList<>() {public static final long serialVersionUID = 1L;{
add(1); }};

#java18
👍1
Ну что, тестируем реакции в Телеге. Го в комменты 👇

А ещё тестим спойлеры
👍25🔥5😱4🎉3🤮3
😁6👍3😱2
Диаграмма зоопарка классов в проекте #Valhalla (источник).
😱11