От появления до покорения Красной планеты. В этой статье — история языка Java: от первых шагов и битвы с Microsoft до инструментов, без которых не обходится ни один Java разработчик. И да, вы узнаете, при чём здесь дуб, кофе и остров.

1990 — Oak. Дубовое появление

Проект по созданию языка программирования Java был инициирован в компании Sun Microsystems. Его разработкой занималась группа инженеров, в которую входили Джеймс Гослинг, Майк Шеридан и Патрик Ноттон. Основная цель, которую они ставили перед собой, заключалась в создании универсального языка, способного работать на самых разных электронных устройствах (банковские карты, бытовая техника, включая тостеры, телевизионные пульты и другие подобные гаджеты).

Одна из главных сложностей заключалась в том, что производители подобных устройств применяли контроллеры на базе различных процессоров и архитектур. Это делало невозможным написание единого программного кода, подходящего для всех устройств. Поэтому при разработке нового языка было принципиально важно избежать жёсткой привязки к конкретной аппаратной архитектуре или операционной системе.

Для решения этой проблемы нашли довольно подходящую концепцию. Вместо компиляции исходного кода непосредственно в машинный код определённого процессора, язык Java стал использовать промежуточное представление, называемое байт-кодом. Такой код затем выполнялся в специальной среде — виртуальной машине Java (JVM), которая обеспечивала независимость от аппаратной платформы. В итоге один и тот же байт-код можно было запускать на любых устройствах, где установлена соответствующая виртуальная машина.

Первоначально новый язык получил название Oak, что в переводе означает "дуб". Название было предложено Джеймсом Гослингом — он вдохновился дубом, росшим под окнами его офиса. Однако в процессе подготовки к официальному выпуску выяснилось, что торговая марка с таким названием уже зарегистрирована компанией Oak Technologies.

В итоге язык был переименован в Java. Это слово отсылает к сорту кофе с острова Ява в Индонезии. По одной из версий, выбор названия был символическим: кофе ассоциировался с повседневной техникой, например, кофемашинами, для которых язык и предназначался на раннем этапе как средство программирования бытовых электронных устройств.

В 1996 году, спустя семь лет после начала проекта, была официально представлена первая версия языка — Java 1.0. Это стало началом распространения Java как платформонезависимого, гибкого и универсального инструмента программирования.

1997 — Sun Microsystems против Microsoft

Начиная с версии Windows 98, Microsoft включала в состав своей операционной системы собственную реализацию виртуальной машины Java — Microsoft Java Virtual Machine. Эта JVM также поставлялась вместе с браузером Internet Explorer, начиная с третьей версии. Однако реализация Microsoft значительно отличалась от оригинальной версии, разработанной Sun Microsystems. В частности, отсутствовала поддержка таких ключевых компонентов, как программный интерфейс вызова удалённых методов (RMI) и Java Native Interface (JNI). Более того, Microsoft добавила собственные механизмы, несовместимые с оригинальной спецификацией, например средства интеграции Java и DCOM, функционирующие исключительно на платформе Windows.

Такие изменения нарушали принцип кроссплатформенности, который лежал в основе языка Java. Это вызвало серьёзные претензии со стороны Sun Microsystems, результатом которых стали судебные иски против Microsoft. В ходе разбирательств суд признал правоту Sun Microsystems, что привело к прекращению самостоятельной поддержки Microsoft JVM. По условиям соглашения, Microsoft продолжала поддерживать свою виртуальную машину до 2007 года, после чего проект был окончательно закрыт.

1998 — J2SE 1.2. Больше, чем казалось

Первые серьёзные изменения в языке программирования Java произошли с выпуском версии JDK 1.2. Объём нововведений был настолько велик, что разработчики решили изменить и само название платформы. С этого момента она стала называться Java 2 Platform Standard Edition, или сокращённо J2SE 1.2, подчёркивая переход на новый этап в развитии экосистемы Java.

