目次
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 |
関連の記事