Javaは、今日の開発環境で使用されている最も人気のあるプログラミング言語の1つです。主にバックエンド開発プロジェクト、ゲーム開発、デスクトップおよびモバイル・コンピューティングに使用されます。Java仮想マシン(JVM)、Javaランタイム環境(JRE)、Java開発キット(JDK)がJava開発プロセスにおいてそれぞれどのような役割を果たすのか、ぜひお読みください。また、それぞれの関係性や違いについても解説します。
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
Java仮想マシン(JVM)は、Javaバイトコードをロード、検証し、実行します。Javaプログラミングを実行するため、Javaプログラミング言語のインタプリタまたはコアとして知られています。
JVMはバイトコードをマシン固有のコードに変換する役割を担っており、JDKとJREの両方で必要です。また、プラットフォームに依存しており、メモリー管理やセキュリティーを含む多くの機能を実行します。さらに、JVMでは、Javaバイトコードに変換された他のプログラミング言語で記述されたプログラムも実行できます。
Javaネイティブ・インターフェース(JNI)は、JVMに関連して呼ばれることがよくあります。JNIは、JVMで実行されるJavaコードが、ハードウェアや特定のオペレーティング・システム・プラットフォームに関連付けられたアプリケーションと通信できるようにするプログラミング・フレームワークです。これらのアプリケーションはネイティブ・アプリケーションと呼ばれ、多くの場合、他の言語で作成できます。ネイティブ・メソッドは、他の言語で作成されたネイティブ・コードをJavaアプリケーションに移すために使用されます。
JVMは、3つの主要なコンポーネントまたはサブシステムで構成されています。
Java Runtime Environment(JRE)は、システム上でJavaプログラムまたはアプリケーションを実行するためのソフトウェア・ツールのセットです。
JREは、Javaオブジェクトへの動的メモリー割り当てにヒープ空間を使用します。JREはJDB(Javaデバッグ)でも使用されます。
プログラマーがJavaコマンドを使用してJavaプログラムを実行したい場合は、JREをインストールする必要があります。インストールだけを行う(コードの開発やコンパイルを行わない)場合は、JREのみが必要です。
JREは、Java仮想マシン以外にも、Javaアプリケーションを最大限に活用するためのさまざまなサポート・ソフトウェア・ツールや主要な機能で構成されています。
Java開発キット(JDK)は、JREのスーパーセットであるソフトウェア開発キットです。これは、JavaアプリケーションとJavaアプレットの開発を可能にする基本的なコンポーネントです。これはプラットフォーム固有であるため、オペレーティング・システムごと(Mac、Unix、Windowsなど)ごとに個別のインストーラーが必要です。
JDKには、Javaプラットフォームを使用して開発されたプログラムのコンパイル、デバッグ、実行に必要なすべてのツールが含まれています。(Javaプログラムはコマンドラインを使用して実行することもできることに注意してください。)
JDKには、Javaプログラムの実行に必要なすべてのJavaツール、実行可能ファイル、バイナリーが含まれています。これには、JRE、コンパイラ、デバッガー、アーカイブ、およびJava開発で使用されるその他のツールが含まれます。
Javaは、Java Standard Edition(Java SE)またはCore Javaと同義です。3つの婉曲表現はすべて、型とオブジェクトを定義するという行為を含む基本的なJava仕様を指します。一方、Java EEはAPIを提供し、通常は大規模なアプリケーションの実行に使用されます。このブログの内容は、Java SEに焦点を当てています。
まず、Javaの3つのコア・コンポーネントがどのように連携するかを確認し、その後、違いを調べてみましょう。次の図は、JVM、JRE、およびJDKがJavaランドスケープでどのように連携するかを示しています。
スライス・オープンなベース・ベースを想像するなら、ラウンド・クッション性のあるコア、コールとコットンの中間部分、カウ計画の外装という3つの主要コンポーネントが含まれています。これら3層すべてがなければ、ボールは意図した機能を実行できません。ベースの3つの基本部分と同様に、JVM、JRE、JDKにはすべて特定の機能があります。3つすべてがないと、Javaは正常に動作しません。
次のビデオでは、Jamil Spain氏がJREとJDKの関係について詳しく説明しています。
そしてその他の違いについて説明します
JVM、JRE、またはJDKを強化するために使用できる補完的なテクノロジーは数多くあります。最も頻繁に使用されるテクノロジーは、次のとおりです。
Java仮想マシン(JVM)は、ご想像のとおり、仮想マシン(VM)を作成するために使用されます。VMは、複数のアプリケーションが互いに影響を与えることなく、基盤となる同じ物理ハードウェア上で実行できるサーバーです。これにより、参考情報が有効に活用できるようになり、従来のインフラストラクチャーよりもはるかに簡単に拡張でき、コスト効率が高くなります。また、VMは独立性があるため、簡単に使い捨てすることができます。アプリケーションが不要になったら、仮想マシンを停止するだけで済みます。
コンテナはこの抽象化を次のレベルに引き上げ、OSカーネルを仮想化します。OSがないため、コンテナはVMよりもさらに軽量、高速、柔軟です。
多くの組織にとって、Javaは依然としてアプリケーション開発の重要な部分であり、ポータブルでスケーラブルなソリューションを作成する際に強固な基盤を提供します。また、クラウドにおけるアプリケーションのモダナイズにおいても重要な役割を果たすことができます。
次のステップとして、Javaアプリケーションの実装、監視、管理のための信頼性が高くコスト効率に優れた商用サポートを提供するOpenJDKとIBM® Runtimes for Businessを検討してください。
Javaアプリケーションを開発および配信するためのフルマネージドのシングルテナント・サービス。
DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリケーションを構築、デプロイ、管理します。
クラウド・アプリケーション開発は、一度構築すれば、迅速に反復し、どこにでもデプロイできます。