Одним из новшеств, представленных в этой версии, стало добавление ключевого слова strictfp. Этот модификатор применялся для ограничения вычислений с числами с плавающей точкой. Его основной задачей было обеспечение одинаковых результатов вычислений на всех платформах, независимо от различий в аппаратной реализации и операционных системах. Это было особенно важно для Java, стремившейся к полной платформонезависимости.

Также в J2SE 1.2 была представлена новая библиотека для создания графических интерфейсов — Swing. Она была построена поверх уже существующего инструментария Abstract Windows Toolkit (AWT), но значительно превосходила его по функциональности. Swing предоставлял расширенный набор пользовательских компонентов, таких как кнопки, списки, таблицы и панели. Важной особенностью Swing была легковесность его компонентов. Это означало, что они не зависели напрямую от нативных оконных элементов операционной системы, что делало интерфейсы более переносимыми и настраиваемыми.

Кроме Swing, в этой версии Java добавили Collections Framework — фундаментальную библиотеку для работы с различными типами коллекций данных. До этого в Java имелись только базовые структуры, такие как массивы, векторы и хеш-таблицы. Однако у них не было единого интерфейса, поэтому с каждой из этих структур приходилось работать по-своему. Например, класс Vector был неудобен для расширения, так как большинство его методов были объявлены как final. Введение коллекционного фреймворка позволило объединить различные структуры данных под общими интерфейсами, сделав работу с ними более универсальной и удобной.

Ещё одним важным технологическим шагом стало включение в виртуальную машину Java (JVM) технологии JIT-компиляции (Just-In-Time). Впервые был использован компилятор Sun JIT, который значительно повысил производительность исполняемых программ. JIT-компилятор выполняет компиляцию байт-кода в машинный код во время выполнения программы, ускоряя выполнение по сравнению с интерпретацией.

Дополнительно в J2SE 1.2 была реализована полная поддержка стандарта Unicode, что позволило работать с текстами на множестве языков мира. Это стало важным шагом по превращению Java в универсальный язык для разработки глобальных и многоязычных приложений.

2001 — IntelliJ IDEA. JetBrains продаёт идею

В 2001 году компания JetBrains выпустила IntelliJ IDEA — интегрированную среду разработки, ориентированную на язык программирования Java. На момент своего появления эта IDE выделялась среди конкурентов благодаря расширенным функциям, которых ранее не было в других продуктах. В частности, IntelliJ IDEA предлагала продвинутые возможности навигации по исходному коду и инструменты для рефакторинга, что значительно упрощало и ускоряло процесс разработки.

Спустя восемь лет, в 2009 году, JetBrains приняли стратегически важное решение — открыть исходный код IntelliJ IDEA и выпустить её под свободной лицензией Apache 2.0. Продукт был разделён на две версии. Первая — Community Edition — включала в себя все компоненты, распространявшиеся с открытым исходным кодом. Вторая — Ultimate Edition — оставалась коммерческой и содержала дополнительные инструменты, предназначенные для профессиональной разработки.

Открытие кода дало мощный импульс к развитию других программных решений на базе IntelliJ IDEA. Самой известной и популярной разработкой на её основе стала Android Studio — официальная среда разработки приложений под Android, выпущенная Google при участии JetBrains. Позднее, в 2020 году, китайская компания Huawei создала собственную IDE под названием DevEco Studio, которая также была построена на базе IntelliJ IDEA и предназначалась для разработки приложений под операционную систему HarmonyOS. Кроме того, в России также стали появляться разработки, использующие этот движок. Так, 27 июня 2024 года компания Сбер выпустила собственную IDE под названием Giga IDE, в основе которой лежит та же платформа IntelliJ IDEA.

Признание IntelliJ IDEA среди профессионалов не заставило себя ждать. Уже в 2010 году авторитетное издание InfoWorld включило эту среду разработки в рейтинг лучших инструментов для работы с Java, присудив ей наивысшую оценку по сравнению с другими решениями, представленными на рынке.

Сегодня компания JetBrains считается одним из ведущих разработчиков профессионального программного обеспечения для программистов. Она создаёт интегрированные среды разработки не только для Java, но и для множества других языков программирования, включая Python, JavaScript, C++, Go и другие.

