web-dev-qa-db-ja.com

Oracle JDKとOpenJDKの違い

注:この質問は2014年のものです。Java11 OpenJDKとOracle JDKでは収束しています。

OracleとOpenJDKの間に重大な違いはありますか?

たとえば、ガベージコレクションと他のJVMパラメータは同じですか?

GCは2つの間で異なる動作をしますか?

582
user1340582

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仮想マシンの一覧

252

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ではまだ使用できません)。そして、コードベース間のより近いパリティを達成するために、邪魔をしているサードパーティ製コンポーネントをオープンソースの代替品で置き換える。

316
radai

今後の主な違いは、リリーススケジュールとサポートポリシーです。 

OpenJDK

OpenJDKは6か月ごとに機能をリリースする予定で、これは次の機能のリリースまでサポートされます。本質的には開発者向けのリリースの連続ストリームです。 

Oracle JDK

Oracle JDKは、安定性を重視するエンタープライズオーディエンスを対象としています。これはOpenJDKリリースの1つに基づいていますが、その後は長期サポート(LTS)が与えられます。 Oracle JDKのリリースは3年ごとに予定されています。 

enter image description here

ソース: https://www.Oracle.com/Java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events

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 などのサードパーティ製のクローズドソースコンポーネントとオープンソースコンポーネントも含まれています。

  • RockitはオラクルのJVMであり、Java SE 7以降、HotSpotとJRockitは単一のJVMに統合されました。だから今私たちは利用可能なマージされたHotSpot JVMだけを持っています。
  • OpenJDKの実行中に問題が発生し、Oracle JDKに切り替えたときに解決したと人々が主張する場合があります。
  • Twitterには独自のJDKがあります。
  • Minecraftのようなソフトウェアは、Oracle JDKが使用されることを期待しています。事実、警告します。

相違点の一覧については、ソース記事を参照してください。 Oracle JDKとOpenJDKおよびJava JDK開発プロセス

