будет завтра. А сегодня - краткий обзор фич новой версии.
Пропущу JEP в статусе Preview, хотя среди них много интересных вроде Stable Values или Structured Concurrency. Расскажу только о новшествах, которые обрели финальную форму.
🍑 JEP 519: Compact Object Headers
Самая полезная фича в новом релизе. В чем суть. У каждого объекта есть заголовок, в котором хранится служебная информация для JVM.
В Java 25 размер заголовка сократился с 12 байт до 8.
Вроде немного, но в одном бенчмарке это сэкономило аж 22% памяти и 8% CPU. В реальных приложениях результат будет скромнее, но всё равно приятно.
Включается флажком -XX:+UseCompactObjectHeaders, по умолчанию Compact Headers выключены.
Следующие 2 фичи вряд ли потребуются каждый день, но знать о них стоит.
🍑 JEP 513: Flexible Constructor Bodies
Писала о них отдельный пост, поэтому кратко - в конструкторах перед вызовом super можно добавить проверки аргументов:
class Employee extends Person {
Employee(int age) {
if (age < 18)
throw new IllegalArgumentException(...);
super(age);
}
}🍑 JEP 506: Scoped Values
ScopedValue - новый класс, чтобы передавать служебные данные между методами без явной передачи через параметры.
Традиционно для этих целей используется ThreadLocal. Яркий пример - SecurityContext из Spring Security. Мы не тащим SecurityContext в каждый метод, но информация о текущем пользователе всегда под рукой.
Scoped Value - это ThreadLocal Premium:
👑 Доступен только в пределах заданной области
👑 Значение неизменяемое
👑 Автоматически удаляется после использования
👑 Совместим с виртуальными потоками
Остальные фичи довольно специфичны, опишу их кратко
🍑 JEP 510: Key Derivation Function API
Квантовые компьютеры активно развиваются, они очень мощные и будут щёлкать текущие алгоритмы как орешки. Этот JEP - часть работ по внедрению в джаву Post-Quantum Cryptography - новых алгоритмов безопасности.
🍑 JEP 511: Импорт модулей
Вместо
import java.util.*;
import java.util.function.*;
import java.util.stream.*;
Можно написать короче:
import module java.base;
Любая IDE управляет импортами за нас, поэтому полезность фичи под вопросом. Возможно, разработчики джавы не вспомнили названия модулей, когда подтверждали свои навыки на HH. Но это не точно.
🍑 JEP 503: Remove the 32-bit x86 Port
Не учитывать в дальнейшей разработке 32х-битные процессоры
🍑 JEP 512: Compact Source Files and Instance Main Methods
Более короткий Hello World:
void main() {
IO.println("Hello, World!");
}🍑 JEP 520: JFR Method Timing & Tracing, JEP 515: Ahead-of-Time Method Profiling, JEP 520: JFR Method Timing & Tracing
Профайлинг стал точнее и стартует чуть быстрее.
🍑 JEP 521: Generational Shenandoah
Сборщик мусора Shenandoah теперь делит объекты на старые и новые, раньше это была экспериментальная фича.
Такой вот релиз будет завтра✨