Самое большое изменение языка Java за десятилетие наконец-то происходит. Это потребовало 197 000 строк кода.

Самое большое изменение языка Java за десятилетие наконец-то происходит. Это потребовало 197 000 строк кода.

      TL;DRПроект Valhalla вводит классы значений в JDK 28, изменение на 197,000 строк, которое переписывает то, как Java обрабатывает идентичность объектов. Инженер Oracle Лоис Фолтан подтвердила, что Предложение по улучшению Java 401, которое вводит классы значений и объекты в язык, будет интегрировано в основную ветку OpenJDK в начале следующего месяца с целевым выпуском JDK 28. Это изменение является частью Проекта Valhalla, долгосрочной инициативы по устранению одной из старейших ограничений производительности Java. Запрос на изменение добавляет более 197,000 строк кода в 1,816 измененных файлах, согласно The Register. Фолтан описала это как "чрезвычайно большое изменение" в сообщении на почтовом списке OpenJDK и попросила других участников избегать крупных коммитов в течение окна интеграции. Текущий комплект разработки Java — версия 26, ожидается, что JDK 27 выйдет в сентябре 2026 года, а JDK 28 — в марте 2027 года. JEP 401 появится как предварительная функция, что означает, что разработчики могут включить ее, но она не будет включена по умолчанию. Проблема, которую решает JEP 401, является фундаментальной для работы Java. За пределами небольшого набора примитивов, таких как int, char и double, каждый тип в Java является ссылочным типом. Это означает, что каждый объект получает свою уникальную идентичность в памяти, даже когда два объекта содержат идентичные данные. Класс LocalDate в Java, например, хранит значения дат, но два экземпляра, представляющие одну и ту же дату, вернут false при сравнении с оператором ==, потому что это разные объекты в памяти. Обертка класса Integer делает это еще более запутанным. Java внутренне кэширует экземпляры Integer для значений ниже 128, поэтому два объекта Integer с одинаковым малым значением могут сравниваться как равные с помощью ==. Для больших значений == всегда возвращает false, даже когда базовые числа совпадают. JEP 401 описывает это поведение как "нежелательную сложность", и редакторы Java обычно предупреждают против использования == с Integer в результате. Классы значений устраняют эту проблему, создавая объекты, которые полностью лишены идентичности. Значимый объект определяется исключительно значениями своих полей, а не тем, где он находится в памяти. Это дает JVM свободу хранить объекты значений таким образом, который снижает накладные расходы на память и улучшает локальность кэша. Итерация по типам значений более эффективна, потому что время выполнения не нужно разыменовывать указатели, чтобы получить доступ к фактическим данным. JEP 401 мигрирует некоторые существующие классы JDK, включая Integer, в классы значений. Ожидается, что количество мигрированных классов будет постепенно расти в последующих выпусках. Разработчики также смогут объявлять свои собственные классы значений для доменных типов, представляющих чистые данные, такие как координаты, суммы валюты или временные метки. Проект Valhalla разрабатывается с 2014 года, что делает его одним из самых долгосрочных усилий в истории Java. Сложность изменения того, как работает идентичность объектов на уровне JVM, при сохранении обратной совместимости с миллиардами строк существующего кода Java объясняет временные рамки. Некоторые наблюдатели шутят о том, что проект может достичь самого Вальгаллы, загробного мира в скандинавской мифологии, прежде чем он будет выпущен. Архитектор языка Java Oracle Брайан Гетц предостерег на Reddit, что JEP 401 — "это всего лишь первая часть Valhalla". Он сказал, что удаление идентичности является первым барьером, который открывает новые оптимизации, особенно для меньших объектов. Но полное обращение с объектами с семантикой значений требует отказаться от большего, включая возможность null и то, что Гетц назвал "атомарностью-безопасностью-под-влиянием". Он сравнил траекторию с структурами C#, отметив, что другие языки работают над аналогичными возможностями. Гетц также предупредил, что Valhalla введет преднамеренные разрушающие изменения. Код, который синхронизируется на объектах Integer, например, завершится с исключением, как только Integer станет классом значений. Он сказал, что JEP 401, вероятно, все еще будет в предварительном режиме в следующем выпуске долгосрочной поддержки JDK, который ожидается как JDK 29 в сентябре 2027 года. "Надеяться, что он выйдет из предварительного режима для 29, кажется ... оптимистичным", — написал он. Время совпадает с тем, как Oracle активно реорганизуется, сокращая до 30,000 сотрудников, чтобы финансировать свой переход к инфраструктуре ИИ. Но команда платформы Java, похоже, в значительной степени защищена от этих сокращений, и Проект Valhalla представляет собой тот вид глубокой языковой работы, который нельзя ускорить, привлекая больше инженеров. Java приобрела более восьми миллионов новых разработчиков с 2021 по 2023 год, и ее актуальность для облачных вычислений и корпоративных систем означает, что любое фундаментальное улучшение производительности оказывает влияние на обширную экосистему. Для миллионов разработчиков Java, которые ждали двенадцать лет для типов значений, предварительный просмотр в JDK 28 является вехой. Для остальной части Valhalla сообщение Гетца ясно: не держите дыхание.

