Открыть сервис

Java Development Kit

Java Development Kit (JDK) — это комплект разработчика приложений на языке Java, включающий компилятор, виртуальную машину (JVM), стандартные библиотеки классов, утилиты для отладки, профилирования и документирования, а также среду выполнения (JRE). JDK является основным инструментом для создания, компиляции, тестирования и запуска программ, написанных на Java, и предоставляет разработчикам всё необходимое для работы с платформой Java SE (Standard Edition), Java EE (Enterprise Edition) и Java ME (Micro Edition).

История

Предыстория и создание

Разработка JDK началась в 1991 году в компании Sun Microsystems (впоследствии поглощена корпорацией Oracle) под руководством Джеймса Гослинга, Патрика Нотона и Майка Шеридана. Изначально проект назывался Oak и предназначался для программирования бытовых электронных устройств. В 1995 году язык был переименован в Java, а в январе 1996 года вышла первая публичная версия — JDK 1.0. Она включала базовый компилятор javac, интерпретатор java (JVM), а также библиотеки для работы с графикой (AWT), сетями, вводом-выводом и многопоточностью.

Развитие версий

  • JDK 1.1 (1997) — добавлены внутренние классы, JavaBeans, RMI (удалённый вызов методов), рефлексия и JDBC (доступ к базам данных).
  • J2SE 1.2 (1998) — введена платформа Java 2, Swing (набор графических компонентов), Collections Framework и улучшенная JIT-компиляция.
  • J2SE 1.3 (2000) — улучшена производительность JVM, добавлены Java Sound, Java Naming and Directory Interface (JNDI).
  • J2SE 1.4 (2002) — поддержка регулярных выражений, утверждений (assert), логирования, XML-парсинга (SAX, DOM) и криптографических расширений.
  • Java SE 5 (2004) — значительное обновление: дженерики (generics), аннотации, перечисления (enum), автобоксинг, цикл for-each, статический импорт и улучшенная модель памяти.
  • Java SE 6 (2006) — улучшена производительность, добавлена поддержка скриптовых языков (JSR 223), веб-сервисов (JAX-WS) и аннотаций для компиляции.
  • Java SE 7 (2011) — поддержка строк в switch, try-with-resources, многопоточный Fork/Join Framework, NIO.2 (файловая система), улучшенный Type Inference.
  • Java SE 8 (2014) — лямбда-выражения, функциональные интерфейсы, Stream API, новый API для работы с датой и временем (java.time), Optional, Nashorn JavaScript Engine.
  • Java SE 9 (2017) — модульная система (Project Jigsaw), JShell (интерактивная оболочка), улучшенный API для коллекций и потоков.
  • Java SE 10 (2018)локальная переменная с выводом типа (var), улучшенный G1-сборщик мусора.
  • Java SE 11 (2018, LTS) — удалены Java EE и CORBA, добавлены HTTP-клиент (java.net.http), улучшенный запуск однопрограммных файлов.
  • Java SE 17 (2021, LTS) — запечатанные классы (sealed classes), паттерн-матчинг для switch (preview), улучшенный Random Generator.
  • Java SE 21 (2023, LTS) — виртуальные потоки (Project Loom), паттерн-матчинг для switch (stable), рекорды (records), улучшенный сборщик мусора ZGC.

Переход к Oracle

В 2010 году корпорация Oracle приобрела Sun Microsystems, став владельцем Java и JDK. С 2018 года Oracle изменила модель лицензирования: JDK 11 и более новые версии распространяются под коммерческой лицензией Oracle Technology Network License Agreement (OTNLA) для коммерческого использования, но существуют бесплатные альтернативы, такие как OpenJDK (открытая эталонная реализация), Adoptium (Eclipse Temurin), Amazon Corretto, Azul Zulu и другие.

Состав JDK

Основные компоненты

  • Компилятор javac — преобразует исходный код Java (файлы .java) в байт-код (файлы .class), который выполняется на JVM.
  • Виртуальная машина Java (JVM) — среда выполнения, интерпретирующая или компилирующая байт-код в машинные инструкции для конкретной платформы. Включает сборщик мусора, JIT-компилятор и управление памятью.
  • Среда выполнения Java (JRE) — подмножество JDK, необходимое для запуска Java-приложений: JVM, стандартные библиотеки классов и вспомогательные файлы. В JDK JRE встроена, но может распространяться отдельно.
  • Стандартные библиотеки классов — набор пакетов (например, java.lang, java.util, java.io, java.net, java.sql, java.awt, javax.swing), предоставляющих готовые реализации для работы с данными, сетью, графикой, базами данных, многопоточностью и другими задачами.
  • Утилиты:
  • java — запускает Java-приложения.
  • javadoc — генерирует документацию в формате HTML из комментариев в исходном коде.
  • jar — архивирует классы и ресурсы в JAR-файлы.
  • jlink — создаёт пользовательские образы JRE с минимальным набором модулей.
  • jpackage — упаковывает Java-приложения в установочные пакеты для различных ОС.
  • jconsole — графический монитор для управления JVM.
  • jvisualvm — инструмент профилирования и отладки.
  • jdbотладчик для Java-программ.
  • jps — показывает запущенные Java-процессы.
  • jstat — выводит статистику производительности JVM.
  • jstack — создаёт дампы потоков.
  • jmap — выводит информацию о памяти JVM.
  • jhat — анализирует дампы кучи.
  • jcmd — универсальная утилита для диагностики JVM.
  • jshell — интерактивная оболочка для быстрого тестирования кода (с Java 9).

Модульная система (Project Jigsaw)

Начиная с Java 9, JDK перешёл на модульную архитектуру. Все библиотеки и утилиты разбиты на модули (например, java.base, java.sql, java.desktop, jdk.compiler, jdk.javadoc). Это позволяет:

  • Создавать минимальные образы JRE с помощью jlink.
  • Улучшить инкапсуляцию и безопасность.
  • Упростить развёртывание приложений.

Классификация и версии

Типы выпусков

  • LTS (Long-Term Support) — версии с долгосрочной поддержкой (обычно 8 лет): Java 8, 11, 17, 21. Рекомендуются для корпоративных проектов.
  • Feature releases — промежуточные версии (каждые 6 месяцев), содержащие новые функции, но с коротким сроком поддержки (до выхода следующей версии): Java 9, 10, 12–16, 18–20, 22 и т.д.

Популярные дистрибутивы JDK

  • Oracle JDK — официальный дистрибутив от Oracle, требует коммерческой лицензии для использования в производстве (с 2019 года).
  • OpenJDK — эталонная открытая реализация, распространяется под лицензией GPLv2 с исключением для связывания (Classpath Exception). Является основой для большинства других дистрибутивов.
  • Eclipse Temurin (Adoptium) — бесплатный дистрибутив, сертифицированный TCK (Technology Compatibility Kit), поддерживается сообществом Eclipse Foundation.
  • Amazon Corretto — бесплатный дистрибутив от Amazon, включает исправления для облачных сред.
  • Azul Zulu — бесплатный дистрибутив от Azul Systems, оптимизированный для различных платформ.
  • IBM Semeru — дистрибутив от IBM, основанный на OpenJDK и OpenJ9.
  • GraalVM — высокопроизводительная JVM от Oracle, поддерживающая компиляцию в нативный код (Native Image) и многоплатформенность.

Применение

Разработка приложений

JDK используется для создания:

  • Настольных приложений — с использованием Swing, JavaFX, AWT.
  • Веб-приложений — серверная часть (Java EE, Spring, Jakarta EE, сервлеты, JSP).
  • Мобильных приложенийAndroid (хотя официально Android использует свою среду выполнения, JDK необходим для компиляции).
  • Корпоративных системERP, CRM, банковские системы, системы управления базами данных.
  • Научных и вычислительных задач — Apache Hadoop, Apache Spark, Deeplearning4j.
  • Встраиваемых систем — Java ME, IoT-устройства.

Инструменты и платформы

  • Сборщики мусора — G1, ZGC, Shenandoah, Parallel, Serial, CMS (устарел).
  • Профилирование — VisualVM, JProfiler, YourKit, Java Mission Control.
  • Сборка — Maven, Gradle, Ant.
  • Тестирование — JUnit, TestNG, Mockito.
  • Веб-серверы — Apache Tomcat, Jetty, WildFly, GlassFish.

Критика и ограничения

Производительность

  • Потребление памяти: JVM по умолчанию выделяет значительный объём оперативной памяти (до нескольких гигабайт), что может быть избыточно для небольших приложений.
  • Время запуска: JVM загружает множество классов и инициализирует среду, что замедляет старт по сравнению с нативными приложениями (частично решается с помощью GraalVM Native Image).
  • Сборка мусора: хотя современные сборщики (ZGC, Shenandoah) минимизируют паузы, для real-time систем Java может быть неоптимальна.

Лицензирование

  • Oracle JDK с 2019 года требует платной подписки для коммерческого использования, что вызвало критику сообщества. Однако бесплатные альтернативы (OpenJDK, Temurin) полностью функциональны и сертифицированы.

Безопасность

  • Java-апплеты (устаревшая технология для браузеров) были признаны небезопасными и удалены из JDK 11. Настольные приложения под управлением JVM могут быть уязвимы при неправильной настройке политик безопасности.

Совместимость

  • Переход на модульную систему (Java 9) нарушил обратную совместимость для некоторых проектов, использующих рефлексию и внутренние API. Для решения проблемы введены флаги --add-opens и --add-exports.

Интересные факты

  • JDK 1.0 (1996) весил около 5 МБ, а современный JDK 21 — более 200 МБ.
  • В состав JDK входит более 4000 классов и интерфейсов в стандартной библиотеке.
  • JVM поддерживает более 50 языков программирования (Kotlin, Scala, Groovy, Clojure, JRuby, Jython и др.), компилирующихся в байт-код.
  • Первая версия JDK была написана на C++, но начиная с Java 1.2 значительная часть JVM (включая HotSpot) реализована на C++ и ассемблере.
  • JDK 8 (2014) до сих пор остаётся одной из самых популярных версий для корпоративных проектов, несмотря на прекращение поддержки Oracle (хотя многие дистрибутивы, такие как Temurin, продолжают выпускать обновления).

Источники

  • «The Java Language Specification» (Java SE 21 Edition), James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Alex Buckley.
  • «Java: The Complete Reference» (13th Edition), Herbert Schildt.
  • Официальная документация Oracle JDK (docs.oracle.com/javase).
  • Спецификация OpenJDK (openjdk.org).
  • Статья «A History of Java» на сайте Oracle Technology Network.
  • Материалы конференций JavaOne, Devoxx, Jfokus.
  • Статья «Java version history» в Википедии (английская версия).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →