注:この質問は2014年のものです。Java11 OpenJDKとOracle JDKでは収束しています。
OracleとOpenJDKの間に重大な違いはありますか?
たとえば、ガベージコレクションと他のJVMパラメータは同じですか?
GCは2つの間で異なる動作をしますか?
OpenJDKとOracle JDKの両方は、現在オラクルによってのみ作成および保守されています。
OpenJDKとOracle JDKは、TCK(Java Technology Certification Kit)に合格した同じJava仕様の実装です。
JDKのベンダのほとんどは、TCKの互換性を損なうことなく、[主にライセンスされたプロプライエタリ部品の交換/特定のOSでのみ機能するより高性能なアイテムの交換]コンポーネントに少し手を加えることによってOpenJDKの上に書かれています。
多くのベンダーがJava仕様を実装し、TCKを通過させました。たとえば、IBM J9、Azul Zulu、Azul Zing、Oracle JDKなどです。
ほとんどすべての既存のJDKはOpenJDKから派生しています。
多くの人が示唆しているように、ライセンスはJDK間の変更です。
JDK 11から長期サポートへのアクセスOracle JDK/Java SEでは、商用ライセンスが必要になります。サブスクリプションなしでOracle JDKとしてインストールしているJDKが機能しなくなる可能性があることに注意してください。 ソース
参照:Java仮想マシンの一覧
Java 7 の場合、重要なことは何もありません。 OpenJDKプロジェクトの大部分は、Sunから寄贈された HotSpot ソースコードに基づいています。
さらに、OpenJDKが Java 7のリファレンス実装 として選択され、Oracleのエンジニアによって保守されています。
2012年からの詳細な回答が JVM、JDK、JRE、OpenJDKの違い にあり、 Oracleブログの投稿 にリンクしています。
_ q _ :OpenJDK リポジトリにあるソースコードと、Oracle JDKの構築に使用するコードの違いは何ですか?
_ a _ :非常に近い - Oracle JDKリリース用のビルドプロセスは、OpenJDK 7上に、デプロイメントコードのようなほんの2、3の部分を追加することでをビルドするJavaのプラグインとJava WebStartのオラクルによる実装、グラフィックスラスタライザのようなクローズドソースのサードパーティ製コンポーネント、 Rhinoのようなオープンソースのサードパーティ製コンポーネントが含まれます。追加のドキュメントやサードパーティのフォントなど、あちこちにいくつかのヒントがあります。今後は、JRockit Mission Controlなどの商用機能を考慮しているものを除いて、Oracle JDKのすべての部分をオープンソースにすることを目的としています(Oracle JDKではまだ使用できません)。そして、コードベース間のより近いパリティを達成するために、邪魔をしているサードパーティ製コンポーネントをオープンソースの代替品で置き換える。
今後の主な違いは、リリーススケジュールとサポートポリシーです。
OpenJDKは6か月ごとに機能をリリースする予定で、これは次の機能のリリースまでサポートされます。本質的には開発者向けのリリースの連続ストリームです。
Oracle JDKは、安定性を重視するエンタープライズオーディエンスを対象としています。これはOpenJDKリリースの1つに基づいていますが、その後は長期サポート(LTS)が与えられます。 Oracle JDKのリリースは3年ごとに予定されています。
Java 8 の場合、Oracle JDKとOpenJDKの違いは、次のとおりです。
OpenJDKは、Java Standard Editionプラットフォームのオープンソース実装で、OracleとオープンJavaコミュニティからの貢献を得ています。
OpenJDKはライセンスGPL v2の下でリリースされ、Oracle JDKはOracle Binary Code License Agreementの下でライセンスされています。
実際、Oracle JDKのビルドプロセスはOpenJDKソースコードからビルドされています。そのため、Oracle JDKとOpenJDKの間には大きな技術的な違いはありません。また、グラフィックスラスタライザや Rhino などのサードパーティ製のクローズドソースコンポーネントとオープンソースコンポーネントも含まれています。
相違点の一覧については、ソース記事を参照してください。 Oracle JDKとOpenJDKおよびJava JDK開発プロセス
Oracle JVMとOpenJDK JVMは同じもので、同じGC機能を備えています(最新バージョン10以降)。 OracleがOpenJDK JVMを管理する前は、古いOpenjdk JVMが多くの環境でほとんど使用できなくなったという具体的な違いがありました。 JVMは現在同じです。
キットの一部としてJVMを含むJDKは、ライセンス、リリースおよびメンテナンススケジュール、そしてJDKに含まれるソフトウェアライブラリによって異なります。私にとって重大な違いは、存在しないとコードが実行されないということも意味します。ライセンスだけではありません。
diff --brief -r openjdk oraclejdk
Linux JDKの他の多くのファイルに加えて、次のファイルが欠落しています(したがって、javafxを使用しているときにコードがOpenJDKでは機能せず、OracleJDKでも機能しないと主張した場合は正しい)。
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ブログによると、 Java 11以降のOracle JDKリリース
Java 11以降、オラクルは、オープンソース GNU General Public License v2、Classpath Exception(GPLv2 + CPE) 、およびそれらの商用ライセンスの下でJDKリリースを提供しますOracle JDKをOracle製品またはサービスの一部として使用している、またはオープンソースソフトウェアを使用したくない場合。オープンソースライセンスと商用ライセンスの使用のこの組み合わせは、無料の商用条件と有料の商用条件の組み合わせを持っていた歴史的な「 BCL 」ライセンスを置き換えます。
ライセンスごとに異なるビルドが提供されますが、これらのビルドは、外観とパッケージの違いを除き、機能的には同一です。詳細については以下で説明します。
BCLからGPLへ
Oracle Java SEテクノロジのバイナリコードライセンス( "BCL") は、10年以上にわたってOracle Java SEテクノロジの主要なライセンスでした。 BCLは、特定の条件下でライセンス料なしでの使用を許可します。今後の作業を簡素化するために、オラクルはLinuxプラットフォームと同じライセンスモデルを使用して オープンソースライセンスのOpenJDKビルドを提供 Java 9以降を開始しました。 Oracle Java SEバイナリを無料で入手することに慣れている場合は、 jdk.Java.net で入手可能なOracleのOpenJDKビルドを使用して、簡単にこれを実行できます。 Oracleの商用製品またはサービスの一部としてOracle Java SEバイナリを取得することに慣れている場合は、引き続き My Oracle Support (MOS)を使用してOracle JDKリリースを取得できます。 、およびその他の場所。
機能的に同一で交換可能...
OracleのBCLライセンスJDKには、これまでOpenJDKビルドでは利用できなかった「商用機能」が含まれていました。 約束どおり ただし、過去1年にわたってOracleはこれらの機能をOpenJDKコミュニティに提供してきました。
したがって、Java 11以降では、Oracle JDKビルドと OpenJDKビルド は本質的に同じになります。
...まだいくつかの化粧品と包装の違い
OpenJDKの寄稿者と議論する時間がもっと必要であるという理由だけで、意図的なものと表面的なもの、そして単にいくつかの違いが残っています。
この違いは、特定の種類のレガシー使用に一貫したエクスペリエンスを提供するために残っています。これらのモジュールは、 OpenJFX の一部として個別に利用できるようになりました。OpenJDKとOracle JDKの両方に含まれています。 JDK 11(JNLPなど)。
Java 11 2018-09-25
Java(TM)SE Runtime Environment 18.9(ビルド11 + 28)
Java HotSpot(TM)64ビットサーバーVM 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
要するに:
Java 11から大きな変化へ
オラクルは、オープンソースと商用ライセンスの組み合わせにより、歴史的な「BCL」ライセンスを変更します
アップデート:25-Aug-2019
詳細については、 Oracle-vs-openjdk
明らかなライセンスの違いは別として、OpenJDKとOracleJDK 11の主な違いは安定性とパフォーマンスのアップデートです。
ソース: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385
6ヶ月ごとに2つのコードベースは同期します。しかし、6ヵ月の期間中、OpenJDKはセキュリティアップデートのみを受け取り、OracleJDKは安定性とパフォーマンスに関する追加のアップデートを受け取ります。
アップデートリリースはOpenJDKとOracleJDKの両方で3か月ごとにしか行われないことを考えると、これは次のメジャーリリースが出るまでアップグレードを行うまで(最大でも)3か月分の修正を見逃していることを意味します。ただし、LTSリリースに固執することを選択した場合は、商用ライセンスのほうが理にかなってきます。
また、 Java 8 an AMIS Technology BlogによってさまざまなJVMでホストされているリアクティブ(非ブロック)Spring Boot RESTアプリケーションの興味深いパフォーマンスベンチマークが2018年11月に公開されました 他の違いの中でも、それを示す:
詳細はソース記事を参照してください。
もちろんYMMV、これはベンチマークの1つに過ぎません。