Разное

Новое в java 9: Обзор Java 9 / Хабр

Содержание

JavaFX | Введение

Что такое Java FX

Последнее обновление: 18.01.2021

JavaFX представляет инструментарий для создания кроссплатформенных графических приложений на платформе Java.

JavaFX позволяет создавать приложения с богатой насыщенной графикой благодаря использованию аппаратного ускорения графики и возможностей GPU.

С помощью JavaFX можно создавать программы для различных операционных систем: Windows, MacOS, Linux и для самых различных устройств: десктопы,
смартфоны, планшеты, встроенные устройства, ТВ. Приложение на JavaFX будет работать везде, где установлена исполняемая среда Java (JRE).

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

История JavaFX фактически началась в первой половине 2000-х годов, когда разработчик по имени Крис Оливер (Chris Oliver), будучи работником
компании SeeBeyond, разработал для создания графических интерфейсов новый язык F3 (Froms Follows Functions). Впоследствии в 2005 году SeeBeyond была приобретена компанией Sun Microsystems (которая на тот момент развивала язык Java до покупки компанией
Oracle). F3 был переименован в JavaFX, а Крис Оливер продолжил работу над новой платформой уже в рамках компании Sun.
И в мае 2007 года Sun Microsystems публично анонсировала новую платформу для создания графических приложений. А 4 декабря 2008 года вышел JavaFX 1.0 SDK.

После приобретения Sun Microsystems компанией Oracle в 2010 году была анонсирована, а в 2011 году вышла в релиз версия JavaFX 2.0.
В первой версии JavaFX фактически представлял скиптовый язык. Во второй версии был полностью изменен подход. Скриптовый язык был убран, а платформа
была полностью переписана фактически с нуля. Теперь создавать приложения можно было с помощью любого языка, который поддерживала JVM. Были добавлены новые API, интеграция со Swing
и много других вещей.

Следующими важными вехами в развитии платформы стали версии JavaFX 8 и особенно JavaFX 9, которая вышла в сентябре 2017 года вместе с Java 9 и
привнесла в платформу модульность. И если раньше JavaFX поставлялась вместе с Java SE, то сейчас JavaFX отделена от основной функциональности Java SE и
используется как отдельный модуль. Последняя версия фреймворка — JavaFX 15 — вышла в сентябре 2020 года.

На данный момент JavaFX представляет предпочтительный способ для создания графических приложений с помощью языка Java, который пришел на смену AWT и Swing.
Также стоит отметить, что для работы с JavaFX вместо Java теоретически можно использовать любой язык программирования, который поддерживается JVM.

Установка инструментария

Что необходимо для работы с JavaFX? Прежде всего необходимо установить последнюю версию JDK с официального сайта Oracle:
http://www.oracle.com/technetwork/java/javase/downloads/index.html.
Согласно документации, вместе с JavaFX 15 можно использовать JDK 11, но лучше установить последнюю версию JDK — на данный момент это JDK 15.

Кроме того, даже после установки важно убедиться, что именно она и будет использоваться. В частности, системная переменная
JAVA_HOME должна хранить путь к папке bin установленной версии JDK.

Проверить, какая версия Java используется на глобальном уровне, можно выполнив в консоли/командной строке команду:

JavaFX SDK

Также необходимо загрузить последнюю версию JavaFX SDK с адреса https://gluonhq.com/products/javafx/.

Например, если 64-х разрядная OC Windows, то соответственно надо загрузить JavaFX Windows x64 SDK.
По сути SDK представляет архив с файлами, и после его загрузки его необходимо распаковать в любое предпочтительное место на жестком диске. Например, в моем случае SDK распакован в папку C:\javafx-sdk-15.0.1.

Модули JavaFX

Если мы откроем папку lib в распакованном SDK, то мы увидим там модули, которые собственно и
представляют JavaFX.

При написании кода приложений, а также при их компиляции и запуске мы будем использовать эти модули. Что они делают:

  • javafx.base: определяет базовый функционал фреймворка, в частности, функциональность привязки, свойств, коллекций, событий и т.д.

  • javafx.controls: определяет элементы управления, диаграммы и скины.

  • javafx.fxml: определяет функционал для работы с FXML.

  • javafx.graphics: определяет функциональность окон и контейнеров компоновки, жизненного цикла приложения,
    возможности рисования, пользовательского ввода, анимации, css и т.д.

  • javafx.media: определяет функционал для работы с мультимедиа.

  • javafx.swing: определяет интерфейс для взаимодействия и внедрения элементов Swing в приложении JavaFX.

  • javafx.web: определяет функционал WebView.

  • javafx-swt: модуль для взаимодействия с SWT.

Oracle представила Java 14 — CNews

Интеграция
Системное ПО


, Текст: Владимир Бахур

Oracle объявила о выпуске Java 14 (Oracle JDK 14). Java 14 демонстрирует неизменную приверженность Oracle ускорению инноваций, предоставляя предприятиям и сообществу разработчиков новые усовершенствования каждые шесть месяцев в рамках релиза функциональных обновлений (Feature Release).

Новейший комплект Java Development Kit (JDK) предлагает разработчикам новые функции, в том числе две новые долгожданные ознакомительные возможности (Preview Features) – Pattern Matching for instanceof (JEP 305) и Records (JEP 359), а также Text Blocks (JEP 368) для повторного превью. Кроме того, в новом релизе Java добавлена поддержка конструкций выбора Switch Expressions, включены новые API-интерфейсы для непрерывного мониторинга данных JDK Flight Recorder, расширена доступность Z Garbage Collector с малой задержкой для macOS и Windows, а в модулях инкубатора представлен упаковщик самодостаточных приложений Java и новый API-интерфейс для безопасного и эффективного доступа к областям внешней памяти вне динамически распределяемой heap-памяти Java.

«Java 14 – еще одно свидетельство преимуществ шестимесячного цикла обновления: разработчики получают доступ к функциям, которых они в противном случае ожидали бы годами, – отметил Джордж Сааб, вице-президент Oracle по разработке платформы Java, – JDK 14 не только содержит ряд улучшений для повышения продуктивности разработчиков, в этот релиз также впервые включен важный контент из таких проектов, как Project Panama – расширенный интерфейс доступа к внешней памяти (Foreign-Memory Access API, JEP 370) и дальнейшие усовершенствования из Project Amber – Pattern Matching (JEP 305) и Records (JEP 359). Эти крупные улучшения свидетельствуют об обширной работе, проводимой в рамках данных новаторских проектов».

Релиз Java 14 – результат скоординированной ИТ-разработки, включающей открытый анализ, еженедельные сборки и активное сотрудничество между инженерами Oracle и членами мирового сообщества разработчиков Java в рамках OpenJDK Community и Java Community Process. Новые функции, представленные в Java 14, включают в себя:

JEP 305: Pattern Matching for instanceof (превью) – Данное знакомство с технологией расширяет функциональность сопоставления с шаблоном для оператора instanceof. Это повышает производительность труда разработчика, устраняя необходимость в шаблонном коде, и позволяет получить более компактный и типобезопасный код.

JEP 343: Packaging Tool (инкубатор) – Предоставляет разработчикам возможность упаковывать приложения Java для распространения в специфичных для платформ форматах. Это помогает создавать современные приложения в виде единого поставляемого пакета библиотек, в котором объединены среда исполнения и код приложения. Эти инструменты представлены в модуле инкубатора и позволяют передавать разработчикам неконечные версии API и нефинальные версии инструментов для получения их отзывов. Такие API/инструменты либо дорабатываются до финальных версий, либо удаляются в следующем релизе.

JEP 345: NUMA-Aware Memory Allocation for G1 – Повышает общую производительность сборщика мусора G1 в системах с архитектурой памяти NUMA (Non-Uniform Memory Access).

JEP 349: JFR Event Streaming – Открывает данные JDK Flight Recorder (JFR) для непрерывного мониторинга. Это упростит доступ различных инструментов и приложений к данным JFR и будет стимулировать дальнейшие инновации.

JEP 352: Non-Volatile Mapped Byte Buffers – Добавляет режим мэппинга файлов для JDK при использовании энергонезависимой памяти. Постоянный характер энергонезависимой памяти упрощает обеспечение неизменности данных и улучшает производительность, что и используется этой функцией.

JEP 358: Helpful NullPointerExceptions – Повышает удобство использования исключений NullPointerException, точно описывая, какая переменная была равна нулю, и предоставляя другую полезную информацию. Это повысит продуктивность разработчиков и улучшит качество многих инструментов разработки и отладки.

JEP 359: Records (превью) – Эта ознакомительная возможность обеспечивает компактный синтаксис объявления классов, которые содержат поверхностные неизменяемые данные (shallowly immutable). Эта функция может значительно сократить шаблонный код в классах такого типа, но самое большое преимущество – возможность моделировать данные как данные. Она позволит легко, однозначно и кратко объявлять эти поверхностные неизменяемые агрегаты номинальных данных.

JEP 361: Switch Expressions (стандартная) – Данная функция присутствовала в JDK 12 и JDK 13 как ознакомительная и теперь добавлена в качестве стандартной. Это позволяет использовать конструкцию выбора switch как оператор или выражение. Данная функция упрощает кодирование и открывает возможность применения функции сопоставления с шаблоном (Pattern Matching, JEP 305), представленной в этом релизе в качестве ознакомительной.

JEP 364: ZGC on macOS и JEP 365: ZGC on Windows – Хотя большинству пользователей, которым нужна функция Z Garbage Collector, также необходима масштабируемость сред на основе Linux, часто возникает потребность в развертывании и тестировании для поддержки ZGC в macOS и Windows. Существуют также приложения для ПК, ориентированные на Windows и macOS, которые получат преимущества от использования ZGC.

JEP 368: Text Blocks (второе превью) – Текстовые блоки впервые были представлены в качестве превью в Java 13, и после отзывов и замечаний конечных пользователей в них были добавлены улучшения. Теперь текстовые блоки снова предлагаются как ознакомительная возможность в Java 14 с целью сделать их стандартом в будущем выпуске JDK. Текстовые блоки позволяют легко выражать строковые последовательности, которые занимают несколько строк исходного кода. Это улучшает читаемость текстовых фрагментов в программах Java, которые представляют код, написанный на отличных от Java языках. Поддерживается миграция из строковых литералов за счет того, что любая новая конструкция может выражать тот же набор строк, что и строковый литерал, интерпретировать те же escape-последовательности и обрабатываться так же, как строковый литерал.

JEP 370: Foreign-Memory Access API (инкубатор) – API-интерфейс, позволяющий программам Java безопасно и эффективно получать доступ к областям внешней памяти вне динамически распределяемой heap-памяти Java.

Пользователям и предприятиям, которым нужна коммерческая поддержка, Oracle также предлагает подписку Oracle Java SE Subscription – недорогое и предсказуемое решение технической поддержки. Это предложение используется тысячами крупных и малых организаций по всему миру и позволяет им получить лицензию Java SE и всестороннюю поддержку необходимых систем на требуемыйй период времени. Эти клиенты получают выгоду от гибкости и регулярного доступа к проверенным и сертифицированным обновлениям поддерживаемых релизов непосредственно от Oracle, касающихся производительности, стабильности и безопасности.

Java продолжает оставаться в мире №1 языком программирования, предпочитаемым разработчиками программного обеспечения. И, как свидетельствует своевременное предоставление инноваций в Java 14 благодаря продуманному планированию и вовлеченности экосистем, платформа Java остается основным инструментом для разработки современных приложений.

Что нового в Java 10: часть вторая

