JREとは何ですか?Javaランタイム環境の概要
Java Development Kit(JDK)、Java Virtual Machine(JVM)、およびJava Runtime Environment(JRE)は、Javaアプリケーションを開発および実行するための強力な3つのJavaプラットフォームコンポーネントを形成します。以前、JDKとJVMを紹介しました。このクイックチュートリアルでは、Javaのランタイム環境であるJREについて学習します。
実際には、ランタイム環境は、他のソフトウェアを実行するように設計されたソフトウェアです。JREには、Javaのランタイム環境として、Javaクラスライブラリ、Javaクラスローダー、およびJava仮想マシンが含まれています。このシステムでは:
- クラスローダーは、クラスを正しくロードし、それらをコアJavaクラスライブラリに接続する役割を果たします。
- JVMは、 Javaアプリケーションは、彼らが実行して、デバイスやクラウド環境でも実行するために必要なリソースを持って確保する責任があります。
- JREは、主にそれらの他のコンポーネントのコンテナであり、その活動を組織する責任があります。
次のセクションでは、これらのコンポーネントがどのように連携するかについてさらに深く掘り下げます。
JDK、JRE、およびJVMのインストール
インストールの観点から、JDKをダウンロードするときはいつでも、バージョン互換のJREが含まれ、そのJREにはデフォルトのJVMが含まれます。JREはJDKとは別にダウンロードすることもでき、さまざまなJVMから選択できます。デフォルトは、ほとんどの実装で、特にJavaを使い始めたときにうまく機能します。
ランタイム環境とは何ですか?
ソフトウェアプログラムを実行する必要があります。そのためには、実行する環境が必要です。ランタイム環境はクラスファイルをロードし、それらを実行するためのメモリやその他のシステムリソースへのアクセスを確保します。これまで、ほとんどのソフトウェアは、ランタイム環境としてオペレーティングシステム(OS)を使用していました。プログラムは、どのコンピューター上でも実行されましたが、リソースアクセスはオペレーティングシステムの設定に依存していました。この場合のリソースは、メモリやプログラムファイル、依存関係などです。Javaランタイム環境は、少なくともJavaプログラムについては、これらすべてを変えました。
WORA for Java
それが最初に導入されたとき、Javaの「一度書けばどこでも実行できる」という原則は革命的であると考えられていましたが、今日ではほとんどのソフトウェアシステムの標準として採用されています。
Javaランタイム環境
ソフトウェアは、システムハードウェアの上にある一連のレイヤーと見なすことができます。各レイヤーは、その上のレイヤーによって使用される(そして必要とされる)サービスを提供します。Javaランタイム環境は、コンピューターのオペレーティングシステム上で実行されるソフトウェア層であり、Javaに固有の追加サービスを提供します。
JREは、オペレーティングシステムの多様性をスムーズにし、Javaプログラムが変更なしで事実上すべてのOSで実行できるようにします。また、付加価値サービスも提供します。自動メモリ管理はJREの最も重要なサービスの1つであり、プログラマがメモリの割り当てと再割り当てを手動で制御する必要がないようにします。
つまり、JREはJavaプログラム用の一種のメタOSです。これは抽象化の典型的な例であり、基盤となるオペレーティングシステムをJavaアプリケーションを実行するための一貫したプラットフォームに抽象化します。
JREがJVMとどのように連携するか
Java仮想マシンは、ライブJavaプログラムの実行を担当する実行中のソフトウェアシステムです。JREは、Javaコードを取得し、それを必要なライブラリと組み合わせて、JVMを起動して実行するオンディスクシステムです。
JREには、Javaプログラムを実行するために必要なライブラリとソフトウェアが含まれています。例として、JavaクラスローダーはJavaランタイム環境の一部です。この重要なソフトウェアは、コンパイルされたJavaコードをメモリにロードし、コードを適切なJavaクラスライブラリに接続します。
今説明した階層化ビューでは、JVMはJREによって作成されます。パッケージの観点からは、図1に示すように、JREにはJVMが含まれています。

