はじめに
今までjavaプログラムはJVMを用いてどんなOS環境下でも実行可能になっている程度の理解しかありませんでした。JREというワードが現場で出て、何ぞやと思い、改めてjavaプログラムの実行について学習し直してみました。
目次
- JRE(Javaランタイム環境)とは何か
- JDKとは
- JVMとは
- 結局、JRE、JDK、JVMの違いって何?
- JREの仕組み
- まとめ
JRE(Javaランタイム環境)とは何か
Java Runtime Environment (JRE) は、Java プログラムを正しく実行するために必要なソフトウェアで、JavaプログラムとOSの間で通信する基盤となるソフトウェアです。
ソフトウェアプログラムには、メモリへのアクセスやプログラムファイル、依存関係など他のシステムリソースへのアクセスを提供するランタイム環境が必要です。以前は、ほとんどのソフトウェアがOSを直接実行環境として使用していました。しかし、これでは、開発者はアプリケーションを実行させたいOSごとに異なるソースコードを書かなければならないことになります。この問題を解決するために生まれたのが、Java ランタイム環境 (JRE) 技術です。
Javaコードと、ライブラリを結合し、最終的にJavaプログラムを実行するJVMインスタンス、またはローカルコピーを作成します。
作成したJVMは複数のOSで利用可能で、もしくはすべての種類のJVMで動作するJavaコードのコピーを1つ生成します。このように、JRE は、Javaアプリケーションを一度記述すれば、どこでも実行できるようにしているようです。
Javaプログラムを開発し実行するためには、Javaランタイム環境(JRE)の他にJava開発キット (JDK) と Java仮想マシン (JVM) を含めた3つのコンポーネントが必要です。
JDKとは
JDK は、Java アプリケーションの開発に使用できるソフトウェアツールの集合体です。JDK をダウンロードし、インストールすることで、開発環境に JDK をセットアップすることができます。使用する Java のバージョンに合った JDK ソフトウェアのバージョンを選択することができます。例えば、Java Standard Edition、または Java SE を使用する場合は、Java SE JDK が必要です。
JVMとは
JVM は、Java プログラムを 1 行ずつ実行するソフトウェアです。開発者は、Java アプリケーションの実行時に、プログラムリソースを管理するために JVMの設定を行います。例えば、JVMのメモリ設定を変更し、Java アプリケーションが実行時に使用する内部メモリの量を確認することなどもできるようです。
結局、JRE、JDK、JVMの違いって何?
JDKは、JRE の上位に位置するソフトウェア層で、コンパイラやデバッガなど、ソフトウェア開発環境によくあるツールを含んでいます。JDKでは、英語のような構文でコードを記述し、それをコンパイルしてバイトコードをJRE に渡しているそうです。一方、JREには、クラスライブラリ、サポートファイル、JVMが含まれています。これらのソフトウェアコンポーネントを使用して、あらゆるデバイスでバイトコードを実行しているそうです。
JREの仕組み
ランタイム環境は以下3つのコンポーネントを使用して動作しているようです。
- ClassLoader
- バイトコードベリファイア
- インタプリタ
ここでは詳しくは記載しませんが、気になる方は以下の記事をご覧ください。
JRE の仕組みは?
# まとめ
今回javaプログラムを作成している中で成果物としてアーキテクチャを整理する中で、改めてjavaプログラムの実行がどんな仕組みで行われているのかをまとめてみました。
まだ理解が浅いところもあると思おうので、コメントなどでご指摘いただけると助かります。
長くなりましたが、ここまで読んでいただきありがとうございました!
今回参考にしたサイト