JAVA 9. Что нового?

    Java — удивительно универсальный язык программирования. На сегодняшний день насчитывается около 6.5 млн разработчиков Java по всему миру. И все благодаря его утилитарности, простоте использования, безопасности и независимости платформы (он работает вне зависимости от того, какое оборудование или операционная система используются).

    Java была разработана в 1995 году компанией Sun Microsystems и изначально создавалась для интерактивного телевидения и программирования бытовых электронных устройств. Тем не менее, публичный релиз Java 1.0 выявил смену фокуса на интернет-использование, превратив его в один из самых популярных языков программирования.

    Очевидно, со времен 1.0 многое изменилось и вот наконец после множества переносов 21 сентября 2017 года состоялся релиз Java 9.

    Особенности предыдущей (8-й) версии благодаря своей универсальности предоставили разработчикам возможность создавать решения для самых разных секторов бизнеса, включая финтех, здравоохранение и другие индустрии. Среди ключевых нововведений Java 8 следует отметить лямбда-выражения, стримы и изменения в API.

    В свою очередь Java 9 также изобилует разнообразием обновлений “под капотом” и в API. Кроме очевидного проекта Jigsaw, на который возложена обязанность по внедрению модулярности в основные компоненты Java, новая версия может похвастаться ещё тремя важными фичами:

    1. Полная поддержка клиента HTTP 2.0: Вопрос в скорости, и HTTP 2.0 предоставляет более высокие результаты, колеблющиеся от 11.81% до 47.7% по сравнении с клиентом HTTP 1.1.
    2. Jshell: Новый инструмент командной строки. Если разработчик хочет автономно запустить несколько строк Java, то это можно выполнить без необходимости заворачивать все в отдельный метод или проект.
    3. Microbenchmark: Теперь производительность отдельных небольших частей кода можно измерить стандартизированным методом. Анализ JMH за наносекунды уникален для Java 9.



    С полным списком советуем ознакомиться на портале сообщества Java, а также свободно скачать дистрибутив для ознакомления.

    Далее мы ближе рассмотрим несколько фич, отсутствовавших в Java 8.

    HTTP/2 клиент

    Это, пожалуй, самое ожидаемое нововведение — HTTP клиент с поддержкой как HTTP/2 протокола, так и WebSocket. Ведь SPDY протокол от Google, на базе которого основан HTTP/2 уже демонстрирует улучшенную производительность наравне с Netty или Jetty, поддержку неблокирующего режима (много потоков на запрос/ответ), а также Push-поддержку сервера, позволяющую отправлять ресурсы клиенту без явного запроса.

    Новый API представлен как первый инкубаторный модуль для Java — экспериментальная фича, которая при должном развитии официально появится в следующей версии (то есть Java 10), либо будет удалена. Необычный концепт для Java, который поощряет эксперименты, но при этом не нарушает обратной совместимости.

    Проект Jigsaw

    Проект Jigsaw (в переводе “головоломка”) направлен на модуляризацию Java. Это значит, что программный код разбивается на части и организуется по модулям в зависимости от задач, которые эти модули выполняют. Это позволяет использовать модули повторно, упрощает их организацию и отладку. Что ведет к оптимизированной и отлаженной разработке ПО. Это ключевое отличие Java 9 от Java 8.

    Второе большое преимущество — Java Platform становится легче и более масштабируемой. Это позволяет Java-приложениям работать даже на устройствах с низкой производительностью (так как для работы требуется меньше ресурсов). Это большое изменение особенно в контексте интернета вещей (IoT). Шаг вперед для Java, и шанс увидеть больше IoT-приложений, написанных на этом языке.

    Jshell

    Jshell добавит встроенную поддержку и популяризирует подход Java к REPL (Read-Eval-Print-Loop). Это интерактивный инструмент, позволяющий тестировать небольшие части кода без необходимости создавать новые классы. Он оснащен функциями истории и автозаполнения, а также рядом других особенностей, включая сохранение и загрузку написанных выражений.
    Скажем, если захочется запустить несколько строк Java самостоятельно, то теперь не придется заворачивать их в отдельный проект или метод. Что касается точек с запятой — можно забыть про них: Существуют различные альтернативы наподобие плагинов REPL для популярных IDE или веб-консоли Java REPL, но ни одна из них не является официальной.

    Унифицированное протоколирование JVM

    Добавлена единая система протоколирования всех JVM-компонентов. Тем не менее, если мы посмотрим на плюсы и минусы Java 9, вот один из них. Вызовы протоколирования отдельных компонентов JVM отсутствуют, также как и протоколирование Java-кода в Java Development Kit

    G1 — дефолтный сборщик мусора

    Очень часто сталкиваемся с заблуждением, что в Java есть только один сборщик мусора, хотя по факту их 4. Parallel / Throughput Collector считался дефолтным в прошлых версиях, но теперь его заменил G1, который был представлен в Java 7 и был разработан для лучшей поддержки куч размером более 4GB. Он вызывает меньше GC пауз, но если они все же происходят, то длятся дольше.

    Изображения с мульти-разрешением

    Этот API позволяет инкапсулировать набор изображений с разными разрешениями в единый объект. Таким образом, разработчик может получить изображение с определенным разрешением или все варианты внутри одного.

    Примечательные обновления API: Concurrency и Stack Walking

    Java 9 получил обновление CompletableFuture и java.util.concurrent.Flow. Flow — это Java-реализация Reactive Streams API. Reactive Streams помогают решить проблему back-pressure — накопления большого количества данных, которое происходит, когда скорость получения входящих событий выше, чем скорость их обработки приложением, что приводит к появлению буферов необработанных данных. Кроме того, в рамках улучшения concurrency, CompletableFuture получил обновление, которое решило проблемы, выявленные после его внедрения в Java 8. Оно включает поддержку задержек и тайм-аутов, улучшенную поддержку подклассов и несколько полезных методов.

    Также хочется упомянуть о Stack Walking API. Все верно, Java 9 меняет подход к работе со стек-трейсами, предоставляя официальный способ обработки стек-трейсов, вместо приравнивания их к простому тексту.

    Immutable List, Set, Map, и Map.Entry API

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

    Преимущества Java 9

    Детали отличий Java 9 от Java 8 представляют большой интерес для разработчиков, а следовательно и для бизнеса, находящегося в поиске наилучших решений. Нововведения девятой версии улучшают следующие аспекты разработки:

    • Скорость выше благодаря поддержке клиента HTTP/2.
    • Приложения становятся ресурсоэффективней, потому что разработчики могут использовать только необходимые модули, а не всю JRE.
    • Разработка ускоряется благодаря системе модулей, позволяющей их повторное использование, упрощенную отладку и управление.
    • Появляется возможность анализа производительности очень маленьких частей кода благодаря Microbenchmarks.
    • Множества создаются одной строчкой кода.

    THE END

    Вот такая выжимка всех интересных изменений, которые мы отметили после выхода новой версии. Правда, теперь главный вопрос в том, когда компании начнут внедрять её, учитывая, что встречаются такие, кто ещё и восьмую версию не использует. В итоге пока решили не менять программу курса (не считая мелкой косметики) и оставить всё как есть, а уже в следующем году задуматься насчёт этого.
    Отус 267,23
    Профессиональные онлайн-курсы для разработчиков
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 51
    • +3
      «Jigsaw» — обычно означает пазлы, но здесь, скорее всего, имеет место второе значение — лобзик (пила), из-за разделения на части. Релиз, кажется, на год задержали или больше?
      • 0
        Как раз элементами пазлов обычно и представляют модули. Так что пазл — самое то.
        • 0
          Но ведь только лобзиком можно что-то запилить или выпилить
          • –1
            поэтому головоломка и называется Jigsaw puzzle — распиленная головоломка.
          • 0
            в том то и дело, что речь не о самих модулях, а о процессе разделения платформы на части
            • +1
              ну тогда это слово стоит воспринимать как глагол: лобзикование.
              • 0
                Вот да :) Всё-таки чисто лобзик — достаточно многогранная штука.
          • 0
            ну почемуже.
            именно пазлы имеется в виду.
            разбиение на кусочки.
            ИМХО
            • –1
              Пазл тут вполне себе в тему, т.к. как раз разделено уже на части и больше отражает суть, чем лобзик. Лично у меня лобзик вообще ассоциируется с уроками труда, а отнюдь не с разделением на части.

              Чуть больше года, насколько я помню. Переносы с прошлого лета пошли.
            • +2
              Благодарю за статью!
              А можно рассказать о причинах перевода термина " logging" как протоколирование?

              P.S.: Пишу не в личку, поскольку считаю причины выбора такого перевода полезными не только для меня.
              • 0
                А можно рассказать о причинах перевода термина " logging" как протоколирование?

                А у вас какие предпочтения? Регистрация? Журналирование?
                Для этих двух вариантов есть омонимы, которые вспоминаются сходу.
                А для «протоколирование» я омонима даже и не вспомню.
                • +4
                  логгирование, например.
                • 0
                  Хм. Внезапный вопрос… Вообще просто чаще используется в работе, поэтому привычнее протоколирование, чем, например, прямая транслитерация.
              • +10
                Сначала прочитал Jshell как JS Hell, а не J Shell…
                • –5
                  Плюсанул бы, если б мог.

                  Отличное название, я считаю.
                  И так недостаточно людей в околопрограммистской тусовке путают Java и JavaScript.
                  • +2
                    «А Слава КПСС — это вообще не человек...»
                    • +1
                      уже репер=человек
                  • 0
                    Попробуй прочесть KeePass.
                  • +1
                    Всё б хорошо, да только я так понимаю пользовательских value type так и нет? В Swift они есть. Я всегда предпочитал C# во многом из-за этого, но что мне не нравилось, что там константы возможны лишь для предопределённых типов. Ещё не совсем освоил Swift, особенно новинки 4-го, но, там, кажется со всеми этими моментами порядок. Java по мне определённо хорош классическим синтаксисом, а в C# зато обработка исключений сделана мягко говоря не лучшим образом, но в плане возможностей на фоне Swift 4 по мне это меркнет.

                    Хотя, кажется, появляются ещё какие-то языки программирования, что я ещё освоить не успел. У понравившегося мне в своё время D чувствую шансов прижиться уже немного, но, впечатление, что улучшенные варианты уже есть. Вот только упомянутое в начале ограничение, насколько я понимаю, относится ко всему JVM.
                    • 0

                      У D вылезти на большую арену шансов уже очень мало. Особенно учитывая, что он не смог это сделать за полторы декады.

                    • +6
                      Особенности предыдущей (8-й) версии благодаря своей универсальности предоставили разработчикам возможность создавать решения для самых разных секторов бизнеса, включая финтех, здравоохранение и другие индустрии.

                      Т.е. вы это на полном серьезе утверждаете? Что только Java 8-й версии «предоставила разработчикам возможность создавать решения для самых разных секторов бизнеса, включая финтех, здравоохранение и другие индустрии.»? FacePalm… Маркетологи погубят этот мир…
                      • +1
                        Можно ли запустить java9 на windows xp?
                      • 0

                        Я слышал, что с выходом Java 9 появится AOT-компиляция. Она в итоге появилась или я что-то напутал?

                        • 0
                          Ahead Of Time Compilation (AOT) openjdk.java.net/jeps/295 действительно попала в java9, и доступна сейчас в OpenJDK jdk.java.net/9
                          Это статическая компиляция java кода в нативный

                          В последней сборке Oracle JDK (9.0.1) AOT отсутствует
                          Утилита называется jaotc
                        • 0
                          На телефонах Nokia была похожая вещь. Они компилировали jar и потом пускали бинарники. Это мягко говоря было ужасно.
                          • 0
                            На некоторых Sony-Ericsson получали рут исполнение произвольного кода патчингом AOT кэша.
                          • 0
                            Еще о новшествах: где скачать Java9 JDK для 32bit windows?
                            • +1
                              Официально, вероятно, нигде.
                            • +1
                              Официального 32bit JDK нет. Можно попробовать собрать самому как советует Марк Рейнхольд.
                            • +2
                              Для кого эта статья? Если для программистов, то неплохо было бы привести примеры кода «до» и «после».
                              • –2
                                Это обобщённая статья для всех и, разумеется, не последняя. В следующих как раз рассмотрим практические примеры по разным аспектам
                                • +1
                                  >и, разумеется, не последняя

                                  Надеюсь последующие статьи будут писать не маркетологи, а технари…
                              • +1
                                G1, который был представлен в Java 7 и был разработан для лучшей поддержки куч размером более 4GB. Он вызывает меньше GC пауз, но если они все же происходят, то длятся дольше.

                                ШТА?! G1 старается держать паузы предсказуемыми и их может быть больше или меньше в зависимости от параметра MaxGCPauseMillis. И эти паузы могут быть запросто меньше, чем в старых gc типа CMS. G1 на основе предыдущих сборок оценивает сколько регионов он сможет обработать при очередной сборке.

                                • +1

                                  Стоит добавить, что чисто маркетоидное "http/2 быстрее" очень спорно. Особенно, если не уточнить в каком смысле и при каких условиях. Там в первую очередь интересна экономия сокетов, мультиплексирование, приоритизация мультиплексированных потоков, потенциальное уменьшение latency и server push.

                                  • 0
                                    http/2 у нас как раз в первую очередь пойдёт на отдельную заметку и практику. Так что там будет более подробно это раскрыто.
                                    В рамках такой сравнительной статьи, разумеется, не хватает глубины по каждому пункту, но это поправим в следующих выпусках.
                                    • 0

                                      Это, извините, выглядит не как "не хватает глубины по каждому пункту", а как вопиющая некомпетентность. Как с тем же G1GC.

                                • 0

                                  Вы не упомянули о переходе класса String на работу с byte[] вместо char[], что может существенно уменьшить JVM heap если символы в строках можно уместить по таблице ASCII по 1 byte.

                                  • 0

                                    Да, приятная штука. У нас потребление памяти на части софта упало на 10-20%.

                                    • 0
                                      CompressedOops уже были включены? Или не подходят по специфике?
                                      • 0

                                        Обычно да, кучи меньше 32 GiB. Если больше, то часто включены + увеличен ObjectAlignmentInBytes, но это бывает не сильно часто.

                                        • 0
                                          Какой выигрыш дают CompressedOoops в вашем кейсе, если не секрет?

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

                                  Самое читаемое