Java 10 уже не за горами, а именно её обещают выпустить уже совсем скоро в марте. В новой версии Java нас ждет довольно много улучшений в JVM. Но кажется, что все в основном заинтересованы лишь в одном нововведении в самом языке, а именно новом слове “var”. Помимо улучшений языка и виртуальной машины Java 10 содержит еще одно нововведение, которое совместно с новой моделью релизов Java наделало много шуму в сообществе любителей Java.

Итак, представляем вашему вниманию краткий обзор остатков больших изменений в Java 10, которые не были рассмотрены в предыдущей статье. Наслаждайтесь!

 

Time-Based Release Versioning

Чтобы стазу стало все понятно без лишних слов, процитируем авторов JEP 322, как они определяют новый формат версий Java:

[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*

На этом мне следовало бы, пожалуй, остановиться, потому что к этому изящному определению довольно сложно добавить что-то еще. Но я попробую. Данное определение допускает, что версия Java может быть произвольной длины, но нескольким первым элементам придается особенное сакральное значение. Обратимся к первоисточнику:

$FEATURE.$INTERIM.$UPDATE.$PATCH

$FEATURE — The feature-release counter, incremented for every feature release regardless of release content. Features may be added in a feature release; they may also be removed, if advance notice was given at least one feature release ahead of time. Incompatible changes may be made when justified. (Formerly $MAJOR.)

$INTERIM — The interim-release counter, incremented for non-feature releases that contain compatible bug fixes and enhancements but no incompatible changes, no feature removals, and no changes to standard APIs. (Formerly $MINOR.)

$UPDATE — The update-release counter, incremented for compatible update releases that fix security issues, regressions, and bugs in newer features. (Formerly $SECURITY, but with a non-trivial incrementation rule.)

$PATCH — The emergency patch-release counter, incremented only when it’s necessary to produce an emergency release to fix a critical issue. (Using an additional element for this purpose minimizes disruption to both developers and users of in-flight update releases.)

The fifth and later elements of version numbers are reserved for use by downstream consumers of the JDK code base. The fifth element may be used to, e.g., identify implementor-specific patch releases.

Коротко о главном. $FEATURE увеличивается на единичку в двух случаях: либо когда выходит Java с каким-то нововведением, которое можно называть “фичей”, либо когда какая-то “фича” удаляется из Java (о чем полагается сообщать заблаговременно).  $INTERIM увеличивается для версий Java, которые содержат изменения меньшего калибра, которые не должны повлечь проблем с совместимостью. $UPDATE увеличивается на единичку всякий раз, когда выходит новая Java с починенными регрессиями, проблемами с безопасностью и дефектами в новых “фичах”.

Такой форма версий удовлетворяет новой модели релизов Java, которая вызвала много бурлений. Вот что авторы говорят по этому поводу:

Under the six-month release model the elements of version numbers vary as follows:

$FEATURE is incremented every six months: The March 2018 release is JDK 10, the September 2018 release is JDK 11, and so forth.

$INTERIM is always zero, since the six-month model does not include interim releases. We reserve it here for flexibility, so that a future revision to the release model could include such releases and say that JDK $N.1 and JDK $N.2 are compatible upgrades of JDK $N. As examples, the JDK 1.4.1 and 1.4.2 releases were, in essence, interim releases, and would have been numbered 4.1 and 4.2 under this scheme.

$UPDATE is incremented one month after $FEATURE is incremented, and every three months thereafter: The April 2018 release is JDK 10.0.1, the July release is JDK 10.0.2, and so forth.

Новый форма версий также влечет за собой следующие изменения:

  • новые значения, которые печатает java -version
  • добавлены две новые system properties java.version.date и java.vendor.version
  • обновлен Runtime.Version API

Авторы JEP 322 предоставляют нам хорошее описание нововведения, поэтому добро пожаловать всем желающим.

Remove the Native-Header Generation Tool (javah)

Кто запускал команду ls ${JAVA_HOME}/bin? Результаты могут удивить и даже шокировать. В bin можно обнаружить солидный набор инструментов, которые входят в состав JDK. Один из них называется javah, который используется для генерации JNI header’ов, если у вас в коде есть native-методы in your code. Кто использует JNI?

Однако, генерирование JNI header’ов уже давно поддерживает компилятор javac, а именно начиная с Java 8. javah выглядит не совсем нужным в хозяйстве, поэтому его удаляют. Кстати, существует Project Panama, который теоретически сможет не только заменить JNI в будущем, но и добавить еще много чего интересного. Ознакомьтесь на досуге.

Авторы JEP-а 313 немногословны.

Additional Unicode Language-Tag Extensions

Знаете ли вы, что такое языковой тег (language tag)? Уверен, что многие из нас уже когда-то видели их. Например, en-GB и en-US это языковые теги. Как вы уже успели догадаться, тег может состоять из нескольких элементов. Например, en обозначает английский язык, а GB и US обозначают регион. Таким образом, эти теги обозначают британский и американский языки соответственно. Языковые теги определены в документах под кодовым названием BCP 47 и в нескольких RFC.

Довольно просто, правда? Но как всегда надо было все усложнить. Языковой тег может содержать более двух элементов. Один тип элементов называется “extension subtag”, который призван нести дополнительную информацию о теге, которая может даже не идентифицировать язык. Например, extension subtag может содержать информацию о календаре или часовом поясе. Common Locale Data Repository (CLDR) приводит длинный список таких атрибутов. Для элементов с информацией о locale даже выделили специальное название “Extension U”. Вот пара примеров:

  • th-TH-u-ca-buddhist обозначает тайский язык (th) в Таиланде (TH) с буддистским календарем (buddhist)
  • th-TH-u-ca-buddhist-nu-thai обозначает тайский язык (th) в Таиланде (TH) с буддистским календарем (buddhist) и тайскими числами (nu-thai)

А как обстоят дела с языковыми тегами в Java? Предоставим слово авторам JEP-а:

Support for BCP 47 language tags was was initially added in Java SE 7, with support for the Unicode locale extension limited to calendars and numbers. This JEP will implement more of the extensions specified in the latest LDML specification, in the relevant JDK classes.

Другими словами, следующие extensions будут добавлены в Java 10:

  • cu (денежная еденица)
  • fw (первый день недели)
  • rg (регион)
  • tz (часовое пояс)

JEP подразумевает обновление некоторых классов в пакетах java.text, java.time и java.util. Подробности в JEP 314, хотя их там не очень много.

Heap Allocation on Alternative Memory Devices

Оказывается, существуют разные другие виды памяти помимо DRAM. Например, NV-DIMM, который может даже пережить отключение электричества и сохранить свое содержимое. И если такой тип памяти существует, должен же кто-то разместить на нем heap, правда? Начиная с Java 10, Hotspot JVM будут уметь это делать. Вот что нам говорят авторы нововведения:

With the availability of cheap NV-DIMM memory, future systems may be equipped with heterogeneous memory architectures. One example of such technology is Intel’s 3D XPoint. Such an architecture, in addition to DRAM, will have one or more types of non-DRAM memory with different characteristics.

This JEP targets alternative memory devices that have the same semantics as DRAM, including the semantics of atomic operations, and can therefore be used instead of DRAM for the object heap without any change to existing application code. All other memory structures such as the code heap, metaspace, thread stacks, etc., will continue to reside in DRAM.

Авторы сообщают нам, что некоторые операционные системы уже предоставляют возможность работы с отличными от DRAM видами памяти. Например, NTFS DAX mode и ext4 DAX. Доступ к памяти организован через файл. JEP обещает предоставить нам возможность размещать heap в такой памяти. Другими словами, совсем скоро станет возможным разместить heap на жестком диске. Скорее всего это будет медленнее, но будут и плюшки ведь содержимое жесткого диска (обычно) сохраняется после выключения питания.  Авторы собираются добавить новый параметр для JVM -XX:AllocateHeapAt=<path>, с помощью которого можно будет указать путь к файлу, где надо разместить heap.

Авторы JEP-а говорят, что остальные опции для JVM, такие как -Xmx и-Xms, будут работать без изменений.

За деталями обращайтесь к JEP 316, хотя опять JEP не балует нас обилием подробностей.

Experimental Java-Based JIT Compiler

Знакомы ли вы с таким явлением, как runtime compilation? Если да, то вероятно вы можете пропустить этот параграф. Дело вот в чем. После того, как вы написали свой изумительный код на Java, вам необходимо его немедленно скомпилировать, чтобы потом сразу же и запустить. Обычно вы используете для компиляции javac, который преобразует вашу программу на Java в набок класс-файлов, в которых будет содержаться Java байт-код. Далее вы запускаете вашу ненаглядную программу командой java , которая стартует JVM и запускает там ваш байт-код. А что происходит дальше? У JVM есть интерпретатор, который понимает инструкции байт-кода и преобразует из в инструкции процессора. Но помимо этого JVM также содержит свой собственный компилятор, который может разом преобразовать байт-код в инструкции процессора. Это явление и называется “runtime compilation”. Скомпилированный таким образом код может потом запускаться быстрее. JVM может использовать интерпретатор байт-кода для выполнения Java программ, но некоторые участки байт-кода могут быть заранее скомпилированы. Для лучшего понимания какой байт-код следует скомпилировать, компилятор собирает статистику, какие кусочки байт-кода чаще используются. Самый популярный байт-код обычно подлежит компиляции. Компилятор в процессе компиляции может пытаться оптимизировать код, что обычно позволяет чуточку ускорить выполнение Java-программы. Однако, иногда компилятор может специально и деоптимизировать код. У компилятора обычно есть несколько стратегий. Одна из них называется JIT-компиляция, где “JIT” означает “just-in-time”. Это означает, что компиляция выполняется прямо во время выполнения программы. Подводя итоги, мы можем догадаться, что внутренний компилятор виртуальной машины это довольно важный компонент, и обычно он довольно сложно устроен.

В настоящее время у Hotspot JVM есть два компилятора, которые имеют кодовые имена C1 и C2. Если кратко, то C1 это относительно быстрый и простой компилятор, который не делает много оптимизаций кода. Он хорош для приложений, которые недолго работают, и для которых важно быстро стартовать. C2 наоборот больше пытается оптимизировать код. Он больше подходит для долгоиграющих серверных приложений. Оба являются JIT компиляторами, и оба реализованы на C/C++/Asm. Кстати, C2 даже содержит свой собственный внутренний язык для описания оптимизаций кода. C2 вообще довольно сложный и тяжеловесный компонент Hotspot JVM.

Но в мире существуют и другие компиляторы Java байт-кода. Один из них называется Graal. Интересно, что Грааль написан на Java. JEP, о котором мы говорим в этом разделе, включает Грааль в состав Hotspot JVM в качестве экспериментального JIT-компилятора на платформе Linux-x64. Предоставим слово авторам JEP-а:

Enable Graal to be used as an experimental JIT compiler, starting with the Linux/x64 platform. Graal will use the JVM compiler interface (JVMCI) introduced in JDK 9. Graal is already in the JDK, so enabling it as an experimental JIT will primarily be a testing and debugging effort.

Если вы хотите принять участие в эксперименте, то можете начать запускать ваши приложения с опциями  -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler. Я думаю, что разработчики Hotspot/Graal будут рады вашему участию, если вы поделитесь с ними своим опытом.

За деталями обращайтесь к JEP 317 , который уже традиционно не радует нас их обилием.

Root Certificates

Знакомы ли вы с цифровыми сертификатами и удостоверяющими центрами? Если да, то следующие пара параграфов могут быть не слишком интересными для вас. В асимметричных шифрах у нас есть пара ключей: открытый (public) и закрытый (private). Открытый ключ известен всем, но закрытый ключ держится в секрете. Ключи могут быть использованы, например, для шифрования или цифровой подписи. Цифровой сертификат содержит следующее:

  • открытый ключ
  • техническую информацию о ключе (например, его длину)
  • информацию о владельце ключа
  • цифровую подпись для информации выше

А кто ставит эту самую подпись? Предположим, что у нас есть открытый ключ PublicKey1 и закрытый ключ PrivateKey1. Чтобы подписать наш сертификат для ключа PublicKey1, нам еще одна пара ключей. Назовем их PublicKey2 и PrivateKey2 соответственно. Закрытый ключ PrivateKey2  используется для создания подписи, а открытый ключ PublicKey2 для ее проверки. Ключ PublicKey1 вместе с информацией выше подписывается ключом PrivateKey2 , и подпись включается в сертификат. Теперь у нас есть подписанный сертификат C1 для открытого ключа PublicKey1. Подпись может быть проверена ключом PublicKey2. Как вы уже могли догадаться, в природе должен существовать сертификат также и для PublicKey2. Но кто подписал этот сертификат для ключа PublicKey2? Для этого нужна еще одна пара ключей … Так мы приходим к цепочке сертификатов.

К конечном счете, одной из главных целей создания цифровых сертификатов является возможность проверить, что открытый ключ из сертификата C1 действительно принадлежит владельцу, который указан в сертификате. Проверка эта основана на цифровой подписи: пользователь может взять открытый ключ из следующего в цепочке сертификата C2 и использовать его для проверки подписи в сертификате C1. Но потом нам необходимо также проверить подпись в сертификате C2. И мы берем следующий сертификат C3… Но ведь это же не может продолжаться бесконечно? Когда мы останавливаемся? И вот мы приходим к доверенным сертификатам. У нас может быть список сертификатов, которым мы доверяем. Такие сертификаты в быту еще называют корневыми или “root certificates”. Мы останавливаем проверку цепочки сертификатов, когда наткнемся на сертификат из нашего списка доверенных сертификатов.

Обычно цифровой сертификат выпускается удостоверяющим центром (Certificate Authority или просто CA). Digicert, Comodo, VeriSign это примеры известных удостоверяющих центров. У удостоверяющих центров есть свои сертификаты, которые они используют для подписи выпускаемых ими сертификатов.

А зачем нам вообще нужны эти цепочки сертификатов? Например, сертификаты широко используются при установки защищенных TLS соединений. Да-да, когда вы видите маленький зеленый замочек в адресной строке вашего браузера напротив адреса сайта, то это означает, что ваш браузер успешно проверил цепочку сертификатов для этого сайта, и таким образом сумел установить защищенное соединение с сервером. У браузеров обычно есть свое хранилище доверенных сертификатов.

Хорошая новость: у Java тоже есть свое хранилище корневых сертификатов, которое называется cacerts. Это просто файл, который лежит в директории ${JAVA_HOME}/lib/security.  Но есть и плохая новость: cacerts в OpenJDK пуст. Но это досадное недоразумение наконец-то будет исправлено в Java 10.  cacerts хранилище в OpenJDK будет содержать доверенные сертификаты из Oracle JDK. Предоставим слово авторам JEP-а:

The cacerts keystore will be populated with a set of root certificates issued by the CAs of Oracle’s Java SE Root CA Program. As a prerequisite, each CA must sign the Oracle Contributor Agreement (OCA), or an equivalent agreement, to grant Oracle the right to open-source their certificates. Below are the CAs that have signed the required agreement and, for each, a list of the root certificates (identified by the Distinguished Name) that will be included. This list includes a majority of the CAs that are currently members of Oracle’s Java SE Root CA Program. Those that do not sign an agreement will not be included at this time. Those that take longer to process will be included in the next release.

И далее авторы приводят длинный список сертификатов, которые будут включены в OpenJDK. Вообще это кажется довольно простой затеей: надо было просто скопировать cacerts файл из Oracle JDK в OpenJDK.  Но на самом деле на реализацию этого JEP-а ушло много трудов, ведь чтобы включить сертификат в OpenJDK, нужно получить подтверждение у соответствующего удостоверяющего центра, что он не против этого. Даже если этот сертификат и так находится в публичном доступе.

За деталями обращайтесь к JEP 319.

Заключение

Наконец-то мы обсудили все основные нововведения в Java 10. Если кому-то интересно, то первая половина описана в предыдущей статье. Всего в Java 10 будет 12 довольно больших нововведений. Выпуск Java 10 намечен на март 2018 года. Будем надеяться, что Java 10 не будет содержать много регрессий.

P.S. Если я написал какую-нибудь глупость, то буду признателен, если вы об этом сообщите 🙂

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Установка Java с `apt` в Ubuntu 18.04

Автор выбрал фонд Open Internet/Free Speech Fund для получения пожертвования $100 в рамках программы Write for DOnations.

Введение

Java и JVM (виртуальная машина Java) требуются для многих видов программного обеспечения, включая Tomcat, Jetty, Glassfish, Cassandra и Jenkins.

Это руководство поможет вам научиться устанавливать различные версии Java Runtime Environment (JRE) и Java Developer Kit (JDK) с помощью apt . Вы установите OpenJDK, а также официальные пакеты от Oracle. Затем вы выберете версию, которую предпочитаете использовать в своих проектах. После этого вы сможете использовать JDK для разработки программного обеспечения и Java Runtime для запуска программного обеспечения.

Предварительные требования

Для данного обучающего модуля вам потребуется следующее:

  • Сервер Ubuntu 18.04, настроенный в соответствии с указаниями обучающего модуля Начальная настройка сервера Ubuntu 18.04, включая брандмауэр и пользователя с привилегиями sudo и без привилегий root.

Установка JRE/JDK по умолчанию

Самый простой вариант установки Java — использовать версию, входящую в пакет Ubuntu. По умолчанию в пакет Ubuntu 18.04 входит Open JDK (версия JRE и JDK с открытым исходным кодом).

Данный пакет устанавливает версию OpenJDK 10 или 11.

  • До сентября 2018 г. устанавливалась версия OpenJDK 10.
  • После сентября 2018 г. устанавливается версия OpenJDK 11.

Для установки этой версии нужно вначале обновить указатель пакетов:

Затем нужно проверить, выполнялась ли установка Java ранее:

Если установка Java не выполнялась, вы увидите следующие результаты:

Output

Command 'java' not found, but can be installed with: apt install default-jre apt install openjdk-11-jre-headless apt install openjdk-8-jre-headless apt install openjdk-9-jre-headless

Запустите следующую команду для установки OpenJDK:

  • sudo apt install default-jre

Эта команда выполняет установку среды Java Runtime Environment (JRE). Она позволяет запускать практически любое программное обеспечение Java.

Проверьте установку с помощью следующей команды:

Вывод должен выглядеть следующим образом:

Output

openjdk version "10.0.1" 2018-04-17 OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1) OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

Для компиляции и запуска некоторых специфических программ на базе Java в дополнение к JRE вам может потребоваться комплект разработчика Java Development Kit (JDK). Для установки JDK выполните следующую команду, которая также выполняет установку JRE:

  • sudo apt install default-jdk

Проверьте установку JDK, проверив версию javac, компилятора Java:

Вывод должен выглядеть следующим образом:

Output

javac 10.0.1

Теперь посмотрим, как указать конкретную версию OpenJDK для установки.

Установка конкретных версий OpenJDK

Хотя вы можете просто установить пакет OpenJDK по умолчанию, вы также можете установить и другие версии OpenJDK.

OpenJDK 8

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

  • sudo apt install openjdk-8-jdk

Для проверки установки используется команда

Вывод будет выглядеть следующим образом:

Output

openjdk version "1.8.0_162" OpenJDK Runtime Environment (build 1.8.0_162-8u162-b12-1-b12) OpenJDK 64-Bit Server VM (build 25.162-b12, mixed mode)

Также можно установить только JRE, для этого нужно выполнить команду sudo apt install openjdk-8-jre.

OpenJDK 10/11

В хранилищах Ubuntu содержится пакет, устанавливающий Java 10 или 11. До сентября 2018 г. этот пакет устанавливал OpenJDK 10. После выпуска Java 11 этот пакет устанавливает Java 11.

Для установки OpenJDK 10/11 используется следующая команда:

  • sudo apt install openjdk-11-jdk

Чтобы установить только JRE, нужно использовать следующую команду:

  • sudo apt install openjdk-11-jre

Теперь посмотрим, как установить официальные версии JDK и JRE от Oracle.

Установка Oracle JDK

Если вы хотите установить официально распространяемую версию Oracle JDK, вам нужно добавить новое хранилище пакетов для версии, которую вы хотите использовать.

Чтобы установить Java 8 (последняя версия LTS), нужно вначале добавить для нее хранилище пакетов:

  • sudo add-apt-repository ppa:webupd8team/java

При добавлении хранилища выводится сообщение следующего вида:

output

Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK8). There are no actual Jav a files in this PPA. Important -> Why Oracle Java 7 And 6 Installers No Longer Work: http://www.webupd8.org/2017/06/why-oracl e-java-7-and-6-installers-no.html Update: Oracle Java 9 has reached end of life: http://www.oracle.com/technetwork/java/javase/downloads/j dk9-downloads-3848520.html The PPA supports Ubuntu 18.04, 17.10, 16.04, 14.04 and 12.04. More info (and Ubuntu installation instructions): - for Oracle Java 8: http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html Debian installation instructions: - Oracle Java 8: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html For Oracle Java 10, see a different PPA: https://www.linuxuprising.com/2018/04/install-oracle-java-10-in-ubuntu-or.html More info: https://launchpad.net/~webupd8team/+archive/ubuntu/java Press [ENTER] to continue or Ctrl-c to cancel adding it.

Нажмите ENTER, чтобы продолжить. Затем обновите список пакетов:

После обновления списка пакетов выполните установку Java 8:

  • sudo apt install oracle-java8-installer

Ваша система загрузит JDK от Oracle и предложит вам принять лицензионное соглашение. После принятия условий соглашения будет выполнена установка JDK.

Теперь рассмотрим, как выбрать версию Java, которую вы хотите использовать.

Управление Java

На одном сервере может быть установлено несколько версий Java. Задать версию по умолчанию можно через командную строку с помощью команды update-alternatives.

  • sudo update-alternatives --config java

Если вы установили все версии Java, перечисленные в этом обучающем модуле, результат будет выглядеть так:

Output

There are 3 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 auto mode 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode 3 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode

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

Это можно сделать и для других команд Java, например, для компилятора (javac):

  • sudo update-alternatives --config javac

Также эту команду можно использовать для настройки других команд, в том числе keytool, javadoc, jarsigner и т. д.

Настройка переменной среды

JAVA_HOME

Многие программы, написанные на Java, используют переменную среды JAVA_HOME для определения каталога установки Java.

Чтобы задать эту переменную среды, нужно предварительно определить место установки Java. Используйте команду update-alternatives:

  • sudo update-alternatives --config java

Эта команда показывает каждую установку Java и путь установки:

Output

There are 3 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 auto mode 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode 3 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode Press <enter> to keep the current choice[*], or type selection number:

В данном случае пути установки выглядят следующим образом:

  1. OpenJDK 11 находится в каталоге /usr/lib/jvm/java-11-openjdk-amd64/bin/java.
  2. OpenJDK 8 находится в каталоге /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java.
  3. Oracle Java 8 находится в каталоге /usr/lib/jvm/java-8-oracle/jre/bin/java.

Скопируйте путь каталога установки предпочитаемой версии. Откройте каталог /etc/environment в nano или другом текстовом редакторе:

  • sudo nano /etc/environment

Добавьте в конце этого файла следующую строку и замените выделенный путь скопированным путем:

/etc/environment

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/bin/"

При изменении файла будет задан путь JAVA_HOME для всех пользователей системы.

Сохраните файл и выйдите из редактора.

Снова загрузите файл, чтобы применить изменения к текущему сеансу:

Убедитесь, что переменная среды задана:

Вы увидите путь, который только что задали:

Output

/usr/lib/jvm/java-11-openjdk-amd64/bin/

Другим пользователям для применения этого параметра нужно будет выполнить команду source /etc/environment или выйти из системы и снова войти в нее.

Заключение

В этом обучающем модуле вы установили разные версии Java и научились управлять ими. Теперь вы можете устанавливать программное обеспечение, работающее на платформе Java, в том числе Tomcat, Jetty, Glassfish, Cassandra или Jenkins.

Установка Java в Ubuntu 18.04

Java — объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems с 1991 года и официально выпущенный 23 мая 1995 года. Изначально новый язык программирования назывался Oak (James Gosling) и разрабатывался для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания апплетов, приложений и серверного программного обеспечения.
Особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.

Установка JRE/JDK по умолчанию

Для установки используем версию, входящую в пакет Ubuntu. По умолчанию в пакет Ubuntu 18.04 входит Open JDK (версия JRE и JDK с открытым исходным кодом).

Данный пакет устанавливает версию OpenJDK 10 или 11.

Для установки обновите индекс пакетов:

sudo apt update  

Затем нужно проверить, выполнялась ли установка Java ранее:

java -version  

Если установка Java не выполнялась, вы увидите подобный результат:

root@kvmde67-19464:~# java -version  

Command 'java' not found, but can be installed with:  

apt install default-jre  
apt install openjdk-11-jre-headless  
apt install openjdk-8-jre-headless  

Далее, запустим команду для установки OpenJDK:

sudo apt install default-jre  

Эта команда выполняет установку среды Java Runtime Environment (JRE). Она позволяет запускать практически любое программное обеспечение Java.

Проверьте установку с помощью следующей команды:

java -version  

Вы увидите подобный результат:

root@kvmde67-19464:~# java -version  
openjdk version "11.0.6" 2020-01-14  
OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)  
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)  

Для компиляции и запуска некоторых специфических программ на базе Java в дополнение к JRE вам может потребоваться комплект разработчика Java Development Kit (JDK).

Для установки JDK выполним следующую команду, которая также выполняет установку JRE:

sudo apt install default-jdk  

Далее, проверим установку JDK, проверив версию javac, компилятора Java:

javac -version  

Вы увидите подобный результат:

root@kvmde67-19464:~# javac -version  
javac 11.0.6  
Установка определенных версий OpenJDK

OpenJDK 8
Для установки OpenJDK 8 нужно выполнить следующую команду:

sudo apt install openjdk-8-jdk  

Для проверки установки используется команда

java -version  

Вы увидите подобный результат:

root@kvmde67-19464:~# java -version  
openjdk version "1.8.0_162"  
OpenJDK Runtime Environment (build 1.8.0_162+10-post-Ubuntu-1ubuntu118.04.1)  
OpenJDK 64-Bit Server VM (build 1.8.0_162+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)  

Также можно установить только JRE, для этого нужно выполнить команду

sudo apt install openjdk-8-jre.  

OpenJDK 10/11
Для установки OpenJDK 10/11 используется следующая команда:

sudo apt install openjdk-11-jdk  

Чтобы установить только JRE, нужно использовать следующую команду:

sudo apt install openjdk-11-jre  
Установка Oracle JDK

Если вы хотите установить официально распространяемую версию Oracle JDK, вам нужно добавить новое хранилище пакетов для версии, которую вы хотите использовать.

Чтобы установить Java 8, нужно вначале добавить для нее хранилище пакетов:

sudo add-apt-repository ppa:webupd8team/java  

При добавлении хранилища выводится сообщение следующего вида:

Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK8). There are no actual Java files in this PPA.  

Important -> Why Oracle Java 7 And 6 Installers No Longer Work: http://www.webupd8.org/2017/06/why-oracle-java-7-and-6-installers-no.html  

Update: Oracle Java 9 has reached end of life: http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html  

The PPA supports Ubuntu 18.10, 18.04, 16.04, 14.04 and 12.04.  

More info (and Ubuntu installation instructions):  
- http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html

Debian installation instructions:  
- Oracle Java 8: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html
 More info: https://launchpad.net/~webupd8team/+archive/ubuntu/java
Press [ENTER] to continue or Ctrl-c to cancel adding it.  

Для продолжения нажмите кнопку ENTER.

Далее обновим список пакетов:

sudo apt update  

После обновления выполним установку Java 8:

sudo apt install oracle-java8-installer  

Ваша система загрузит JDK от Oracle и предложит вам принять лицензионное соглашение. После принятия условий соглашения будет выполнена установка JDK.

Управление Java

На одном сервере может быть установлено несколько версий Java. Задать версию по умолчанию можно через командную строку с помощью команды update-alternatives.

sudo update-alternatives --config java  

Если вы установили разные версии Java, результат вы увидите такой:

root@kvmde67-19464:~# sudo update-alternatives --config java  
There are 2 choices for the alternative java (providing /usr/bin/java).  

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press <enter> to keep the current choice[*], or type selection number:  

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

Это можно сделать и для других команд Java, например, для компилятора (javac):

sudo update-alternatives --config javac  

Вы увидите подобный результат:

root@kvmde67-19464:~# sudo update-alternatives --config javac  
There are 2 choices for the alternative javac (providing /usr/bin/javac).  

  Selection    Path                                          Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac    1081      manual mode

Press <enter> to keep the current choice[*], or type selection number:  
Настройка переменной среды JAVA_HOME

Чтобы задать переменную среду, нужно предварительно определить каталога установки Java. Используйте команду update-alternatives:

sudo update-alternatives --config java  

Эта команда показывает каждую установку Java и путь установки:

root@kvmde67-19464:~# sudo update-alternatives --config java  
There are 2 choices for the alternative java (providing /usr/bin/java).  

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press <enter> to keep the current choice[*], or type selection number:  

Скопируйте путь каталога установки предпочитаемой версии. Откройте каталог /etc/environment в текстовом редакторе:

sudo nano /etc/environment  

Добавьте в конце этого файла следующую строку и замените путь скопированным ранее:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/bin/"  

При изменении файла будет задан путь JAVA_HOME для всех пользователей системы.

Сохраните изменения и закройте файл (CTRL + X, Y, Enter).

Еще раз загрузите файл, для применения изменений к текущему сеансу:

source /etc/environment  

Просмотрите, что переменная среда задана:

echo $JAVA_HOME  

Вы увидите путь, который только что задали:

root@kvmde67-19464:~# echo $JAVA_HOME  
/usr/lib/jvm/java-11-openjdk-amd64/bin/

Другим пользователям для применения этого параметра нужно будет выполнить команду source /etc/environment.


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

Как я могу переключаться между двумя версиями Java в Mountain Lion теперь, когда настройки Java исчезли?

Вам может понадобиться два подхода:

  • один для переключения версии только для плагина апплета
  • другой подход для переключения версии для других частей JRE без переключения версии для плагина апплета.

Мой недавний случай использования :

  • Java 8 для приложений, которые не используют плагин
  • Java 7 Update 9 для плагина апплета.

  1. Закройте веб-браузеры и любые другие приложения, использующие Java или плагин Java-апплета.
  2. установить JDK 8
  3. выделить плагин
  4. установите JRE 7 Update 9 или JDK 7 Update 09.

Откладывая в сторону: предложенный ход

sudo mv /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin /private/var/tmp

Если вы планируете часто переключаться , вы можете предпочесть другое временное местоположение.

Результат

sh-3.2$ java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b58)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b02, mixed mode)
sh-3.2$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.8.2
BuildVersion:   12C60

В то же время:

Ответы под:


Установите JDK 7 Обновление 09, затем JDK 8

  • ОС и приложения по умолчанию будут использовать самую большую версию.

Закройте все приложения, использующие Java. Нет необходимости выходить из браузера.

Отложите в сторону jdk1.8каталог…

/Library/Java/JavaVirtualMachines

  • ОС и приложения будут использовать Java 7 Update 9.

Закройте все приложения, использующие Java. Нет необходимости выходить из браузера.

Отложите в сторону jdk1.7каталог…

/Library/Java/JavaVirtualMachines

  • ОС и приложения будут использовать Java 6 Update 37.

пример

macbookpro08-centrim:~ gjp22$ java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
macbookpro08-centrim:~ gjp22$ sudo mv /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk /private/var/tmp
Password:
macbookpro08-centrim:~ gjp22$ java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)

Для пользователей OS X кое-что из того, что предоставлено Oracle, первоначально вводит в заблуждение:

… и так далее.

Простота

Хотя ничто из вышеперечисленного не так просто, как переключение с помощью приложения Java Preferences, ранее установленного Apple, относительно простой подход откладывания (не требуется специальной деинсталляции) напоминает желание установки с помощью перетаскивания… ранее выраженное в область openjdk-osx-build .

Кто-то может захотеть создать приложение, но я не должен рекомендовать использовать символические ссылки — это будет работать, но может не соответствовать будущим методам перетаскивания мышью к установке.

Примечания стороны

На момент написания самых последних поддерживаемых версий , для которых Oracle делает обновление публично доступно являются (отличным от OS X платформ) Java 6 Update 37 и (для платформ , включая OS X) Java 7 Update 9.

Поскольку будут доступны более крупные выпуски, пожалуйста, интерпретируйте этот ответ соответствующим образом.

Терминология версии Java в этом ответе соответствует терминологии справочного центра Java .

Вышла Java 16 — PCNEWS.RU

Вышла 16-я версия платформы Java SE. В этот релиз попало около двух с половиной тысяч закрытых задач и 17 JEP’ов. Изменения API можно посмотреть здесь. Release notes здесь.

Уже сейчас доступны для скачивания дистрибутивы Oracle JDK и OpenJDK.

JEP’ы, которые попали в Java 16, мы разобьём на четыре категории: язык, API, JVM и инфраструктура.

Язык

Паттерн-матчинг для оператора instanceof (JEP 375)

Оператор instanceof с паттерн-матчингом, который появился в Java 14 и перешёл во второе preview в Java 15, теперь стал стабильной синтаксической конструкцией и больше не требует флага --enable-preview. Паттерн-матчинг мы подробно рассматривали в этой статье, и с того момента в него было внесено два изменения:

Во-первых, переменные паттернов теперь не являются неявно финальными:

if (obj instanceof String s) {
    s = "Hello"; // OK в Java 16, ошибка в Java 15
}

Во-вторых, если тип выражения, известный на этапе компиляции, является подтипом проверяемого типа, то теперь это ошибка компиляции:

String str = ...
if (str instanceof String s) { // Oшибка в Java 16, OK в Java 15
}
Записи (JEP 395)

Ещё одна синтаксическая конструкция, которая стала стабильной — это записи. Она также была в режиме preview в Java 14 и Java 15. Записи мы также подробно рассматривали ранее. В Java 16 было внесено следующее изменение: теперь во внутренних классах разрешено объявлять статические члены:

public class Outer {
    public class Inner {
        // OK в Java 16, ошибка в Java 15
        static void main(String[] args) {
        }

        // OK в Java 16, ошибка в Java 15
        record Point(int x, int y) {
        }
    }
}

sealed классы (второе preview) (JEP 397)

