Только что на сайте Oracle стала доступна для скачивания новая, десятая версия Java SE. Java 10 – это первая версия Java, вышедшая в соответствии с новым полугодовым релизным циклом, т.е. не через несколько лет после выхода Java 9, а всего через полгода. Это значит, что в Java 10 не так много изменений по сравнению с Java 9, чем в Java 9 по сравнению с Java 8 (12 JEP'ов в Java 10 против 99 в Java 9).
Вот список главных изменений в Java 10:
- JEP 286: Local-Variable Type Inference. Теперь можно не писать тип локальных переменных, а вместо этого использовать ключевое слово
var
. - JEP 307: Parallel Full GC for G1. G1, который стал сборщиком мусора по умолчанию начиная с Java 9, теперь поддерживает параллельную полную сборку мусора. До этого полная сборка мусора была однопоточной.
- JEP 310: Application Class-Data Sharing. Class-Data Sharing теперь поддерживает не только системные классы, но и классы приложения.
- JEP 313: Remove the Native-Header Generation Tool. Утилита
javah
для генерации нативных заголовков была удалена. Вместо неё нужно использовать javac. - JEP 317: Experimental Java-Based JIT Compiler. Теперь в Java есть новый экспериментальный JIT-компилятор Graal, написанный полностью на Java. Graal использует интерфейс компилятора JVM (JVMCI), который появился в Java 9. Graal уже был включён в Java 9, но только на Linux. Теперь же он есть на всех платформах.
- JEP 322: Time-Based Release Versioning. Java 10 теперь будет использовать новую схему версионирования, которая очень близка к предыдущей схеме, специфицированной в JEP 223, но с небольшими различиями, которые упрощают версионирование при новом релизном цикле.
Также список JEP-ов, которые носят более технический характер:
- JEP 296: Consolidate the JDK Forest into a Single Repository
- JEP 304: Garbage Collector Interface
- JEP 312: Thread-Local Handshakes
- JEP 314: Additional Unicode Language-Tag Extensions
- JEP 316: Heap Allocation on Alternative Memory Devices
- JEP 319: Root Certificates
Список наиболее значимых изменений в API:
- Новые методы
List.copyOf()
,Set.copyOf()
иMap.copyOf()
. - Новые методы
Collectors.toUnmodifiableList()
,Collectors.toUnmodifiableSet()
,Collectors.toUnmodifiableMap()
. - Новый метод
Optional.orElseThrow()
, который делает то же самое, что иOptional.get()
, но который более точно отражает его суть. - Новые методы в
JarFile
иJarEntry
, упрощающие работу с мультирелизными JAR-файлами. - Новый метод
Reader.transferTo(Writer)
. - Новый конструктор
PrintWriter
, который принимаетCharset
.
Важно знать, что Java 10 не является LTS-релизом. Это означает, что у него выйдет всего два обновления 10.0.1 и 10.0.2, а потом для обновления ничего не останется, кроме как перейти на Java 11. Кроме того, Java 10 будет последней бесплатной версией Oracle JDK. Следующая версия Oracle JDK будет доступна только за деньги, а бесплатно можно будет скачать только OpenJDK.