Перейти к основному содержимому

Различия между Oracle JDK и OpenJDK

· 8 мин. чтения

Задача: Медиана двух отсортированных массивов

Даны два отсортированных массива размерами n и m. Найдите медиану слияния этих двух массивов.
Временная сложность решения должна быть O(log(m + n)) ...

ANDROMEDA

1. Введение

В этом руководстве мы рассмотрим различия между Oracle Java Development Kit и OpenJDK . Сначала мы подробно рассмотрим каждый из них, а затем сравним их. Наконец, мы перечислим другие реализации JDK.

2. История Oracle JDK и Java SE

JDK (Java Development Kit) — это среда разработки программного обеспечения, используемая при программировании платформы Java. Он содержит полную среду выполнения Java, так называемую частную среду выполнения. Он назван так потому, что содержит больше инструментов, чем автономная JRE, а также других компонентов, необходимых для разработки приложений Java.

Oracle настоятельно рекомендует использовать термин JDK для обозначения пакета разработки Java SE (Standard Edition) (существуют также платформы Enterprise Edition и Micro Edition).

Давайте взглянем на историю Java SE:

  • Бета-версия JDK — 1995 г.
  • JDK 1.0 — январь 1996 г.
  • JDK 1.1 — февраль 1997 г.
  • J2SE 1.2 — декабрь 1998 г.
  • J2SE 1.3 — май 2000 г.
  • J2SE 1.4 — февраль 2002 г.
  • J2SE 5.0 — сентябрь 2004 г.
  • Java SE 6 — декабрь 2006 г.
  • Java SE 7 — июль 2011 г.
  • Java SE 8 (LTS) — март 2014 г.
  • Java SE 9 — сентябрь 2017 г.
  • Java SE 10 (18.3) — март 2018 г.
  • Java SE 11 (18,9 LTS) — сентябрь 2018 г.
  • Java SE 12 (19.3) — март 2019 г.

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

Мы видим, что основные выпуски Java SE выходили примерно каждые два года до Java SE 7. Потребовалось пять лет, чтобы перейти от Java SE 6, и еще три года после этого, чтобы достичь Java SE 8.

Начиная с Java SE 10 мы ожидаем новых выпусков каждые шесть месяцев. Однако не все выпуски будут выпусками с долгосрочной поддержкой (LTS). В соответствии с планом выпуска Oracle выпуск LTS-продуктов будет происходить только каждые три года.

Java SE 11 — это последняя LTS-версия, а Java SE 8 будет получать бесплатные общедоступные обновления до декабря 2020 года для некоммерческого использования.

Этот комплект для разработки получил свое нынешнее название после того, как Oracle купила Sun Microsystems в 2010 году. До этого название было SUN JDK, и это была официальная реализация языка программирования Java.

3. ОпенДК

OpenJDK — это бесплатная реализация Java SE Platform Edition с открытым исходным кодом. Первоначально он был выпущен в 2007 году в результате разработки, которую Sun Microsystems начала в 2006 году.

Следует подчеркнуть, что OpenJDK является официальной эталонной реализацией Java Standard Edition, начиная с версии SE 7 .

Изначально он был основан только на JDK 7, но начиная с Java 10 эталонная реализация платформы Java SE с открытым исходным кодом находится в ведении JDK Project . И, как и в случае с Oracle, проект JDK также будет выпускать новые версии функций каждые шесть месяцев.

Мы должны отметить, что до этого долговременного проекта были проекты выпуска JDK, которые выпускали одну функцию, а затем были прекращены.

Теперь давайте проверим версии OpenJDK:

  • Проект OpenJDK 6 - основан на JDK 7, но изменен для предоставления версии Java 6 с открытым исходным кодом.
  • Проект OpenJDK 7 — 28 июля 2011 г.
  • Проект OpenJDK 7u — этот проект разрабатывает обновления для Java Development Kit 7.
  • Проект OpenJDK 8 — 18 марта 2014 г.
  • Проект OpenJDK 8u — этот проект разрабатывает обновления для Java Development Kit 8.
  • Проект OpenJDK 9 — 21 сентября 2017 г.
  • Выпуск проекта JDK 10 – 20 марта 2018 г.
  • Релиз проекта JDK 11 — 25 сентября 2018 г.
  • Проект JDK, выпуск 12 — Фаза стабилизации

4. Oracle JDK против OpenJDK

В этом разделе мы сосредоточимся на ключевых различиях между Oracle JDK и OpenJDK.

4.1. График выпуска

Как мы уже упоминали, Oracle будет выпускать релизы каждые три года, а OpenJDK — каждые шесть месяцев .

Oracle обеспечивает долгосрочную поддержку своих выпусков. С другой стороны, OpenJDK поддерживает только изменения в выпуске до выпуска следующей версии.

4.2. Лицензии

Oracle JDK был лицензирован в соответствии с лицензионным соглашением Oracle Binary Code License Agreement , тогда как OpenJDK имеет стандартную общественную лицензию GNU (GNU GPL) версии 2 с исключением связывания .

Существуют некоторые последствия лицензирования при использовании платформы Oracle. Общедоступные обновления для Oracle Java SE 8, выпущенные после января 2019 года, не будут доступны для коммерческого, коммерческого или производственного использования без коммерческой лицензии, как объявила Oracle . Однако OpenJDK имеет полностью открытый исходный код и может использоваться свободно.

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

Между ними нет реальной технической разницы, поскольку процесс сборки Oracle JDK основан на процессе сборки OpenJDK .

Когда дело доходит до производительности, Oracle намного лучше с точки зрения скорости отклика и производительности JVM . Он уделяет больше внимания стабильности из-за важности, которую он придает своим корпоративным клиентам.

OpenJDK, напротив, выпускает релизы чаще. В результате мы можем столкнуться с проблемами нестабильности. Основываясь на отзывах сообщества , мы знаем, что некоторые пользователи OpenJDK сталкивались с проблемами производительности.

4.4. Функции

Если мы сравним функции и опции, то увидим, что продукт Oracle имеет функции Flight Recorder, Java Mission Control и Application Class-Data Sharing , а OpenJDK имеет функцию Font Renderer .

Кроме того, у Oracle больше возможностей для сбора мусора и улучшенные средства визуализации.

4.5. Развитие и популярность

Oracle JDK полностью разработан корпорацией Oracle, тогда как OpenJDK разработан Oracle, OpenJDK и сообществом Java . Однако в его разработке принимают активное участие такие первоклассные компании, как Red Hat, Azul Systems, IBM, Apple Inc. и SAP AG.

Как видно из ссылки в предыдущем подразделе, когда дело доходит до популярности ведущих компаний, использующих Java Development Kit в своих инструментах, таких как Android Studio или IntelliJ IDEA, Oracle JDK раньше был более предпочтительным, но оба эти компании перешли на сборки JetBrains на базе OpenJDK .

Кроме того, основные дистрибутивы Linux (Fedora, Ubuntu, Red Hat Enterprise Linux) предоставляют OpenJDK в качестве реализации Java SE по умолчанию.

5. Изменения с Java 11

Как мы видим из сообщения в блоге Oracle, начиная с Java 11 произошли некоторые важные изменения.

Прежде всего, Oracle изменит свою историческую лицензию « BCL » на комбинацию стандартной общественной лицензии GNU v2 с открытым исходным кодом с исключением Classpath (GPLv2+CPE) и коммерческой лицензии при использовании Oracle JDK как части продукта Oracle или или когда программное обеспечение с открытым исходным кодом не приветствуется.

Каждая лицензия будет иметь разные сборки, но они будут функционально идентичными, с некоторыми косметическими различиями и отличиями в упаковке.

Кроме того, в OpenJDK теперь доступны традиционно «коммерческие функции», такие как Flight Recorder, Java Mission Control и Application Class-Data Sharing, а также сборщик мусора Z. Поэтому сборки Oracle JDK и OpenJDK по существу идентичны, начиная с Java 11 .

Рассмотрим основные отличия:

  • Комплект Oracle для Java 11 выдает предупреждение при использовании параметра -XX:+UnlockCommercialFeatures , тогда как в сборках OpenJDK этот параметр приводит к ошибке.
  • Oracle JDK предлагает конфигурацию для предоставления данных журнала использования инструменту «Advanced Management Console».
  • Oracle всегда требовал, чтобы сторонние криптографические поставщики были подписаны известным сертификатом, в то время как криптографическая среда в OpenJDK имеет открытый криптографический интерфейс, что означает отсутствие ограничений в отношении того, какие поставщики могут использоваться.
  • Oracle JDK 11 по-прежнему будет включать установщики, брендинг и упаковку JRE, тогда как сборки OpenJDK в настоящее время доступны в виде файлов zip и tar.gz.
  • Команда javac –release ведет себя по-разному для целей Java 9 и Java 10 из-за наличия некоторых дополнительных модулей в выпуске Oracle.
  • Вывод команд java –version и java –fullversion будет отличать сборки Oracle от сборок OpenJDK.

6. Другие реализации JDK

Теперь давайте быстро взглянем на другие активные реализации Java Development Kit.

6.1. Бесплатный и с открытым исходным кодом

Следующие реализации, перечисленные в алфавитном порядке, имеют открытый исходный код и бесплатны для использования:

  • ПринятьOpenJDK
  • Амазонка Корретто
  • Азул Зулу
  • Bck2Brwsr
  • КАКАО
  • Кодовое имя Один
  • ДоппиоJVM
  • Затмение OpenJ9
  • GraalVM СЕ
  • ХайкуВМ
  • Точка доступа
  • Джамига
  • JamVM
  • Желатин JVM
  • Jikes RVM (виртуальная машина для исследований Jikes)
  • JVM.go
  • Либерика JDK
  • леджос
  • Максин
  • Многооперационный движок
  • ВеревкаВМ
  • uJVM

6.2. Собственные реализации

Существуют также защищенные авторским правом реализации:

  • Азул Зинг JVM
  • ЦВЕ-J
  • Эксельсиор ДЖЕТ
  • GraalVM EE
  • Имсис АБ
  • ЯмайкаVM (айкас)
  • JBlend (Апликс)
  • MicroJvm (IS2T — промышленная интеллектуальная программная технология)
  • OJVM
  • PTC Perc
  • SAP JVM
  • Waratek CloudVM для Java

Наряду с перечисленными выше активными реализациями мы можем увидеть список неактивных реализаций и краткое описание каждой реализации.

7. Заключение

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

Сначала мы описали каждый из них, а затем подчеркнули различия между ними. Мы также уделили особое внимание изменениям и отличиям по сравнению с Java 11. Наконец, мы перечислили другие активные реализации, доступные сегодня.