Тот же год: Eclipse. Затмевающая IDE

В ноябре того же 2001 года состоялся релиз ещё одной интегрированной среды разработки (IDE) для языка программирования Java — Eclipse. Этот программный продукт был создан под сильным влиянием среды разработки VisualAge, разработанной IBM и основанной на языке SmallTalk. VisualAge имела репутацию мощной, но достаточно сложной и монолитной системы. Поэтому при разработке Eclipse её архитектуру решили переосмыслить: новая IDE была спроектирована как модульная и расширяемая платформа с возможностью подключения плагинов, что стало одним из её ключевых преимуществ.

Запуск Eclipse ознаменовался важным шагом в направлении открытого программного обеспечения. Уже в ноябре 2001 года был создан специальный консорциум — Eclipse Consortium, задачей которого стало координирование усилий по развитию платформы. В состав этого консорциума вошли крупные IT-компании, в числе которых были Borland, IBM, Merant, QNX Software Systems, Rational Software, Red Hat, SuSE, TogetherSoft и WebGain. Консорциум управлялся советом директоров, который принимал ключевые решения о будущем платформы. Количество участников стремительно росло, и уже к 2003 году в нём насчитывалось более 80 организаций.

На протяжении многих лет Eclipse оставалась наиболее популярной IDE для Java-разработки благодаря своей открытости, гибкости, большому количеству плагинов и широкой поддержке со стороны сообщества. Однако в 2016 году лидерство всё же перешло к IntelliJ IDEA.

2002 — Spring. Весна после зимы Java EE

В октябре 2002 года Род Джонсон выпускает книгу "Expert One-on-One J2EE Design and Development", в которой критически оценивает Java EE — тогда основной стандарт для создания корпоративных приложений на Java. Он указывал на его излишнюю сложность, громоздкость и высокую стоимость, а также на трудности, с которыми сталкиваются разработчики при использовании этой платформы. В качестве альтернативы он предложил более простой и гибкий подход, основанный на использовании обычных Java-классов и механизма Dependency Injection. Этот подход быстро привлёк внимание сообщества, поскольку предлагал решение многих проблем, присущих Java EE.

Уже в 2003 году Джонсон вместе с Юргеном Хеллером и Яном Кароффом начинает разработку нового фреймворка с открытым исходным кодом, получившего название Spring. В июне того же года была выпущена первая публичная версия Spring 0.9 под лицензией Apache 2.0, а в 2004 году состоялся релиз Spring 1.0. Благодаря своей простоте, лёгкости конфигурации, использованию принципов IoC и AOP, а также возможности работы с POJO — Java EE использовала EJB-компоненты, которые имели некоторые ограничения, — Spring быстро приобрёл популярность как альтернатива Java EE.

В отличие от Java EE, которая требовала использования тяжёлых контейнеров и была ориентирована на строгое соблюдение стандартов, Spring предлагал более модульный, настраиваемый и понятный подход к разработке. Spring Boot ещё больше упростил процесс начальной настройки и развёртывания приложений, что сделало Spring особенно привлекательным для разработчиков, стремящихся к скорости и гибкости разработки. Несмотря на то, что Spring сам по себе мог быть медленнее и менее стандартизирован, чем Java EE, он завоевал популярность за счёт своей адаптивности, открытого исходного кода и активного развития сообществом. Spring стал прямым ответом на недостатки Java EE и до сих пор остаётся одним из самых востребованных фреймворков в мире Java-разработки.

Тот же год: J#. Microsoft наносит ответный удар

В 2002 году Microsoft представила для платформы .NET новый язык программирования — Visual J#. Несмотря на схожесть с Java, этот язык не был её полной реализацией, а лишь напоминал её синтаксис и структуру. В отличие от настоящей Java, Visual J# не требовал установки Sun JDK и создавал исполняемый код не для виртуальной машины Java (JRE), а для среды выполнения .NET Framework — Common Language Infrastructure (CLI).

