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

ПРИМЕЧАНИЕ. Этот вопрос относится к 2014 году. Начиная с Java 11 OpenJDK и Oracle JDK сходятся.

Есть ли принципиальные различия между Oracle и OpenJDK?

Например, совпадают ли сборщик мусора и другие параметры JVM?

GC работает по-разному между двумя?

Ответ 1

И OpenJDK, и Oracle JDK создаются и поддерживаются в настоящее время только Oracle.

OpenJDK и Oracle JDK являются реализациями той же спецификации Java, что и TCK (Java Technology Certification Kit).

Большинство поставщиков JDK написаны поверх OpenJDK, выполнив несколько настроек [в основном для замены лицензионных проприетарных компонентов/замены более высокопроизводительными элементами, которые работают только на определенных ОС], без нарушения совместимости с TCK.

Многие поставщики реализовали спецификацию Java и получили TCK. Например, IBM J9, Azul Zulu, Azul Zing и Oracle JDK.

Почти каждый существующий JDK является производным от OpenJDK.

Как полагают многие, лицензирование - это изменение между JDK.

Начиная с JDK 11 для доступа к длительной поддержке Oracle JDK/Java SE теперь потребуется коммерческая лицензия. Теперь вам следует обратить внимание на то, какой JDK, который вы устанавливаете, поскольку Oracle JDK без подписки может перестать работать. источник

Ссылка: список виртуальных машин Java

Ответ 2

Для Java 7 ничего принципиального. Проект OpenJDK в основном основан на исходном коде HotSpot, пожертвованном Sun.

Более того, OpenJDK был выбран как эталонная реализация для Java 7 и поддерживается инженерами Oracle.

Более подробный ответ 2012 года о разнице между JVM, JDK, JRE & OpenJDK, который ссылается на сообщение в блоге Oracle:

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

A: Это очень близко - наш процесс сборки для Oracle JDK выпускает сборки на OpenJDK 7, добавив всего лишь пару частей, таких как код развертывания, который включает в себя реализацию Oracle для плагина Java и Java WebStart, а также некоторые третьи части закрытого источника сторонние компоненты, такие как графический растеризатор, некоторые сторонние компоненты с открытым исходным кодом, такие как Rhino, и несколько кусочков, вроде дополнительной документации или сторонних шрифтов. В дальнейшем мы намереваемся открыть все части Oracle JDK с открытым исходным кодом, кроме тех, которые мы рассматриваем как коммерческие функции, такие как JRockit Mission Control (пока недоступно в Oracle JDK), и заменить обремененные сторонние компоненты альтернативами с открытым исходным кодом, чтобы добиться более четного паритета. между базами кода.

Ответ 3

Главное отличие в будущем - это график выпуска и политика поддержки.

OpenJDK

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

Oracle JDK

Oracle JDK больше ориентирован на корпоративную аудиторию, которая ценит стабильность. Он основан на одном из выпусков OpenJDK, но затем получает долгосрочную поддержку (LTS). Выпуск Oracle JDK планируется каждые 3 года.

enter image description here

Источник: https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events

Ответ 4

Для Java 8, Oracle JDK против OpenJDK, я бы взял ключевые различия:

  • OpenJDK - это реализация платформы Java Standard Edition с открытым исходным кодом при участии Oracle и сообщества Java.

  • OpenJDK выпущен по лицензии GPL v2, в которой Oracle JDK лицензируется в соответствии с лицензионным соглашением Oracle для двоичного кода.

  • Фактически, процесс сборки Oracle JDK строится из исходного кода OpenJDK. Таким образом, между Oracle JDK и OpenJDK нет существенных технических различий. Помимо базового кода, Oracle JDK включает в себя реализацию Oracle Plugin и Java WebStart. Он также включает сторонние компоненты с закрытым и открытым исходным кодом, такие как графический растеризатор и Rhino соответственно. OpenJDK Font Renderer и Oracle JDK Flight Recorder - заметные основные различия между Oracle JDK и OpenJDK.

  • Rockit был JVM Oracles, а из Java SE 7 HotSpot и JRockit объединились в одну JVM. Так что теперь у нас есть только объединенная JVM HotSpot.
  • Есть случаи, когда люди утверждают, что у них были проблемы во время работы OpenJDK, и это было решено при переключении на Oracle JDK.
  • Твиттер имеет свой собственный JDK.
  • Программное обеспечение, подобное Minecraft, предполагает использование Oracle JDK. На самом деле, предупреждает.

