見出し画像

☕javaの種類 JRE JDK GraalVM OpenJDK SDKMAN! いろんなSDKとVMさ

Javaのエコシステムにおいて、JRE、JDK、OpenJDK、GraalVMという用語は重要な役割を果たしています。それぞれの違いと特徴を以下に説明します。

  1. JRE(Java Runtime Environment):

    • Javaプログラムを実行するための環境を提供するソフトウェアパッケージです。

    • Javaのアプリケーションを実行するために必要なコアライブラリとJava Virtual Machine(JVM)を含んでいます。

    • JREは開発ツールを提供しないので、Javaプログラムの開発には使用されません。実行のみを目的としています。

  2. JDK(Java Development Kit):

    • Javaのアプリケーションを開発するためのツールキットです。

    • JREを含むので、JDKがインストールされていればJavaプログラムの実行も可能です。

    • コンパイラ(javac)、デバッガ、ドキュメント生成ツールなどの開発に必要なツールが含まれています。

  3. OpenJDK:

    • Oracleによって公開されているJava Platform, Standard Edition(Java SE)の公式実装です。

    • オープンソースとして公開されており、GNU General Public License, version 2, with the Classpath Exceptionのもとで利用可能です。

    • OpenJDKはJDKの実装の一つであり、Javaの仕様に基づいています。

  4. GraalVM:

    • Oracleが開発している高性能なランタイムプラットフォームです。

    • Javaを含む複数の言語(JavaScript、Python、Ruby、R、WebAssemblyなど)の実行が可能です。

    • GraalというJITコンパイラを搭載し、高い実行速度を目指しています。

    • 「ネイティブイメージ」という機能を提供し、Javaアプリケーションをスタンドアロンのネイティブバイナリとしてコンパイルすることができます。これにより、起動時間の短縮やメモリ使用量の削減が図られます。

オラクル社は、2010年1月27日のサン・マイクロシステムズ社の買収により、現在、Java SEプラットフォームの正式な実装を所有しています。この実装は、SunによるJavaのオリジナルの実装をベースにしている。オラクルの実装は、Microsoft Windows(XPではまだ動作するが、現在はそれ以降のバージョンのみが公式にサポートされている)、macOS、Linux、およびSolarisで利用可能である。Javaは、Ecma International、ISO/IEC、ANSI、その他の第三者標準化団体による正式な標準化が行われていないため、Oracleの実装が事実上の標準となっています。

https://en.wikipedia.org/wiki/Java_(programming_language)

オラクルの実装は、2つの異なるディストリビューションにパッケージされています。Java Runtime Environment (JRE) は Java SE プラットフォームの Java プログラム実行に必要な部分を含み、エンドユーザー向け、Java Development Kit (JDK) はソフトウェア開発者向けで、Java コンパイラ、Javadoc、Jar、デバッガなどの開発ツールが含まれている。また、Oracle社は、高性能なJavaダイナミックコンパイラとインタプリタであるGraalVMをリリースしている。

https://www.graalvm.org/

OpenJDKは、GNU GPLの下でライセンスされている、もう一つの注目すべきJava SE実装である。この実装は、SunがJavaのソースコードをGPLの下で公開し始めたときに始まった。Java SE 7の時点では、OpenJDKは公式のJavaリファレンス実装です。

Mac OS X 10.6以下: Mac OSには、AppleのJavaがプリインストールされています。
Mac OS X 10.7 (Lion)以上: Mac OS Xバージョン10.7以上には、Javaはプリインストールされていません。Oracleから最新のJavaを入手するには、Mac OS X 10.7.3以上が必要です。
Java 7以降のバージョンがインストールされている場合、「System Preferences」の下にJavaアイコンが表示されます。
Javaバージョン6以下は、お使いのMacの「Applications」>「Utilities」フォルダにあるJava Preferences.appにリストされます。

https://www.java.com/ja/download/help/java_mac.html

SDKMAN!は、ほとんどのUnixベースのシステムで複数のソフトウェア開発キットの並行バージョンを管理するためのツールです。SDKMAN!は、Candidateのインストール、切り替え、削除、リストアップのための便利なコマンドラインインターフェイス(CLI)とAPIを提供します。以前はGVM(Groovy enVironment Manager)として知られていましたが、Rubyコミュニティで広く使われている非常に便利なRVMとrbenvツールに触発されました。

