はじめに
Javaの環境構築でよく見かけるが意味を忘れやすい用語たちについて、情報を簡易的に整理しました。
経験者向けの記載粒度です。
Java SE (Java Platform, Standard Edition)
Javaプラットフォームの全体仕様。Javaというプログラミング言語の中心的な概念。
「Java 17」など呼ぶときの「Java」は「Java SE」を指すと考えれば良い。
Java SEは開発者へ提供する基本的な機能とAPIの仕様を定義している。
代表的なものは下記のとおり。
- if 文、for ループ、try-catch ブロックなどの制御構造や、クラス、インターフェース、継承、多態性などのオブジェクト指向プログラミングの概念。
-
class
キーワードやpublic
キーワードといった予約語の機能 -
java.lang
やjava.util
をはじめとするコアライブラリ etc.
JVM (Java Virtual Machine)
Java仮想マシン。JREおよびJDKに含まれて提供される。
具体的な実装としては HotSpot VM がある。
JRE (Java Runtime Environment)
javaプログラムを 実行 するのに必要なツール群(下記例)を備えたセットのことを指す。
-
java
コマンド - JVM
- Java SEの各種機能・APIを実装したclassライブラリ群 etc.
2023年現在はJRE単体では入手できず、JDKに含まれる形で提供されるので、JREとJDKの区別はさほど意味を持たなくなってきている。
JDK (Java Development Kit)
javaプログラムを 開発 するのに必要なツール群(下記例)を備えたセットの 総称 を指す。
Javaの実体かつ本体と言える。
- JRE
-
javac
:コンパイラ -
jar
:アーカイバ -
javadoc
:ドキュメントジェネレータ -
jdb
:デバッガ -
jstat
:モニタリング etc.
OpenJDK
JDKを実装したオープンソースのソフトウェアおよびプロジェクトのことを指す。
Javaの公式なリファレンス実装とみなされており、ほとんどのケースで「Javaを導入する」とはすなわち「OpenJDKを導入する」ことと同義であると言える。
ただし純粋なOpenJDKそのものを開発で利用することはなく、各ベンダーが独自のビルドやサポートポリシーを持つ実装としてOpenJDKプロジェクトから派生開発し配布しているものをダウンロードして利用するのが一般的。
Oracle社のOracle OpenJDK
やAmazon社のAmazon Corretto
が代表的なOpenJDKのディストリビューション。
Oracle JDK
Oracle社によって提供されている、JDKを実装した商用利用向けJava。
2019年から有償化されたため、以降多くのプロジェクトではOpenJDKを採用することが多くなった。