注:この質問は2014年のものです。Java11の時点で、OpenJDKとOracle JDKは収束しています。
OracleとOpenJDKの間に重要な違いはありますか?
たとえば、ガベージコレクションと他のJVMパラメータは同じですか?
GCは2つの間で動作が異なりますか?
注:この質問は2014年のものです。Java11の時点で、OpenJDKとOracle JDKは収束しています。
OracleとOpenJDKの間に重要な違いはありますか?
たとえば、ガベージコレクションと他のJVMパラメータは同じですか?
GCは2つの間で動作が異なりますか?
回答:
OpenJDKとOracle JDKの両方は、現在Oracleによってのみ作成および保守されています。
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 7、決定的な何もありません。OpenJDKプロジェクトは、主にSunから提供されたHotSpotソースコードに基づいています。
さらに、OpenJDKはJava 7のリファレンス実装として選択され、Oracleエンジニアによって保守されています。
Oracleブログの投稿にリンクしているJVM、JDK、JRE、OpenJDKの違いに関する2012年の詳細な回答があります。
Q:OpenJDKリポジトリにあるソースコードと、Oracle JDKのビルドに使用するコードの違いは何ですか?
A:非常に近いです。OracleJDKリリースのビルドプロセスは、JavaプラグインとJava WebStartのOracleの実装、およびいくつかのクローズドソースの3番目を含むデプロイメントコードなど、ほんの数個を追加することでOpenJDK 7に基づいて構築されます。グラフィックラスタライザなどのパーティコンポーネント、Rhinoなどのいくつかのオープンソースサードパーティコンポーネント、追加のドキュメントやサードパーティフォントなど、あちこちにいくつかあります。今後は、JRockit Mission Control(まだOracle JDKでは利用できません)などの商用機能を検討しているものを除き、Oracle JDKのすべての部分をオープンソース化し、障害のあるサードパーティコンポーネントをオープンソースの代替手段に置き換えて、より近いパリティを実現することを目指していますコードベース間。
今後の主な違いは、リリーススケジュールとサポートポリシーです。
OpenJDKには6か月ごとに機能リリースがあり、次の機能リリースまでのみサポートされます。これは本質的に、開発者向けの継続的なリリースの流れです。
Oracle JDKは、安定性を重視する企業ユーザーを対象としています。OpenJDKリリースの1つに基づいていますが、長期サポート(LTS)が提供されます。Oracle JDKのリリースは3年ごとに計画されています。
出典:https : //www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events
以下のためのJava 8、OpenJDKの対OracleのJDKは、重要な違いで取るマイ:
OpenJDKは、OracleおよびオープンJavaコミュニティの貢献によるJava Standard Editionプラットフォームのオープンソース実装です。
OpenJDKはライセンスGPL v2の下でリリースされ、Oracle JDKはOracle Binary Code License Agreementの下でライセンスされます。
実際、Oracle JDKのビルドプロセスはOpenJDKソースコードからビルドされます。したがって、Oracle JDKとOpenJDKの間に大きな技術的な違いはありません。基本コードとは別に、Oracle JDKには、OracleのJava PluginとJava WebStartの実装が含まれています。また、グラフィックラスタライザやRhinoのようなサードパーティのクローズドソースおよびオープンソースコンポーネントも含まれています。OpenJDK Font RendererとOracle JDK Flight Recorderは、Oracle JDKとOpenJDKの顕著な主な違いです。
違いの完全なリストについては、ソース記事を参照してください:Oracle JDK対OpenJDKおよびJava JDK開発プロセス
Oracleと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`
diff
ましたか?
オラクルのブログによると、Java 11以降のOracle JDKリリース
Java 11以降、Oracleは、オープンソースのGNU General Public License v2、クラスパス例外(GPLv2 + CPE)、およびOracle製品またはサービスの一部としてOracle JDKを使用する商用ライセンスの下でJDKリリースを提供します。またはオープンソースソフトウェアを使用したくない人。このオープンソースライセンスと商用ライセンスの組み合わせにより、無料の商用条件と有料の商用条件が組み合わされた従来の「BCL」ライセンスが置き換えられます。
ライセンスごとに異なるビルドが提供されますが、これらのビルドは、外観とパッケージの違いを除いて、機能的には同じです。
BCLからGPLへ
Oracle Java SEテクノロジのバイナリコードライセンス(「BCL」)は、10年以上にわたってOracle Java SEテクノロジの主要なライセンスでした。BCLは、特定の条件下でライセンス料なしの使用を許可します。今後の作業を簡略化するために、Oracleは、Linuxプラットフォームと同じライセンスモデルを使用して、Java 9の時点でオープンソースライセンスのOpenJDKビルドの提供を開始しました。Oracle Java SEバイナリを無料で入手することに慣れている場合は、jdk.java.netで入手できるOracleのOpenJDKビルドを使用して、そのまま続行できます。Oracleから商用製品またはサービスの一部としてOracle Java SEバイナリを取得することに慣れている場合は、My Oracle Support(MOS)およびその他の場所からOracle JDKリリースを引き続き取得できます。
機能的に同一で交換可能...
オラクルのBCLライセンスのJDKには、歴史的にOpenJDKビルドでは利用できない「商用機能」が含まれていました。ただし、約束どおり、過去1年間、オラクルはOpenJDKコミュニティに次の機能を提供しています。
したがって、Java 11以降、Oracle JDKビルドとOpenJDKビルドは基本的に同じになります。
...まだいくつかの化粧品とパッケージの違い
少数の違いが残っています。いくつかは意図的で表面的なものであり、一部は単にOpenJDKの貢献者と話し合う時間がもっと必要なためです。
この違いは、特定の種類のレガシー使用で一貫したエクスペリエンスを提供するために残っています。これらのモジュールは、OpenJFXの一部として個別に利用できるようになったか、OpenJDKとOracle JDKの両方に含まれるようになりました。 。
Java 11 2018-09-25
Java(TM)SEランタイム環境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については、AMIS Technology BlogによってさまざまなJVMでホストされている反応性(非ブロッキング)Spring Boot RESTアプリケーションの興味深いパフォーマンスベンチマークが2018年11月に公開されており、以下のような違いがあります。
詳細については、ソースの記事を参照してください。
もちろんYMMV、これはベンチマークの1つにすぎません。
私の理解では、Oracle JDKは本番環境では使用できないため、会社用に構築しているWebアプリケーションには合法的に(支払わずに)使用することはできません。OpenJDKを使用する必要があります。間違えたら訂正してください!この記事から。
Java 11以降、Oracle JDKは開発環境とテスト環境に限定されています。Oracle JDKは、商用サポートを購入した場合にのみ、本番環境で使用できます。代わりに、オラクルは本番環境で使用できるOpenJDKに基づくJavaビルドを無料で提供します。しかし、公式のOracle JDKの場合、実際のロードマップは次のようになります。
更新:私は間違っています。私は無料でOracle JDKを使用できますが、6か月後にセキュリティ更新を取得できず、リスクを負う必要があります。上記のリンクされた記事セクション「私の会社にとって新しいリリーストレインは何を意味しますか?」