Перечислю некоторые ключевые изменения:
- Компактные исходные файлы и instance-методы main(). То есть теперь можно писать без полного объявления класса и метода main
String greeting = "Hello, World!";
void main() {
System.out.println(greeting);
}
В таком случае виртуальная машина сама объявит неявный класс, в который поместит метод main() и другие верхнеуровневые объявления в файле.
- Module Import Declarations
Декларация "import module M" эквивалентна импорту всех экспортированных пакетов из модуля M и его транзитивных зависимостей в текущий модуль.
- Flexible Constructor Bodies
Flexible Constructor Bodies разрешают писать инструкции кода в конструкторе перед явным вызовом конструктора (super() или this())
- 32-битный x86 порт OpenJDK был окончательно удалён. Это означает, что из кодовой базы удалены части кода, отвечающие за 32 бит x86. Собрать JDK под эту платформу больше нельзя.
- Scoped Values
Класс ScopedValue позволяет обмениваться иммутабельными данными без их передачи через аргументы методов. Он является альтернативой существующему классу ThreadLocal.
Классы ThreadLocal и ScopedValue похожи тем, что решают одну и ту же задачу: передать значение переменной в рамках одного потока (или дерева потоков) из одного места в другое без использования явного параметра.
- Key Derivation Function API
Функции выведения ключа (KDF - Key Derivation Functions) могут использоваться для вывода криптографически сильных секретных ключей (например, AES) на основе материала ключа (например, пароля) и других данных (например, соли).
Основные изменения можно посмотреть здесь:
https://jdk.java.net/25/release-notes