24
45hook

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`
17
mars

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の寄稿者と議論する時間がもっと必要であるという理由だけで、意図的なものと表面的なもの、そして単にいくつかの違いが残っています。

  • -XX:+ UnlockCommercialFeaturesオプションを使用すると、Oracle JDK 11は警告を発しますが、OpenJDKビルドではこのオプションはエラーになります。このオプションはOpenJDKの一部ではなく、OpenJDKには商用機能がないため、今すぐ追加する意味はありません。この違いは、Oracle JDK 10以前のリリースのユーザーがOracle JDK 11以降に簡単に移行できるようにするためです。
  • Oracle JDK 11は、使用ログデータを「 Advanced Management Console 」ツールに提供するように構成できます。このツールは、別の商用Oracle製品です。私たちは、他のOpenJDKの貢献者と協力して、そのような使用データが将来のリリースのOpenJDKでどのように役立つかについて議論します。この違いは、主に、そのような決定が下されるまでオラクルの顧客に一貫したエクスペリエンスを提供するために残っています。
  • 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の両方に含まれています。 JDK 11(JNLPなど)。

  • Java --versionおよびJava -fullversionコマンドの出力により、Oracle JDKビルドとOpenJDKビルドが区別されるため、サポートチームは存在する可能性のある問題を診断できます。具体的には、Oracle JDK 11ビルドでJava --versionを実行すると、次の結果になります。

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では、サードパーティの暗号化プロバイダに既知の証明書による署名が常に必要とされています。 OpenJDKの暗号化フレームワークにはオープンな暗号化インターフェースがあります。つまり、使用できるプロバイダーを制限しません。 Oracle JDK 11は有効な署名である require を継続し、Oracle OpenJDKビルドは引き続き有効な署名または未署名のサードパーティ暗号化プロバイダーの使用を許可します。
  • Oracle JDK 11には、インストーラ、ブランド、およびJREパッケージが引き続き含まれており、従来のデスクトップの使用と一貫したエクスペリエンスを提供します。 Oracle OpenJDKビルドは現在、Zipおよびtar.gzファイルとして入手できますが、代替の配布形式が検討されています。
12
Naresh Joshi

このブログ記事には、Oracle JDK 11とOpenJDK 11の間の見た目とパッケージの違いについてのいくつかの相違点が記載されています。

https://blogs.Oracle.com/Java-platform-group/Oracle-jdk-releases-for-Java-11-and-later

要するに:

  • -XX:+ UnlockCommercialFeaturesオプションを使用すると、Oracle JDK 11から警告が発行されます。
  • 使用状況ログデータを「Advanced Management Console」ツールに提供するように設定できます。 
  • 常に第三者の暗号化プロバイダに既知の証明書による署名を要求しています。 
  • インストーラー、ブランド、JREのパッケージ化も含まれます。
  • javac --releaseコマンドは、Java 9ターゲットとJava 10ターゲットでは動作が若干異なります。 
  • java --versionおよびJava -fullversionコマンドの出力は、Oracle JDKビルドとOpenJDKビルドを区別します。
7
Dalibor Topic
  1. オラクルは3年ごとにリリースを提供し、OpenJDKは6ヶ月ごとにリリースされます。
  2. Oracleは、そのリリースに対して長期的なサポートを提供します。一方、OpenJDKは、次のバージョンがリリースされるまで、リリースへの変更のみをサポートします。
  3. Oracle JDKはOracle Binary Code License Agreementに基づいてライセンスされていますが、OpenJDKにはリンク例外を含むGNU General Public License(GNU GPL)バージョン2があります。
  4. Oracle製品にはFlight Recorder、Java Mission Control、およびApplication Class-Data Sharing機能がありますが、OpenJDKにはFont Renderer機能があります。
  5. Oracle JDKはOracle Corporationによって完全に開発されていますが、OpenJDKはOracle、OpenJDK、およびJava Communityによって開発されています。ただし、Red Hat、Azul Systems、IBM、Apple Inc.、SAP AGなどの一流企業も、その開発に積極的に参加しています。

Java 11から大きな変化へ

オラクルは、オープンソースと商用ライセンスの組み合わせにより、歴史的な「BCL」ライセンスを変更します

  • Java 11用のOracleのキットは、-XX:+ UnlockCommercialFeaturesオプションを使用すると警告を発しますが、OpenJDKビルドではこのオプションはエラーになります
  • Oracle JDKは、使用状況ログデータを「Advanced Management Console」ツールに提供する構成を提供します
  • オラクルは、サードパーティの暗号プロバイダーに既知の証明書による署名を常に要求しましたが、OpenJDKの暗号化フレームワークにはオープンな暗号化インターフェースがあります。つまり、使用できるプロバイダーに関して制限はありません。
  • Oracle JDK 11には、インストーラ、ブランド、およびJREパッケージが引き続き含まれますが、OpenJDKビルドは現在Zipおよびtar.gzファイルとして入手可能です
  • Javac –releaseコマンドは、Oracleのリリースにいくつかの追加モジュールが存在するため、Java 9ターゲットとJava 10ターゲットでは異なる動作をします
  • Java –versionおよびJava -fullversionコマンドの出力は、OracleのビルドとOpenJDKビルドを区別します


アップデート:25-Aug-2019



enter image description here

詳細については、 Oracle-vs-openjdk

2

明らかなライセンスの違いは別として、OpenJDKとOracleJDK 11の主な違いは安定性とパフォーマンスのアップデートです。

ソース: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385

6ヶ月ごとに2つのコードベースは同期します。しかし、6ヵ月の期間中、OpenJDKはセキュリティアップデートのみを受け取り、OracleJDKは安定性とパフォーマンスに関する追加のアップデートを受け取ります。

アップデートリリースはOpenJDKとOracleJDKの両方で3か月ごとにしか行われないことを考えると、これは次のメジャーリリースが出るまでアップグレードを行うまで(最大でも)3か月分の修正を見逃していることを意味します。ただし、LTSリリースに固執することを選択した場合は、商用ライセンスのほうが理にかなってきます。

2
Gili

また、 Java 8 an AMIS Technology BlogによってさまざまなJVMでホストされているリアクティブ(非ブロック)Spring Boot RESTアプリケーションの興味深いパフォーマンスベンチマークが2018年11月に公開されました 他の違いの中でも、それを示す:

  • OpenJDKは、OracleJDKよりもCPU使用率が高くなります。
  • OpenJDKはOracleJDKよりもわずかに応答時間が短くなります。
  • OpenJDKはOracleJDKよりもメモリ使用量が多く、

詳細はソース記事を参照してください。

もちろんYMMV、これはベンチマークの1つに過ぎません。

0
Greg Dubicki