Другие статьи

Facebook теперь имеет поисковую систему на базе ИИ, которая извлекает ответы из ваших публикаций в группах и Рилсах. Facebook теперь имеет поисковую систему на базе ИИ, которая извлекает ответы из ваших публикаций в группах и Рилсах. Meta запустила режим ИИ на Facebook, инструмент поиска на основе ИИ, который извлекает ответы из публичных постов в группах, роликах и объявлениях на рынке. Ваш процессор Ryzen использовался для шифрования вашей оперативной памяти. Обновление прошивки тихо отключило эту функцию. Ваш процессор Ryzen использовался для шифрования вашей оперативной памяти. Обновление прошивки тихо отключило эту функцию. AMD тихо отключила шифрование памяти TSME на потребительских процессорах Ryzen через обновление прошивки. Эта функция по-прежнему работает на процессорах Pro. AMD не говорит, почему. Airalo и рост eSIM-путешествий: более умный способ оставаться на связи за границей Airalo и рост eSIM-путешествий: более умный способ оставаться на связи за границей Международные поездки зависят от связи больше, чем когда-либо прежде. От навигации по незнакомым городам до управления бронированиями и поддержания связи с семьей на родине, надежные мобильные данные стали необходимыми. Вот как Airalo помогает путешественникам оставаться на связи более чем в 200 странах и регионах благодаря удобству технологии eSIM. 100 киберэкспертов говорят, что запрет на Fable 5 вредит защитникам 100 киберэкспертов говорят, что запрет на Fable 5 вредит защитникам Около 100 лидеров в области кибербезопасности требуют от США отменить запрет на Fable 5, утверждая, что это разоружает защитников, в то время как китайский Zhipu AI заполняет пробел с помощью GLM-5.2. Сеть аккаунтов X усиливает инструменты AI для нудификации, создавая ад для жертв Сеть аккаунтов X усиливает инструменты AI для нудификации, создавая ад для жертв Согласованные X-аккаунты помогают приложениям AI nudify достигать большего числа пользователей, говорят исследователи, поскольку такие сервисы, как Undress AI, добавляют платные видеоинструменты и реферальные кредиты, в то время как жертвы пытаются сдержать ущерб. Это новое приложение для Mac берет ваш экран в заложники, пока вы не выпьете воды. Это новое приложение для Mac берет ваш экран в заложники, пока вы не выпьете воды. Hydration Hostage блокирует экран вашего Mac по расписанию и разблокируется только после подтверждения с помощью камеры устройства, что вы действительно выпили воду.

Самое большое изменение языка Java за десятилетие наконец-то происходит. Это потребовало 197 000 строк кода.

Проект Valhalla's JEP 401 принесет классы значений в JDK 28, убирая идентичность объектов из типов Java в изменении на 197,000 строк, которое готовилось двенадцать лет.