После трёх с половиной лет разработки компания Oracle выпустила платформу Java SE 9 (Java Platform, Standard Edition 9), в качестве эталонной реализации которой используется открытый проект OpenJDK. В Java SE 9 сохранена полная обратная совместимость с прошлыми выпусками платформы Java, все ранее написанные Java-проекты без изменений будут работоспособны при запуске под управлением новой версии. Изначально выпуск Java SE 9 был запланирован на 22 сентября 2016 года, но был перенесён три раза и в итоге вышел с задержкой в один год. Готовые для установки сборки Java SE 9 (JDK, JRE и Server JRE) подготовлены для Linux (x86_64), Solaris ( SPARC), Windows и macOS.

Разработанная в рамках проекта OpenJDK эталонная реализация Java 9 полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с коммерческими продуктами. Используя OpenJDK в качестве эталонной реализации сторонние производители могут создавать полностью совместимые с Java SE 9 производные открытые реализации Java. Проприетарный Oracle JDK 9 отличается от OpenJDK наличием некоторых закрытых компонентов, таких как система плагинов, которые не определены в Java-стандарте и не входят в эталонную реализацию Java 9. Oracle JDK поставляется под лицензией BCL (Binary Code Licence). В дальнейшем компания Oracle намерена полностью открыть код коммерческих компонентов и обеспечить полную взаимозаменяемость OpenJDK и Oracle JDK, а также перейти на новый цикл разработки Java SE, подразумевающий формирование выпусков раз в полгода с постепенным переносом новой функциональности, стабилизированной в непрерывно развиваемой ветке.

Основные новшества Java SE 9:

  • Интеграция принципиально новых для Java средств разбиения программ и JDK на модули, развиваемых в рамках проекта Jigsaw:
    • JEP 200 — определение модульной структуры JDK.
    • JEP 201 — Реорганизация кода JDK в модули, усовершенствование системы сборки для поддержки компиляции модулей, раздельная обработка модулей на этапе сборки.
    • JEP 220 — реструктуризация бинарных образов JDK и JRE для поддержки модулей и увеличения производительности, безопасности и удобства сопровождения.
    • JEP 282 — компоновщик jlink для связывания и оптимизации модулей с учётом зависимостей;
    • JEP 261 — реализация Java Platform Module System;
    • JEP 275 — пакетный менеджер javapackager для модульных Java-приложений.

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

  • Легковесный JSON API для обработки и генерации данных в формате JSON;
  • Новый API для разработки HTTP-клиентов, идущий на замену HttpURLConnection и поддерживающий HTTP/2.0 и websockets;
  • Улучшенный API для управления процессами на уровне операционной системы;
  • Добавлена интерактивная оболочка jshell, упрощающая запуск однострочников в процессе разработки, экспериментов с новыми возможностями и API;
  • Модернизирована система документации Javadoc, в которой добавлены средства для генерации руководств в формате HTML5 и функции для поиска документации по API и информации об определении классов и интерфейсов в модулях;
  • Улучшен Streams API, в котором реализована возможность использования методов для ситуационного добавления или удаления элементов из потоков Stream, перебора элементов Stream и создания Stream из обнуляемых значений. Расширен набор Java SE API, которые могут выступать источником для Stream.
  • Формат JAR расширен возможностью поставки в одном архиве нескольких версий файлов с классами, использующих возможности, специфичные для разных релизов Java;
  • Представлены порты архитектур Linux/AArch64 и Linux/s390x. Добавлен унифицированный порт для arm32 и arm64;
  • В JavaScript-движок Nashorn, работающий поверх виртуальной машины Java (JVM), добавлена порция новых возможностей, определённых в спецификации ECMAScript 6. Реализован Parser API для разбора синтаксиса ECMAScript;
  • В разряд устаревших переведены Applet API (для запуска Java-приложений в браузере рекомендована технология Java Web Start);
  • Реализована поддержка хэшей SHA-3. Отключена возможность использования сертификатов на базе SHA-1;
  • Задействована новая упрощённая система сборки HotSpot, основанная на фреймворке build-infra;
  • Расширен набор диагностических команд: print_class_summary, print_codegenlist, datadump_request, print_codeblocks, set_vmflag и т.д.
  • Оптимизации:
    • Улучшение работы блокировок для конкурирующих Java-объектов, позволившие повысить производительность в условиях, когда разные потоки одновременно пытаются получить доступ к объектам;
    • Сегментирование кэша JIT-компилятора, позволившее повысить производительность длительно выполняемых программ, сократить фрагментацию и время запуска;
    • Интеграция в компилятор sjavac (Smart Java compiler) средств параллельной и раздельной сборки. Улучшения для обеспечения сборки JDK и крупных проектов. Переработка кода разбора аннотаций;
    • Обеспечено более компактное внутреннее представление строк (класс String), позволяющее экономить память;
    • Для 32- и 64-разрядных серверных систем по умолчанию задействован сборщик мусора G1, ограничивающий размер пауз в процессе сборки мусора;
    • Обеспечена возможность упреждающей (Ahead-of-Time) компиляции классов в машинный код перед запуском виртуальной машины, что позволяет заметно сократить время старта крупных приложений;
    • Реализован сегментированный кэш для кода, в котором используется раздельное кэширования различных типов кода;
  • Возможности для создания GUI:
    • Для графических приложений, основанных на JavaFX, Swing и AWT, помимо GTK+ 2 обеспечена поддержка библиотеки GTK+ 3 на платформе Linux;
    • Поддержка использования в графических приложениях возможностей, специфичных для разных рабочих столов. Например, API для взаимодействия с панелью задач, системным лотком и системой уведомлений, обработка событий от других приложений;
    • Поддержка экранов с высокой плотностью пикселей (HiDPI), при работе на платформах Linux и Windows. Вывод текста, изображений и пиктограмм теперь осуществляется с учётом параметров экрана;
    • Для однородной отрисовки текста на всех поддерживаемых системах вместо движка ICU OpenType задействована библиотека HarfBuzz;
    • Компоненты JavaFX/Media переведены на новую ветку GStreamer 1.x;
    • Добавлен API для манипуляции изображениями, доступными в нескольких разрешениях;

Одновременно компания Oracle анонсировала спецификацию Java EE 8 (Java Platform, Enterprise Edition 8) и открытый сервер приложений GlassFish 5.0, позиционируемый в качестве эталонной реализации данной спецификации. Код GlassFish распространяется под двумя лицензиями: CDDL v1.0 и GPL v2. Java EE 8 станет последним выпуском, сформированным силами Oracle. Заявлено о планах передать фонду Eclipse технологии Java EE и наработки, связанные с проектом GlassFish, включая эталонные реализации, наборы для оценки совместимости (TCK) и всю документацию. В будущем Java EE будет развиваться в рамках независимой модели разработки c более гибкой системой лицензирования и открытым процессом принятия решений.

Основные новшества Java EE 8:

  • Новая версия Servlet API 4.0 с поддержкой протокола HTTP/2;
  • Представлен новый JSON binding API для манипуляции данными в формате JSON и расширены возможности JSON-P 1.1;
  • В JAX-RS добавлена поддержка событий, инициируемых сервером (Server-Sent Events), и реализован новый клиентский API (REST Reactive Client API);
  • Добавлен новый переносимый Security API для управления доступом в приложениях, запускаемых в облачных системах и PaaS;
  • Внесена большая порция улучшений в CDI, включая поддержку асинхронных событий;
  • Обеспечена поддержка новых возможностей Java SE 8 (Data & Time API, Streams API, расширенные аннотации);
  • Обновлены версии API:
    • Contexts and Dependency Injection (CDI) 2.0
    • The Java API for JSON Binding (JSON-B) 1.0
    • Java Servlet 4.0
    • Java API for RESTful Web Services (JAX-RS) 2.1
    • JavaServer Faces (JSF) 2.3
    • Java API for JSON Processing (JSON-P)1.1
    • Java EE Security API 1.0
    • Bean Validation 2.0
    • Common Annotations 1.3
    • Java Persistence 2.2
    • Java API for WebSocket 1.1
    • JavaMail 1.6