JVMとJREとJDKとJava SEの違い

目次

JVMとJREとJDKとJava SEの違いのまとめ

関係図

項目 略称の意味 役割 / 内容 含まれるもの
JVM Java Virtual Machine Javaのバイトコードを解釈・実行する仮想マシン 実行エンジンのみ
JRE Java Runtime Environment Javaプログラムを実行するための環境 JVM + 標準クラスライブラリ
JDK Java Development Kit Javaプログラムを開発・実行するための環境 JRE + コンパイラ(javac)+ 開発ツール
Java SE Java Platform, Standard Edition Javaの標準仕様(API・ライブラリの集合) -

JVM … Javaバイトコードを実際に実行する仮想マシン(JREの中に含まれる)

JRE … Java SEの実装で、実行専用

JDK … Java SEの実装で、開発も実行もできる

Java SE … 規格・仕様(この上に各実装が作られる)

 

JVMの機能

OSの違いを吸収

JVMは、クラスファイルのバイトコードをCPUが実行するマシン語に変換します。
WindowsやLinuxなどのOS毎の違いを吸収してくれるのでプログラムを作成する側がOSの違いを意識しなくてよくなります。
※本来であれば、OSごとにプログラムを作成する必要があります。

 

管理するメモリ

JVMのメモリ管理は、ヒープ(Heap)とスタック(Stack)を管理します。
ヒープはインスタンス生成時に使用されます。

 

ガベージコレクション(GC)

JVMは、自動的にヒープ(Heap)にある不要なインスタンスを解放します。
ガベージ(Garbage)はゴミ箱という意味です。
何らかの原因でインスタンスが解放されず空き容量が減る不具合が起こる場合があります。
この現象をメモリリーク(memory leak)と呼びます。

 

マルチスレッド処理

Java言語のスレッド機能を、OSに依存せずサポートします。
スレッドスケジューリングや同期機構(synchronized など)をJVMレベルで管理します。

 

対応するプログラミング言語

JVMは、Java以外のScalaやKotlinといったプログラミング言語も動かすことができます。

 

EclipseのJVMの使用例

Eclipseの設定ファイルのeclipse.iniで、起動オプションの-vmを指定してJVMの場所を指定します。

-vm
C:/Program Files/Java/jdk1.8.0_211/bin/javaw.exe

 

WindowsでJDKの開発ライブラリをみてみる

JDKをインストールしたフォルダのbin配下(例:C:\Program Files\Java\jdk-9.0.1\bin)に
開発向けのexeファイルとして、コンパイルするためのjavac.exeやJava文書を生成するjavadoc.exeなどがあります。

 

Java SEの呼び方の歴史

最初は、JDK1.Xでしたがバージョン1.2からJ2SE 1.2になりました。
J2SE1.4の次はJ2SE5.0でした。
J2SE5.0の次はJava SE6になりました。

Java SE10
Java SE9
Java SE8
Java SE7
Java SE6
J2SE 5.0
J2SE 1.4
J2SE 1.3
J2SE 1.2
JDK 1.1
JDK 1.0

 

関連の記事

JDKのインストールと環境変数の設定

△上に戻る