admin 24 марта 2018

Встречаем Java 10 и разбираемся в главных нововведениях

Джависты, ликуйте: Java 10 уже здесь! Расскажем о важных новшествах, а также поделимся ссылками и другой полезной информацией.

Версии JDK выходят раз в полгода, и чтобы понять, что принесет нам десятая версия, давайте рассмотрим перечень нововведений.

☕ Подтянуть свои знания по Java вы можете на нашем телеграм-канале «Библиотека Java для собеса»


Встречаем Java 10 и разбираемся в главных нововведениях

Саму Java 10 (JDK) вы можете скачать здесь.

Основные фичи Java 10

Хоть девятая версия и была выпущена всего шесть месяцев назад, нам обещают незабываемую десятую. Это обусловлено появлением новых функций. Среди самых интересных хочется выделить следующие:

  1. Вывод типа локальной переменной: улучшает язык Java, позволяя сократить объявление переменной до ключевого слова var.
  2. Parallel Full GC для G1: усовершенствованный сборщик мусора.
  3. Application Class-Data Sharing: ряд наработок, позволяющих классам приложений размещаться в одном архиве.
  4. Экспериментальный 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]*)*

Вас также могут заинтересовать другие статьи по теме:

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
DevOps
Санкт-Петербург, от 150000 RUB до 400000 RUB
Продуктовый аналитик в поддержку
по итогам собеседования
Аналитик данных
Екатеринбург, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