Ссылка для скачивания: http://jdk.java.net/10/.
Изменения, которые появятся в этом релизе
JEP 286: Local-Variable Type Inference
Локальный вывод типов с помощьюvar
. Неоднозначная фича. Регулярно вызывает бурления в рассылке.
var list = new ArrayList<String>(); // infers ArrayList<String> var stream = list.stream(); // infers Stream<String>
- JEP 296: Консолидация леса исходников JDK в едином репозитории
Наводится порядок в репозиториях. Широкой общественности обычно не интересно. - JEP 304: Garbage-Collector Interface
Улучшить изоляцию основных исходников от GC путём создания хорошего чистого интерфейса для GC. - JEP 307: Parallel Full GC for G1
Release Note: JEP 307: Parallel Full GC for G1: «Коллектор G1 создан для того, чтобы обходиться без full GC, но когда параллельная сборка не может утилизировать память достаточно быстро, происходит возвращение к full GC. Старая реализация full GC в G1 использовала однопоточный алгоритм mark-sweep-compact. После реализации JEP-307, full GC параллелизовался и стал использовать то же количество параллельных тредов-воркеров, как в young и mixed». (Напоминаю, что young GC обрабатывает только регионы young/survivor, mixed — ещё и old, full — весь хип, young/tenured). - JEP 310: Application Class-Data Sharing
Чтобы ускорить запуск и уменьшить количество используемой памяти, предлагается расширить существующую фичу под названием Class-Data Sharing («CDS») возможностью упаковки классов в общий архив. - JEP 312: Thread-Local Handshakes
Возможность выполнять колбэк на тредах, не делая глобальный для JVM сейфпоинт. Фича позволяет дешёво останавливать одиночные треды, а не только «всё или ничего». - JEP 313: Remove the Native-Header Generation Tool (javah)
Утилитаjavah
больше не нужна, потому что нативные заголовки теперь может делать javac (начиная с JDK8, на самом деле) - JEP 314: Additional Unicode Language-Tag Extensions
Поддержка новых расширений Unicode: cu (currency type), fw (first day of week), rg (region override), tz (time zone). - JEP 316: Heap Allocation on Alternative Memory Devices
HotSpot VM теперь может выделять хиповую память на других девайсах, например, на NV-DIMM. Некоторые операционки уже умеют выделять не-DRAM память, помещая её на файловую систему, например, NTFS DAX и ext4 DAX. Добавляется опция-XX:AllocateHeapAt=<path>
. - JEP 317: Experimental Java-Based JIT Compiler
Graal, можно использовать как основной JIT-компилятор. Это делается в качестве эксперимента, и можно включить только на Linux/x64." - JEP 319: Root Certificates
В JDK имеется кейсторcacerts
, который нужен для хранения корневых сертификатов. Но в OpenJDK он пока пустой. Поэтому ништяки типа TLS в OpenJDK по-умолчанию не работают. Теперь этотcacerts
будет правильно сконфигурирован и заполнен, и ништяки начнут работать. Кроме того, это сгладит разницу между OpenJDK и Oracle JDK. - JEP 322: Time-Based Release Versioning
Feature releases будут добавлять новые фичи. Update releases будут только чинить баги.
План релизов
Для JDK10 план выглядит так:
(Подробно все фазы объясняются в отдельном документе)
- 2017/12/14 Первая фаза замедления
- 2018/01/11 All Tests Run
- 2018/01/18 Вторая фаза замедления
- 2018/02/08 Первый Release Candidate
---вы находитесь здесь---
- 2018/02/22 Окончательный Release Candidate
- 2018/03/20 General Availability
Но как же… Там же ещё вагон багов?
Существует документ о том, каким требованиям должен удовлетворять JDK 10, чтобы стать успешным релиз-кандидатом. Смысл этой фазы процесса в том, чтобы сконцентрироваться на починке только тех багов, которые являются совершенно критичными для успеха проекта. Дальше я опишу, как эти требования выглядят для самих разработчиков OpenJDK.
Каждый баг имеет приоритет, начиная от P1 (для самых важных багов) и заканчивая P5 (для наименее важных). Конкретные критерии выбора приоритета зависят от конкретного проекта.
Формально список требований к RC выглядит вот так:
- Нужно починить все баги уровня P1, которые появились в JDK 10 и которые критичны для успешного выпуска релиза.
- Нужно отстраниться от починки P1 багов, которые добавились не в JDK 10, которые не критичны для успешного выпуска релиза, но которые изначально считали приуроченными именно к выпуску JDK 10.
- Явным образом отложить все P1 баги, которые относятся к JDK 10, но не являются критичными, или которые, по какой-то очень существенной причине, в этом релизе починить невозможно.
Любые баги уровней P2-P5 нужно отложить до следующих релизов, вне зависимости, попали ли они уже в код продукта, в тесты или документацию. В том числе, все фиксы с метками noreg-doc
и noreg-test
теперь должны явным образом подтверждаться и иметь уровень P1.
Нет никакого смысла явным образом откладывать непочиненные баги уровней P2-P5.
Начиная с этого момента, новые сборки будут появляться каждую неделю лишь в том случае, когда для этого есть необходимость.
Баги уровня P1
Обновлённый список багов можно найти здесь: http://j.mp/jdk-rc. Если кто-то из разработчиков OpenJDK отвечает за баг из этого списка, то он должен сделать одно из следующих действий:
- Разработать исправление бага и потом запросить подтвреждение на интеграцию этого исправления; или
- Если баг появился не в JDK 10 (эта информация есть в поле «Affects Version»), тогда можно либо удалить его из списка, просто очистив поле «Affects Version», либо вписать туда
tbd_feature
(если это стоит исправлять только в мажорном релизе), либо вписать тудаtbd_update
(если исправление стоит делать в любом релизе), либо вписать туда номер конкретного релиза; или - Если баг появился в JDK 10, но не является критичным или не может быть починен вовремя, то можно попросить, чтобы этот баг явным образом отложили с помощью соответствующего процесса, который мы ранее проверили на фазе замедления RDP-1.
В любом случае, не следует изменять приоретит бага только для того, чтобы вынести его из списка. Приоритет бага должен отражать важность починки вне зависимости от какого-то конкретного релиза, и такая практика поддерживается в течение многих лет развития JDK.
Баги уровней P2-P5
Release Candidate содержит только баги уровня P1. Баги уровня P2-P5 — не релевантны для общего статуса релиза, начиная с текущего момента и далее. Вне зависимости от того, в каком именно релизе их хотели исправить изначально. Поэтому с багами P2-P5 не имеет смысла делать что-то особенное. Не нужно их откладывать (явно, с помощью соответствующей процедуры, или неявно, изменяя поле «Fix Version»). Тем не менее, можно изменить значение этого поля на tbd_feature
или tbd_update
, если это может оказаться полезным для будущей работы.
Баги P2-P5, которые направлены только на тесты или документацию, исправить больше не получится.
Будем ли мы пользоваться Десяткой, когда она выйдет?
Скорее всего, да. Обычные релизы не являются экспериментальными, это полноценные релизы с как минимум шестимесячной поддержкой от Oracle. Их отличие от LTS — только в сроке поддержки, которая для LTS будет не менее чем 3 года. Предположительно, релизы будут появляться в марте и сентябре.
Подтверждающий слайд Марка Рейнхолда с конференции FOSDEM'18:
Минутка рекламы. По поводу всех важных JEPов мы постараемся выпустить отдельные статьи на Хабре, в блоге JUG.ru Group. Отдельные вещи мы выносим на конференции, например, Christian Thalinger рассказывает про Graal, а Volker Simonis — про Application Class-Data Sharing. Видео будет через несколько месяцев после конференции, но если прийти туда вживую — можно пообщаться непосредственно с разработчиками всех этих технологий.
Комментарии (28)
Moxa
13.02.2018 22:17а чего во всех ссылках на roadmap jdk8 и 9? и будет ли valhalla? не вижу этого проекта в списке фич =(
olegchir Автор
13.02.2018 23:05Если ты про value types, то к 10 их сделать не успеют. Ссылки на описание этапов роадмапа ведут на 8, потому что написатели документации ленивые, лень копировать на новый урл :)
lany
14.02.2018 07:03Как обычно, напоминаю, что не все изменения сидят в JEP'ах. Особенно то что касается стандартной библиотеки. Добавлено много приятных мелочей. Коллекторы toUnmodifiableList/Map/Set, например. Или методы вроде List.copyOf, которые создают неизменяемую копию коллекции (или не создают, если на вход уже подан неизменяемый список).
olegchir Автор
14.02.2018 10:24Или поддержка Докера. Да, осознал ошибку(
DmitriyLuckyman
14.02.2018 12:49А можно поподробней что скрывается за этой фразой? т.е. что за поддержка докера?
oktv
14.02.2018 10:23Извините, не мог бы кто-нибудь пояснить упоминание «HotSpot VM» в статье про OpenJDK? Я всегда думал что HotSpot — это название оракловой JVM. (Не троллинг, мне реально интересно)
olegchir Автор
14.02.2018 10:26+2OpenJDK и Oracle JDK — это почти одно и то же (особенно теперь, когда было объявлено об открытии в опенсорс JFR, JMC, ZGC, AppCDS итп)
lany
14.02.2018 11:38HotSpot всегда входил в OpenJDK
oktv
14.02.2018 11:51Совсем запутали! Я то думал что существование OpenJDK обусловленно особой лицензией на распространнение бесплатного софта, которое ораклованя(сановская) джава не саппортит в полном объёме. Какой же смысл основывать полностью открытый софт на несовсем полностью открытом?..
TheDeadOne
14.02.2018 12:17Oracle почти закончили перевод Java в open source. Скорее всего, уже в этом году Oracle JDK станет просто «commercial long term support offering».
TheDeadOne
14.02.2018 12:13+2HotSpot — это название виртуальной машины. А OpenJDK — это название Java Development Kit, включающего в себя саму виртуальную машину, стандартную библиотеку классов, компилятор, отладчик, упаковщик, профайлер и множество других утилит разработчика, а также документацию.
TheDeadOne
14.02.2018 12:29+1Кстати, в OpenJDK можно использовать IBM'овскую виртуальную машину J9, вместо HotSpot.
oktv
14.02.2018 12:36-1Хорошо, а что же тогда я скачиваю с сайта Оракла под релизом JDK? Ведь когда я запускаю -version, я получаю:
C:\>java -version
java version «9.0.4»
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
И чем этот оракловый релиз отличается от OpenJDK? Почему у меня на OpenJDK tomcat валится с OoM на SSL, в то время как оракловая бегает без фейлов?TheDeadOne
14.02.2018 15:41+1Вот что по этому поводу писал пару лет назад Henrik Stahl:
Q: What is the difference between the source code found in the OpenJDK repository, and the code you use to build the Oracle JDK?
A: It is very close — our build process for Oracle JDK releases builds on OpenJDK 7 by adding just a couple of pieces, like the deployment code, which includes Oracle's implementation of the Java Plugin and Java WebStart, as well as some closed source third party components like a graphics rasterizer, some open source third party components, like Rhino, and a few bits and pieces here and there, like additional documentation or third party fonts. Moving forward, our intent is to open source all pieces of the Oracle JDK except those that we consider commercial features such as JRockit Mission Control (not yet available in Oracle JDK), and replace encumbered third party components with open source alternatives to achieve closer parity between the code bases.
Возможно, проблемы с SSL у вас возникают потому, что
В JDK имеется кейстор cacerts, который нужен для хранения корневых сертификатов. Но в OpenJDK он пока пустой. Поэтому ништяки типа TLS в OpenJDK по-умолчанию не работают. Теперь этот cacerts будет правильно сконфигурирован и заполнен, и ништяки начнут работать. Кроме того, это сгладит разницу между OpenJDK и Oracle JDK.
oktv
14.02.2018 15:52Вот теперь спасибо за пояснения. Привильно ли я понял, что до какого-то этапа OracleJDK и OpenJDK собираются одинаково, затем всё что можно открыть называют OpenJDK, а остальное называют OracleJDK? Причём виртуальная машина у них по умолчанию одинакова и называется HotSpot?
TheDeadOne
14.02.2018 16:06Oracle JDK собирают из исходного кода OpenJDK с небольшими добавками. Но вскоре и исходный код этих добавок переедет в OpenJDK, а Oracle JDK будет отличаться только наличием технической поддержки.
olegchir Автор
14.02.2018 23:07Не знаешь, как решён вопрос с патентами на всякие сглаживания шрифтов?
TheDeadOne
14.02.2018 15:45Чего я так и не понял, так это успели ли закончить асинхронный JDBC, как обещали?
olegchir Автор
14.02.2018 23:15+1Вот тут есть какой-то прототип, который пилили для Java One: hg.openjdk.java.net/jdk10/sandbox/jdk/file/a31057bda7c5/src/java.sql/share/classes/java/sql2
Есть тикет на это:
bugs.openjdk.java.net/browse/JDK-8188051
Судя по тому, что это P4, то согласно новой линии партии оно должно перенестись на следующую версию. На что намякивает проставленная автором «Fix Version/s: tbd_major»
То есть, ответ: нет, не успели, перенесли.
iZENfire
Будут ли патчи для сборки OpenJDK10 на FreeBSD?
olegchir Автор
Ну ты спросил. :-)
Официально, фокус отдаётся трём платформам: GNU/Linux, macOS и Windows. Все 64-битные. Windows несколько отстаёт (например, инфраструктура сборки там сильно хуже и требует Cygwin). Про FreeBSD ничего не знаю. Можешь попробовать собрать сам и рассказать о результатах на Хабре.
IL_Agent
зачем cygwin, когда есть wsl?
olegchir Автор
зачем wsl, если есть msys2? Но правда в том, что собирается нормально только под Cygwin (не помню почему, сейчас разбираться не буду)