JREのインストールと使用
JREには概念的な側面がありますが、実際には、Javaプログラムを実行することを目的とした、コンピューターにインストールされたソフトウェアにすぎません。開発者は、ほとんどの場合JDKとJVMを使用します。これらは、Javaプログラムの開発と実行に使用するプラットフォームコンポーネントだからです。Javaアプリケーションのユーザーは、これらのプログラムを実行できるJREにもっと関与することになります。
ほとんどの場合、コンピュータにはJavaがインストールされており、JREもそれに含まれています。手動でインストールまたはアップグレードする必要がある場合は、Oracleから現在のJREバージョンをダウンロードできます。
JREバージョン
Javaランタイム環境はJavaの新しいバージョンごとに更新され、そのバージョン番号はJavaプラットフォームのバージョン管理システムと一致します。たとえば、JRE1.8はJava8を実行します。さまざまなJDKパッケージから選択できます(Enterprise Editionなど)。またはStandardEdition)は、JREには当てはまりません。ほとんどのコンピューターは、Java SE用に開発されたJREを実行します。これは、開発方法に関係なく、任意のJavaアプリケーションを実行できます。ほとんどのモバイルデバイスには、Java ME用のJREが付属しています。これは、モバイルデバイスにプリインストールされており、ダウンロードできません。
JREをインストールしたら、コマンドラインで「」と入力してJREを操作できますjava -version
。これにより 、インストールされているバージョンがわかります。POSIXシステムでは、いつでもインストール場所をwhich java
。で確認できます。
DevOpsのJRE
JREは、開発段階ではあまり目立ちません。開発段階では、ほとんどの場合、選択したOSまたはIDEでプログラムを実行するだけです。JREは、監視と構成に使用されるため、DevOpsとシステム管理で少し重要な役割を果たします。
基本的に、JREは、Javaアプリケーションの特性を構成および制御するために使用する「ノブ」を提供します。メモリ使用量はその代表的な例であり、システム管理の基本です。メモリ使用量は常に重要ですが、クラウド構成では不可欠であり、devopsはクラウドベースのテクノロジーです。devops環境で作業している場合、またはdevopsに分岐することに関心がある場合は、Javaメモリがどのように機能し、JREでどのように監視されるかを理解することをお勧めします。
Devopsまたはsysadmin?
Devopsは新しい用語ですが、開発と運用の間の相互運用性である、何十年にもわたって真実であったことを説明しています。この意味で、devopsは、以前は運用またはシステム管理と呼ばれていたものの単なる新しい用語です。sysadminと同様に、devopsの重要な側面は、ソフトウェアの実行に必要なシステムを管理することです。JREの管理は、Javaアプリケーションを実行するシステムの管理の一部です。
JavaメモリとJRE
Javaメモリは、ヒープ、スタック、メタスペース(以前はpermgenと呼ばれていました)の3つのコンポーネントで構成されています。
- メタスペースは、Javaがクラス定義のようなプログラムの不変の情報を保持する場所です。
- ヒープスペースは、Javaが可変コンテンツを保持する場所です。
- スタックスペースは、Javaが関数の実行と変数の参照を格納する場所です。
Java8でのメモリ管理
Java 8まで、メタスペースはpermgenとして知られていました。はるかにクールな名前であることに加えて、メタスペースは、開発者がJavaのメモリスペースと対話する方法に対する重要な変更です。以前は、コマンドjava -XX:MaxPermSize
を使用してpermgenスペースのサイズを監視していました。Java 8以降、Javaは自動的にメタスペースのサイズを増やして、プログラムのメタニーズに対応します。Java 8ではMaxMetaspaceSize
、メタスペースのサイズを制限するために使用できる新しいフラグ、も導入されました。
他のメモリオプションであるヒープとスタックは、Java8でも同じままです。
ヒープスペースの構成
ヒープスペースは、Javaメモリシステムの最も動的な部分です。フラグ-Xms
と-Xmx
フラグを使用して、ヒープを開始する大きさ、およびヒープを許可する大きさをJavaに指示できます。特定のプログラムのニーズに合わせてこれらのフラグを調整する方法を理解することは、Javaのメモリ管理の重要な側面です。理想は、ヒープを十分に大きくして、最も効率的なガベージコレクションを実現することです。つまり、プログラムを実行するのに十分なメモリを許可したいが、必要以上に大きくしたくないということです。
スタックスペースの構成
スタックスペースは、関数呼び出しと変数参照がキューに入れられる場所です。スタックスペースは、Javaプログラミングで2番目に悪名高いエラーの原因です。スタックオーバーフロー例外(最初はnullポインタ例外です)。スタックオーバーフロー例外は、それのあまりが予約されていますので、あなたがスタック領域が不足してきたことを示しています。通常、1つまたは複数のメソッドが循環的に相互に呼び出すと、スタックオーバーフローが発生するため、スタックへの関数呼び出しの数は増え続けます。
あなたは、使用-Xss
サイズを開始スタックを設定するためのスイッチを。その後、スタックはプログラムのニーズに応じて動的に成長します。
Javaアプリケーションの監視
アプリケーションの監視はJVMの機能ですが、JREは、監視に必要なベースラインである構成オプションを提供します。Javaアプリケーションの監視には、クラシック(Unixコマンドなどtop
)からOracleのインフラストラクチャ監視などの高度なリモート監視ソリューションまで、さまざまなツールを利用できます。
これらのオプションの間に、実行中のJVMの検査を可能にするVisualVMのようなビジュアルプロファイラーがあります。これらのツールを使用すると、ホットスポットやメモリリークを追跡したり、システム全体のメモリ消費量を監視したりできます。
結論
Javaランタイム環境は、JVMが実行するJavaアプリケーションをロードするオンディスクプログラムです。Java Development Kitをダウンロードすると、デフォルトでJREが含まれ、各JREには、コアJavaクラスライブラリ、Javaクラスローダー、およびJava仮想マシンが含まれます。特にクラウドおよびdevops環境での作業では、JVM、JDK、およびJREがどのように相互作用するかを理解することが役立ちます。これらの環境では、JREは、従来のJavaアプリケーション開発よりも監視と構成において強力な役割を果たします。
このストーリー「JREとは?Javaランタイム環境の概要」は、もともとJavaWorldによって公開されました。