Oracle JDKとOpenJDKの違い

1. 前書き

この記事では、https://www.oracle.com/technetwork/java/index.html [Oracle Java Development Kit]とhttps://openjdk.java.net/[OpenJDK]の違いを調べます。 最初にそれぞれを簡単に確認してから、比較を行います。 その後、他のJDK実装のリストが表示されます。

参考文献:

UbuntuへのJavaのインストール

UbuntuシステムにOpenJDKおよびOracle JDKバージョン8から11をインストールする方法を学びます。
link:/ubuntu-install-jdk [続きを読む]→

JVM、JRE、およびJDKの違い

JavaでのJVM、JRE、およびJDKの違いを理解するためのガイド。
link:/jvm-vs-jre-vs-jdk [続きを読む]→

2. Oracle JDKおよびJava SEの履歴

JDK(Java Development Kit)は、Javaプラットフォームプログラミングで使用されるソフトウェア開発環境です。 完全なJavaランタイム環境、いわゆるプライベートランタイムが含まれています。 この名前は、Javaアプリケーションの開発に必要な他のコンポーネントだけでなく、スタンドアロンJREよりも多くのツールが含まれているという事実に由来しています。
  • Oracleでは、JDKという用語を使用してJava SE(Standard Edition)開発キットを指すことを強くお勧めします*(Enterprise EditionおよびMicro Editionプラットフォームもあります)。

    Java SEの歴史を見てみましょう。
  • JDK Beta – 1995

  • JDK 1.0 – 1996年1月

  • JDK 1.1 – 1997年2月

  • J2SE 1.2 – 1998年12月

  • J2SE 1.3 – 2000年5月

  • J2SE 1.4 – 2002年2月

  • J2SE 5.0 – 2004年9月

  • Java SE 6 – 2006年12月_

  • Java SE 7 – 2011年7月

  • * Java SE 8(LTS)– 2014年3月*

  • Java SE 9 – 2017年9月

  • Java SE 10(18.3)– 2018年3月

  • * Java SE 11(18.9 LTS)– 2018年9月*

  • Java SE 12(19.3)– 2019年3月

    注:斜体のバージョンはサポートされなくなりました。
    Java SEのメジャーリリースは、Java SE 7まで約2年ごとに行われたことがわかります。 Java SE 6から移動するのに5年かかり、その後Java SE 8に到達するのにさらに3年かかりました。
    Java SE 10以降、6か月ごとに新しいリリースが予定されています。 ただし、すべてのリリースが長期サポート(LTS)リリースになるわけではありません。 オラクルのリリース計画の結果、LTS製品のリリースは3年ごとにのみ行われます。
    Java SE 11は最新のLTSバージョンであり、Java SE 8は2020年12月まで非商用利用のために無料の公開アップデートを受け取ります。
    この開発キットは、Oracleが2010年にSun Microsystemsを買収した後に現在の名前になりました。 それ以前は、名前はSUN JDKであり、Javaプログラミング言語の公式実装でした。

3. OpenJDK

OpenJDKは、Java SE Platform Editionの無料のオープンソース実装です。 Sun Microsystemsが2006年に開始した開発の結果として、2007年に最初にリリースされました。
確かに、* OpenJDKはバージョンSE 7 *以降のJava Standard Editionの公式リファレンス実装であることを強調する必要があります。
最初は、JDK 7のみに基づいていました。 ただし、* Java 10以降、Java SEプラットフォームのオープンソースのリファレンス実装はhttps://openjdk.java.net/projects/jdk/[JDK Project] *の責任です。 また、Oracleと同様に、JDKプロジェクトも6か月ごとに新機能をリリースします。
この長期プロジェクトの前に、1つの機能をリリースしてから廃止されたJDKリリースプロジェクトがあったことに注意してください。
OpenJDKのバージョンを確認してみましょう。
  • _OpenJDK 6プロジェクト– JDK 7に基づいていますが、
    Java 6_のオープンソースバージョン

  • OpenJDK 7プロジェクト– 2011年7月28日

  • OpenJDK 7uプロジェクト–このプロジェクトはJavaの更新を開発します
    開発キット7

  • OpenJDK 8プロジェクト– 2014年3月18日

  • OpenJDK 8uプロジェクト–このプロジェクトはJavaの更新を開発します
    開発キット8

  • OpenJDK 9プロジェクト– 2017年9月21日

  • _JDKプロジェクトリリース2018年3月10〜20日

  • * JDKプロジェクトリリース2018年9月11〜25日*

  • JDKプロジェクトリリース12 – https://openjdk.java.net/jeps/3 [安定化
    段階]

4.  Oracle JDK対 OpenJDK

このセクションでは、Oracle JDKとOpenJDKの主な違いに焦点を当てます。

4.1. 発売予定

前述したように、* Oracleは3年ごとにリリースを提供しますが、* OpenJDKは6か月ごとにリリースします*。
Oracleは、そのリリースに対して長期的なサポートを提供します。 一方、OpenJDKは、次のバージョンがリリースされるまで、リリースへの変更のみをサポートします。

4.2. ライセンス

  • Oracle JDKはOracle Binary Code License Agreement に基づいてライセンスされていますが、 OpenJDKにはリンク例外を含むGNU General Public License(GNU GPL)バージョン2があります。

    Oracleのプラットフォームを使用する場合、いくつかのライセンスへの影響があります。 Oracle https://java.com/en/download/release_notice.jsp [発表済み]のように、2019年1月以降にリリースされたOracle Java SE 8の公開アップデートは、商用ライセンスなしではビジネス、商用、または本番で使用できません。 ただし、OpenJDKは完全にオープンソースであり、自由に使用できます。

4.3. パフォーマンス

