﻿# История Java: развитие, изучение Марса, битва с Microsoft, Spring, Gradle и Maven, IntelliJ IDEA и Eclipse

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

![1256_Java_history_ru/image1.png](https://import.viva64.com/docx/blog/1256_Java_history_ru/image1.png)

## 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 ошиблись в исходном коде планеты\\\. Прочитать её можно \[здесь\]\(https://pvs\-studio\.ru/ru/blog/posts/java/1253/\)\\\.

## 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](https://www.joda.org/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 на своём проекте можно с помощью пробной \[лицензии\]\(https://pvs\-studio\.ru/ru/pvs\-studio/try\-free/\)\\\.

## 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](https://openjdk.org/jeps/181), [JEP 309](https://openjdk.org/jeps/309), [JEP 334](https://openjdk.org/jeps/334), [JEP 390](https://openjdk.org/jeps/390), [JEP 371](https://openjdk.org/jeps/371)\)\.

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

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

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

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

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

## Заключение

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

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

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

* [История C и C\+\+\. Часть первая: появление и стандартизация C, C with Classes становится C\+\+](https://pvs-studio.ru/ru/blog/posts/cpp/1189/)
* [История C и C\+\+\. Часть вторая: стандартизация C и C\+\+, Qt, Clang, Unreal Engine](https://pvs-studio.ru/ru/blog/posts/cpp/1224/)
* [История C\#: эволюция версий, \.NET, Unity, Blazor, MAUI](https://pvs-studio.ru/ru/blog/posts/csharp/1248/)

Увидимся\!