Обзор перспектив Java на 2018 год: новые возможности и быстрое обновление

Какие новшества будут в Java в 2018 годуВ прошлом году язык программирования Java переживал довольно бурное развитие, так что происходит с Java в этом году, и что на горизонте? Давайте посмотрим на текущее состояние Java.

2017 год был неспокойным в мире Java. Долгожданный выпуск Java 9 принес много изменений и интересных новых функций, и Oracle объявила о новом графике выпуска для JDK.

И это было только начало. В прошлом разработчики часто жаловались, что Java не развивается достаточно быстро. Я не думаю, что вы услышите эти жалобы в ближайшем будущем. Все может быть совсем наоборот.

В 2018 году JDK будет следовать новому графику выпуска релизов. Вместо огромного кумулятивного выпуска каждые несколько лет вы будете получать меньшие обновления, но по шесть раз. Итак, после выпуска Java 9 в сентябре 2017 года Java 10 уже не за горами. Ее выход запланирован на март г. Но об этом чуть позже.

 

Обзор корпоративного стека

Большинство корпоративных проектов не используют только JDK. Они также полагаются на стек корпоративных библиотек, таких как Spring Boot или Java EE, которые также будут развиваться в течение следующих нескольких месяцев. В этом обзоре мы сосредоточимся в основном на JDK. Но вот краткий обзор того, что вы должны ожидать от двух основных корпоративных стеков в мире Java.

Команда разработчиков Spring работает над Spring Boot 2 и выпустила первый релиз-кандидат в январе. Команда не ожидает каких-либо крупных изменений API и не планирует добавлять какие-либо новые функции до окончательной версии. Итак, если вы используете Spring Boot в своих проектах, пришло время взглянуть на новую версию и запланировать обновления существующих приложений Spring Boot.

В конце 2017 года Oracle инициировала процесс передачи спецификации Java EE проекту EE4J, управляемому сообществом Eclipse. Как и ожидалось, такая передача - огромный проект, который не может быть завершен через несколько дней. Существует еще много организационной и технической работы, которая еще предстоит сделать. Java EE нуждается в новом имени и процессе разработки. И передача исходного кода, и всех артефактов, хранящихся в разных bug-трекерах, все еще продолжается. Нам придется подождать немного дольше, прежде чем мы сможем увидеть последствия передачи Java EE открытому сообществу.

 

Короткие циклы выпуска и поддержки JDK

Как было объявлено в прошлом году, Oracle выпустит две новые версии JDK в 2018 году. Вместо медленного цикла релиза, где каждые несколько лет выпускается новая крупная версия с большим количеством изменений, теперь мы получим более мелкий релизы каждые шесть месяцев. Это позволяет быстрее внедрять платформу Java. Это также снижает связанные риски обновления Java. Для разработчиков Java эти мелкие, но частые реизы, также значительно облегчат знакомство с последними изменениями и их применение к нашим проектам.

 

Мы ожидаем, что это будет очень позитивное изменение для Java-мира. Это добавит новую динамику в развитие языка Java и позволит команде JDK адаптироваться и внедрять новшества намного быстрее.

 

Изменения и новые возможности в JDK 10

Из-за короткого цикла релиза Java 10 вводит лишь небольшой набор изменений. Вы можете получить обзор включенных в настоящее время 12 улучшений (так называемых JEP - JDK Enhancement Proposal) на странице OpenJDK JDK10.

Наиболее заметным изменением, вероятно, является поддержка определения типов для локальных переменных (JEP 286). Вы также должны знать о новом механизме версионности, основанном на времени (JEP 322) и параллельной полной поддержке GC (сборщик мусора), добавленной в G1  - Garbage First (JEP 307).

 

Вывод типа (Type Inference)

JDK 10, наконец, представит вывод типа для языка Java. Большинство других статически типизированных языков поддерживали эту функцию уже довольно давно, и многие разработчики Java просили об этом.

В JEP 286 вводится ключевое слово var, которое сокращает объявление локальной переменной. Он сообщает компилятору вывести тип переменной из ее инициализатора. Итак, вместо:

List<String> paramNames = List.of("host.name", "host.port");
Configuration config = initializeConfig(paramNames);

 Вы теперь можете написать:

 
var paramNames = List.of("host.name", "host.port");
var config = initializeConfig(paramNames);

Как видно из фрагментов кода, ключевое слово var удаляет избыточность из объявления переменной. Это может сделать ваш код более удобным для чтения, особенно если вы используете хорошие имена переменных, и если это переменная, которую вы используете только несколько раз, сразу после того, как вы ее объявили.

какие новые изменения представит Oracle в Java в 2018 году 

Управление версиями по времени (Time-Based)

Начиная с Java 10, формат номера версии Java изменяется для улучшения поддержки модели выпуска релизов по времени.

Основная проблема новой модели  выпуска релизов по времени заключается в том, что содержание релиза может быть изменено на момент его выхода. Единственное, что определено в начале, это момент времени, когда будет выпущена новая версия. Если разработка новой функции займет больше времени, чем ожидалось, она не будет включена в этот новый релиз, как вы ожидали этого. Таким образом, номер версии очередного релиза представляет собой проход времени, а не характер включенных изменений.

