Компания Oracle серьёзно взялась за разработку JDK9 и опубликовала первый список «предложений на улучшение» (JEP), в которых описаны новые функции Java 9. Список довольно невелик и консервативен, но за предстоящие два года до выпуска Java 9 его наверняка дополнят.
Программные интерфейсы
Представлены три новых программных интерфейса.
- Обновление Process API для лучшего взаимодействия с не-Java процессами операционной системы (сейчас разработчики часто вынуждены использовать нативный код).
- Новый HTTP-клиент с поддержкой HTTP 2.0, веб-сокетов и заменой устаревшему HttpURLConnection.
- Облегчённый JSON API для обработки и генерации JSON-документов и потоков данных.
Производительность/JVM
Здесь тоже предложено три улучшения (для начала).
- Улучшенное разрешение конфликтов при захвате блокировки (contended locking) при многопоточной работе и совместном доступе нескольких потоков к объектам. Тут речь идёт об общем улучшении производительности за счёт ускорения операций мониторов, таких как
notify/notifyAll
иPlatformEvent::unpark()
. - Умный Java-компилятор (sjavac) будет улучшен до такой степени, чтобы его использовать по умолчанию в билдах JDK и на постоянной основе для сборки других больших проектов. Сейчас он пока не годится для таких целей по разным причинам, в том числе из-за нестабильной работы. Код компилятора кардинально переработают и протестируют. Возможно, его даже выпустят как отдельное независимое приложение без привязки к JDK. Планируется реализовать в нём и новые функции, в том числе параллельную и shared-компиляцию.
- Сегментирование кэша кода. Эта область используется JVM, когда включена JIT-компиляция, в ней кэшируется скомпилированный платформенно-зависимый код. После модернизации кэш разделят на несколько частей, каждая из которых будет содержать скомпилированный код определённого типа:
non-method
(внутренний код JVM),profiled
иnon-profiled
. Это увеличит производительность и позволит легче внедрять будущие расширения.
One More Thing...
Ещё одним нововведением в Java 9 станет стандартная модульная структура исходного кода JDK.
<pre class=«prettyprint» xml:space=«preserve»>src/{share,$OS}/{classes,native}/$PACKAGE/*.{java,c,h,cpp,hpp}
Изменение никак не повлияет на бинарники, но зато сильно улучшит работу с исходниками: легче станет портировать Java на мобильные устройства, «отсекая» ненужные модули, проще станет изучать структуру кода и искать баги/уязвимости и т.д. В конечном итоге, это приведёт и к улучшению производительности приложений, и к упрощению создания и поддержки библиотек и больших проектов на платформах Java SE и EE.
Рефакторинг кода станет продолжением старого проекта Jigsaw.
Раньше анонсировалось несколько десятков мелких улучшений в Java 9, но эти, о которых объявлено сейчас, — наиболее значительные.
Автор: alizar