Полный список различий см. В исходной статье: Процесс разработки Oracle JDK против OpenJDK и Java JDK.

Ответ 5

JVM Oracle и OpenJDK одинаковы и имеют одинаковые функции GC (в последних версиях 10+). До того, как Oracle управлял JVM OpenJDK, были конкретные различия, которые делали эту старую JVM OpenJDK практически непригодной для использования во многих средах. JVM теперь такие же.

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

diff --brief -r openjdk oraclejdk

Крайне важно, что следующие файлы отсутствуют в дополнение к множеству других в linux JDK (поэтому, если вы "заявили", что код не работает на OpenJDK, и сделали это на OracleJDK, когда вы использовали javafx, то вы были правы):

Only in jdk-10.0.1/bin: javapackager
Only in jdk-10.0.1/bin: javaws
Only in jdk-10.0.1/bin: jcontrol
Only in jdk-10.0.1/bin: jmc
Only in jdk-10.0.1/bin: jweblauncher
Only in jdk-10.0.1/lib: ant-javafx.jar
Only in jdk-10.0.1/lib: deploy
Only in jdk-10.0.1/lib: deploy.jar
Only in jdk-10.0.1/lib: desktop
Only in jdk-10.0.1/lib: fontconfig.bfc
Only in jdk-10.0.1/lib: fontconfig.properties.src
Only in jdk-10.0.1/lib: fontconfig.RedHat.6.bfc
Only in jdk-10.0.1/lib: fontconfig.RedHat.6.properties.src
Only in jdk-10.0.1/lib: fontconfig.SuSE.11.bfc
Only in jdk-10.0.1/lib: fontconfig.SuSE.11.properties.src
Only in jdk-10.0.1/lib: fonts
Only in jdk-10.0.1/lib: javafx.properties
Only in jdk-10.0.1/lib: javafx-swt.jar
Only in jdk-10.0.1/lib: java.jnlp.jar
Only in jdk-10.0.1/lib: javaws.jar
Only in jdk-10.0.1/lib: jdk.deploy.jar
Only in jdk-10.0.1/lib: jdk.javaws.jar
Only in jdk-10.0.1/lib: jdk.plugin.jar
Only in jdk-10.0.1/lib: jfr
Only in jdk-10.0.1/lib: libavplugin-53.so
Only in jdk-10.0.1/lib: libavplugin-54.so
Only in jdk-10.0.1/lib: libavplugin-55.so
Only in jdk-10.0.1/lib: libavplugin-56.so
Only in jdk-10.0.1/lib: libavplugin-57.so
Only in jdk-10.0.1/lib: libavplugin-ffmpeg-56.so
Only in jdk-10.0.1/lib: libavplugin-ffmpeg-57.so
Only in jdk-10.0.1/lib: libbci.so
Only in jdk-10.0.1/lib: libcmm.so
Only in jdk-10.0.1/lib: libdecora_sse.so
Only in jdk-10.0.1/lib: libdeploy.so
Only in jdk-10.0.1/lib: libfxplugins.so
Only in jdk-10.0.1/lib: libglassgtk2.so
Only in jdk-10.0.1/lib: libglassgtk3.so
Only in jdk-10.0.1/lib: libglass.so
Only in jdk-10.0.1/lib: libgstreamer-lite.so
Only in jdk-10.0.1/lib: libjavafx_font_freetype.so
Only in jdk-10.0.1/lib: libjavafx_font_pango.so
Only in jdk-10.0.1/lib: libjavafx_font.so
Only in jdk-10.0.1/lib: libjavafx_iio.so
Only in jdk-10.0.1/lib: libjfxmedia.so
Only in jdk-10.0.1/lib: libjfxwebkit.so
Only in jdk-10.0.1/lib: libnpjp2.so
Only in jdk-10.0.1/lib: libprism_common.so
Only in jdk-10.0.1/lib: libprism_es2.so
Only in jdk-10.0.1/lib: libprism_sw.so
Only in jdk-10.0.1/lib: librm.so
Only in jdk-10.0.1/lib: libt2k.so
Only in jdk-10.0.1/lib: locale
Only in jdk-10.0.1/lib: missioncontrol
Only in jdk-10.0.1/lib: oblique-fonts
Only in jdk-10.0.1/lib: plugin.jar
Only in jdk-10.0.1/lib: plugin-legacy.jar
Only in jdk-10.0.1/lib/security: blacklist
Only in jdk-10.0.1/lib/security: public_suffix_list.dat
Only in jdk-10.0.1/lib/security: trusted.libraries
Only in openjdk-10.0.1: man'

Ответ 6

Согласно сообщению оракула, Oracle JDK Releases для Java 11 и новее

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

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

От BCL до GPL

Лицензия на двоичный код для технологий Oracle Java SE ("BCL") была основной лицензией на технологии Oracle Java SE уже более десяти лет. BCL разрешает использование без лицензионных сборов при определенных условиях. Чтобы упростить дальнейшую работу, Oracle начала предоставлять лицензионные сборки OpenJDK с открытым исходным кодом начиная с Java 9, используя ту же модель лицензирования, что и платформа Linux. Если вы привыкли получать двоичные файлы Oracle Java SE бесплатно, вы можете просто продолжить делать это с помощью сборок Oracles OpenJDK, доступных на jdk.java.net. Если вы привыкли получать двоичные файлы Oracle Java SE как часть коммерческого продукта или услуги от Oracle, вы можете продолжать получать версии Oracle JDK через службу поддержки Oracle (MOS) и другие места.

Функционально идентичны и взаимозаменяемы...

JDK с лицензией Oracles BCL исторически содержал "коммерческие функции", которые не были доступны в сборках OpenJDK. Однако, как и было обещано, за прошедший год Oracle предоставила эти возможности сообществу OpenJDK, в том числе:

Следовательно, начиная с Java 11, сборки Oracle JDK и сборки OpenJDK будут практически идентичны.

... но с некоторыми косметическими и упаковочными различиями

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

  • Oracle JDK 11 выдает предупреждение при использовании опции -XX: + UnlockCommercialFeatures, тогда как в сборках OpenJDK эта опция приводит к ошибке. Эта опция никогда не была частью OpenJDK, и не имеет смысла добавлять ее сейчас, поскольку в OpenJDK нет коммерческих функций. Это различие сохраняется для того, чтобы пользователям Oracle JDK 10 и более ранних выпусков было легче перейти на Oracle JDK 11 и более поздние версии.
  • Oracle JDK 11 можно настроить для предоставления данных журнала использования инструменту " Advanced Management Console ", который является отдельным коммерческим продуктом Oracle. Мы будем работать с другими участниками OpenJDK, чтобы обсудить, как такие данные об использовании могут быть полезны в OpenJDK в будущих выпусках, если вообще будут. Эта разница сохраняется прежде всего для обеспечения постоянного взаимодействия с клиентами Oracle до принятия таких решений.
  • Команда javac --release ведет себя по-разному для целей Java 9 и Java 10, поскольку в этих выпусках Oracle JDK содержал некоторые дополнительные модули, которые не были частью соответствующих выпусков OpenJDK:
    • javafx.base
    • javafx.controls
    • javafx.fxml
    • javafx.graphics
    • javafx.media
    • javafx.web
    • java.jnlp
    • jdk.jfr
    • jdk.management.cmm
    • jdk.management.jfr
    • jdk.management.resource
    • jdk.packager.services
    • jdk.snmp

Это различие сохраняется для того, чтобы обеспечить постоянный опыт для определенных видов использования в наследство. Эти модули либо теперь доступны отдельно как часть OpenJFX, теперь находятся как в OpenJDK, так и в Oracle JDK, потому что они были коммерческими функциями, которые Oracle внесла в OpenJDK (например, Flight Recorder), или были удалены из Oracle JDK 11 (например, JNLP),

  • Вывод команд java --version и java -fullversion будет отличать сборки Oracle JDK от сборок OpenJDK, так что группы поддержки смогут диагностировать любые проблемы, которые могут существовать. В частности, запуск java --version со сборкой Oracle JDK 11 приводит к:

Ява 11 2018-09-25

Java (TM) SE Runtime Environment 18.9 (сборка 11 + 28)

Java HotSpot (TM) 64-битный сервер ВМ 18.9 (сборка 11 + 28, смешанный режим)

И для сборки OpenJDK 11:

openjdk версия "11" 2018-09-25

Среда выполнения OpenJDK 18.9 (сборка 11 + 28)

OpenJDK 64-битный сервер VM 18.9 (сборка 11 + 28, смешанный режим)

  • Oracle JDK всегда требовал, чтобы сторонние криптографические поставщики подписывались известным сертификатом. Платформа криптографии в OpenJDK имеет открытый криптографический интерфейс, то есть не ограничивает, какие поставщики могут быть использованы. Oracle JDK 11 будет по-прежнему требовать действительную подпись, а сборки Oracle OpenJDK будут по-прежнему разрешать использование действительной подписи или неподписанного стороннего поставщика шифрования.
  • Oracle JDK 11 будет по-прежнему включать в себя установщики, брендинг и JRE-пакеты для опыта, совместимого с устаревшими настольными системами. Сборки Oracle OpenJDK в настоящее время доступны в виде файлов zip и tar.gz, в то время как рассматриваются альтернативные форматы распространения.

Ответ 7

Список немногих оставшихся косметических и упаковочных различий между Oracle JDK 11 и OpenJDK 11 можно найти в этом блоге:

https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later

Короче:

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

Ответ 8

Помимо очевидных различий в лицензировании, основным отличием OpenJDK от OracleJDK 11 являются обновления стабильности и производительности.

Источник: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385.

Каждые 6 месяцев две кодовые базы будут синхронизированы. Но в течение 6-месячного окна OpenJDK будет получать только обновления безопасности, в то время как OracleJDK будет получать дополнительные обновления стабильности и производительности.

Учитывая, что выпуски обновлений появляются только каждые 3 месяца как для OpenJDK, так и для OracleJDK, это означает, что вы упускаете (максимум) исправления на 3 месяца, пока не выйдет следующий основной выпуск и вы не выполните обновление. Однако, если вы решите придерживаться LTS-релизов, тогда коммерческая лицензия приобретает больше смысла.

Ответ 9

Также для Java 8 в ноябре 2018 года был опубликован интересный тест производительности для реактивного (неблокирующего) REST-приложения Spring Boot, размещенного на различных виртуальных машинах (AMV Technology Blog), показывающий, что среди других отличий:

  • OpenJDK имеет более высокую загрузку процессора, чем OracleJDK,
  • OpenJDK имеет немного меньшее время отклика, чем OracleJDK,
  • OpenJDK использует больше памяти, чем OracleJDK,

Подробности смотрите в исходной статье.

Конечно, YMMV, это только один из ориентиров.

Ответ 10

  1. Oracle будет выпускать релизы каждые три года, а OpenJDK будет выпускаться каждые шесть месяцев.
  2. Oracle обеспечивает долгосрочную поддержку своих выпусков. С другой стороны, OpenJDK поддерживает изменения в выпуске только до следующего версия выпущена.
  3. Oracle JDK был лицензирован в соответствии с лицензионным соглашением Oracle Binary Code, тогда как OpenJDK имеет версию GNU General Public License (GNU GPL) 2 с исключением ссылок.
  4. Продукт Oracle имеет регистратор полетов, Java Mission Control и Функции обмена данными между классами приложений, в то время как в OpenJDK есть шрифт Функция рендеринга. Кроме того, Oracle имеет больше возможностей для сборки мусора и лучшие рендеры,
  5. Oracle JDK полностью разработан корпорацией Oracle, тогда как OpenJDK разработан Oracle, OpenJDK и сообществом Java. Тем не менее, первоклассные компании, такие как Red Hat, Azul Systems, IBM, Apple Inc., SAP AG также принимают активное участие в ее разработке.

От Java 11 превратится в большое изменение

Oracle изменит свою историческую лицензию 'BCL' на комбинацию лицензии с открытым исходным кодом и коммерческой лицензии

  • Набор 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 из-за присутствия некоторых дополнительных модулей в выпуске Oracles
  • Вывод команд java –version и java -fullversion будет отличать сборки Oracle от сборок OpenJDK


Обновление: 25 августа 2019 года



enter image description here

для более подробной информации oracle-vs-openjdk

Ответ 11

Насколько я понимаю, Oracle JDK нельзя использовать в производственной среде, поэтому я не могу легально использовать его (без оплаты) для веб-приложения, которое я создаю для своей компании. Я должен использовать OpenJDK. Пожалуйста, поправьте меня, если я ошибаюсь! Из этой статьи.

Начиная с Java 11, Oracle JDK ограничивается разработкой и среды тестирования. Oracle JDK могут использоваться только в производстве, если Вы покупаете коммерческую поддержку. Вместо этого Oracle предоставит Java сборки на базе OpenJDK бесплатно, которые можно использовать в производстве. но для официального Oracle JDK реальная дорожная карта будет выглядеть следующим образом:

ОБНОВЛЕНИЕ: Я не прав. Я могу использовать Oracle JDK бесплатно, но не получу обновления безопасности после 6 месяцев, и мы должны принять на себя риск. Посмотрите на приведенный выше раздел статьи "Что означает новый выпуск релизов для моей компании?".