«Запечатанные» классы, которые появились в Java 15 в режиме preview, остаются в этом статусе. Их мы рассматривали в этой статье. Изменения по сравнению с прошлой версией следующие:

JVM

Строгая инкапсуляция внутренностей JDK по умолчанию (JEP 396)

Инкапсуляция внутренних API JDK, которая была введена в Java 9, теперь стала строгой: если в Java 9–15 значение опции --illegal-access было по умолчанию permit, то с Java 16 она становится deny. Это значит, что рефлективный доступ к защищённым членам классов и статический доступ к неэкспортированным API (sun.*, com.sun.*, jdk.internal.* и т.д.) теперь будет выбрасывать ошибку.

Если код требует доступа к внутренностям JDK во время выполнения, то чтобы он продолжал работать на Java 16, теперь придётся явно указывать одну из трёх опций JVM:

  • --illegal-access=permit/warn/debug: открытие всех пакетов JDK
  • --add-opens=module/package=target-module: открытие одного пакета
  • --add-exports=module/package=target-module: экспортирование одного пакета (только для статического доступа)

В будущем опция --illegal-access может быть удалена окончательно. Начиная с Java 16, при её использовании выдаётся предупреждение: Option --illegal-access is deprecated and will be removed in a future release.

Изменения не касаются критического API в модуле jdk.unsupported: классы в пакетах sun.misc и sun.reflect остаются доступными без флагов.

Warnings for Value-Based Classes (JEP 390)

Классы-обёртки примитивных типов (Integer, Double, Character и т.д.) теперь относятся к категории value-based классов, и их конструкторы, которые ранее стали deprecated в Java 9, теперь помечены как deprecated for removal.

Понятие value-based классов появилось в спецификации API Java 8. Такие классы являются неизменяемыми, создаются только через фабрики, и в их использовании не должны использоваться операции, чувствительные к identity: сравнение на ==, синхронизация, identityHashCode() и т.д. Value-based классы являются кандидатами для миграции на примитивные классы в рамках проекта Valhalla, который сейчас находится в стадии активной разработки.

При синхронизации на объектах value-based классов теперь будет выдаваться предупреждение во время компиляции:

Double d = 0.0;
synchronized (d) { // warning: [synchronization] attempt to synchronize on an instance of a value-based class
}

Также можно включить проверки синхронизации на value-based объектах во время выполнения с помощью флагов JVM:

  • -XX:+UnlockDiagnosticVMOptions -XX:DiagnoseSyncOnValueBasedClasses=1: при попытке синхронизации будет фатальная ошибка.
  • -XX:+UnlockDiagnosticVMOptions -XX:DiagnoseSyncOnValueBasedClasses=2: при попытке синхронизации будет предупреждение.
ZGC: Concurrent Thread-Stack Processing (JEP 376)

Обработка стеков потоков в сборщике мусора ZGC теперь перенесена из safepoints в конкурентную фазу. Это позволило ещё сильнее уменьшить паузы сборщика мусора.

Unix-Domain Socket Channels (JEP 380)

Добавлена поддержка сокетов доменов Unix в socket channel и server-socket channel API. Такие сокеты используются для межпроцессного взаимодействия внутри одного хоста, и в них не используются сетевые соединения, что делает такое взаимодействие более безопасным и эффективным. Сокеты доменов Unix с недавних пор поддерживаются в Windows 10 и Windows Server 2019.

Elastic Metaspace (JEP 387)

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

Alpine Linux Port (JEP 386)

JDK теперь портирован на Alpine Linux и другие дистрибутивы Linux, которые используют musl в качестве реализации стандартной библиотеки C. Alpine Linux популярен в облаках, микросервисах и контейнерах благодаря своему маленькому размеру образа. Новый порт позволит нативно запускать JDK в этих окружениях.

Windows/AArch64 Port (JEP 388)

JDK также портирован на архитектуру Windows/AArch64. Это позволит запускать Java на компьютерах с Windows on ARM, которые в последнее время набирают популярность.

API

Новые методы в 

Stream

Хотя для этих двух новых методов в интерфейсе java.util.stream.Stream нет отдельного JEP, хочется упомянуть их здесь, так как это довольно заметное изменение.

Первый метод — это Stream.toList(). Этот метод собирает содержимое Stream в неизменяемый список и возвращает его. При этом, в отличие от Collectors.toUnmodifiableList(), список, который возвращается из Stream.toList(), толерантен к null-элементам.

Второй метод — это Stream.mapMulti() (и примитивные специализации). Это метод является императивным аналогом метода Stream.flatMap(): если flatMap() принимает функцию, которая для каждого элемента должна вернуть Stream, то mapMulti() принимает процедуру с двумя параметрами, где первый параметр — это текущий элемент, а второй — Consumer, в который кладутся значения. Пример:

IntStream.rangeClosed(1, 10).mapMulti((i, consumer) -> {
    for (int j = 1; j 
Инструмент упаковки (JEP 392)

Инструмент создания самодостаточных приложений jpackage, который появился в Java 14 в инкубационном статусе, теперь стал постоянным модулем.

Vector API (Incubator) (JEP 338)

Появился новый инструментарий для преобразования векторных вычислений в SIMD-инструкции процессора (x64 и AArch64). Векторное API позволит разработчику контролировать процесс компиляции и не полагаться на автовекторизацию, которая в JVM является ограниченным и хрупким механизмом. Явная векторизация может применяться в таких областях как машинное обучение, линейная алгебра, криптография и др.

API находится в инкубационном модуле jdk.incubator.vector.

Foreign Linker API (Incubator) (JEP 389)

Ещё одно новое API, которое появилось в результате работы над проектом Panama — это Foreign Linker API. Это инструментарий для статического доступа к нативному коду из Java, созданный для замены JNI: он должен быть более простым в использовании, более безопасным и желательно более быстрым.

Про Foreign API делал доклад Владимир Иванов из Oracle.

Foreign-Memory Access API (Third Incubator) (JEP 393)

API для доступа вне кучи Java, которое появилось в Java 14, остаётся в инкубационном статусе с некоторыми изменениями.

Инфраструктура

Enable C++14 Language Features (JEP 347)

Кодовая база JDK до Java 16 использовала стандарты C++98/03. При этом с Java 11 код стал собираться версией с более новым стандартом, однако в нём всё ещё нельзя было использовать возможности стандарта C++11/14. Теперь же часть из этих возможностей использовать можно: в гиде по стилю HotSpot определён список возможностей C++11/14, которые можно использовать и которые нельзя.

Migrate from Mercurial to Git (JEP 357) и Migrate to GitHub (JEP 369)

Совершён переход репозиториев JDK на Git и GitHub. Миграция была полностью завершена в сентябре 2020 года, и разработка Java 16 уже полностью велась в новом репозитории.

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

Также сейчас обсуждается переход на Git более старых версий JDK: jdk11u и, возможно, jdk8u.

Java 16 является STS-релизом, у которого выйдет только два обновления.

Если вы не хотите пропускать новости о Java, то подписывайтесь на Telegram-канал miniJUG

Что нового в Java 9 и JDK 9: все, что вам нужно знать

Java 9 — формально Java Platform Standard Edition версии 9 — наконец-то здесь, и ее Java Development Kit (JDK) доступен для загрузки разработчиками.

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

Где скачать Java 9 JDK

Oracle опубликовала Java SE 9 JDK и документацию для загрузки разработчиками.

Ключевые новые функции в Java 9

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

Модульность Java 9 меняет правила игры

Новые противоречивые возможности модульности, основанные на Project Jigsaw, несомненно, вызовут интерес у передовых Java-магазинов, которые хотят увидеть, что JDK 9 может предложить сейчас, даже если более консервативные магазины решают подождать, пока модульность созреет.

Модульность — в форме системы модулей платформы Java — делит JDK на набор модулей для объединения во время выполнения, компиляции или сборки.Модульность была названа «переходным» изменением, позволяющим понять зависимости между модулями.

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

Аспекты модульности Java 9 включают упаковку приложений, разбиение на модули самого JDK и реорганизацию исходного кода в модули. Система сборки улучшена для компиляции модулей и обеспечения соблюдения границ модуля во время сборки.Образы JDK и Java Runtime Environment (JRE) реструктурированы для обработки модулей. Кроме того, элементы управления пользовательского интерфейса JavaFX и API-интерфейсы CSS теперь доступны для модульности.

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

Благодаря модульности разработчики смогут лучше создавать и поддерживать библиотеки и большие приложения как для Java SE (Standard Edition), так и для Java EE (Enterprise Edition).Но во время разработки Java 9 у Oracle, IBM, Red Hat и других были большие разногласия по поводу того, как именно произвести такие радикальные изменения в платформе. Сама модульная система была отклонена в мае и одобрена вторым голосованием в июне после того, как был достигнут прогресс.

Даже при наличии соглашения между основными поставщиками Java остаются разногласия по поводу того, принесет ли модульность Java-разработчикам много пользы: одни эксперты говорят «да», а другие — нет. Тем не менее, Java 9 теперь разбита на модули.

Чтобы упростить переход на модульную Java 9, Java 9 допускает незаконный доступ с отражением для кода на пути к классам, который используется JRE для поиска классов и файлов ресурсов. Эта возможность будет запрещена после Java 9.

Улучшения компилятора для кода Java 9

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

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

Но Дмитрий Лесков, директор по маркетингу компании Excelsior, занимающейся разработкой Java-технологий, обеспокоен тем, что опережающая технология компиляции недостаточно развита, и сожалеет, что Oracle дождалась появления более надежной версии Java 10.

Java 9 также предлагает второй этап развертывания интеллектуальной компиляции Oracle. Эта функция включает повышение стабильности и переносимости инструмента s javac , чтобы его можно было использовать в JVM (виртуальной машине Java) по умолчанию. Инструмент также будет обобщен, чтобы его можно было использовать для больших проектов за пределами JDK. JDK 9 также обновил компилятор javac , чтобы он мог компилировать программы Java 9 для работы в некоторых более старых версиях Java.

Еще одна новая, но экспериментальная функция компиляции — это интерфейс компилятора JVM на уровне Java (JVMCI).Этот интерфейс позволяет компилятору, написанному на Java, использоваться JVM в качестве динамического компилятора. API JVMCI предоставляет механизмы для доступа к структурам виртуальных машин, установки скомпилированного кода и подключения к системе компиляции JVM.

Написание компилятора JVM на Java должно позволить получить высококачественный компилятор, который легче поддерживать и улучшать, чем существующие компиляторы, написанные на C или C ++. В результате компиляторы, написанные на самой Java, должны быть проще в обслуживании и улучшении. К другим существующим усилиям по включению компиляторов в Java относятся Graal Project и Project Metropolis.

Новая возможность управления компилятором предназначена для обеспечения детального и контекстно-зависимого управления компиляторами JVM, позволяя разработчикам изменять параметры управления компилятором во время выполнения без снижения производительности. Инструмент также позволяет обходные пути для ошибок компилятора JVM.

REPL наконец-то появился в Java 9

В Java 9 есть инструмент цикла чтения-оценки-печати (REPL) — еще одна долгосрочная цель Java, которая становится реальной в этой версии после многих лет разработки в рамках Project Kulia.

Java 9 REPL, называемый jShell, интерактивно оценивает декларативные операторы и выражения. Разработчики могут получить обратную связь о программах перед компиляцией, просто введя несколько строк кода.

Возможности инструмента командной строки включают завершение табуляции и автоматическое добавление необходимых точек с запятой в терминале. API jShell обеспечивает функциональность jShell в IDE и других инструментах, хотя сам инструмент не является IDE.

Отсутствие REPL было названо причиной отказа школ от Java.(Такие языки, как Python и Scala, давно имеют REPL.) Но основатель языка Scala Мартин Одерски сомневается в полезности REPL в Java, говоря, что Java ориентирована на операторы, тогда как REPL ориентированы на выражения.

Усовершенствования API потоков в Java 9

Потоки в Java позволяют разработчикам выполнять вычисления, чтобы можно было эффективно использовать параллелизм данных. Возможности Stream в Java 8 предназначены для декларативной обработки данных с использованием многоядерных архитектур.

В Java 9 Streams API добавляет методы для условного приема и удаления элементов из Stream, перебора элементов Stream и создания потока из значения, допускающего значение NULL, при расширении набора API Java SE, которые могут служить источниками Streams.

Кэш кода может быть разделен в Java 9

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

Улучшенная поддержка JavaScript в Java 9 через Project Nashorn

Project Nashorn, который обеспечивает облегченную среду выполнения JavaScript для Java, улучшается в JDK 9. Проект Nashorn был попыткой реализовать высокопроизводительную, но легкую среду выполнения JavaScript в Java , продолжая проект Rhino, начатый в Netscape. Проекту Nashorn было поручено включить встраивание JavaScript в приложения Java. Он предоставил Java с движком JavaScript в JDK 8.

JDK 9 включает API синтаксического анализатора для синтаксического дерева ECMAScript Нэшорна.API позволяет анализировать код ECMAScript с помощью IDE и серверных фреймворков вне зависимости от внутренних классов реализации Project Nashorn.

Клиентский API HTTP / 2 появился в Java 9

Бета-версия клиентского API HTTP / 2 появилась в JDK 9, реализовав в Java обновление основного протокола HTTP в сети. WebSocket также поддерживается API.

API HTTP / 2 может заменить HttpURLConnection API, у которого были проблемы, в том числе он был разработан с использованием ныне несуществующих протоколов, предшествовал HTTP / 1, был слишком абстрактным и сложным в использовании.

Улучшенная поддержка HTML5 и Unicode в Java 9

В JDK 9 инструмент документации Javadoc расширен для создания разметки HTML5. Также поддерживается стандарт кодировки Unicode 8.0, который добавляет 8000 символов, 10 блоков и шесть сценариев.

API безопасности DTLS добавлен в Java 9

Для обеспечения безопасности в Java 9 добавлен API для DTLS (безопасность транспортного уровня дейтаграмм). Протокол был разработан для предотвращения подслушивания, взлома и подделки сообщений при обмене данными между клиентом и сервером.Предусмотрена реализация как для клиентского, так и для серверного режимов.

Что Java 9 осуждает и удаляет

Java 9 осуждает или удаляет несколько функций, которые больше не являются модными. Главный из них — API апплета, который устарел. Сейчас это вышло из моды, когда производители браузеров, заботящиеся о безопасности, отказываются от поддержки подключаемых модулей Java-браузера. Появление HTML5 также способствовало их кончине. Теперь разработчики могут выбрать альтернативы, такие как Java Web Start, для запуска приложений из браузера или устанавливаемые приложения.

Инструмент appletviewer также устарел.

В Java 9 также не рекомендуется использовать сборщик мусора Concurrent Mark Sweep (CMS), поддержка которого будет прекращена в одном из будущих выпусков. Цель состоит в том, чтобы ускорить разработку других сборщиков мусора на виртуальной машине HotSpot. Сборщик мусора G1 с малой паузой предназначен для долгосрочной замены CMS.

Между тем комбинации сборки мусора, ранее устаревшие в JDK 8, удалены в JDK 9. К ним относятся редко используемые комбинации, такие как Incremental CMS, ParNew + SerialOld и DefNew + CMS, которые добавили дополнительную сложность к базе кода сборщика мусора.

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

В Java 9 также удалена возможность выбора JRE во время запуска с помощью функции Multiple JRE (mJRE). Эта возможность использовалась редко, усложняла реализацию средства запуска Java и никогда не была полностью задокументирована, когда она дебютировала в JDK 5.

Oracle удалила агент JVM TI (интерфейс инструментов) hprof (профилирование кучи), который был заменен в JVM. Инструмент jhat также был удален, поскольку он был устаревшим из-за улучшенных визуализаторов и анализаторов кучи.

Java 9 завершает свою линейку, поскольку начинается новая линия Java 9

Можно сказать, что Java 9 выходит на рынок на ура, со всеми новыми возможностями. Oracle недавно сообщила, что Java 9 — последняя в своем роде с точки зрения назначения и времени, прошедшего между основными выпусками.

С этого момента Java планируется выпускать в течение шести месяцев, со следующей основной версией, которая будет называться Java 18.3, выйдет в марте 2018 года, а через шесть месяцев появится Java 18.9.

Последовательность новых выпусков Java также означает, что JDK 9 не будет обозначаться как выпуск с долгосрочной поддержкой. Вместо этого следующей долгосрочной версией будет Java 18.9.

Более быстрая периодичность выпуска Java означает, что разработчикам не придется так долго ждать основных выпусков. Это также может означать, что разработчики пропустят Java 9 и ее «незрелые» функции модульности и будут ждать шесть месяцев для новой версии, которая, скорее всего, утонет. «Избегайте любых перегибов», — сказал Саймон Мейпл, директор по защите интересов Java в компании ZeroTurnaround, разработчике инструментов Java.

Авторские права © IDG Communications, Inc., 2017.

5 функций в Java 9, которые ИЗМЕНИТ способ разработки программного обеспечения (и 2, которые не будут)

Какие наиболее интересные функции, как ожидается, будут выпущены в Java 9? (Первоначально опубликовано 17 июня 2015 г.)

Не отвлекайтесь на относительную тишину вокруг Java 9! Коммиттеры JDK усердно работают над подготовкой следующего релиза, который, как ожидается, станет общедоступным в сентябре 2017 года.Сборки для раннего доступа уже доступны, и мы ведем отсчет дней до их общедоступности на веб-сайте Java 9 Countdown.
Сегодня у нас есть довольно четкое представление о функциях, которые мы можем ожидать от Java 9. Если Java 8 можно было бы описать как основной выпуск лямбда-выражений, потоков и изменений API, то Java 9 — это все о Jigsaw, jshell и коллекции под капотом и обновления API. В этом посте мы собрали некоторые из функций, которые, по нашему мнению, являются наиболее интересными, которые нацелены на Java 9 — помимо обычного подозреваемого, проект Jigsaw, который взял на себя миссию сломать JRE и привнести модульность в основные компоненты Java. .

[Обновление от 7 февраля 2018 г .: ожидается, что Java 9 произведет революцию в нашем понимании и создании крупномасштабных приложений. В нашем веб-семинаре «Первые впечатления от Java 9» рассказывается, как это сделать.]

Присоединяйтесь к вебинару

Вот некоторые из функций, о которых необходимо знать в Java 9: ​​

  1. Java + REPL = jshell
  2. Примечательные обновления API: параллелизм и обход стека
  3. G1 будет новым сборщиком мусора по умолчанию
  4. HTTP 2.0 — это будущее
  5. API процессов получил огромный импульс

Плюс,

1. Java + REPL = jshell

Да. Раньше мы сомневались, что проект Kulla доживет до Java 9, но теперь он официально. В следующем выпуске Java будет новый инструмент командной строки под названием jshell, который добавит встроенную поддержку и популяризирует Java-способ REPL (Read-Eval-Print-Loop). Это означает, что, скажем, если вы хотите запустить несколько строк Java отдельно, вам не придется оборачивать все это в отдельный проект или метод.Да, и точки с запятой — о них можно забыть:
Есть некоторые альтернативы, такие как надстройки REPL для популярных IDE и решения, такие как веб-консоль Java REPL, но пока нет официального и правильного способа сделать это. jshell уже доступен в раннем выпуске и ждет, пока вы его протестируете.

2. Примечательные обновления API: параллелизм и обход стека

В рамках обновления этого сообщения нам потребовались дополнительные функции, которые мы подробно рассмотрели после публикации этого сообщения.
Первое, что мы хотим здесь упомянуть, — это обновления параллелизма Java 9 с CompletableFuture и java.util.concurrent.Flow. Flow — это Java-реализация Reactive Streams API, и мы очень рады, что она перейдет на Java. Реактивные потоки избавляют от боли в спине. Накопление данных, которое происходит, когда скорость входящих задач превышает способность приложения их обрабатывать, что приводит к образованию буфера необработанных данных. В рамках обновлений параллелизма CompletableFuture также получит обновление, которое разрешит жалобы, поступившие после их введения в Java 8.Это будет включать поддержку задержек и тайм-аутов, лучшую поддержку подклассов и несколько служебных методов.
Второе, о чем мы хотели упомянуть, это API-интерфейс Stack Walking. Верно, Java 9 изменит способ обхода трассировок стека. По сути, это официальный способ Java обрабатывать трассировки стека, а не просто рассматривать их как простой текст. Это также звучит как расплывчатая отсылка к «Звездным войнам». Что нам еще больше понравилось!

3. G1 будет новым сборщиком мусора по умолчанию

Распространенное заблуждение, которое мы часто слышим, заключается в том, что в Java есть только один сборщик мусора, хотя на самом деле их четыре.До Java 9 сборщиком мусора по умолчанию был Parallel / Throughput Collector, а теперь он будет заменен на G1, который был представлен в Java 7. Чтобы получить краткий обзор различий между сборщиками, вы можете проверить этот пост справа здесь.
Как правило, G1 был разработан для лучшей поддержки кучи размером более 4 ГБ и, как известно, вызывает менее частые паузы сборщика мусора, но когда пауза все же наступает, она, как правило, длиннее. Мы также обсудили все, что касается GC, с Хаимом Ядидом, руководителем отдела производительности в Next Insurance, чтобы помочь вам узнать больше о различных компромиссах между коллекционерами.
[adrotate group = ”11 ″]

4. HTTP 2.0 — это будущее

Официальный HTTP 2.0 RFC был одобрен не так давно, он основан на алгоритме Google SPDY. SPDY уже продемонстрировал значительное улучшение скорости по сравнению с HTTP 1.1 в диапазоне от 11,81% до 47,7%, и его реализация уже существует в большинстве современных браузеров.
Java 9 будет иметь полную поддержку HTTP 2.0 и новый HTTP-клиент для Java, который заменит HttpURLConnection, а также будет реализовывать HTTP 2.0 и веб-сокеты.Еще одна интересная особенность этого нового API заключается в том, что он будет представлен как первый модуль инкубатора на Java. Модуль инкубатора — это, по сути, экспериментальная функция, которая либо будет внедрена в следующей версии Java, в данном случае Java 10, либо будет удалена. Довольно необычная концепция для Java, которая поощряла бы эксперименты без нарушения обратной совместимости.

5. Технологический API только что получил огромное развитие

До сих пор возможности контроля и управления процессами операционной системы с помощью Java были ограничены.Например, чтобы сделать что-то столь же простое, как получение PID вашего процесса в более ранних версиях Java, вам потребуется либо получить доступ к машинному коду, либо использовать какой-то волшебный обходной путь. Более того, для каждой платформы потребуется своя реализация, чтобы гарантировать получение правильного результата.
В Java 9 ожидайте код для получения идентификаторов Linux PID, который теперь выглядит следующим образом:
Для преобразования во что-то вроде этого (которое также поддерживает все операционные системы):
Обновление расширит возможности Java для взаимодействия с операционной системой: Новые прямые методы для обработки PID, имен и состояний процессов, а также возможность перечислять JVM, процессы и многое другое.Это может быть не слишком увлекательно для некоторых, но мы в OverOps, вероятно, будем широко его использовать, поэтому мы решили выделить его среди других функций.

Хотя этот пост не является эксклюзивным для Java 9, мы подумали, что это хорошая возможность поделиться некоторыми новыми достижениями, которых мы достигли. Устранение ошибок в производственной среде всегда было беспорядочной практикой, поиском подсказок в огромных файлах журнала и попытками определить состояние, которое вызвало каждое исключение или зарегистрированную ошибку.Но что, если бы вы могли вообще избежать журналов? Вот как это делается.
У многих Java-разработчиков, которые проверяли его, было довольно много вопросов об этом инструменте, поэтому мы также настроили эту форму для демонстраций один на один, проверили ее и запланировали индивидуальное пошаговое руководство.

Чего вы не увидите в Java 9?

Две интересные функции, которые, как мы предполагали, станут частью предстоящего выпуска Java, но теперь мы знаем, что на этот раз они будут пропущены.

1. Стандартизированный облегченный JSON API

В опросе, который мы провели с 350 разработчиками, JSON API был так же раскручен, как и Jigsaw, но похоже, что он не стал популярным из-за проблем с финансированием.Марк Рейнхольд, главный архитектор платформы Java, в списке рассылки JDK 9:
«Этот JEP был бы полезным дополнением к платформе, но, по большому счету, он не так важен, как другие функции, финансируемые Oracle. или рассмотрение вопроса о финансировании для JDK 9. Мы можем пересмотреть этот JEP для JDK 10 или более поздней версии. ”

2. Деньги и валюта API

Из других новостей, похоже, ожидаемый API денег и валюты также не поддерживает Oracle. Это ответ, который мы получили от Анатоля Треша, руководителя спецификации API:

@tkfxin в настоящее время нет.Никакой поддержки со стороны Oracle в этом нет. Вместо этого мы улучшим поддержку ee, и пружина также будет поддерживать ее 🙂

— Weisheit gegen das «neue Normal» (@atsticks) 16 июня 2015 г.

3. В рамках обновления этого сообщения мы подумали, что также стоит упомянуть Project Amber. Проект, ориентированный на будущие версии Java, помимо Java 9. Подробнее.

Мы что-нибудь пропустили? Дайте нам знать в комментариях ниже.

Житницкий Алексей

Алекс — директор по маркетингу продуктов в OverOps.Как инженер, ставший маркетологом, он увлечен преобразованием сложных тем в простые повествования и использует свой опыт, чтобы помочь программной инженерии ориентироваться в многолюдном ландшафте DevOps.

новых функций, дата выпуска и многое другое

Java 9 медленно, но верно развивалась последние пару месяцев, и теперь эта функция находится во второй фазе Rampdown. Официальный представитель Oracle посоветовал отложить возможные ошибки до официальной даты выпуска.

Как правило, на этом этапе в первую очередь исправляются основные функции (ошибки P1 или P2). Это обеспечит базовую рабочую функциональность за счет устранения нескольких других мелких ошибок. Исправления ошибок P3-P5, которые могут повлиять на код продукта, скорее всего, будут отложены до будущих выпусков.

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

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

Oracle гарантирует, что они смогут увидеть полный обзор в действии, прежде чем они смогут быть на 100% уверены в выпуске. Разработчикам и фрилансерам тоже придется немного подождать Java 9.

Дата выпуска Java 9

Java 9 будет иметь обновленную схему строки версии JDK, которая будет выделять второстепенные, основные и критические выпуски обновлений (ЦП).В Open JDK официально указана конечная дата общедоступности — 27 июля 2017 г.

Если вы хотите напоминание о дате выпуска, добавьте в закладки Java 9 countdown .


Функции Java 9

Java 9 будет включать около 90 функций, включая следующие подмножества:

  • Модульность
  • Удобство разработчика
  • Струны
  • Диагностика
  • Опции JVM
  • Лесозаготовки
  • Документ Javadoc
  • JavaScript / HTTP
  • Собственная платформа
  • JavaFX
  • Изображения
  • Юникод
  • Разное

Вы можете узнать больше об этих отдельных подмножествах на DZone.


Головоломка проекта

Большинство людей знают, что Project Jigsaw был исключен из JDK 8 в Java 9 после того, как IBM и RedHat проголосовали против.

Несмотря на то, что Project Jigsaw не будет включен в следующее обновление, должно было произойти несколько интересных событий.

JEP (JDK Enhancement Proposals) — это процесс Oracle для сбора планов по улучшению Java Development Kit и Open JDK. Марк Рейнхольд заявил, что вероятность того, что какие-либо дальнейшие JEP-файлы будут нацелены на выпуск Java 9, весьма маловероятна.

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

Java 9 включает несколько флагманских функций: API, включая обновление API процессов, JSON (как часть java.util и API обработки денег).

Основные цели Java 9: ​​

  • Сделайте платформу Java Standard Edition и JDK более удобными для масштабирования для небольших вычислительных устройств.
  • Повысьте общую безопасность и поддерживайте не только JDK, но и реализации Java в целом.
  • Обеспечивает общее повышение производительности приложений.
  • Упростите разработчикам Java создание и поддержку библиотек кода и более крупных приложений для платформ Java SE и EE.

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

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


Обновления API

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

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


API изображений с разным разрешением

Oracle представит новый API изображений с несколькими разрешениями. Эта важная функция интерфейса в этом API — MultiResolitionImage, доступная в пакете java.awt.image.


Реактивные потоки

В настоящее время реактивное программирование пользуется популярностью при разработке приложений, чтобы получить большие преимущества. Такие фреймворки, как Scala, Play и Akka, присоединились к Reactive Streams.

Oracle также анонсирует новый Reactive Streams API.Новый Reactive Streams API представляет собой платформу публикации или подписки для простой реализации асинхронных, масштабируемых и параллельных приложений с использованием языка Java.


Частные методы в интерфейсах

Oracle хочет, чтобы пользователи избегали избыточного кода и создавали больше возможностей для повторного использования, представляя частные методы в интерфейсах Java 9. Пользователи могут писать частные и частные статические методы в интерфейсе с помощью ключевого слова private.


Микробенчмарки здесь

JMH (Java Microbenchmark Harness) Алексея Шипилева продвигает следующий шаг в своем развитии и объединяется с Java в качестве одобренного решения для тестирования.Java Benchmarking Harness используется для создания, запуска и оценки нано / микро / милли / макро тестов.

Необходимо учитывать факторы, такие как время прогрева и оптимизация, которые потенциально могут иметь большое влияние на результаты.

JMH — идеальный вариант, если вам нужны наиболее точные результаты, чтобы помочь вам принять правильное решение после тестов. Теперь это официально становится альтернативой Java 9.

Версия Java 9 будет включать множество других функций, включая JShell, REPL (цикл чтения-оценки-печати) для Java.Разработчики могут оценивать фрагменты кода (объявления, утверждения, выражения), чтобы код можно было тестировать в процессе его создания.

Для получения дополнительной информации о Java 9 обратитесь к Open JDK, в котором выделено текущее расписание и функции.

Обновление : Поскольку эта статья была написана, официальная дата выпуска теперь подтверждена как 21 сентября 2017 года.

Руководство разработчика

для Java 9, 10, 11, 12, 13 и более поздних версий

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

После принятия нового цикла выпуска, основанного на каденции, новые версии Java начали появляться как сумасшедшие, и если вы еще не догнали их — это отличное место для начала.

Последнее обновление: 14.03.2021

Основной источник путаницы: цикл новых выпусков

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

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

Но не все версии Java одинаковы — только один выпуск каждые три года может считаться LTS (долгосрочная поддержка), а последним LTS является Java 11.

Java 9

Java 9 была последней функционально-ориентированной версией Java в истории и содержала впечатляющее количество из 81 JEP.

Самым важным дополнением была JPMS (также известная как Project Jigsaw), но кроме этого мы получили:

Дата выпуска: 21 сентября 2017 г.

Все JEP можно найти здесь.

Java 10

Java 10 была первой версией, выпущенной в рамках нового цикла выпуска. Следовательно, в нем было всего 12 JEP и различные небольшие дополнения API, накопленные в течение шести месяцев после выпуска Java 9.

Наиболее заметные изменения включали введение логического вывода типа локальной переменной ( var ), интерфейс сборщика мусора, улучшения G1 (параллельный полный сборщик мусора) и совместное использование данных классов приложений.

Среди прочего, мы получили новые удобные сборщики для использования с неизменяемыми коллекциями:

  • Collectors.toUnmodifiableList ()
  • Collectors.toUnmodifiableSet ()
  • Collectors.toUn дата: 20 марта 2018 г.

    Все JEP можно найти здесь.

    Java 11 (LTS)

    Java 11 был первым выпуском с долгосрочной поддержкой и включал 17 JEP.

    Наиболее заметные изменения касались добавления HTTPClient, Flight Recorder, экспериментального сборщика мусора с малой паузой (ZGC) и экспериментального сборщика мусора без операций (Epsilon). Кроме того, были удалены модули Java EE и CORBA, а Nashorn устарел.

    Мы также получили крошечное дополнение к Optional API: isEmpty (), , которое является противоположностью isPresent ().

    И несколько интересных методов в String API:

    Дата выпуска: 25 сентября 2018 г.

    Все JEP можно найти здесь.

    Java 12

    Еще один относительно небольшой выпуск, содержащий всего 8 JEP.

    Выражения переключения языка были представлены в качестве предварительной версии, мы получили два улучшения G1 (1, 2) и новый экспериментальный сборщик мусора с малой паузой — Shenandoah.

    Дата выпуска: 19 марта 2019 г.

    Все JEP можно найти здесь.

    Java 13

    Самый маленький выпуск на сегодняшний день, содержащий всего 5 JEP.

    Выражения переключателя были уточнены, текстовые блоки были представлены в качестве функции предварительного просмотра, а API-интерфейс Socket был повторно реализован. Кроме того, мы получили поддержку Linux / AArch64 для ZGC.

    Дата выпуска: 17 сентября 2019 г.

    Все JEP можно найти здесь.

    Java 14

    В Java 14 было несколько интересных дополнений:

    Дата выпуска: 17 марта 2020 г.

    Все JEP можно найти здесь.

    Java 15

    Java 15 уже вышла и принесла несколько интересных дополнений:

    А также вторые превью:

    И второй инкубаторный выпуск API доступа к внешней памяти!

    Дата выпуска: 17 сентября 2020 г.

    Все JEP можно найти здесь.

    Java 16

    Java 16 скоро принесет несколько интересных дополнений:

    Помимо этого, разработка OpenJDK совершит огромный скачок веры… и перейдет на Git и Github.Что сделает весь проект более доступным.

    Помимо этого, мы увидим новые конструкции C ++ в коде JVM, а внутренние компоненты Java будут инкапсулированы по умолчанию.

    Все JEP можно найти здесь.

    Дата выпуска: 16 марта 2021 г.

    Java 17

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

    Все JEP можно найти здесь.

    Дата выпуска: сентябрь 2021 г.


    Если вам понравился контент, подумайте о поддержке сайта:

    JDK 9

    Целью этого проекта было создание справочного материала с открытым исходным кодом.
    реализация платформы Java SE 9, как определено
    JSR 379 на Java
    Процесс сообщества.

    JDK 9 достиг генерала
    Доступен 21 сентября 2017 г. Готовые к использованию двоичные файлы
    под лицензией GPL доступны из
    Oracle; двоичные файлы от других поставщиков будут
    следовать в ближайшее время.

    Были предложены функции и график этого выпуска и
    отслеживается через процесс JEP, с поправками, внесенными
    JEP 2.0
    предложение.

    Характеристики

    102: Процесс
    Обновления API
    110: HTTP 2
    Клиент
    143: Улучшение конкуренции
    Блокировка
    158: унифицированная JVM
    Ведение журнала
    165: Компилятор
    Контроль
    193: переменная
    Обрабатывает
    197: сегментированный код
    Кэш
    199: Smart Java
    Компиляция, Фаза 2
    200: Модульная
    JDK
    201: модульный источник
    Код
    211: Прекращение поддержки Elide
    Предупреждения об импорте
    212: Устранение ворса и
    Doclint Warnings
    213: Milling Project
    Монета
    214: Удалить GC
    Комбинации, не рекомендуемые в JDK 8
    215: многоуровневая атрибуция
    для javac
    216: Импорт процесса
    Утверждения правильно
    217: Аннотации
    Трубопровод 2.0
    219: передача дейтаграмм
    Layer Security (DTLS)
    220: Модульная среда выполнения
    Изображения
    221: Simplified Doclet
    API
    222: jshell: Java
    Оболочка (цикл чтения-вычисления-печати)
    223: Новая строка версии
    Схема
    224: HTML5
    Документ Javadoc
    225: Документ Javadoc
    Поиск
    226: свойство UTF-8
    Файлы
    227: Unicode
    7.0
    228: Добавить диагностику
    Команды
    229: Создать PKCS12
    Хранилища ключей по умолчанию
    231: Удалить время запуска
    Выбор версии JRE
    232: Улучшение безопасности
    Производительность приложения
    233: создание времени выполнения
    Компилятор проверяет автоматически
    235: Test Class-File
    Атрибуты, созданные javac
    236: API парсера для
    Нашорн
    237: Linux / AArch64
    Порт
    238: JAR с несколькими выпусками
    Файлы
    240: Удалить JVM TI
    hprof Агент
    241: Удалите jhat
    Инструмент
    243: JVM уровня Java
    Интерфейс компилятора
    244: TLS
    Расширение согласования протокола прикладного уровня
    245: проверка JVM
    Аргументы флага командной строки
    246: Использование ЦП
    Инструкции для GHASH и RSA
    247: Компиляция для более старых версий
    Версии платформы
    248: Сделайте G1 по умолчанию
    Сборщик мусора
    249: сшивание OCSP для
    TLS
    250: Интернет-магазин
    Строки в архивах CDS
    251: мультиразрешение
    Изображения
    252: Использовать языковой стандарт CLDR
    Данные по умолчанию
    253: подготовка пользовательского интерфейса JavaFX
    Элементы управления и CSS API для модуляции
    254: компактный
    Строки
    255: объединить выбранные
    Xerces 2.11.0 Обновления JAXP
    256: BeanInfo
    Аннотации
    257: Обновление JavaFX / Media
    к более новой версии GStreamer
    258: HarfBuzz
    Font-Layout Engine
    259: Перемещение по стеку
    API
    260: инкапсулировать большую часть
    Внутренние API
    261: Модуль
    Система
    262: Изображение TIFF
    I / O
    263: Графика HiDPI включена
    Windows и Linux
    264: Ведение журнала платформы
    API и сервис
    265: Marlin Graphics
    Модуль рендеринга
    266: больше параллелизма
    Обновления
    267: Unicode
    8.0
    268: XML
    Каталог
    269: Комфортный комбинат
    Методы для коллекций
    270: зарезервированный стек
    Области критических секций
    271: Унифицированный сборщик мусора
    Ведение журнала
    272: зависит от платформы
    Характеристики настольного ПК
    273: На основе DRBG
    Реализации SecureRandom
    274: Расширенный метод
    Обрабатывает
    275: Модульная Java
    Упаковка приложений
    276: динамическое связывание
    Определяемые языком объектные модели
    277: Расширенные
    Устарело
    278: Дополнительные тесты
    для гигантских объектов в G1
    279: Улучшение
    Устранение неполадок при тестировании
    280: Indify String
    Конкатенация
    281: HotSpot C ++
    Платформа модульного тестирования
    282: ссылка jlink: Java
    Компоновщик
    283: включить GTK 3 на
    Linux
    284: новая сборка HotSpot
    Система
    285: отжим-ожидание
    Подсказки
    287: хэш SHA-3
    Алгоритмы
    288: Отключить SHA-1
    Сертификаты
    289: устарели
    API апплета
    290: входящий фильтр
    Сериализационные данные
    291: устарело
    Сборщик мусора Concurrent Mark Sweep (CMS)
    292: реализация выбрана
    Возможности ECMAScript 6 в Nashorn
    294: Linux / s390x
    Порт
    295: Опережая время
    Сборник
    297: Единая arm32 / arm64
    Порт
    298: Удалить демонстрационные версии и
    Образцы
    299: Реорганизация
    Документация

    График

    26.05.2016 Особенность
    Завершено
    2016/12/22 Особенность
    Расширение завершено
    2017.01.05 Начало торможения
    2017/02/09 Выполнение всех тестов
    2017/02/16 Zero Bug
    Отскок
    2017/03/16 Фаза останова
    Два
    2017/06/22 Начальный
    Кандидат на выпуск
    2017/07/06 Финальный выпуск
    Кандидат
    2017/09/21 Общие
    В наличии

    Фазы

    Мы стабилизировали выпуск во все более строгой последовательности
    фаз, перечисленных здесь для протокола:

    • Первый этап останова
    • Вторая фаза останова
    • Фаза релиз-кандидата

    На этих этапах мы использовали три процесса для координации наших
    работа:

    • Расширение с полным набором функций
      процесс запроса
    • Процесс отсрочки ошибок (RDP 1
      и позже)
    • Процесс запроса исправления (RDP 2
      и позже)

    Определения вех

    Определения этапов для JDK 9 были такими же, как и для
    JDK 8,
    с добавлением:

    • Расширение функций
      Complete
      — Дата, к которой JEP и небольшие улучшения
      которые были предоставлены расширения через процесс запроса расширения FC, должны быть
      интегрирован в главный лес.

    • Кандидат на первоначальную версию
      — Дата создания первого релиз-кандидата и
      отправлено на тестирование.

    Последнее обновление: 2017/9/21 18:10 UTC

    Что нового в Java 9, 10 и 11

    В последнее время мир Java претерпел кардинальные изменения. Прошли те времена, когда мы ждали новую версию 3 года. Начиная с Java 9 и далее, новая версия Java будет появляться каждые 6 месяцев.В настоящее время мы работаем на Java 11, а Java 12 будет написана на март 2019 года. В этом курсе рассматриваются новые языковые функции и API-интерфейсы в Java 9, 10 и 11. Самым важным изменением, несомненно, является введение модулей, так как это будет повлияют на все приложения Java в будущем. Также есть несколько новых API, включая Reactive Streams, стандартный клиентский API HTTP2, улучшения API процессов и многое другое. Мы подробно рассмотрим все эти новые функции и обсудим стратегии их внедрения и интеграции в существующую кодовую базу.

    Что вы узнаете:

    • Модульная система платформы Java (JPMS)
    • Реактивные потоки
    • Новые языковые функции в Java 9, 10 и 11
    • Новые API в Java 9, 10 и 11
    • Стратегии усыновления

    Аудитория:

    Java-разработчиков и дизайнеров, которые хотят внедрить Java 9, 10 и 11 и посмотреть, что она может предложить.

    Предварительные требования:

    Хороший опыт работы с Java SE 8

    Краткое содержание курса:

    • Введение: Java в эпоху «пост-Java-8»; Инструментальная опора; Oracle JDK vs.OpenJDK; Использование JShell
    • Модули Java 9: ​​ Начало работы с модулями Java; Использование модульного JDK; Создание модульного приложения; Создание многомодульного приложения; Модульные банки JAR
    • Расширение возможностей с модулями Java: Автономные приложения; Услуги; Безымянный модуль; Автоматические модули; Стратегии миграции
    • Реактивные потоки: Обзор реактивного программирования; Понимание Java Flow API; Реализующие издатели и подписчики; Внедрение процессоров; Практические приложения
    • Новые возможности языка: Частные методы в интерфейсах; Тип помехи; Разные улучшения; Многоверсионные JAR
    • Усовершенствования API: Усовершенствования API процессов; Неизменяемые коллекции; Ходить по трассировке стека; HTTP2; Изменения в сборке мусора; Разные дополнительные API

    Энди Олсен — автор курса

    Энди — внештатный консультант и инструктор из Великобритании, работающий в основном в лондонском Сити и Оксфорде.Энди работает с .NET с момента первого бета-тестирования и имеет обширный опыт во многих аспектах разработки .NET, включая WCF, WPF, WF, веб-разработку ASP.NET MVC и мобильные приложения. Энди разработал и написал множество курсов Microsoft Official Curriculum за последнее десятилетие, а также работал автором и техническим рецензентом в Apress над некоторыми из их самых продаваемых книг.

    Реальный мир Java 9 | Триша Джи

    Каким образом Java 9 изменит способ работы разработчиков?

    Аннотация

    Особенность, о которой мы всегда слышим, когда речь идет о Java 9, — это Jigsaw, модульность.Но это не избавляет разработчиков от того же зуда, что и лямбды и потоки Java 8, и у нас остается смутное ощущение, что следующая версия может быть не такой интересной.

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

    В этой презентации Триша покажет, через кодирование в реальном времени:

    • Что такое система модулей платформы Java и как сделать ваш код модульным
    • Улучшения Streams API, упрощающие управление бесконечными потоками
    • Как удобные методы коллекций упрощают код

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

    Видео

    Это все доступные видео, самые свежие из которых находятся вверху. Обычно, чем позже говорят, тем более отточенным, следовательно, обычно они лучше. В этом выступлении это скорее демонстрация / фокусировка на разных аспектах в разных версиях.

    Этот веб-семинар JetBrains является самой последней версией доклада и включает в себя больше функций Java 9, чем любой из
    другие, включая краткий обзор JShell. Однако у него почти нет контента в реактивных потоках, поэтому ознакомьтесь с одним из
    другие видео, если это то, что вас интересует.

    • vJUG, сентябрь 2017 г. К счастью, у меня есть 90 минут на освещение материала.
    • GOTO Amsterdam. Меньше реактивных потоков, меньше Jigsaw, немного больше времени для «других» функций Java 9.
    • J на ​​пляже, Малага. Практически то же самое, что и версия DevoxxUK.
    • DevoxxUK. Больше внимания уделяется модулям Jigsaw / Java.
    • QCon London. Гораздо больше внимания уделяется реактивным потокам: что это такое, как они работают и как перенести приложение для использования API реактивных потоков.

    Слайды

    Это последние слайды. Для более ранних версий см. Slideshare.

    Ресурсы

    Код этой презентации был первоначально создан для демонстрации кода Java 8 в
    Java 8 в Anger, посмотрите видеоролики, чтобы узнать больше о приложении и о том, как оно использует потоки Java 8 и лямбда-выражения для основной бизнес-логики. Код и представление
    эволюционировал, чтобы включить некоторые функции Java 9.

    У меня есть еще один доклад о Java 9, основанный на этом коде, «Предвидение Java 9 — функциональные возможности и инструменты», в котором демонстрируются дополнительные индивидуальные функции Java 9 и конкретно говорится о поддержке IntelliJ IDEA для него.

    Статьи и другие подробности

    Я подробно рассмотрел примеры в этой презентации в нескольких статьях об использовании Java 9: ​​

    Код

    • https://github.com/trishagee/sense-nine.
      Полное приложение со всем кодом Java 9 в настоящее время находится под
      ветвь рабочей системы , презентация строится на основе кода в start_point .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *