Для чего нужен jdk
Так много JDK… Какой использовать и чем это грозит?
От переводчика: Решение перевести эту статью пришло не само собой — скорее это вынужденная мера :). К нам, как к вендорам фреймворка CUBA, обращаются с этим вопросом с завидной регулярностью. Безусловно, для нас это тоже крайне важная тема, и в ответ на последние изменения мы подняли тестовые стенды как на Oracle JDK, так и на Liberica JDK — эта мера на данный момент ограждает наших пользователей от непредвиденных лицензионных трат. Однако, эта тема еще не закрыта, и мы продолжаем внимательно следить за развитием событий, и, кто знает, возможно нам придется добавлять стенды для еще каких сборок JDK уже в следующем году.
Статья под катом подкупает тем, что она лаконично описывает проблематику и наиболее популярные JDK с их особенностями.
Недавно Oracle заявили, что эволюция Java кардинально изменится благодаря переходу на «Release Train» — новому подходу к выкатыванию версий. Это изменение также повлекло за собой перемены в плане поддержки версий, которая теперь будет осуществляться не для всех, а только для LTS версий. Сообщество Java чемпионов разъяснило вводимые новшества, детальный документ доступен в сети.
Даже с учетом этих новостей остаются вопросы: какие билды JDK сейчас доступны? Будут ли они бесплатными или коммерческими? Прежде чем ответить на этот вопрос, важно понять, какие требования предъявляются к JDK как продукту. Фактически, есть только один основной исходный код JDK. Он находится здесь. Кто угодно может использовать исходный код для построения собственной сборки и размещения ее где-то в сети. Однако есть отдельная процедура сертификации, которая должна быть пройдена, чтобы сборка JDK считалась валидной. Сертификация осуществляется Java Community Process (JCP), который предоставляет Technology Compatibility Kit (TCK). Если какая-либо организация создает новую сборку OpenJDK, которая отвечает TCK, она считается «совместимой с Java SE».
Имейте в виду, что сборка не может называться «Java SE», если компания, осуществившая сборку, не приобрела коммерческую лицензию от Oracle. Например, сборки AdoptOpenJDK, которые проходят TCK, не являются «Java SE», но являются «Java SE compliant». Также нужно учитывать, что сертификация сейчас основывается “на честном слове” — результаты не отсылаются в JCP/Oracle для верификации и являются закрытой информацией. Короче говоря, каждый вендор, взявший исходники OpenJDK и собравший версию, порождает еще одну отдельную сборку JDK.
Итак, без лишних слов, рекомендуем ознакомиться со следующими готовыми к использованию JDK:
Oracle JDK
Это главный поставщик Java 11 (релиз уже состоялся). Это коммерческая версия с платной поддержкой. Ее можно бесплатно скачивать и использовать только непосредственно для разработки. Использовать ее в продакшене, не заплатив Oracle, нельзя (так что для многих не интересующихся вопросами лицензирования это ловушка). Oracle планирует предоставлять платную поддержку до 2026 года и далее. В отличие от того, как было раньше, сборка Oracle JDK ничем не “лучше” OpenJDK (по стольку по скольку оба находятся на одном и том же уровне security patch level).
OpenJDK Build от Oracle
AdoptOpenJDK
Это тоже бесплатные и не-брендовые сборки OpenJDK, распространяемые по лицензии GPL с Classpath Extension, только в отличие от билдов OpenJDK от Oracle эти версии сборки будут действовать в течение более длительного времени для основных версий, таких как Java 11. Версии Java 11 будут выпускаться в течение 4 лет через год после следующего основного релиза. AdoptOpenJDK ориентируется на сообщество. Пока другие команды создают и публикуют исправления безопасности для исходного репозитория OpenJDK, они будут выпускать билды. И IBM, и Red Hat обозначили, что намерены выпускать такие патчи.
AdoptOpenJDK OpenJ9
Вдобавок к стандартным сборкам OpenJDK AdoptOpenJDK будет также предоставлять версии с OpenJ9 вместо HotSpot. OpenJ9 изначально была JVM от IBM, но сейчас OpenJ9 имеет открытый исходный код. И, кстати говоря, эта опция наиболее достойная изучения.
Red Hat OpenJDK
Red Hat предоставляет версии сборки OpenJDK на Red Hat Enterprise Linux (RHEL), являющемся коммерческим продуктом с платной поддержкой. Red Hat очень неплохо справляются с исправлениями безопасности в OpenJDK. В прошлом Red Hat отвечали за security-апдейты Java 6 и 7. Сборка от Red Hat более интегрирована с операционной системой, так что ее нельзя назвать типичным билдом OpenJDK (отсутствует JDK конечного пользователя).
Azul Zulu
Zulu — брендированная версия OpenJDK с платной коммерческой поддержкой. К тому же, хотя Azul предоставляет некоторые элементы Zulu бесплатно в рамках «Zulu Community», они не несут никаких особых обязательств по доступности этих сборок. У Azul довольно масштабный план по поддержке Zulu, включающий поддержку Java 9, 13 и 15, в отличие от других поставщиков.
Amazon Corretto
Это новейшая из всех описанных опций. Corretto — бесплатная версия сборки OpenJDK с долгосрочной поддержкой, проходящая TCK. Она распространяется по стандартным условиям лицензирования всех версий OpenJDK: GPL + CE. Amazon создаст собственные патчи и запустят Corretto на AWS, так что он будет использоваться довольно активно (и уже добавлен в некоторые продукты). Поддержка Java 8 планируется по меньшей мере до июня 2023.
В процессе преобразования исходного OpenJDK в различные версии сборки производитель может добавлять различные утилиты или брендировать продукт, если это не препятствует сертификации (TCK). Например, нельзя добавить новый public-метод в API или новые языковые ресурсы.
Есть и другие реализации JDK, такие как IBM и SAPMachine. Однако эти версии сборки не так часто используются, поэтому они не упомянуты в этой статье. Более подробную информацию можно найти здесь и здесь.
Заключение
Лично я особой проблемы в наличие нескольких версий JDK не вижу, так как всем им нужно проходить сертификацию (TCK). Чем действительно стоит обеспокоиться — это использование одной из проприетарных JDK и бесплатной версии сборки от Oracle, во избежание головной боли в будущем. Если вы используете только базовые функции (например, ваш бизнес не особо зависит от секьюрити-апдейтов), вам больше подойдут сборки OpenJDK от Oracle (НЕ OracleJDK), т.к. они постоянно обновляются (в течение 6 месяцев после релиза), и вы можете использовать JDK в продакшене без особых проблем. Если в вашем бизнесе задействованы облачные сервисы (или с AWS), хорошим выбором будет AWS Corretto, который уже пригоден к использованию на Amazon Linux и Docker.
68) JDK против JRE против JVM
Что такое JDK?
JDK — это среда разработки программного обеспечения, используемая для создания апплетов и приложений Java. Полная форма JDK — Java Development Kit. Разработчики Java могут использовать его в Windows, macOS, Solaris и Linux. JDK помогает им кодировать и запускать программы на Java. На одном компьютере можно установить более одной версии JDK.
В этом уроке вы узнаете:
Что такое JRE?
JRE — это часть программного обеспечения, предназначенная для запуска другого программного обеспечения. Он содержит библиотеки классов, класс загрузчика и JVM. Проще говоря, если вы хотите запустить Java-программу, вам нужна JRE. Если вы не программист, вам не нужно устанавливать JDK, а просто JRE для запуска программ на Java. Тем не менее, все версии JDK поставляются в комплекте с Java Runtime Environment, поэтому вам не нужно загружать и устанавливать JRE отдельно на вашем ПК. Полная форма JRE — Java Runtime Environment.
Что такое JVM?
JVM — это механизм, обеспечивающий среду выполнения для управления Java-кодом или приложениями. Он преобразует байт-код Java в машинный язык. JVM является частью Java Run Environment (JRE). Его нельзя отдельно загрузить и установить. Чтобы установить JVM, вам нужно установить JRE. Полная форма JVM — виртуальная машина Java.
Во многих других языках программирования компилятор создает машинный код для конкретной системы. Однако компилятор Java создает код для виртуальной машины, которая называется JVM.
Зачем использовать JDK?
Вот важные причины использования JDK:
Зачем использовать JRE?
Вот важные причины использования JRE:
Why JVM?
Here are the important reasons of using JVM:
Features of JDK
Here are the important features of JDK:
Features of JRE
Here are the important features of JRE:
Features of JVM
Here are the important features of JVM:
How JDK Functions?
Here are the important components of JDK:
Как функционирует JRE?
JRE Функциональность
JRE имеет экземпляр JVM с ним, библиотечные классы и инструменты разработки. Как только вы пишете и компилируете код Java, компилятор генерирует файл класса с байтовым кодом.
Вот важные компоненты JRE:
Таким образом, Java-программа работает в JRE.
Как функционирует JVM?
Функциональность JVM
Вот важные компоненты JVM:
1) Класс Loader
Загрузчик классов — это подсистема, используемая для загрузки файлов классов. Он выполняет три основные функции, а именно. Загрузка, связывание и инициализация.
2) Область метода
Область методов JVM хранит структуру класса, такую как метаданные, код для методов Java и постоянный пул времени выполнения.
3) куча
Все объекты, массивы и переменные экземпляра хранятся в куче. Эта память распределяется между несколькими потоками.
4) Языковые стеки JVM
Стеки языка Java хранят локальные переменные и их частичные результаты. Каждый поток имеет свой собственный языковой стек JVM, создаваемый одновременно с созданием потока. Новый кадр создается при вызове метода и удаляется по завершении процесса вызова метода.
5) ПК Регистры
Регистры ПК хранят адрес инструкции виртуальной машины Java, которая в данный момент выполняется. В Java каждый поток имеет свой отдельный регистр ПК.
6) Стеки родного метода
Стеки нативных методов содержат инструкцию нативного кода, зависит от нативной библиотеки. Он распределяет память по собственным кучам или использует любой тип стека.
7) Исполнение двигателя
Это тип программного обеспечения, который используется для тестирования программного обеспечения, оборудования или комплектных систем. Механизм выполнения теста никогда не несет никакой информации о тестируемом продукте.
8) интерфейс родного метода
Интерфейс Native Method представляет собой среду программирования. Он позволяет коду Java, который выполняется в JVM, вызываться библиотеками и собственными приложениями.
9) Библиотеки нативных методов
Собственные библиотеки — это коллекция Собственных библиотек (C, C ++), которые необходимы для механизма исполнения.
Разница между JDK, JRE и JVM
Вот основные различия между JDK против JRE и JVM:
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Java Development Kit
Содержание
История
Компания Sun Microsystems активно развивала и обновляла JDK, почти каждый год выходили новые версии. В 1996 г. была выпущена первая версия — JDK 1.0, которая модифицировалась до версии с номером 1.0.2. В этой версии библиотека классов Java API содержала 8 пакетов. Весь набор JDK 1.0.2 поставлялся в упакованном виде в одном файле размером около 5 Мбайт, а после распаковки занимал на диске около 8 Мбайт.
В 1997 г. появилась версия JDK 1.1, последняя ее модификация, 1.1.8, выпущена в 1998 г. В этой версии было 23 пакета классов, занимала она 8,5 Мбайт в упакованном виде и около 30 Мбайт — в распакованном. В первых версиях JDK все пакеты библиотеки Java API были упакованы в один архивный файл classes.zip и вызывались непосредственно из этого архива, его не нужно было распаковывать. Затем набор инструментальных средств JDK был сильно переработан.
Версия JDK 1.2 вышла в декабре 1998 г. и содержала уже 57 пакетов классов. В архивном виде это файл размером почти 20 Мбайт и еще отдельный файл размером более 17 Мбайт с упакованной документацией. Полная версия располагается на 130 Мбайт дискового пространства, из них около 80 Мбайт занимает документация. Начиная с этой версии, все продукты технологии Java собственного производства компания Sun стала называть Java 2 Platform, Standard Edition, сокращенно J2SE, а в литературе утвердилось название Java 2. Кроме 57 пакетов классов, обязательных на любой платформе и получивших название Core API, в Java 2 JDK 1.2 входят еще дополнительные пакеты классов, называемые en:Standard Extension API.
В версии J2SE JDK 1.5.0, вышедшей в конце 2004 г., было уже под сотню пакетов, составляющих Core API (Application Programming Interface). В упакованном виде — это файл размером около 46 Мбайт и необязательный файл с упакованной документацией такого же размера. В это же время произошло очередное переименование технологии. Из версии убрали первую цифру и стали писать Java 2 Platform, Standard Edition 5.0, сокращенно J2SE 5.0 и JDK 5.0, хотя во внутрифирменной документации сохраняется название JDK 1.5.0. Последнее обновление J2SE 5.0, JDK 1.5.0_22, было выпущено 3 ноября 2009 года.
В шестой версии, вышедшей в начале 2007 г., из названия технологии убрали цифру 2 и стали писать Java Platform, Standard Edition 6, сокращенно — Java SE 6 и JDK 6. Впрочем, во внутрифирменной документации остается прежнее обозначение, например последнее на момент написания книги обновление обозначается JDK 1.6.0_26. Летом 2011 года появилась седьмая версия Java SE 7 и распространяется JDK 1.7.0.
Программы и классы, входящие в JDK
Набор программ и классов JDK содержит:
Версии
JDK имеет следующие версии:
Различие между JDK, SDK и ADK
Разница между JDK и JRE
«JDK» является Java Development Kit. То есть, это комплект JDK программного обеспечения, которое можно использовать для разработки Java Based программного обеспечения. «JRE» является Java Runtime Environment. То есть, en:JRE это реализация виртуальной машины Java, которая в действительности выполняет Java программы.
Что такое JDK? Введение в Java Development Kit
Java Development Kit (JDK) является одним из трех основных технологических пакетов, используемых в программировании Java, наряду с JVM (Java Virtual Machine) и JRE (Java Runtime Environment). Важно различать эти три технологии, а также понимать, как они связаны.
JRE может использоваться как автономный компонент для простого запуска программ Java, но он также является частью JDK. JDK требует JRE, потому что запуск программ Java является частью их разработки.
Так же, как мы сделали с моим недавним введением в виртуальной машине Java, давайте рассмотрим технические и бытовые определения в JDK
Начало работы с JDK
В дополнение к выбору версии Java, вам также необходимо выбрать пакет Java. Пакеты представляют собой Java-разработки, которые предназначены для разных типов разработкт. Доступные пакеты: Java Enterprise Edition (Java EE), Java Standard Edition (Java SE) и Java Mobile Edition (Java ME).
Также нетрудно переключиться на другой JDK в будущем, если вам это нужно. Не беспокойтесь слишком много о выборе правильной версии Java и пакета JDK, когда вы только начинаете.
Совместимость версий JDK
Поскольку JDK предоставляет компилятор для ваших программ Java, JDK, который вы используете, определяет, в какой версии Java вы можете программировать. Например, если вы хотите использовать более новую функциональную поддержку, найденную в Java 8, Как оператор arrow Lambda, то Вам нужно по крайней мере Java 8 JDK для компиляции. В противном случае, javac команда будет отклонять код с синтаксической ошибкой.
Мы будем придерживаться Java SE для этого урока, чтобы мы могли сосредоточиться на основных классах и технологиях JDK. Чтобы скачать Java на SE JDK, то посетите страницу загрузок Oracle. Вы увидите различные доступные пакеты JDK:
Прежде чем выбрать загрузку Java SE, найдите минутку, чтобы посмотреть на другие варианты. Есть много вкусного на кухне Java!
Вы бы загрузили Java EE JDK, если бы вы были в первую очередь заинтересованы в создании веб-приложений на основе Java. Java EE JDK включает спецификацию Сервлета Java, которая поддерживает обработку HTTP-запросов. Каждый Java ее реализации JDK также требует контейнера, который представляет собой сервер, который запускает приложения. Glassfish является эталонной реализацией сервера Java EE для Oracle. Другие популярные реализации-Tomcat и Jetty.
Пойдите вперед и загрузите Java Standard Edition JDK.
При запуске пакета JDK установщика вам будет предложено выбрать из трех компонентов: средство разработки, исходный код, и общественной среды JRE. Вы можете установить один или все из них. В этом случае просто выберите значение по умолчанию.
Установка опции «средства разработки» дает вам jdk собственно. Установка «Source Code» содержит источники для открытых классов в ядре java API. Включение этой опции позволяет ссылаться на исходный код при создании приложений. Третий вариант,» Public JRE», приводит к тому, что JDK и JRE являются отдельными объектами: public JRE может использоваться другими программами для выполнения программ Java и может быть установлен отдельно от JDK.
Продолжайте установку всех трех компонентов и примите значения по умолчанию для каждого из них. Это означает, что JDK и JRE будут установлены в местах по умолчанию для вашей операционной системы. На Windows это C:\Program Files\Java.
JDK в командной строке
Это хорошо: java установлено, но что javac? Вам понадобится этот элемент JDK для компиляции файлов Java.
javac команда живет внутри /jdk каталога, но не добавляется автоматически в систему во время установки. У нас есть возможность установить его javac сами, или мы можем установить IDE, который включает в себя эта команда. Начнем с компиляции и запуска Java-программы по старинке.
Простая программа Java
Шаг 1. Написать простую программу Java
Создайте новый текстовый файл, назовите Intro.java и поместите его где-то на компьютере.
Затем добавьте код из листинга 1, который является очень простой программой Java.
Шаг 2. Компиляция с JDK
Вы будете использовать javac команду, которая вызывает для Java-компилятор. Введите полный путь к команде в командной строке, и передайте Intro.java файл как команду. В моей системе это выглядит так (предварительно перейти надо в каталог с java файлом)
javac это звезда в JDK, но /bin каталог содержит и другие инструменты, которые вам понадобятся. Пожалуй, наиболее известный после javac, это jar инструмент.
Давайте преобразуем Intro.class в jar файл.
Перейдите обратно к каталогу, где вы разместили свой Intro.java и введите команду, которую вы видите ниже
Несколько IDE существуют для Java. Вы видели, как JDK работает в командной строке, поэтому теперь давайте рассмотрим, как это работает в Eclipse IDE.
Установка Eclipse выходит за рамки этого руководства, но это простой процесс. Eclipse включает в себя инсталлятор, как и любую другую программу, и вы можете найти правильный установщик для своей операционной системы здесь.
Eclipse установлен, теперь откройте окно пункта меню в строке меню и выберите Настройки.
Внутри окна настроек, вы увидите пункт Java. Откройте его, и внутри вы увидите элемент Компилятор элемента. Там будут некоторые варианты для JDK.
Как упоминалось ранее, вам нужно будет выбрать правильную версию JDK для вашего проекта. Под капотом IDE будет работать компилятор JDK, так же, как вы запустили его из командной строки. IDE Eclipse также имеет свой собственный экземпляр JDK. IDE управляет JDK и JRE для вас, что делает жизнь намного проще!
Эта статья является второй в короткой серии, представляющей три основных компонента платформы Java: JVM, JDK и JRE. В следующей статью этой серии вы узнаете все о среде выполнения Java.
статьи IT, java, Java App Dev, Средства разработки, jdk
Руководство по версиям и возможностям Java
Здесь есть все, что вам нужно знать о различных версиях и функциях Java.
Java 8, Java 11, Java 13 — какая разница?
Вы можете использовать это руководство, чтобы найти и установить последнюю версию Java, понять различия между дистрибутивами Java (AdoptOpenJdk, OpenJDK, OracleJDK и т.д.), А также получить обзор возможностей языка Java, включая версии Java 8-13.
Примечание переводчика
09 апреля 2020 г. Марко опубликовал новую версию Руководства, в которую добавлено описание Java 14.
Перевод новой версии Руководства предлагается Вашему вниманию.
Исходная информация
Во-первых, давайте взглянем на некоторые общие практические вопросы, которые возникают у людей при попытке выбрать правильную версию Java для своего проекта.
Если вы хотите узнать больше о конкретной версии, перейдите на сайт AdoptOpenJDK, выберите последнюю версию Java, загрузите и установите ее. Затем вернитесь к этому руководству и узнайте еще кое-что о разных версиях Java.
Какую версию Java я должен использовать?
По состоянию на сентябрь 2019 года Java 13 является последней выпущенной версией Java, с новыми версиями, выходящими каждые 6 месяцев — Java 14 запланирована на март 2020 года, Java 15 на сентябрь 2020 года и т.д. В прошлом циклы выпуска Java были намного длиннее, до 3-5 лет!
С появлением такого количества новых версий в действительности имеются следующие основные сценарии использования:
Почему компании все еще застряли на Java 8?
Существует множество разных причин, по которым компании все еще придерживаются Java 8. Вот некоторые из них:
Подводя итог, у вас есть сочетание практических вопросов (обновление ваших инструментов, библиотек, фреймворков) и политических проблем.
Почему некоторые версии Java называются 1.X?
Это просто означает Java 8. С переходом к основанным на времени выпускам с Java 9 также изменилась схема именования, и версии Java больше не имеют префикса 1.x. Теперь номер версии выглядит так:
В чем разница между версиями Java?
Должен ли я изучать конкретную?
Придя из других языков программирования с большими перерывами между выпусками, как, например, Python 2–3, вы можете спросить, применимо ли это к Java.
Java особенная в этом отношении, поскольку она чрезвычайно обратно совместима. Это означает, что ваша программа на Java 5 или 8 гарантированно будет работать с виртуальной машиной Java 8-13 — с некоторыми исключениями, о которых вам сейчас не нужно беспокоиться.
Очевидно, что это не работает наоборот, скажем, ваша программа использует функции Java 13, которые просто недоступны в Java 8 JVM.
Это означает несколько вещей:
Каковы примеры этих новых возможностей новых версий Java?
Взгляните на раздел «Возможности Java 8-13» ниже.
Но, как правило: старые, более длинные циклы выпуска (3-5 лет, вплоть до Java 8) означали множество новых функций в каждом выпуске.
Шестимесячный цикл выпуска означает меньшее количество функций на выпуск, поэтому вы можете быстро освоить языковые функции Java 9-13.
В чем разница между JRE и JDK?
До сих пор мы говорили только о Java. Но что именно означает «Java»?
Во-первых, вам нужно провести различие между JRE (Java Runtime Environment) и JDK (Java Development Kit).
Исторически, вы загружали только JRE, если вас интересовали только программы Java. JRE включает, помимо прочего, виртуальную машину Java (JVM) и инструмент командной строки «java».
Для разработки новых программ на Java вам нужно было загрузить JDK. JDK включает в себя все, что есть в JRE, а также компилятор javac и несколько других инструментов, таких как javadoc (генератор документации Java) и jdb (отладчик Java).
Теперь, почему я говорю в прошедшем времени?
Вплоть до Java 8 веб-сайт Oracle предлагал JRE и JDK в качестве отдельных загрузок, хотя JDK также всегда включал JRE в отдельной папке. В Java 9 это различие практически исчезло, и вы всегда загружаете JDK. Структура каталогов JDK также изменилась, так как в ней больше не было явной папки JRE.
Таким образом, хотя некоторые дистрибутивы (см. Раздел «Дистрибутивы Java») по-прежнему предлагают отдельную загрузку JRE, похоже, существует тенденция предлагать только JDK. Следовательно, теперь мы будем использовать Java и JDK взаимозаменяемо.
Как мне установить Java или JDK?
Поэтому все, что вам нужно сделать, чтобы установить Java на свой компьютер, — это разархивировать файл jdk-<5-13>.zip. Вам даже не нужны права администратора для этого.
Ваш распакованный файл Java будет выглядеть так:
Магия происходит в каталоге / bin, который в Windows выглядит следующим образом:
Поэтому все, что вам нужно сделать, это разархивировать этот файл и поместить каталог /bin в переменную PATH, чтобы вы могли вызывать команду java из любого места.
В случае, если вам интересно, установщики с графическим интерфейсом, такие как Oracle или AdoptOpenJDK, выполняет распаковку и изменение переменной PATH вместо вас.
Дистрибутивы Java
Существует множество сайтов, предлагающих загрузку Java (читай: JDK), и неясно, «кто что предлагает и с каким лицензированием». Этот раздел проливает свет на это.
Проект OpenJDK
С точки зрения исходного кода Java (читай: исходный код вашего JRE / JDK) есть только один — на сайте проекта OpenJDK.
Вот почему на практике есть несколько поставщиков, которые фактически создают эти сборки, сертифицируют (см. TCK) и затем распространяют их.
И хотя поставщики не могут, скажем, удалить метод из класса String перед созданием новой сборки Java, они могут добавить брэндинг (вay!) или добавить некоторые другие утилиты (например, CLI), которые они считают полезными. Но в остальном исходный код одинаков для всех дистрибутивов Java.
OpenJDK (от Oracle) и сборки OracleJDK
Один из поставщиков, который создает Java из исходного кода, — это Oracle. Это приводит к двум разным дистрибутивам Java, что поначалу может быть очень запутанными.
Исторически (до Java 8) существовали реальные исходные различия между сборками OpenJDK и сборками OracleJDK, при этом можно было сказать, что OracleJDK был «лучше». Но на сегодняшний день обе версии практически одинаковы, с небольшими отличиями.
Впрочем все сводится к тому, что вам требуется платная коммерческая поддержка (номер телефона) для используемой версии Java.
AdoptOpenJDK
В 2017 году группа участников, разработчиков и поставщиков Java User Group (Amazon, Microsoft, Pivotal, Red Hat и другие) создала сообщество под названием AdoptOpenJDK.
Они предоставляют бесплатные надежные сборки OpenJDK с более длительной доступностью / обновлениями и даже предлагают вам выбор из двух разных виртуальных машин Java: HotSpot и OpenJ9.
Я очень рекомендую ее, если вы хотите установить Java.
Azul Zulu, Amazon Corretto, SAPMachine
Полный список сборок OpenJDK вы найдете на сайте OpenJDK Wikipedia. Среди них Azul Zulu, Amazon Corretto, а также https://sap.github.io/SapMachine/ и многие другие. Упрощенно говоря, различия сводятся к тому, что у вас есть различные варианты поддержки/ гарантии обслуживания.
Но не забудьте проверить на сайтах дистрибьюторов, чтобы узнать о преимуществах каждого отдельного дистрибутива.
Рекомендация
Повторим с еще раз, что с 2019 года, если у вас нет особых требований, найдите файл jdk.zip (.tar.gz/.msi/.pkg) по адресу https://adoptopenjdk.net или выберите пакет, предоставленный вашим поставщиком ОС.
Возможности Java 8-13
Как уже упоминалось в самом начале этого руководства: в сущности все (если вы не будьте слишком требовательны) функции языка Java 8 работают в Java 13. То же самое касается всех других версий Java между ними.
В свою очередь, это означает, что знание всех языковых функций Java 8 дает хорошую базу в изучении Java, а все остальные версии (Java 9-13) в значительной степени дают дополнительные функции поверх этого базового уровня.
Вот краткий обзор того, что конкретные версии могут предложить:
Java 8
Java 8 была массовым выпуском, и вы можете найти список всех функций на веб-сайте Oracle. Здесь я хотел бы упомянуть два основных набора функций:
Особенности языка: лямбды и т.д.
До Java 8 всякий раз, когда вы хотели создать экземпляр, например, нового Runnable, вы должны были написать анонимный внутренний класс, например, так:
С лямбдами тот же код выглядит так:
Вы также получили ссылки на методы, повторяющиеся аннотации, методы по умолчанию для интерфейсов и некоторые другие языковые функции.
Коллекции и потоки
В Java 8 вы также получили операции в функциональном стиле для коллекций, также известные как Stream API. Быстрый пример:
До Java 8, вам нужно было написать циклы for, чтобы что-то сделать с этим списком.
С помощью API Streams вы можете сделать следующее:
Java 9
Java 9 также была довольно большой версией, с несколькими дополнениями:
Коллекции
Коллекции получили несколько новых вспомогательных методов для простого создания списков, наборов и карт.
Streams
Потоки получили несколько дополнений, в виде методов takeWhile, dropWhile и iterate.
Optionals
Optionals получили метод ifPresentOrElse, которого крайне не хватало.
Интерфейсы
Интерфейсы получили private методы:
Другие возможности языка
И пара других улучшений, таких как улучшенный оператор try-with-resources или расширения diamond оператора.
JShell
Наконец, в Java появилась оболочка, в которой вы можете попробовать простые команды и получить немедленные результаты.
HTTPClient
Java 9 принес первоначальную предварительную версию нового HttpClient. До этого встроенная поддержка Http в Java была довольно низкоуровневой, и вам приходилось использовать сторонние библиотеки, такие как Apache HttpClient или OkHttp (кстати, отличные библиотеки).
В Java 9 у Java появился собственный современный клиент — хотя он находится в режиме превью, что означает, что он может быть изменен в более поздних версиях Java.
Проект Jigsaw: модули Java и файлы Jar с несколькими выпусками
Java 9 получила Jigsaw Module System, которая чем-то напоминает старую добрую спецификацию OSGI. Целью данного руководства не является подробное описание Jigsaw — посмотрите предыдущие ссылки, чтобы узнать больше.
Java 10
В Java 10 было несколько изменений, таких как сборка мусора и т.д. Но единственное реальное изменение, которое вы, как разработчик, вероятно, заметите, — это введение ключевого слова var, также называемого выводом типа локальной переменной.
Вывод типа локальной переменной: ключевое слово var
Чувствуете себя как в Javascript-е, не так ли? Однако Java все еще строго типизирован и var применяется только к переменным внутри методов (спасибо, dpash, за то, что снова указал на это).
Java 11
Java 11 также была несколько меньшей версией с точки зрения разработчика.
Строки и файлы
Строки и файлы получили несколько новых методов (не все перечислены здесь):
Запустить исходные файлы
Начиная с Java 10, вы можете запускать исходные файлы Java без предварительной компиляции. Шаг к написанию сценариев.
Вывод типа локальной переменной (var) для лямбда-параметров
В заголовке все сказано:
HttpClient
HttpClient из Java 9, но уже в окончательной, а не превью версии.
Другие вкусности
Flight Recorder (Регистратор полетов), сборщик мусора No-Op, Nashorn-Javascript-Engine объявлен deprecated (устаревшим) и т.д.
Java 12
В Java 12 появилось несколько новых функций и исправлений, но здесь стоит упомянуть только поддержку Unicode 11 и превью нового выражения switch, о котором вы узнаете в следующем разделе.
Java 13
Вы можете найти полный список возможностей здесь, но, по сути, вы получаете поддержку Unicode 12.1, а также две новые или улучшенные превью функции (могут быть изменены в будущем):
Switch выражение (Preview — предварительная версия)
Выражения переключателя теперь могут возвращать значение. И вы можете использовать лямбда-стиль синтаксиса для своих выражений, без проблем с ошибками:
Старые операторы switch выглядели так:
В то время как в Java 13 операторы switch могут выглядеть так:
Многострочные строки (превью)
Наконец-то вы можете сделать это на Java:
Java 14 и позже
Будет рассмотрено здесь, как только их выпустят. Зайдите в ближайшее время!
Вывод
К настоящему времени у вас должен быть довольно хорошее представление о нескольких вещах:
Обратная связь, исправления и случайный ввод всегда приветствуются! Просто оставьте комментарий внизу.
Спасибо за прочтение!
Там больше, откуда это появилось
Эта статья первоначально появилась на сайте как часть серии руководств по современному программированию на Java. Чтобы найти больше руководств, посетите веб-сайт или подпишитесь на рассылку, чтобы получать уведомления о недавно опубликованных руководствах: https://bit.ly/2K0Ao4F.
Благодарности
Стивен Колебурн написал фантастическую статью о различных доступных дистрибутивах Java. Спасибо, Стивен!