Главной задачей создания Visual J# было облегчение миграции разработчиков с Java на платформу .NET, однако идея не получила широкого признания и поддержки. Язык не стал популярным среди разработчиков, и в результате уже из среды разработки Visual Studio 2008 он был исключён.

2004 — J2SE 5. Гремучие дженерики

Новая Java 5.0 вышла 30 сентября 2004 года. С этой версии поменялась официальная индексация версий. Как вы заметили, версия называется Java 5.0, а не Java 1.5, как нумеровались все предыдущие.

В этом обновлении появились перечисления (enum). Их реализация была основана на том, как подобный функционал работал в C++. При этом в Java они имели несколько больше возможностей. enum в Java является полноценным классом, то есть может иметь методы (в том числе скрытые и абстрактные), поля и конструктор. Также перечисления в Java могут реализовывать интерфейсы и имеют встроенные методы.

Появились аннотации, которые позволили добавлять в текст программы метаданные, не влияющие непосредственно на её выполнение, но давшие возможность получения различных сведений о коде и его исполнении. Помимо аннотаций в этой версии также добавили инструментарий для работы с аннотациями.

Дженерики! В версии 5.0 появились средства обобщённого программирования! В Java с этого момента можно было создавать классы и методы полями и параметрами произвольного объектного типа. Также с использованием новоиспечённого механизма были реализованы новые версии коллекций стандартной библиотеки языка.

Было введено использование Javadoc-комментариев, используемых для автоматического оформления документации на основе этих комментариев.

Появился Autoboxing/Unboxing — автоматическое преобразование между скалярными типами и соответствующими им типами-обёртками. Это сократило код, поскольку пропала необходимость в выполнении преобразований типов в очевиднейших случаях.

Помимо этого:

  • появился forEach;

  • был разрешён импорт статических полей и классов;

  • появились методы с неопределённым количеством параметров.

Тот же год: Java в космосе

Путь Java к применению в космосе начался в 1995 году, когда специалисты NASA из лаборатории Jet Propulsion Laboratory заинтересовались языком для реализации собственных задач. Главной целью было создание программного обеспечения для командования и управления марсоходом Mars Sojourner — первой мобильной автоматической станции на Марсе.

Создатель Java Джеймс Гослинг лично побывал в лаборатории NASA в Пасадене и проявил большой интерес к происходящему. Он не просто наблюдал за процессами — со временем настолько глубоко вовлёкся в работу команды, что стал членом их консультативного совета. В интервью Reuters он признался: "I'm a geek anyway, so it sucks me in" — подчёркивая, что техническая сложность и масштаб задач полностью его увлекли.

Работа лаборатории NASA с Java в итоге вылилась в создание специализированного программного обеспечения, которое позволило управлять марсоходом Spirit (MER-A) почти так же интуитивно, как если бы инженеры играли в гоночный симулятор. Это продемонстрировало возможности Java в системах реального времени и в условиях, где надёжность критически важна.

В 2009 году исследователи Ян Виттек, Мартин Децкий и Марко Зулианелло опубликовали статью под названием "Real-time Java in Space: Potential Benefits and Open Challenges". В ней они подробно рассмотрели преимущества использования Java в космических проектах. Среди плюсов отметили простоту разработки благодаря широкой распространённости языка, активному сообществу, поддержке объектно-ориентированных принципов, типобезопасности и возможности пространственного разделения потоков, что особенно важно в системах с критичными требованиями к отказоустойчивости.

Сегодня NASA активно использует Java в ряде своих программ, некоторые из которых с открытым исходным кодом.

Примечание. Недавно мы выпускали статью о том, как NASA ошиблись в исходном коде планеты. Прочитать её можно здесь.

2008 — Apache Maven. Что написано собрано пером...

Apache Maven — фреймворк для автоматизации сборки проектов на основе описания их структуры в файлах POM (Project Object Model) на языке XML. Он издаётся сообществом Apache Software Foundation и является частью Jakarta Project — проекта развития и поддержки программного обеспечения с открытым исходным кодом на языке Java.

Maven обеспечивает декларативную сборку: в файлах описания проекта содержится его спецификация, а не отдельные команды выполнения. Обработка же файлов, описанных в спецификации, ложится на плечи встроенных и внешних плагинов.

Началась разработка Maven ещё в 2002 году, причём тогда он являлся подпроектом Apache Turbine — фреймворка на основе сервлетов, который позволил опытным разработчикам Java быстро создавать веб-приложения.

Однако уже в 2003 году Maven был квалифицирован как проект верхнего уровня, а в 2004 году вышла первая версия — Maven 1.0. Однако из-за спешки с выпуском версий возникали различные проблемы: от избыточного количества конфигурации до проблем с производительностью.

Поэтому в 2005 году параллельно началась разработка Apache Maven 2.x, и 19 октября того же года вышла версия Apache 2.0.

Но и это не предел. В 2008 году стартовала разработка Apache Maven 3.0. Для создания этой версии разработчикам потребовалось переписать архитектуру Maven 2, так как старая была монолитной и сложной для расширения. Была улучшена система управления зависимостями, добавлена поддержка многопоточной сборки и введена более строгая проверка POM-файлов. Кроме того, заменили устаревшие внутренние механизмы (например, Plexus) на более надёжные и гибкие решения, чтобы повысить стабильность и расширяемость.

И именно версия Apache Maven 3.0 — это тот самый Maven, который мы знаем и любим.

Тот же год: Gradle. Наш слон

В 2008 году появилась первая версия инструмента автоматизации сборки Gradle 0.1. Проект был запущен как open source и разрабатывался под руководством Ханса Доктера, который впоследствии стал основателем и генеральным директором компании Gradle Inc. Вместе с ним над Gradle работал Адам Мёрдок — один из первых разработчиков, внёсших ключевой вклад в архитектуру системы.

Gradle был задуман как современная альтернатива существующим инструментам, таким как Apache Ant и Apache Maven. Он унаследовал от них общие идеи, но предложил более гибкий и выразительный подход. В отличие от Maven, который использовал громоздкие XML-файлы для описания сборки, Gradle предоставил возможность описывать логику сборки с помощью Groovy, а позднее и с помощью Kotlin. Это сделало сценарии сборки более читаемыми, лаконичными и динамичными.

Одним из ключевых технических отличий Gradle стало использование направленного ациклического графа (DAG) для вычисления порядка выполнения задач. Такая архитектура позволила Gradle точно определять зависимости между задачами, эффективно оптимизировать сборку и исключать повторные действия. Это стало особенно актуально для крупных проектов со множеством модулей и зависимостей.

Интересна и история названия. Изначально Ханс Доктер хотел назвать проект "Cradle", в переводе с английского "люлька". Однако ему показалось, что это звучит слишком мягко и неоригинально. Поэтому он изменил название, добавив в него первую букву "G" от языка Groovy, который активно использовался в проекте.

2009 — Sun Microsystems переходит под крыло Oracle

Выручка компании Sun Microsystems за 2009 год сократилась на 17,5% по сравнению с предыдущим 2008 годом. Тогда же в компании произошло большое сокращение сотрудников: были уволены 1300 человек, всего планировалось сократить 6000 сотрудников.

В это же появилась информация о продаже Sun Microsystems: сначала говорили, что покупателем будет Hewlett-Packard, а после появилась информация о продаже IBM.

20 апреля было официально анонсировано соглашение о приобретении компании Sun Microsystems корпорацией Oracle. Сами Oracle говорили, что эта покупка произошла в основном из-за языка Java, назвав это "...is the most important software Oracle has ever acquired". А в TechRepublic появилась заметка о том, что Oracle хотели быть своего рода Apple для разработчиков, предлагая всё: от программного обеспечения до необходимого оборудования.

Сделка была завершена 27 января 2010 года, а итоговая сумма составила $7,4 млрд.

2014 — Java 8. Мир не будет прежним

Версия Java SE 8.0 с кодовым именем Octopus вышла 19 марта 2014 года.

Одним из главных новшеств стали лямбда-выражения — компактный способ описания поведения прямо в месте вызова. Это существенно упростило работу с коллекциями и потоками данных, позволив писать более краткий и выразительный код.