Oracle JDKのビルドプロセスはOpenJDKのプロセスに基づいているため、この2つの間に実質的な技術的な違いはありません。
パフォーマンスに関しては、* Oracleの方が応答性とJVMのパフォーマンスに関してはるかに優れています*。 企業の顧客に与える重要性のため、安定性により重点を置いています。
対照的に、OpenJDKはリリースをより頻繁に配信します。 その結果、不安定性の問題が発生する可能性があります。 https://www.reddit.com/r/java/comments/6g86p9/openjdk_vs_oraclejdk_which_are_you_using/[community feedback]に基づいて、一部のOpenJDKユーザーがパフォーマンスの問題に遭遇したことがわかっています。

4.4. 特徴

機能とオプションを比較すると、* Oracle製品にはFlight Recorder、Java Mission Control、およびApplication Class-Data Sharing * *機能*があり、* OpenJDKにはFont Renderer機能*があります。
また、https://www.educba.com/oracle-vs-openjdk/ [別の比較]で確認できるように、* Oracleには、より多くのガベージコレクションオプションと優れたレンダラー*があります。

4.5. 開発と人気

  • Oracle JDKは完全にOracle Corporation によって開発されていますが、 OpenJDKはOracle、OpenJDK、およびJava Community *によって開発されています。 ただし、Red Hat、Azul Systems、IBM、Apple Inc.、SAP AGなどの一流企業もその開発に積極的に参加しています。

    前のサブセクションのリンクからわかるように、Android StudioやIntelliJ IDEAなどのツールでJava開発キットを使用しているトップ企業との人気に関しては、* Oracle JDKがより好まれていました、両方ともOpenJDKベースのJetBrains https://bintray.com/jetbrains/intellij-jdk/[builds].*に切り替えました
    一方、主要なLinuxディストリビューション(Fedora、Ubuntu、Red Hat Enterprise Linux)は、デフォルトのJava SE実装としてOpenJDKを提供しています。

5. Java 11以降の変更

https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later [オラクルのブログ投稿]で見ることができるように、Javaから始まるいくつかの重要な変更があります11。
まず、オラクルは、オープンソースhttps://を組み合わせて、歴史的な「https://www.oracle.com/technetwork/java/javase/terms/license/index.html[BCL]」ライセンスを変更します。 openjdk.java.net/legal/gplv2+ce.html[GNU General Public License v2 with Classpath Exception(GPLv2 + CPE)]および商用ライセンス* Oracle JDKをOracle製品またはサービスの一部として使用する場合、またはオープンソースソフトウェアは歓迎されません。
各ライセンスには異なるビルドがありますが、それらは機能的には同一であり、外観とパッケージのいくつかの違いのみがあります。
また、Jガベージコレクターと同様に、フライトレコーダー、Java Mission Control、アプリケーションクラスデータ共有などの伝統的な「商用機能」がOpenJDKで利用できるようになりました。 したがって、* Oracle JDKおよびOpenJDKビルドは、Java 11以降では本質的に同一です*。
主な違いを確認しましょう。
  • OracleのJava 11キットは、使用時に警告を発します
    _-XX:+ UnlockCommercialFeatures_オプション。OpenJDKビルドでは、このオプションはエラーになります

  • Oracle JDKは、使用ログデータを提供する構成を提供します
    「高度な管理コンソール」ツール

  • オラクルは、サードパーティの暗号化プロバイダーが常に
    OpenJDKの暗号化フレームワークにはオープンな暗号化インターフェースがあります。つまり、使用できるプロバイダーに関して制限はありません。

  • Oracle JDK 11には、インストーラ、ブランド、およびJREが引き続き含まれます
    現在、OpenJDKビルドは_zip_および_tar.gz_ファイルとして利用可能です

  • _javac –release_コマンドは、Java 9と
    Oracleのリリースにはいくつかの追加モジュールが存在するため、Java 10ターゲット

  • _java –version_および_java -fullversion_コマンドの出力
    OracleのビルドとOpenJDKビルドを区別します

6. その他のJDK実装

それでは、他のアクティブなJava Development Kitの実装を簡単に見てみましょう。

6.1. 無料のオープンソース

以下の実装はアルファベット順にリストされており、オープンソースであり、無料で使用できます。
  • AdoptOpenJDK

  • アマゾンコレット

  • アズール・ズールー

  • Bck2Brwsr

  • カカオ

  • コードネーム1

  • DoppioJVM

  • Eclipse OpenJ9

  • GraalVM CE

  • HaikuVM

  • ホットスポット

  • ジャミガ

  • JamVM

  • Jelatine JVM

  • Jikes RVM(Jikes Research Virtual Machine)

  • JVM.go

  • ルジョス

  • マキシン

  • マルチOSエンジン

  • RopeVM

  • uJVM

6.2. 独自の実装

著作権で保護された実装もあります。
  • Azul Zing JVM

  • CEE-J

  • エクセルシオールJET

  • GraalVM EE

  • Imsys AB

  • JamaicaVM(aicas)

  • JBlend(アプリックス)

  • MicroJvm(IS2T –産業用スマートソフトウェアテクノロジー)

  • OJVM

  • PTC Perc

  • SAP JVM

  • Java用Waratek CloudVM

    上記のhttps://en.wikipedia.org/wiki/List_of_Java_virtual_machines#Active [アクティブな実装]に加えて、https://en.wikipedia.org/wiki/List_of_Java_virtual_machines#Inactive [非アクティブな実装]のリストを見ることができます。すべての実装の簡単な説明。

7. 結論

この記事では、今日最も人気のある2つのJava開発キットに注目しました。
最初にそれらのそれぞれについて説明し、次にそれらの最も顕著な違いを強調しました。 次に、Java 11以降の変更点と相違点に特に注意を払いました。 最後に、今日利用可能な他のアクティブな実装をリストしました。