Разработка программ. Мои заметки.

February 9, 2017 at 20:18

Дата выхода Java 9 — 27 июля 2017 года.

Java 9 Решил уточнить, не изменились ли снова сроки выхода JDK 9. Нет, не изменились. Java 9 is coming! Countdown to Java 9 Release Date. До официального релиза осталось 167 дней. Напомню, что изначально дата выхода Java 9 планировалась на сентябрь прошлого (2016) года. Затем была отложена на март 2017 года. А затем, в сентябре, главный архитектор проекта Mark Reinhold предложил ещё раз отложить дату выхода на июль 2017. Новый план был официально утверждён во второй половине октября 2016 года. Выглядит он так:

  • 2016/05/26 Feature Complete
  • 2016/12/22 Feature Extension Complete
  • 2017/01/05 Rampdown Start
  • 2017/02/09 All Tests Run
  • 2017/02/16 Zero Bug Bounce
  • 2017/03/16 Rampdown Phase 2
  • 2017/07/06 Final Release Candidate
  • 2017/07/27 General Availability

По такому случаю хотелось бы ещё раз подытожить, что же нового определённо добавится в девятке. Список этот тайной не является, но есть мнение что в процессе работ он всё-таки корректировался. Формально, он приведён вот тут — JDK 9. Данные актуальны на 19 января 2017 года. Я посчитал количество позиций в списке. Их там 89 (ну если не ошибся, по любому — близко). 89 нововведений. Причём, там перечислены логически очерченные места. Это не просто формальный список новых методов или классов. Для простоты ориентации, была сделана попытка систематизировать все нововведения, разбив их на категории. О ней можно прочитать в блоге Oracle.

Было предложено использовать 6 категорий. Некоторые из них слегка туманно сформулированы (пересекаются с другими). И даже присутствует некоторая путаница в пояснениях. Автор не очень внимательно отнеслась к своей заметке. Два раза перечислила категорию New standards и забыла про категорию Gone. Но, тем не менее, попробуем придерживаться этой классификации. Итак.

1. Behind the scene.

Незаметные улучшения. Вы их автоматически получите установив JDK 9, но они никак не скажутся на вашем коде. Это такие фишки как:

  • 225: Javadoc Search — в генерируемую Javadoc документацию добавляется строка поиска и возможность поиска в документации некоторых ключевых элементов.
  • 254: Compact Strings — более эффективное хранение строк в памяти.
  • 265: Marlin Graphics Renderer — теперь, по умолчанию, в Java 2D будет использован более качественный рисовальщик растерной (пиксельной) графики.

2. New functionality.

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

  • 200: The Modular JDK — возможность указывать какие модули из JDK нужны вашему коду (зависимости). Позволяет заметно уменьшить размер необходимого Java runtime для выполнения приложения. Из-за этой возможности выпуск новой версии JDK и переносился два раза.
  • 201: Modular Source Code — возможность разбивать ваш собственный код на модули. Связано с предыдущим пунктом.
  • 222: jshell: The Java Shell (REPL: Read-Eval-Print Loop) — возможность иметь интерактивную среду программирования для Java в виде командной строки. В такой среде пользователь может вводить разные выражения языка, которые среда тут же будет вычислять и отображать результат вычисления пользователю.
  • 277: Enhanced Deprecation — более осмысленное управление @Deprecated аннотациями.
  • 282: jlink: The Java Linker — интеллектуальный инструмент сборки, учитывающий зависимости модулей друг от друга. Связан с первыми двумя пунктами.

3. Specialized.

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

  • 285: Spin-Wait Hints — API, позволяющей java узнать, что - a spin loop is being executed. Сходу не могу внятно пояснить по-русски.

4. New standards.

Поддержка новых индустриальных стандартов.

  • 287: SHA-3 Hash Algorithms — реализация SHA3 криптографических хеш-функций, специфицированных в NIST FIPS 202. Кто в теме, видимо, знает о чём речь.
  • 101: HTTP 2 Client — реализация клиентского API для поддержания HTTP/2 протокола и WebSocket.
  • 224: HTML5 Javadoc — javadoc теперь генерирует HTML5
  • 263: HiDPI Graphics on Windows and Linux — реализована HiDPI графика для Windows и Linux.

5. Housekeeping.

Улучшения существующих библиотек, кода и некоторые наработки для будущих изменений.

  • 223: New Version-String Scheme — Новая строковая схема именования версий JDK. Старая допускала путаницу. Предполагается, что новая будет поудобнее.
  • 248: Make G1 the Default Garbage Collector — Теперь новый G1 по умолчанию является сборщиком мусора для -32 и -64 разрядных серверных конфигураций.
  • 289: Deprecate the Applet API — Deprecate API для поддержки апплетов. Стало неактуально.
  • 253: Prepare JavaFX UI Controls & CSS APIs for Modularization — Определено API для JavaFX UI контролов, поскольку текущее используемое будет иметь ограничения из-за модуляризации.

6. Gone.

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

JDK 9

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

  1. Модульность. Долгожданная реализация проекта Jigsaw
  2. Улучшения Process API, дающие больше возможностей получать информацию о системных процессах
  3. Интерактивная среда программирования JShell (REPL)
  4. Поддержка HTTP/2 стандарта
  5. G1 становится стандартным базовым сборщиком мусора
  6. Private методы в интерфейсах
  7. Reactive Streams

Ну и от себя добавлю — появились улучшения у класса Optional. Подробнее я их описал вот тут:

8. NullPointerException в Java. Сlass Optional в Java 9.

Автор — Владимир Рыбов