Вместе с этим появился Stream API — мощный инструмент для обработки данных в декларативном стиле. Он позволил работать с коллекциями как с потоками, используя фильтрацию, сортировку, группировку и другие операции, а также упростил параллельную обработку данных через parallelStream().

Также в Java 8 были введены методы по умолчанию в интерфейсах (default). Это нововведение решило одну из старых проблем — невозможность добавлять новые методы в интерфейсы без нарушения обратной совместимости. Теперь интерфейсы могли содержать реализацию, что сделало их более гибкими и расширяемыми.

Важное улучшение коснулось и работы с датами и временем. Новый пакет java.time, вдохновлённый популярной библиотекой Joda-Time, пришёл на замену устаревшим и неудобным Date и Calendar. Он предложил разработчикам безопасный, предсказуемый и удобный API для работы с временными значениями.

Другим значимым новшеством стал класс Optional — контейнер, предназначенный для безопасного представления возможного отсутствия значения. Optional позволяет избавиться от null-проверок и минимизировать риск NullPointerException, побуждая к более чистому стилю программирования.

Наконец, Java 8 ввела понятие функциональных интерфейсов. Это интерфейсы с единственным абстрактным методом, аннотированных @FunctionalInterface. Это стало основой для лямбд и позволило создавать обобщённые гибкие конструкции без лишнего кода. Вместе с этим были добавлены стандартные интерфейсы вроде Predicate, Function, Consumer и других, которые теперь широко применяются в повседневной разработке.

В целом, Java 8 стала точкой поворота: язык стал более выразительным, современным и удобным для написания читаемого и безопасного кода. Эти изменения заложили фундамент для всех последующих версий.

Причём Java 8.0 и по сей день остаётся довольно популярной и используется в проектах. Почему? Есть проблемы в миграции с одной версии на другую, но здесь есть и другая заковырка. Oracle, новые владельцы языка Java, в 2019 году поменяли условия лицензирования Oracle JDK, что повлекло за собой серьёзное обсуждение в сообществе: "Как это Java больше не бесплатная?" Пусть и существовала версия OpenJDK, поддерживаемая теми же Oracle.

2018 — Java 11. Эксперименты по сборке мусора

25 сентября 2018 года вышла версия Java 11, которая продолжила курс на развитие производительности, удобства и безопасности, представив ряд значимых улучшений как в платформе, так и в синтаксисе языка.

Одним из заметных новшеств стал экспериментальный сборщик мусора Epsilon. Его особенность заключалась в полном отсутствии механизма освобождения памяти: он лишь выделял память, но не возвращал её обратно. Это сделало его полезным инструментом не только для тестирования производительности приложений и виртуальной машины, но и для нагрузочного тестирования, где важно исключить влияние сборки мусора и не требуется долгосрочная работа программы.

Параллельно с этим в Java 11 появился ещё один новый сборщик мусора — ZGC. Он был разработан с упором на масштабируемость и минимальные паузы. Благодаря таким технологиям, как фоновое перемещение объектов, множественное отображение памяти, сжатые указатели и адаптивное распределение потоков, ZGC был способен обеспечивать задержки менее одной миллисекунды, что критично для приложений с высокими требованиями к отклику. С релизом Java 15 ZGC был признан стабильным и готовым к промышленному использованию.

На уровне синтаксиса Java 11 добавила возможность использовать ключевое слово var в параметрах лямбда-функций, сделав стиль написания более единообразным с локальными переменными, где var уже применялся с версии Java 10. Это улучшило читаемость и унификацию кода.

Ещё одно важное изменение — новый HTTP-клиент, который стал стандартным компонентом платформы. Он полностью поддерживал протокол HTTP/2 и пришёл на смену устаревшему HttpURLConnection. Этот клиент впервые появился как экспериментальный ещё в Java 9, а теперь окончательно заменил старые решения.

Дополнительно Java 11 получила поддержку стандарта Unicode 10 и протокола шифрования TLS 1.3, что улучшило совместимость и безопасность современных приложений.

