ПРИМЕЧАНИЕ. Этот вопрос относится к 2014 году. Начиная с Java 11 OpenJDK и Oracle JDK сходятся.
Есть ли принципиальные различия между Oracle и OpenJDK?
Например, совпадают ли сборщик мусора и другие параметры JVM?
GC работает по-разному между двумя?
ПРИМЕЧАНИЕ. Этот вопрос относится к 2014 году. Начиная с Java 11 OpenJDK и Oracle JDK сходятся.
Есть ли принципиальные различия между Oracle и OpenJDK?
Например, совпадают ли сборщик мусора и другие параметры JVM?
GC работает по-разному между двумя?
И 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
Для 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), и заменить обремененные сторонние компоненты альтернативами с открытым исходным кодом, чтобы добиться более четного паритета. между базами кода.
Главное отличие в будущем - это график выпуска и политика поддержки.
OpenJDK будет выпускать функциональные возможности каждые 6 месяцев, которые поддерживаются только до следующего выпуска функциональных возможностей. Это по сути непрерывный поток релизов, ориентированных на разработчиков.
Oracle JDK больше ориентирован на корпоративную аудиторию, которая ценит стабильность. Он основан на одном из выпусков OpenJDK, но затем получает долгосрочную поддержку (LTS). Выпуск Oracle JDK планируется каждые 3 года.
Для 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.
Полный список различий см. В исходной статье: Процесс разработки 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 бесплатно, вы можете просто продолжить делать это с помощью сборок 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.
Это различие сохраняется для того, чтобы обеспечить постоянный опыт для определенных видов использования в наследство. Эти модули либо теперь доступны отдельно как часть OpenJFX, теперь находятся как в OpenJDK, так и в Oracle JDK, потому что они были коммерческими функциями, которые Oracle внесла в OpenJDK (например, Flight Recorder), или были удалены из Oracle JDK 11 (например, JNLP),
Ява 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 11 и OpenJDK 11 можно найти в этом блоге:
https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
Короче:
Помимо очевидных различий в лицензировании, основным отличием 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, размещенного на различных виртуальных машинах (AMV Technology Blog), показывающий, что среди других отличий:
Подробности смотрите в исходной статье.
Конечно, YMMV, это только один из ориентиров.
От Java 11 превратится в большое изменение
Oracle изменит свою историческую лицензию 'BCL' на комбинацию лицензии с открытым исходным кодом и коммерческой лицензии
Обновление: 25 августа 2019 года
для более подробной информации oracle-vs-openjdk
Насколько я понимаю, Oracle JDK нельзя использовать в производственной среде, поэтому я не могу легально использовать его (без оплаты) для веб-приложения, которое я создаю для своей компании. Я должен использовать OpenJDK. Пожалуйста, поправьте меня, если я ошибаюсь! Из этой статьи.
Начиная с Java 11, Oracle JDK ограничивается разработкой и среды тестирования. Oracle JDK могут использоваться только в производстве, если Вы покупаете коммерческую поддержку. Вместо этого Oracle предоставит Java сборки на базе OpenJDK бесплатно, которые можно использовать в производстве. но для официального Oracle JDK реальная дорожная карта будет выглядеть следующим образом:
ОБНОВЛЕНИЕ: Я не прав. Я могу использовать Oracle JDK бесплатно, но не получу обновления безопасности после 6 месяцев, и мы должны принять на себя риск. Посмотрите на приведенный выше раздел статьи "Что означает новый выпуск релизов для моей компании?".