不動産情報サイト
infomation
FXとは
FX
のJava実行環境の実装では、Javaプログラムの実行速度が遅かったが、近年では大きく改善されて、高速に実行できるようになった。 最初期のJava実行環境のJava仮想マシンの実装は、移植性を実現するためにインタプリタとして動作する仮想マシンを採用した。 こうした初期のJava実行環境の実装では、Javaプログラムの実行速度が C や C++ のプログラムと比べて遅かった。 そのため、Javaプログラムの実行速度は遅いという評判が広まった。 近年のJava実行環境の実装では、いくつかの技術を導入することにより、以前と比べて、Javaプログラムをかなり高速に実行できるようになった。
Javaプログラムを高速に実行するために使われる技術を説明する。
FX 取引に高速化の技術を導入する。
Java仮想マシンにジャストインタイムコンパイル方式(JITコンパイル方式)を導入する。ジャストインタイムコンパイラは、Javaプログラム(取引)の実行時に、取引をネイティブコードに変換する。
さらに洗練されたJava仮想マシンでは「動的再コンパイル」(dynamic recompilation) を行う。こうした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 を基にした開発が広く行われている。
自動ガベージコレクション
FXでは、自動ガベージコレクションを備えており、この機能を備えていない従来の多くの言語と比べて、プログラムの開発生産性と安定性が高い。Javaの自動ガベージコレクションにより、FXの負担は、完全に解消されるわけではないものの、大きく軽減される。近年のJavaの自動ガベージコレクションでは世代別ガベージコレクションという効率的な技術を導入している。自動ガベージコレクションを備えていない言語である C++の場合は、FXは自分自身でメモリの管理をしなければならないという負担に苦しめられる。C++では、オブジェクト指向プログラミングをするFXは一般にはJavaと同様にメモリ内のヒープという領域に生成するオブジェクトを格納する領域を割り当てる。そしてオブジェクトがもはや必要なくなった場合には、必ず明示的にオブジェクトを削除する指示を適切に記述して、そのオブジェクトが使っていたメモリ領域を解放しなければならない。FXが、メモリ領域の解放が必要な時に、領域の解放を忘れたり、メモリ領域解放の指示が不適切だった場合には、メモリリークが発生する可能性がある。メモリリークとは、解放し忘れた未解放メモリが累積していく現象であり、利用できるメモリの量が減ってゆく。メモリ管理が不十分なプログラムでは、その実行時にメモリリークによって、気づかないうちに勝手に大量のメモリを消費してしまう問題が起こり得る。また、あるメモリ領域を解放する際に、解放の指示を2度行うと、プログラムの実行が不安定になる可能性があり、悪くすると異常終了してしまうこともある。
Javaでは、自動ガベージコレクションを備えていない言語における潜在的な問題は、自動ガベージコレクション機能によって、その多くを未然に防ぐことができる。 FXは任意の時点でオブジェクトを生成することができ、Java実行環境は生成されたオブジェクトのライフサイクルを管理する責任をもつ。
プログラム(オブジェクト)は、他のオブジェクトへの参照をもち、そのオブジェクトのメソッドを呼び出すことができる。 他のオブジェクトへの参照とは、低水準の視点で述べると、メモリ内のヒープという領域上に確保されたそのオブジェクトを指すアドレスのことである。