В общем и целом, Java 11 укрепила платформу в области производительности, тестирования, сетевых возможностей и безопасности, продолжив модернизацию языка и инфраструктуры.

2019 — Java анализатор PVS-Studio. Единороги в Java

В статическом анализаторе кода PVS-Studio версии 7.00 появился анализатор для проектов на языке Java. В первой версии нового анализатора было уже 66 диагностических правил.

Java анализатор был реализован на основе логики C++ анализатора, оформленной в отдельной библиотеке и используемой вместе с парсером Java. Таким образом первая версия Java анализатора включала в себя 10-летний опыт разработки статических анализаторов кода.

Для пользователей также появились и плагины, позволившие работать с новым анализатором намного удобнее:

  • плагин для интегрированной среды разработки IntelliJ IDEA;

  • плагины для сборочных систем Gradle и Apache Maven;

  • плагин для системы контроля качества кода SonarQube.

В 2024 году анализировать проекты на Java стало возможно ещё и с помощью плагина PVS-Studio для Visual Studio Code. В этом же году в анализаторе появился механизм для проведения taint-анализа, позволивший сделать упор на разработку диагностических правил, связанных с безопасностью кода на Java.

Примечание. Попробовать статический анализатор кода PVS-Studio на своём проекте можно с помощью пробной лицензии.

2021 — Java 17. Запечатай и переключай!

Новая LTS версия Java, уже 17-я по счёту, вышла 14 сентября 2021 года и внесла много нововведений в язык.

Одним из самых заметных синтаксических изменений стало появление запечатанных классов и интерфейсов (sealed). Эта конструкция позволила ограничивать список классов, которые могут наследовать или реализовывать данный тип. Такой подход усилил контроль над архитектурой приложения, сделал модель наследования более предсказуемой и повысил безопасность и поддерживаемость кода.

Также была расширена поддержка нового синтаксиса switch, который стал более выразительным. Теперь switch мог использовать не только значения, но и типы объектов, что упростило реализацию логики, зависящей от типа, и приблизило Java к возможностям сопоставления с шаблоном (pattern matching).

Важным шагом в сторону взаимодействия Java с нативным кодом стала экспериментальная поддержка Foreign Function & Memory API. Этот API предоставил безопасный и эффективный способ вызывать нативные библиотеки и работать с памятью вне управляемой среды JVM, открыв путь к более тесной интеграции с системными ресурсами и высокопроизводительными библиотеками.

В стандартной библиотеке также появились полезные нововведения. Например, класс HexFormat в java.util обеспечил удобную работу с шестнадцатеричными представлениями, что полезно при обработке бинарных данных. В пакете java.time появился интерфейс InstantSource, который позволил эмулировать текущее время. Это облегчило написание тестов для времени-зависимых компонентов.

Наконец, Java 17 продолжила улучшать кроссплатформенную производительность, в частности, за счёт внедрения нового графического конвейера Apple Metal для 2D-графики на macOS. Это повысило эффективность рендеринга и улучшило совместимость с современными графическими стандартами.

В результате Java 17 укрепила основу платформы, сделав её более безопасной, управляемой и современной, без перегрузки избыточными изменениями. Этот релиз стал логичным завершением нескольких крупных направлений развития, начатых в предыдущих версиях.

2023 — Java 21. Шаблоны, потоки и немного эмодзи

Следующая LTS версия Java вышла 19 сентября 2023 года. Java 21 продолжила эволюцию языка и платформы, сделав упор на масштабируемость, выразительность и безопасность. В этой версии были стабилизированы и официально включены функции, ранее доступные только в экспериментальном режиме, что значительно расширило возможности разработчиков.

Одним из главных событий стало появление виртуальных потоков — лёгких потоков исполнения, которые значительно упрощали создание масштабируемых многопоточных приложений. Благодаря им стало возможным эффективно обрабатывать тысячи параллельных задач без перегрузки системных ресурсов, что особенно важно для серверных и облачных приложений.

