Java

プラットフォーム非依存

Javaのもう一つの特徴はプラットフォームに依存していないことであり、これは、Javaのプログラムがさまざまなハードウェアオペレーティングシステム上で必ず同じように動く、ということを意味する。一度Javaのプログラムを作成すれば、そのプログラムはどのプラットフォーム上でも動くのである。近年では、Java実行環境を構成するJava仮想マシンに高速化の技術が導入され、プラットフォームに依存したプログラムと同水準の実行性能を実現している。Javaのプラットフォーム非依存は、次のようにして実現されている。 また、実際にはJavaコンパイラ実装として、ソースコードから直接にプラットフォームのハードウェアにネイティブなオブジェクトコード機械語コード)を生成するものがある。このようなJavaコンパイラの実装としてはGNUGNU Compiler for Java (GCJ)などがある。この場合、中間言語のバイトコードを生成するという段階は省かれる。しかしこの方法で生成されるJavaの実行コードは、コンパイル時に指定したプラットフォームでしか動かない。Javaの実行コード(バイトコード)を生成する手段としては、プログラミング言語Javaでプログラムを書くことが標準的なやり方である。Javaのバイトコードの実行は、Java仮想マシンという仮想マシンの環境上で行われる。Java仮想マシンは実行時にバイトコードをネイティブコードに変換する。なお、Javaのバイトコードを生成する他の方法としては、現在ではRubyJRuby)や GroovyJabacoPythonJython)などのプログラミング言語でプログラムを書くこともできる。サン・マイクロシステムズのJavaのライセンスは、すべてのJava実行環境の実装は「互換性」を備えるべきであることを要求する。このことに関連して、サン・マイクロシステムズ社とマイクロソフト社との間で法的な争いが起こったことがあった。この法的な争いは、サンが、マイクロソフトのJava実行環境の実装について次のように主張したことによる。 サンは訴訟を起こして勝訴し、約2000万ドルの違約金の支払いを受けた。また裁判所は、マイクロソフトに対してサンのライセンス条件に従うことを命じた。この決定を受けて、マイクロソフトは自社のオペレーティングシステムであるWindowsにJava実行環境を同梱しない方針を採った。また近年のバージョンのWindowsでは自社のウェブブラウザである Internet Explorer でJavaをサポートしないようにした。その結果、Internet Explorer でJavaアプレットを動かすためには、別途にプラグインが必要となった。しかし、サンなどの企業は、近年のバージョンのWindowsのユーザが、無償でJava実行環境を利用できるようにした。そのため、ほとんどの Windows PC のユーザは、何ら問題なくウェブおよびデスクトップ上でJavaアプリケーションを実行できる。最初期のJava実行環境の実装では、Javaプログラムの実行速度が遅かったが、近年では大きく改善されて、高速に実行できるようになった。最初期のJava実行環境のJava仮想マシンの実装は、移植性を実現するためにインタプリタとして動作する仮想マシンを採用した。こうした初期のJava実行環境の実装では、Javaプログラムの実行速度が CC++ のプログラムと比べて遅かった。そのため、Javaプログラムの実行速度は遅いという評判が広まった。近年のJava実行環境の実装では、いくつかの技術を導入することにより、以前と比べて、Javaプログラムをかなり高速に実行できるようになった。Javaプログラムを高速に実行するために使われる技術を説明する。 Java仮想マシンにジャストインタイムコンパイルと動的再コンパイル、世代別ガベージコレクションの技術を導入することにより、Javaプログラムは、移植性を保ちつつ、ネイティブコードと同水準で高速に実行することができるようになった。Javaの移植性プラットフォーム非依存)がどの程度実現できているかについては、議論の対象となっている。技術的には移植性とは実現が難しい目標である。多くのプラットフォームにおいて同一に動作するJavaプログラムを作成することは、可能である。しかし実際には、Javaを利用できるプラットフォームによってはちょっとしたエラーが発生したり、微妙に異なる動作をする事例が多い。こうしたことから一部の人々は、サン・マイクロシステムズのJavaの売り文句である "Write once, run anywhere"(一度コードを書けば、どの環境でも動く)をもじって "Write once, debug everywhere"(一度コードを書けば、どの環境でもデバッグが必要)と皮肉をいわれることがある。しかし、Javaのプラットフォーム非依存は、サーバ側や組み込みシステムのアプリケーションに関しては、非常に成功している。サーバ側(Java EE)では、JavaのサーブレットWebサービスEJB(Enterprise JavaBeans)などの技術が広く使われている。組み込みシステムの分野においても、組み込みシステム向けのJava環境(Java ME)を使った OSGi を基にした開発が広く行われている。

戻る