Java 開発ガイド (Solaris 7 編)

Java と Java 実行時環境 (JRE)

この節では、Java と JRE (Java Runtime Environment) の基礎を紹介します。

Java

Java は、クラスを基本単位とするオブジェクト指向の、新しく開発された並列型のプログラミング環境および実行環境です。Java は、次の要素から構成されています。

Java には、次の特徴があります。

Java 実行時環境(JRE)

JRE (Java Runtime Environment) は、一般的な JVM 実装用にコンパイルされたプログラムを実行できるソフトウェア環境です。実行時システムは、次のものから構成されます。

次の図は、JRE 全体と、一般的な JVM 実装の各種モジュールから構成される JRE の各要素とクラスライブラリとの関係を表しています。

図 1-1 一般的な JVM 実装と JRE およびクラスライブラリとの機能関係

Graphic

Java 仮想マシン (JVM)

JVM (Java Virtual Machine) は、1 つの命令セットを持ち、メモリーを使用する抽象的な演算マシンです。仮想マシンは、しばしばプログラミング言語の実装に使用されます。JVM は、Java プログラミング言語の基礎となるものです。異なるプラットフォーム間で Java プログラムの移植が可能なこと、 コンパイル後のコードサイズが小さいということは、JVM によって実現されます。

Solaris JVM は、Java アプリケーションの実行に使用されます。Java コンパイラ javac はバイトコードを生成し、そのコードを .class ファイルに書き込みます。JVM はこれらのバイトコードを解釈し、そのバイトコードはどの JVM 実装でも実行することができます。このようにして、異なるプラットフォーム間での Java の移植性が実現されます。図 1-2 および図 1-3 はそれぞれ、従来のコンパイル時環境と、Java が提供する移植可能な新しいコンパイル時環境を表しています。

図 1-2 従来のコンパイル時環境

Graphic

図 1-3 移植可能な新しい Java コンパイル時環境

Graphic

マルチスレッド JVM

Java プログラミング言語では、マルチスレッドプログラムがサポートされる必要があります。Java インタプリタはすべてマルチスレッドプログラミング環境を提供しますが、Java インタプリタの多くは、シングルプロセッサによるマルチスレッド処理しかサポートしないため、一度に実行される Java プログラムスレッド数は 1 つだけです。

Solaris JVM インタプリタは、Solaris のマルチスレッド機能を使用することによって、マルチプロセッサシステムを最大限に活用します。マルチプロセッサシステムでは、1 つのプロセスの複数のスレッドが複数の CPU で同時に実行されるようにスケジューリングできます。Solaris の JVM 上でマルチスレッド Java プログラムを実行すると、他のプラットフォームの JVM で同じプログラムを実行したときに比べて、大幅に並列性が向上します。

Sun の JIT コンパイラ

Solaris JVM に組み込まれている Sun の Java JIT (Just-In-Time) コンパイラは、従来より大幅に高速に動作し、特に長時間連続して演算中心の処理を実行するプログラムでは、大幅にパフォーマンスが向上します。

JIT コンパイラのコンパイルプロセス

JIT コンパイラ環境変数が有効になっている (デフォルト) の場合、JVM は .class ファイルを読み取って解釈し、JIT コンパイラに渡します。JIT コンパイラは、バイトコードを、ターゲットのプラットフォーム (プログラムを実行するプラットフォーム) にネイティブなコードにコンパイルします。次の図は、JIT コンパイラのコンパイルプロセスを表しています。

図 1-4 JIT コンパイラのコンパイルプロセス

Graphic

次の図は、JIT コンパイラと Solaris JVM および JRE との機能関係を表しています。

図 1-5 Solaris JVM と JIT との機能関係

Graphic