Синтаксис Java стал проще и выразительнее. Появились строковые шаблоны и текстовые блоки, которые облегчили работу со строками. Были добавлены безымянные переменные и шаблоны для удобного извлечения значений из сложных объектов, а также возможность писать программы без указания имени класса (операторы верхнего уровня), что упростило создание скриптов и утилит.

В стандартной библиотеке коллекций появились новые интерфейсы: SequencedCollection, SequencedSet и SequencedMap, которые гарантировали сохранение порядка элементов. Это особенно важно в тех случаях, когда последовательность данных влияет на логику работы приложения.

С точки зрения безопасности Java 21 представила API Key Encapsulation Mechanism — современный криптографический инструмент, предназначенный для безопасной передачи симметричных ключей. Это важное обновление в контексте реализации защищённых протоколов и сетевых взаимодействий.

Кроме того, язык продолжил избавляться от устаревших элементов, упрощая поддержку платформы и снижая технический долг.

2025 — Современность: Java 25, Project Valhalla и Project Loom

В сентябре 2025 года ожидается выход Java 25 — следующей долгосрочной версии (LTS), которая продолжит развитие языка и виртуальной машины.

В разработке находится Project Valhalla — масштабная инициатива OpenJDK, направленная на модернизацию объектной модели Java.

В текущей модели Java все объекты хранятся в куче. Работа с кучей обычно медленнее, чем с примитивными типами или структурами, размещёнными напрямую в стеке или в непрерывной области памяти. Кроме того, большое количество объектов в куче увеличивает нагрузку на сборщика мусора.

Project Valhalla же вводит так называемые объекты значимого типа (value objects), которые сравниваются по содержимому, а не по ссылке, и хранятся как примитивы прямо в памяти без лишней обёртки.

Подобные изменения скажутся на ускорении работы с памятью, уменьшении нагрузки на сборщика мусора, а также на увеличении производительности при работе с коллекциями.

И несмотря на то, что проект ещё в разработке, некоторые из запланированных в Project Valhalla изменений уже попали в предыдущие версии Java (JEP 181, JEP 309, JEP 334, JEP 390, JEP 371).

Также в разработке находится и Project Loom, цель которого — упростить и улучшить работу с многопоточностью в Java, сделав её более масштабируемой, эффективной и понятной.

Текущая модель потоков в Java основана на платформенных потоках (platform threads), которые управляются операционной системой. Они очень тяжёлые по ресурсам и плохо масштабируются: создавать десятки или сотни тысяч таких потоков дорого и неэффективно.

Сейчас уже реализована серьёзная часть Project Loom: виртуальные потоки стали стабильной частью платформы (мы говорили об этом в пункте о Java 21), но есть столь же солидная часть, которая пока не реализована.

В разработке находится структурированная конкурентность (structured concurrency) — подход, при котором все дочерние потоки запускаются и завершаются в рамках определённого блока кода, что упрощает управление временем жизни потоков, а также делает код более безопасным и предсказуемым.

Также всё ещё разрабатываются ограниченные значения (scoped values) — альтернатива ThreadLocal, которая позволяет передавать значения в виртуальные потоки без риска утечек и конфликтов, что полезно для задач, где важен контекст.

Заключение

Здесь мы завершаем наше путешествие по истории Java. Приключение выдалось интересное: мы посмотрели и на разные технические нововведения и технологии, и на то, что окружало язык и его разработку.

Обращу ваше внимание на то, что подборка событий в этой статье была основана на видении автора и может не совпадать с тем, что вы бы хотели увидеть в подобном материале. Но о пунктах, которые мы упустили в нашем приключении, вы смело можете писать в комментариях под этой статьёй!

Если вам интересно посмотреть на историю и других языков программирования, то у нас выходила целая серия подобных материалов:

Увидимся!

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Valerii Filatov. History of Java: evolution, legal battles with Microsoft, Mars exploration, Spring, Gradle and Maven, IDEA and Eclipse.

Комментарии (1)


  1. HSerg
    20.06.2025 16:07

    В 2001 ещё не было JetBrains. Тогда это были IntelliJ Software.