Встречаем Java 10 и разбираемся в главных нововведениях
Джависты, ликуйте: Java 10 уже здесь! Расскажем о важных новшествах, а также поделимся ссылками и другой полезной информацией.
Версии JDK выходят раз в полгода, и чтобы понять, что принесет нам десятая версия, давайте рассмотрим перечень нововведений.
☕ Подтянуть свои знания по Java вы можете на нашем телеграм-канале «Библиотека Java для собеса»
Саму Java 10 (JDK) вы можете скачать здесь.
Основные фичи Java 10
Хоть девятая версия и была выпущена всего шесть месяцев назад, нам обещают незабываемую десятую. Это обусловлено появлением новых функций. Среди самых интересных хочется выделить следующие:
- Вывод типа локальной переменной: улучшает язык Java, позволяя сократить объявление переменной до ключевого слова var.
- Parallel Full GC для G1: усовершенствованный сборщик мусора.
- Application Class-Data Sharing: ряд наработок, позволяющих классам приложений размещаться в одном архиве.
- Экспериментальный JIT-компилятор на базе Java: новый JIT-компилятор Java VM.
Подробнее обо всех JEP
Local-Variable Type Inference
(JEP 286) Можно не указывать тип локальной переменной. Ключевое слово var позаботится об этом:
var data = new ArrayList<String>();
Таким образом, устраняется ненужное дублирование, и код становится чище.
Консолидация леса JDK в единый репозиторий
(JEP 296) Объединение многочисленных репозиториев леса JDK в единый репозиторий, чтобы упростить разработку. К примеру, в Java 9 было 8 репозиториев. Среди них: root, hotspot, jaxp, jdk, langtools, corba, jaxws, nashorn. В Java 10 все объединено для упрощения и выполнения атомарных коммитов.
Garbage-Collector Interface
(JEP 304) Улучшает изоляцию исходного кода от разных сборщиков мусора, вводя чистый интерфейс сборщика мусора (GC). С таким нововведением появится возможность интегрировать альтернативные сборщики быстро и «безболезненно».
Parallel Full GC для G1
(JEP 307) Еще один апгрейд сборщика мусора. С ним G1 сможет производить сборку мусора сразу в нескольких потоках (подобно Parallel GC). Ранее это происходило строго в одном. Кроме того, параметр XX:ParallelGCThreads
позволит настраивать количество потоков.
🧩☕ Интересные задачи по Java для практики можно найти на нашем телеграм-канале «Библиотека задач по Java»
Application Class-Data Sharing
(JEP 310) Чтобы улучшить запуск и отслеживание, расширяется существующая функция разделения классов (CDS), позволяя классам приложений размещаться в общем архиве.
Class-Data Sharing работает с файлами *class. Основные функции – выборка классов, их обработка и сжатие в архив. Так и память экономится, и сокращается время загрузки программ. Разница в том, что раньше все ограничивалось одним загрузчиком bootstrap, а в Java 10 появится возможность загружать архивы с прочими загрузчиками и классами.
Thread-Local Handshakes
(JEP 312) Способ выполнения обратного вызова по Threads без выполнения глобальной точки безопасности VM. Делает возможной и не затратной остановку отдельных потоков вместо всех сразу или вообще ни одного.
Remove the Native-Header Generation Tool
(JEP 313) Инструмент javah, отвечающий за генерацию JNI-headers, если есть методы native, будет удален из JDK. Это вполне обоснованно, так как ту же функцию выполняет оптимизирующий компилятор javac, начиная с Java 8. К слову, сейчас ведется работа над проектом Panama, который способен заменить JNI.
Additional Unicode Language-Tag Extensions
(JEP 314) Улучшает java.util.Locale и связанные с ним API, чтобы реализовать дополнительные расширения тегов Unicode языка BCP-47. Смогут поддерживаться теги для часового пояса, региона, первого дня недели и типа валюты.
Heap Allocation on Alternative Memory Devices
(JEP 316) Распределение кучи на альтернативных запоминающих устройствах: позволяет виртуальной JVM выделять кучу (heap) и размещать ее в прочих типах памяти (например, на альтернативном запоминающем устройстве NV-DIMM, указанном пользователем).
Experimental Java-Based JIT Compiler
(JEP 317) Экспериментальный JIT-компилятор на базе Java: как уже было сказано, это новый JIT-компилятор JVM.
Чтобы скомпилировать код на Java, используется javac. Благодаря ему программа преобразовывается в набор файлов с байт-кодами. Также в JVM есть встроенный компилятор, который тоже создает для процессора инструкции из байт-кода (runtime conpilation – компиляция в процессе запуска). Зачастую такой компиляции подвергается наиболее часто используемый код (для улучшения производительности).
Проект Graal – новый JIT-компилятор, который подарит JVM лучшую производительность, чем это было в старой версии, написанной на C++ (согласно проекту Metropolis, большую часть JVM перепишут на Java).
Root Certificates
(JEP 319) Предоставляет набор стандартных сертификатов центра сертификации (Certification Authority) по умолчанию в JDK. Это значит, что некоторые компоненты в сборках OpenJDK, такие как компоненты обеспечения безопасности, начнут работать по умолчанию.
Time-Based Release Versioning
(JEP 322) Предполагает, что для Java 10 в Update Releases будут устраняться ошибки, а в Feature Releases добавят новые фишки. Грубо говоря, это уберет странности с версиями, начиная с Java 9, когда первое обновление обозначили как JDK 9.0.1, а второе – как JDK 9.0.4. Остается загадкой, куда делись 9.0.2 и 9.0.3.
Новый формат версий будет выглядеть следующим образом:
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*