JEP 322 определяет формат номера версии как $ FEATURE. $ INTERIM. $ UPDATE. $ PATCH и планирует использовать его следующим образом:

  • Каждые шесть месяцев команда разработчиков опубликует новый функциональный релиз и увеличит часть $ FEATURE номера версии.
  • Релиз, опубликованный в марте 2018 года, будет называться JDK 10, а в сентябре - JDK 11. Команда разработчиков заявляет в JEP 223, что они ожидают реализацию по крайней мере одной-двух значимых функций в каждом выпуске.
  • Число $ INTERIM сохраняется для гибкости и не будет использоваться в планируемой в настоящее время 6-месячной модели выпуска. Итак, на данный момент это всегда будет 0.
  • Обновления будут выпущены между функциональными релизами и не будут содержать каких-либо несовместимых изменений. Через месяц после выхода функционального релиза и после этого каждые три месяца часть $ UPDATE номера версии будет увеличена.

 

Параллельный полный GC в G1

Для большинства разработчиков это одно из небольших изменений. В зависимости от вашего приложения вы даже и совершенно не прочувствовать это новшество.

G1 стал сборщиком мусора по умолчанию в JDK 9. Его конструкция не соответствует полным сборщикам мусора, но это не значит, что он никогда им не станет. К сожалению, G1 использует только однопоточный алгоритм mark-sweep-compact (Mark: помечаются неиспользуемые объекты; Sweep»: эти объекты удаляются из памяти; Compact: объекты «уплотняются», занимая свободные слоты, что освобождает пространство на тот случай, если потребуется создать «большой» объект) для выполнения полной коллекции. Это может привести к снижению производительности по сравнению с ранее используемым параллельным коллектором.

JEP 307 решает эту проблему, предоставляя многопоточную реализацию алгоритма. Начиная с JDK 10, он будет использовать такое же количество потоков для полных коллекций, как и для молодых (young) и смешанных коллекций.

Итак, если ваше приложение заставляет сборщик мусора выполнять полные коллекции, JDK 10 может улучшить его производительность.

 

Планы на JDK 11

JDK 10 еще не выпущен, и осталось только семь месяцев до выпуска JDK 11. Поэтому неудивительно, что уже существует небольшой набор JEP-ов, запланированных для второго функционального релиза в 2018 году.

В дополнение к удалению устаревших модулей Java EE и CORBA (JEP 320) и нового сборщика мусора (JEP 318), JDK 11, скорее всего, представит динамические class-file (JEP 309) и поддержку ключевого слово var для неявно типизированных лямбда-выражений (JEP 323).

В настоящее время JDK 11 показывает преимущества более коротких циклов выпуска. В JEP 309 и 318 представлены новые функции, в то время как два других JEP используют итеративный подход для разработки существующих функций.

С выпуском JDK 9 в сентябре 2017 года модули Java EE и CORBA стали устаревшими. Через год с выпуском JDK 11 JEP 320 удалит их из JDK. Таким образом, вместо того, чтобы хранить их в течение нескольких лет, они будут удалены своевременно и предсказуемо.

И новшества JEP 323 являются логическим следующим шагом после того, как JEP 286 представил вывод типа для локальных переменных в JDK 10. Вы должны ожидать, что этот подход будет чаще встречаться в будущем. Короткие циклы выпуска новых релизов значительно упрощают выход огромного функционала в несколько логических шагов, распределенных по одному или нескольким функциональным релизам.

 

Короткие циклы поддержки требуют быстрого усыновления

Вместе с новой моделью выпуска Oracle также изменила свою модель поддержки. Новая модель различает краткосрочные и долгосрочные релизы.

Краткосрочные релизы, такие как Java 9 и 10, будут получать только общедоступные обновления, пока не будет опубликован следующий релиз. Таким образом, поддержка Java 9 заканчивается в марте 2018 года, а Java 10 не будет получать никаких официальных обновлений после сентября 2018 года.

Java 11 станет первой долгосрочной версией. Oracle хочет поддерживать ее релизы в течение более длительного периода. Но до сих пор они не объявляли, как долго они будут предоставлять официальные обновления для Java 11.

Как разработчику приложения, вам нужно будет решить, хотите ли вы обновлять свою версию Java каждые шесть месяцев или, если вы предпочитаете долгосрочный выпуск, каждые несколько лет. В дополнение к этому, Oracle призывает всех перейти на свой продукт Java SE Advanced. Он включает по меньшей мере пять лет поддержки для каждого долгосрочного релиза.

 

Выводы

В прошлом многие разработчики жаловались на медленную эволюцию языка Java. Этого больше не будет в текущем 2018 года. Новый шестимесячный цикл выпуска и адаптированная модель поддержки будут обеспечивать более быстрое обновление существующих приложений и регулярное внедрение новых функций. В сочетании с эволюцией существующих фреймворков, таких как Java EE или Spring, это добавит новую динамику в мир Java. И это также потребует сдвига мышления во всех компаниях, которые обычно обновляют свои приложения каждые несколько лет.

Вас заинтересует / Intresting for you:

Oracle сделает Java коммерческ...
Oracle сделает Java коммерческ... 3804 просмотров Дэн Tue, 21 Nov 2017, 13:33:37
США ищут любые способы для защ...
США ищут любые способы для защ... 61 просмотров bora Mon, 23 Sep 2019, 13:48:50
Битва гигантов: Google резко к...
Битва гигантов: Google резко к... 2968 просмотров Administrator Tue, 21 Nov 2017, 13:33:37
Переход в облако становится пр...
Переход в облако становится пр... 1594 просмотров Administrator Wed, 12 Sep 2018, 07:54:15

apv аватар
apv ответил в теме #8940 27 фев 2018 19:20
Type Inference - отличный шаг для сокращения многословности Java-кода. Спасибо за обзорчик!

Comments on Обзор перспектив Java на 2018 год: новые возможности и быстрое обновление

Будьте первым прокомментировавшим
Пожалуйста, авторизуйтесь, для комментирования