Различия между Oracle JDK и OpenJDK
Есть ли принципиальные различия между Oracle и OpenJDK?
Например, совпадают ли сборщик мусора и другие параметры JVM?
GC работает по-разному между двумя?
13 ответов
И 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
Ничего принципиального. Проект 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), и заменить обремененные сторонние компоненты альтернативами с открытым исходным кодом, чтобы добиться более четного паритета. между базами кода.
Главное отличие в будущем - это график выпуска и политика поддержки.
OpenJDK
OpenJDK будет выпускать функциональные возможности каждые 6 месяцев, которые поддерживаются только до следующего выпуска функциональных возможностей. По сути, это непрерывный поток релизов, предназначенных для разработчиков.
Oracle JDK
Oracle JDK больше ориентирован на корпоративную аудиторию, которая ценит стабильность. Он основан на одном из выпусков OpenJDK, но затем получает долгосрочную поддержку (LTS). Выпуск Oracle JDK планируется каждые 3 года.
Oracle JDK против OpenJDK
OpenJDK - это реализация с открытым исходным кодом платформы Java Standard Edition с участием Oracle и открытого сообщества Java.
OpenJDK выпускается по лицензии GPL v2, в которой Oracle JDK лицензируется в соответствии с лицензионным соглашением Oracle для двоичного кода.
На самом деле процесс сборки Oracle JDK строится из исходного кода OpenJDK. Таким образом, между Oracle JDK и OpenJDK нет существенных технических различий. Помимо базового кода, Oracle JDK включает в себя реализацию Oracle Java Plugin и Java WebStart. Он также включает сторонние компоненты с закрытым и открытым исходным кодом, такие как графический растеризатор и Rhino соответственно. OpenJDK Font Renderer и Oracle JDK Flight Recorder - это заметные основные различия между Oracle JDK и OpenJDK.
- Rockit был JVM от Oracle, а из Java SE 7 HotSpot и JRockit слились в одну JVM. Так что теперь у нас есть только объединенная JVM HotSpot.
- Есть случаи, когда люди утверждают, что у них были проблемы при запуске OpenJDK, и это было решено при переключении на Oracle JDK.
- Твиттер имеет свой собственный JDK.
- Программное обеспечение, такое как Android Studio, IntelliJ IDEA и Minecraft, предполагает использование Oracle JDK. На самом деле, предупреждает.
Источник: Oracle JDK против OpenJDK и Java JDK Процесс разработки
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`
Согласно сообщению оракула, 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 бесплатно, вы можете просто продолжить делать это с помощью сборок Oracle OpenJDK, доступных на http://jdk.java.net/. Если вы привыкли получать двоичные файлы Oracle Java SE как часть коммерческого продукта или услуги от Oracle, вы можете продолжать получать версии Oracle JDK через службу поддержки Oracle (MOS) и другие места.
Функционально идентичны и взаимозаменяемы...
JDK, лицензированный Oracle 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, в то время как рассматриваются альтернативные форматы распространения.
- Oracle будет выпускать выпуски каждые три года, а OpenJDK - каждые шесть месяцев.
- Oracle обеспечивает долгосрочную поддержку своих выпусков. С другой стороны,OpenJDK поддерживает изменения в выпуске только до выпуска следующей версии.
- Oracle JDK был лицензирован в соответствии с лицензионным соглашением Oracle Binary Code License, тогда как OpenJDK имеет стандартную общественную лицензию GNU (GNU GPL) версии 2 с исключением связи.
- Продукт Oracle имеет функции Flight Recorder, Java Mission Control и Application Class-Data Sharing, в то время как OpenJDK имеет функцию Font Renderer. Кроме того, Oracle имеет больше вариантов сборки мусора и улучшенные средства визуализации,
- Oracle JDK полностью разработан Oracle Corporation, тогда как 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 из-за наличия некоторых дополнительных модулей в выпуске Oracle.
- Вывод команд java –version и java -fullversion будет отличать сборки Oracle от сборок OpenJDK.
Обновление: 25 августа 2019 г.
для более подробной информации https://www.educba.com/oracle-vs-openjdk/
Список немногих оставшихся косметических и упаковочных различий между 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.
Помимо очевидных различий в лицензировании, основным отличием OpenJDK от OracleJDK 11 являются обновления стабильности и производительности.
Источник: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385
Каждые 6 месяцев две кодовые базы будут синхронизированы. Но в течение 6-месячного окна OpenJDK будет получать только обновления безопасности, в то время как OracleJDK будет получать дополнительные обновления стабильности и производительности.
Учитывая, что выпуски обновлений появляются только каждые 3 месяца как для OpenJDK, так и для OracleJDK, это означает, что вы упускаете (максимум) исправления на 3 месяца, пока не выйдет следующий основной выпуск и вы не обновитесь. Однако, если вы решите придерживаться LTS-релизов, тогда коммерческая лицензия приобретает больше смысла.
Также для Java 8 в ноябре 2018 года был опубликован интересный тест производительности для реактивного (неблокирующего) REST-приложения Spring Boot, размещенного на различных JVM в AMIS Technology Blog, показывающий, что среди других различий:
- OpenJDK имеет более высокую загрузку процессора, чем OracleJDK,
- OpenJDK имеет немного меньшее время отклика, чем OracleJDK,
- OpenJDK использует больше памяти, чем OracleJDK,
Подробности смотрите в исходной статье.
Конечно, YMMV, это только один из ориентиров.
OpenJDK
- OpenJDK - это открытый исходный код, он поддерживается и разрабатывается Oracle, но позволяет сообществам и другим компаниям участвовать в этой разработке, например, Red Hat, Azul Systems, IBM, Apple Inc и т. Д.OpenJDK является одновременно продуктом JDK и спецификацией. , любая компания или организация, которая хочет использовать OpenJDK для создания нового варианта, должна соответствовать этим спецификациям.OpenJDK разработан Oracle и участниками сообщества. Иногда у нас возникают проблемы с его стабильностью; однако на основе отзывов пользователей он будет обновлен, чтобы работать лучше.OpenJDK обновляется регулярно, примерно каждые 6 месяцев.
Oracle JDK
- Oracle JDK поддерживается и разрабатывается Oracle. Он соответствует спецификациям OpenJDK, но не является открытым исходным кодом. Oracle JDK намного лучше с точки зрения скорости реагирования и производительности JVM. Он уделяет больше внимания стабильности из-за его важности для корпоративных клиентов.
Источник: https://o7planning.org/12571/history-of-java-and-the-difference-between-oracle-jdk-and-openjdk
Насколько я понимаю, Oracle JDK нельзя использовать в производственной среде, поэтому я не могу использовать его на законных основаниях (без оплаты) для веб-приложения, которое я создаю для своей компании. Мне нужно использовать OpenJDK. Пожалуйста, поправьте меня, если я ошибаюсь! Из этой статьи.
Начиная с Java 11, Oracle JDK ограничен средами разработки и тестирования. Oracle JDK можно использовать в производственной среде только при покупке коммерческой поддержки. Вместо этого Oracle бесплатно предоставит сборки Java на основе OpenJDK, которые можно будет использовать в производстве. Но для официального Oracle JDK реальная дорожная карта будет выглядеть так:
ОБНОВЛЕНИЕ: я ошибаюсь. Я могу использовать Oracle JDK бесплатно, но не буду получать обновления безопасности через 6 месяцев, и нам придется взять на себя риск. Посмотрите на ссылку выше в разделе статьи "Что означает новая версия для моей компании?".
Это очень близко - наш процесс сборки для выпусков Oracle JDK основан на OpenJDK 7 путем добавления всего лишь нескольких частей, таких как код развертывания, который включает реализацию Oracle подключаемого модуля Java и Java WebStart, а также некоторых сторонних разработчиков с закрытым исходным кодом. компоненты, такие как растеризатор графики, некоторые сторонние компоненты с открытым исходным кодом, такие как Rhino, и несколько кусочков, таких как дополнительная документация или сторонние шрифты. Двигаясь вперед, мы намерены открыть исходный код всех частей Oracle JDK, кроме тех, которые мы рассматриваем как коммерческие функции, такие как JRockit Mission Control (еще не доступный в Oracle JDK), и заменить обремененные сторонние компоненты альтернативами с открытым исходным кодом для достижения более тесного паритета кодовые базы.
· Да, сборка мусора и другие параметры JVM такие же.
· Производительность GC одинакова в обоих.