Проект Valhalla
Проект Valhalla дополняет объектную модель Java возможностью Value Objects (объекты-значения), сочетая абстракции объектно-ориентированного программирования с производительностью простых примитивов.
Спонсор проекта — HotSpot Group.
Что нового?
- Август 2026:
-
JEP 401: Value Objects (Preview (предварительная версия)) и JEP 539: Strict Field Initialization (строгая инициализация полей) in the JVM (Preview) интегрированы и войдут в JDK 28! Попробуйте Value Objects уже сегодня в сборке Early Access (ранний доступ) JDK 28.
Для знакомства с темой можно прочитать JEP или посмотреть это краткое введение. Более широкий контекст даёт доклад с JavaOne о программировании с неизменяемыми данными в Java.
Новые возможности
Ожидаемые языковые возможности и улучшения производительности Valhalla появятся не одновременно, а постепенно, в виде последовательных улучшений в нескольких выпусках JDK.
В разработке находятся пять отдельных групп возможностей:
-
Value Objects: объекты без Identity (идентичность объекта), которые благодаря этому могут иметь оптимизированное представление
-
Null-Restricted Storage для Value Objects, чтобы улучшить размещение в памяти
-
Улучшения массивов: поддержка таких свойств, как неизменяемость и безопасная инициализация, а также упрощение взаимодействия между массивами примитивов и массивами ссылок
-
Объединение примитивов и классов: более удобная упаковка (boxing) при вызовах методов и в обобщённых типах, а также расширение возможностей вроде преобразований и операторов на Value Classes (классы-значения)
-
Parametric JVM: специализация и оптимизация параметризаций обобщённых классов и методов во время выполнения
Справочные документы и доклады
Эти документы и доклады дают более целостное представление о целях проекта Valhalla и соображениях, лежащих в основе его дизайна.
-
Dan Smith: Better Tools for Immutable Data (JavaOne 2026)
-
Frederic Parain: Value Classes & Heap Flattening (JVM Language Summit 2025)
-
Brian Goetz: Growing the Java Language (JVM Language Summit 2025)
-
Dan Smith: A New Model for Java Object Initialization (JavaOne 2025)
-
Brian Goetz: Valhalla—Where Are We? (JVM Language Summit 2024)
-
Dan Smith: Value Objects in Valhalla (JVM Language Summit 2023)
- The State of Valhalla, декабрь 2021 года
- Parametric JVM
- Background: How We Got the Generics We Have (июнь 2020)
- The Saga of the Parametric VM (апрель 2021)
Реализация
JEP 401: Value Objects (Preview) и JEP 539: Strict Field Initialization in the JVM (Preview) интегрированы в JDK и войдут в JDK 28.
Заинтересованным разработчикам предлагается поэкспериментировать со сборками Early Access по адресу https://jdk.java.net/28/.
Прототипы других возможностей находятся в различных ветках репозитория Valhalla на GitHub.
Сообщество
-
Рассылки
-
valhalla-dev (архив) — для технических обсуждений и опыта пользователей, связанных с проектом Valhalla
-
valhalla-spec-experts — для модерируемого обсуждения дизайна среди приглашённых экспертов (архив)
-
valhalla-spec-observers — для тех, кто хочет следить за обсуждениями в рассылке valhalla-spec-experts; публичные ответы разрешены, но в рассылку экспертов не пересылаются (архив)
-
valhalla-spec-comments — для отправки экспертной группе комментариев, предложений и других отзывов о спецификации (архив)
-
-
Репозиторий документации (через него можно обновить эту страницу!)
Мы рады отзывам заинтересованных Java-разработчиков. Учтите, что большинство теоретических идей за последние несколько лет уже хорошо изучено! Больше всего помогут те, кто опробует опубликованные реализации и сможет поделиться опытом их применения на реальных кодовых базах.
JEP проекта
Каждое улучшение платформы Java описывается и отслеживается с помощью JDK Enhancement Proposal (JEP). Следующие JEP находятся в активной разработке или уже выпущены.
| JEP | Возможность | Статус |
|---|---|---|
| JEP 401: Value Objects (Preview) Value Objects, версия Preview |
Value Objects | Integrated (интегрирован) |
| JEP 539: Strict Field Initialization in the JVM (Preview) Strict Field Initialization в JVM, версия Preview |
Дополнительные | Integrated |
| Null-Restricted Value Class Types (Preview) Null-Restricted Types (типы, запрещающие null) для value-классов (Preview) |
Null-Restricted Storage | Draft (черновик) |
| JEP 402: Enhanced Primitive Boxing (Preview) Улучшенная упаковка примитивных значений (Preview) |
Объединение примитивов | Draft |
| JEP 390: Warnings for Value-Based Classes Предупреждения для value-based-классов |
Value Objects | Выпущен в 16 |
| JEP 371: Hidden Classes Hidden-классы (скрытые классы) |
Дополнительные | Выпущен в 15 |
| JEP 334: JVM Constants API API для описания констант JVM |
Дополнительные | Выпущен в 12 |
| JEP 309: Dynamic Class-File Constants Динамические константы class-файлов |
Дополнительные | Выпущен в 11 |
| JEP 181: Nest-Based Access Control Управление доступом на основе nest |
Дополнительные | Выпущен в 11 |
Прежние материалы
Ссылки на ранее предложенные JEP, проектные документы, доклады и прототипы см. на архивной странице.