https://sdkman.io/

2019年5月にAndroidアプリ開発用のGoogleの優先言語としてJavaに取って代わり、2017年5月に当初発表されたプログラミング言語Kotlinを用いて書かれる[102]。 [103][104] JavaはC++と同様にまだサポートされている

https://en.wikipedia.org/wiki/Android_(operating_system)

Androidは、実行環境としてAndroid Runtime(ART)を採用しており(バージョン4.4で導入)、アプリケーションのインストール時にAOT(Ahead-of-Time)コンパイルによりアプリケーションのバイトコードを完全にマシンコードにコンパイルしている。Android 4.4では、ARTは実験的な機能であり、デフォルトでは有効になっていなかったが、Androidの次のメジャーバージョンである5.0では唯一のランタイムオプションとなった[211] ARTを引き継ぐバージョン5.0までの、サポートが終了したバージョンでは、以前はプロセス仮想マシンとしてDalvikを使用し、通常はJavaバイトコードから翻訳されるDalvik "dex-code" (Dalvik Executable) を実行するために追跡ベースのJIT (Just In Time) を使用していた。トレースベースのJITの原則に従って、アプリケーションコードの大部分を解釈することに加えて、Dalvikはアプリケーションが起動されるたびに、頻繁に実行されるコードセグメント(「トレース」)のコンパイルとネイティブ実行を行う[212][213][214] Javaライブラリについて、Androidプラットフォームは現在廃止されているApache Harmonyプロジェクトのサブセットを使用している[215] 2015年12月に、GoogleはAndroidの次のバージョンはOpenJDK projecに基づいたJava実装に切り替えると発表している

2010年8月12日、オラクルはJavaプログラミング言語に関する著作権と特許の侵害を主張してグーグルを提訴した[431]。オラクルは当初61億ドルに上る賠償金を求めていたが[432]、この評価はアメリカ連邦判事によって却下され、オラクルは見積もりを修正するよう求めた[433]。これに対してグーグルは複数の防衛線を提出して、Androidがオラクルの特許や著作権を侵害していない、オラクルの特許が無効であると反証し、その他いくつかの防衛も行っている。彼らは、AndroidのJava実行環境は、Javaクラスライブラリのクリーンルーム実装であるApache Harmonyと、Dalvikという独自開発の仮想マシンに基づいていると述べていた[434]。2012年5月、この訴訟の陪審員は、GoogleはOracleの特許を侵害していないと認め、裁判長はGoogleが使用しているJava APIの構造には著作権がないと判断している。

2015年12月、Googleは、Androidの次のメジャーリリース(Android Nougat)では、ランタイムとして、現在は廃止されているApache Harmonyプロジェクトを使用せず、Javaプラットフォームの公式オープンソース実装であるOpenJDKに変更すると発表した。この変更を反映したコードはAOSPのソースリポジトリにも投稿された[215]。その発表でGoogleは、これがAndroid上のJavaと他のプラットフォームの間で「共通のコードベース」を作るための努力の一部であると主張した。

これまでOracle JDKの中で提供してきた「JavaFX」、「32ビット版バイナリ」、「(Deployment Technologyとして開発されてきた)Java Web StartおよびJava Plug-in」については、JDK 11以降、Oracle JDKでは提供されません。したがって、有償サポートを利用する場合も、JDK 11以降のリリースにはこれらの機能は含まれません。
JavaFXについては、オープンソース・プロジェクト「OpenJFX」にソースコードが移管され、今後は同プロジェクトで開発が継続されます。

https://www.oracle.com/jp/technical-resources/article/java/ja-topics/jdk-release-model.html

多くのプロバイダがArmベースのアーキテクチャで使用できるJavaおよびOpenJDKバイナリを提供しているため、 エンドユーザーのニーズに合った選択肢が見つかります。ARMv7およびARMv8 ISA版のJavaは、いずれも完全な機 能を搭載しており、コードベースはOpenJDKから入手でき、そのライセンスはクラスパス例外付きGPLv2.1に基づい ています。そのため、OpenJDKはほとんどのLinuxディストリビューションにバンドルすることができました。

https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-SO18-JavaOnARM-ja.pdf

お願い致します