少なくとも2つのCPU及び中間コード命令のコンパイル結果を記憶する記憶部を有する情報処理装置であって、一方のCPUは、中間コード命令で記述された所定のプログラムから、各前記中間コード命令の実行していく順番である実行ルートに沿って前記中間コード命令を順次読込み、前記記憶部に読み込んだ前記中間コード命令のコンパイル結果があるか否かを判定し、該中間コード命令のコンパイル結果が無ければ前記中間コード命令の解釈を行ない、該中間コード命令のコンパイル結果があれば該コンパイル結果を指定する中間コード解釈部と、前記中間コード解釈部から前記中間コード命令の解釈結果を受けた場合、解釈結果に基づき該中間コード命令を実行し、前記中間コード解釈部からコンパイル結果の指定を受けた場合、指定されたコンパイル結果であるネイティブコードを実行することで前記プログラムを実行するプログラム実行部とを備え、他方のCPUは、前記中間コード解釈部により解釈された前記中間コード命令をコンパイルしてネイティブコードを生成し、生成したネイティブコードを前記記憶部に格納するコンパイル実行部を備えたことを特徴とする情報処理装置。前記中間コード解釈部は、解釈を行う対象とする、前記プログラムの一部である一まとまりの作業手順を表す中間コード命令群を指定し、さらに、指定した前記中間コード命令群の中の分岐毎に前記メソッドを分割した分割メソッドの中から、解釈を行う対象とする前記分割命令群を特定し、前記コンパイル実行部は、前記中間コード解釈部により指定された前記中間コード命令群の中で特定された前記分割命令群をコンパイルすることを特徴とする請求項1に記載の情報処理装置。前記中間コード解釈部は、前記中間コード命令群の解釈を開始する毎に、前記コンパイル実行部に対して、解釈を開始した中間コード命令群のコンパイルを指示し、解釈を開始した中間コード命令群の中の分岐を検出すると、前記コンパイル実行部による解釈を開始した中間コード命令群のコンパイルが開始されているか否かを検出し、コンパイルが開始されていなければ、その検出した分岐においてメソッドの分割を行い解釈を行う対象とする前記分割命令群を特定し、前記コンパイル実行部は、前記中間コード解釈部から複数の前記中間コード命令群のコンパイルの指示を順次受け付け、指示を受けた順に前記中間コード命令群のコンパイルを開始し、コンパイルを開始した中間コード命令群に前記分割命令群が指定されていれば該分割命令群をコンパイルし、コンパイルを開始した中間コード命令群に前記分割命令群が指定されていなければコンパイルを開始した中間コード命令群を1つの前記分割命令群としてコンパイルすることを特徴とする請求項2に記載の情報処理装置。2つのCPUを備えた情報処理装置の制御方法であって、一方のCPUにより、中間コード命令で記述された所定のプログラムから、各前記中間コード命令の実行していく順番である実行ルートに沿って前記中間コード命令を順次読込み、中間コード命令のコンパイル結果を記憶する記憶部に読み込んだ前記中間コード命令のコンパイル結果があるか否かを判定し、該中間コード命令のコンパイル結果が無ければ、前記一方のCPUにより、前記中間コード命令の解釈を行ない、解釈結果に基づき該中間コード命令を実行するとともに、他方のCPUにより、解釈した前記中間コード命令をコンパイルしてネイティブコードを生成し、生成したネイティブコードを記憶部に格納し該中間コード命令のコンパイル結果があれば、前記一方のCPUにより該コンパイル結果を指定し、指定したコンパイル結果であるネイティブコードを実行する処理をコンピュータに実行させることを特徴とする情報処理装置制御方法。2つのCPUを備えたコンピュータに処理を行わせる中間コード命令実行プログラムであって、一方のCPUに対して、中間コード命令で記述された所定のプログラムから、各前記中間コード命令の実行していく順番である実行ルートに沿って前記中間コード命令を順次読込ませ、中間コード命令のコンパイル結果を記憶する記憶部に読み込んだ前記中間コード命令のコンパイル結果があるか否かを判定させ、該中間コード命令のコンパイル結果が無ければ、前記一方のCPUに対して、前記中間コード命令の解釈を行わせ、解釈結果に基づき該中間コード命令を実行させるとともに、他方のCPUに対して、解釈した前記中間コード命令をコンパイルさせてネイティブコードを生成させ、生成したネイティブコードを記憶部に格納させ該中間コード命令のコンパイル結果があれば、前記一方のCPUに対して、該コンパイル結果を指定させ、指定したコンパイル結果であるネイティブコードを実行させる処理をコンピュータに実行させることを特徴とする中間コード命令実行プログラム。しかしながら、従来のインタプリタ方式では、実行時にJavaバイトコードの解釈を行ないながらプログラムを実行するため、個々の処理の実行が遅くなり、プログラムの実行における全体的な時間が長くなってしまっていた。そのため、Javaプログラムの実行を効率的に行うことが困難であった。また、従来のアクセラレータ方式では、ハードウェアのJavaアクセラレータ回路を実装しなければならず、コストがかかってしまう。また、ハードウェア回路にて命令を実行する場合、冗長な処理が存在しても最適化できず、処理の実行が遅くなり、プログラムの実行における全体的な時間が長くなってしまっていた。そのため、Javaプログラムの実行を効率的に行うことが困難であった。また、JITコンパイル方式では、Javaバイトコードをコンパイルするための時間が必要となる。Javaプログラムは、Javaバイトコードのクラスファイル単位又はクラスファイルに含まれる処理単位メソッドと呼ばれるでコンパイルを行い、当該クラスファイル又はメソッドのコンパイルが完了した時点で、その処理を呼び出して実行する。そのため、長大なクラスファイル又はメソッドの場合、コンパイルに時間がかかってしまい、処理の開始が遅延するため、プログラムの実行における全体的な時間が長くなってしまう。また、長大なクラスファイル又はメソッドでは、実際に実行させる処理はそのクラスファイル又はメソッドの一部である場合も多く、その場合、無駄なコンパイル処理に時間がかかってしまうという問題があった。そのため、Javaプログラムの実行及びコンパイルを効率的に行うことが困難であった。さらに、第1の従来技術では、複数のCPUを用いた場合コンパイル要求のキューの入れ替えなどで不具合が発生するため、マルチコアシステムに適応することが困難であった。そのため、コンパイルとJavaバイトコードの実行とを並列で行うことができず、コンパイルの時間により、プログラムの実行における全体的な時間が長くなってしまっていた。そのため、Javaプログラムの実行及びコンパイルを効率的に行うことが困難であった。また、第2の従来技術では、メソッドのようなブロック単位でのコンパイルに適用しようとしても、コンパイルのタイミングやコンパイル結果の受け渡しなどの動作が不明であり、ブロック単位でのコンパイルに適用することは困難である。クラス単位でのコンパイルでは、無駄なコンパイルなどが発生するおそれがあり、やはり、プログラムの実行における全体的な時間が長くなってしまっていた。そのため、Javaプログラムの実行及びコンパイルを効率的に行うことが困難であった。開示の技術は、上記に鑑みてなされたものであって、Javaプログラムの実行及びコンパイルを効率的に行うことができる情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラムを提供することを目的とする。本願の開示する情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラムは、一つの態様において、少なくとも2つのCPU及び中間コード命令のコンパイル結果を記憶する記憶部を有する情報処理装置であって、一方のCPUは、中間コード命令で記述された所定のプログラムから、各前記中間コード命令の実行していく順番である実行ルートに沿って前記中間コード命令を順次読込み、前記記憶部に読み込んだ前記中間コード命令のコンパイル結果があるか否かを判定し、該中間コード命令のコンパイル結果が無ければ前記中間コード命令の解釈を行ない、該中間コード命令のコンパイル結果があれば該コンパイル結果を指定する中間コード解釈部と、前記中間コード解釈部から前記中間コード命令の解釈結果を受けた場合、解釈結果に基づき該中間コード命令を実行し、前記中間コード解釈部からコンパイル結果の指定を受けた場合、指定されたコンパイル結果であるネイティブコードを実行することで前記プログラムを実行するプログラム実行部とを備える。また、他方のCPUは、前記中間コード解釈部により解釈された前記中間コード命令をコンパイルしてネイティブコードを生成し、生成したネイティブコードを前記記憶部に格納するコンパイル実行部を備える。本願の開示する情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラムの一つの態様によれば、Javaプログラムの実行及びコンパイルを効率的に行うことができるという効果を奏する。以下に、本願の開示する情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラムが限定されるものではない。特に、以下の説明ではJavaのプログラムを例に説明するが、中間コードを用いて実行させるプログラムであれば他のプログラムでもよい。図1は、実施例に係る情報処理装置のブロック図である。図1に示すように、本実施例に係る情報処理装置1は、Javaワーク領域部11、ランタイムライブラリ記憶部12、コンパイルワーク領域部13、Javaバイトコード命令記憶部14、コンパイル結果格納部15、関数アドレステーブル格納部16、バイトコード解釈部17、プログラム実行部18及びコンパイル実行部19を有している。そして、図1において点線で囲まれたブロックはCPU100及びCPU200によって機能が実現されるブロックを表している。そして、CPU100によって、バイトコード解釈部17及びプログラム実行部18の機能が実現される。また、CPU200によって、コンパイル実行部19の機能が実現される。すなわち、バイトコード解釈部17及びプログラム実行部18における処理とコンパイル実行部19における処理とは異なるCPUによって実行される。図1において点線で囲まれたブロックの範囲外に図示された構成は、CPU100又はCPU200の内部に設けられた記憶手段により実現されてもよいし、CPU100及びCPU200の外部に設けられた記憶手段により実現されてもよい。Javaワーク領域部11は、Javaプログラムの実行において、計算などの処理が行われている間に使用される記憶領域である。例えば、計算途中のデータは、Javaワーク領域部11に記憶され、その後、再度計算に用いられる。そして、Javaワーク領域部11に記憶されているデータが再度計算に用いられる場合、Javaワーク領域部11から当該データが読み出され、Javaワーク領域部11に格納されていたデータは削除される。このように、Javaワーク領域部11には、Javaプログラムを実行している間に、データの読書きの場所として一時的に用いられる。ランタイムライブラリ記憶部12は、Javaプログラムを実行するための予め定義された関数群などを記憶している。コンパイルワーク領域部13は、コンパイル処理が行われている間に使用される記憶領域である。例えば、コンパイル処理途中のデータは、コンパイルワーク領域部13に記憶され、その後、再度コンパイル処理に用いられる。そして、コンパイルワーク領域部13にあるデータが再度コンパイルに用いられる場合、コンパイルワーク領域部13から当該データが読み出され、コンパイルワーク領域部13に格納されていたデータは削除される。このように、コンパイルワーク領域部13は、コンパイル処理を実行している間に、データの読書きの場所として一時的に用いられる。Javaバイトコード命令記憶部14は、Javaバイトコードで記述されたJavaプログラムを記憶している。このJavaバイトコードで記述されたJavaプログラムクラスファイルは、Javaプログラミング言語で記述されているソースコードをコンパイルすることによって、中間コードであるJavaバイトコードに変換することで生成される。以下では、Javaバイトコードで記述されたJavaプログラムに含まれる命令を、Javaバイトコード命令という。Javaバイトコード命令は、一般的には、CPUによって直接実行可能な命令セットではなく、例えば、Java仮想マシン仕様により規定される仮想的な命令セットである。そのため、実行時の動作環境に応じてCPUで実行可能な命令セットに解釈された後に、CPUによって実行される。コンパイル結果格納部15は、後述するコンパイル実行部19によって行なわれたJavaバイトコード命令のコンパイル結果を格納する。関数アドレステーブル格納部16は、コンパイルに用いる関数のアドレスが記載された関数アドレステーブルを記憶している。また、関数アドレステーブル格納部16は、後述するバイトコード解釈部17が生成するメソッドアドレステーブルを記憶している。メソッドアドレステーブルについては後で詳細に説明する。バイトコード解釈部17は、JavaVMにより実現される。バイトコード解釈部17は、Javaプログラムの実行開始が指示されると、Javaバイトコード命令記憶部14からJavaバイトコードで記述されたJavaプログラムを順次読み込む。そして、バイトコード解釈部17は、読み込んだJavaプログラムクラスファイルに記載されているJavaバイトコード命令を順次解釈していく。バイトコード解釈部17が読み込むJavaプログラムには、ランタイムライブラリファイルと呼ばれる処理の集まりを含む。クラスファイルには、メソッドと呼ばれる手続き処理が規定されている。から構成されている。このメソッドが中間コード命令群の一例にあたる。そして、メソッドは、処理の開始から終了までが記載されている。メソッドにおける処理の終了は、return命令例えば、0xb1などのバイトコードなどで指定される。バイトコード解釈部17は、Javaバイトコード命令を順次解釈していく間に、メソッドの呼出し命令が出現すると、呼出し先のメソッドの開始アドレスを取得する。呼び出し先のメソッド開始アドレスとは、そのメソッドの開始点となる命令が格納されたメモリアドレスを指す。そして、バイトコード解釈部17は、取得したメソッドの開始アドレスをエントリーポイントとする。バイトコード解釈部17は、関数アドレステーブル格納部16に格納されているメソッドアドレステーブルに見つけたメソッドが登録されているか否かを検索する。メソッドがメソッドアドレステーブルに登録されていない場合、バイトコード解釈部17は、新たにメソッドを表すエレメントの領域をメソッドアドレステーブルに確保する。その後、バイトコード解釈部17は、メソッドアドレステーブルに確保されたエレメントの領域にメソッド名やエントリーポイントテーブルなどの各種情報を登録していく。ここでバイトコード解釈部17によるメソッドアドレステーブルへの各種情報の登録の説明の前に、メソッドアドレステーブルについて説明する。図2は、メソッドアドレステーブルを説明するための図である。図2に示すテーブル300がメソッドアドレステーブルの大枠を示している。また、テーブル310は、メソッドアドレステーブルの各エレメントのデータ構造を表している。さらに、テーブル320は、エレメントに記載されたエントリーポイントテーブル315のデータ構造を表している。メソッドアドレステーブルには、実行するJavaプログラムに含まれるメソッドに対応させて連番で各エレメントの領域が確保されている。バイトコード解釈部17は、Javaプログラムの実行を開始して最初に見つけたメソッドに対して0番をふり、メソッドアドレステーブルにエレメント0の領域301を確保する。また、バイトコード解釈部17は、メソッドアドレステーブルに既にエレメントの領域が確保されている場合、メソッドに対して既に使用されている最大の番号の次の順番の番号を割り当て、その番号を付加したエレメントの領域を確保する。例えば、n番目に見つけたメソッドであれば、そのメソッドに対してエレメントnの領域302を確保する。このように、バイトコード解釈部17は、メソッドを見つけるたびに、見つけたメソッドに対して順番に番号を割り当て、その番号を付加したエレメントの領域をメソッドアドレステーブルに確保していく。さらに、エレメントの領域には、テーブル310に示すようにそのエレメントに対応するメソッドのメソッド名311、開始アドレス312、メソッドサイズ313、実行フラグ314及びエントリーポイントテーブル315が登録される。図2では、一例としてエレメント0を例に記載しているが、バイトコード解釈部17は、他のエレメントにおいても同様のデータ構造を持つようにメソッドアドレステーブルを作成する。以下では、メソッド名311、開始アドレス312、メソッドサイズ313、実行フラグ314及びエントリーポイントテーブル315を任意のメソッド対応するデータとして説明する。メソッド名311は、エレメントに対応するメソッドの名前である。バイトコード解釈部17は、エレメントの領域を確保した時点で、そのエレメントに対応するメソッドの名前をメソッド名311に登録する。また、開始アドレス312は、エレメントに対応するメソッドの開始アドレスである。後述する、コンパイル実行部19は、メソッドのコンパイルが終了すると、メソッドの開始アドレスを開始アドレス312に登録する。メソッドサイズ313は、エレメントに対応するメソッドのサイズである。バイトコード解釈部17は、エレメントの領域を確保した時点で、メソッドの先頭からreturn命令までのサイズを確認し、確認したサイズをそのエレメントに対応するメソッドのサイズとしてメソッドサイズ313に登録する。実行フラグ314は、例えば図3に示すようなフラグ341~344を有している。図3は、実行フラグを説明するための図である。フラグ341~344は、いずれも記載された値が1の場合がONであり、記載された値が0であればOFFである。フラグ341は、最適化が完了しているか否かを表すフラグである。フラグ341がONの場合には、そのメソッドに対して最適化が完了していることを表している。ここで、最適化とは、例えば、連続して呼び出される処理のコンパイル結果を統合することなどである。フラグ342は、複数個所からの呼び出しがあり最適化が必要か否かを示すフラグである。フラグ342がONの場合には、そのメソッドに対して複数個所からの呼び出しがあることを表している。フラグ343は、メソッド呼出しアドレスがメソッドアドレステーブルに設定済みか否かを表すフラグである。フラグ343がONの場合には、Javaプログラムの中でそのメソッドをコンパイル結果である実行コードの呼出しアドレスが設定済みであることを表している。フラグ344は、コンパイル済みか否かを表している。フラグ344がONの場合には、そのメソッドが既にコンパイルされていることを表している。例えば、図3に示す実行フラグ314の状態では、フラグ343及びフラグ344がONであるので、コンパイル済みで且つメソッド呼出しアドレスが設定済みであることを示している。フラグ341~344は、後述するコンパイル実行部19により設定される。フラグ341~344のコンパイル実行部19による設定の詳細については後で説明する。次に、エントリーポイントテーブル315について説明する。エントリーポイントテーブル315は、テーブル320に示すように、そのメソッドについて、いくつのエントリーがあるかを示すエントリーカウンタ321を有する。エントリーとは、コンパイル実行部19によってコンパイル処理が行われる単位である。コンパイル単位は、後述するようにバイトコード解釈部17によって指定される。このエントリーが分割命令群の一例にあたる。ここで、コンパイル単位について説明する。例えば、あるメソッドについて、コンパイル実行部19がそのメソッドの開始点からreturn命令までをまとめてコンパイルした場合、そのメソッドについてのエントリーの数は1となる。また、後述するように、メソッドの中で他のメソッドを呼び出すなどの分岐がバイトコード解釈部17によって指定されている場合、メソッドの開始からその分岐までが一つのコンパイル単位であり、一つのエントリーとなる。例えば、0xB6invokevirtualなどの呼び出し命令や、0xA7goto命令などによる分岐までが一つのコンパイル単位となり得る。さらに、他のメソッドの呼出し後、呼出しもとのメソッドに戻ってきた後に、さらに分岐がバイトコード解釈部17によって指定されている場合、戻ってきた位置から次の分岐までが一つのコンパイル単位であり、一つのエントリーとなる。また、戻ってきた後に、分岐がなくreturn命令まで進んだ場合には、戻ってきた位置からreturn命令までが一つのコンパイル単位であり、一つのエントリーとなる。さらに、エントリーポイントテーブル315における各エントリーのデータ構造について説明する。図2では、エントリーとして、最初0番目のエントリー330及びn番目のエントリー331を例に記載しているが、0~nまでの全てのエントリーが、エントリーポイントテーブル315に記載されている。エントリーポイント322は、エントリーの開始のJavaバイトコードにおけるアドレスを表している。コンパイル状態フラグ323は、そのエントリーのコンパイル状態を示すフラグである。図4は、コンパイル状態フラグを説明するための図である。本実施例では、コンパイル状態フラグ323には、フラグ351~353までのフラグが設けられている。フラグ351は、最適化済みか否かを表すフラグである。フラグ352は、コンパイル中か否かを表すフラグである。フラグ353は、コンパイル済みか否かを表すフラグである。フラグ351~353は、コンパイル実行部19によって設定される。コンパイル実行部19によるフラグ351~353の設定については後で説明する。リーブポイント324は、エントリーの終了位置である分岐のJavaバイトコードにおけるアドレスを表している。例えば、0xB1return命令や、0xB6invokevirtualなどの呼出し命令や、0xA7goto命令などの処理の流れが変わる命令コードが出現する位置アドレスをエントリーの終了位置とすればよい。エントリー生成アドレス325は、コンパイル結果の開始アドレスを示している。出口アドレス326は、コンパイル結果である実行コードの戻り先アドレスを示している。出口アドレス236は、次の処理されるバイトコードの所在を示し、複数回に亘って処理が呼出される場合に、後述するコンパイル実行部19による処理の最適化における指標となる。次に、バイトコード解釈部17によるエントリーポイントテーブル315の生成について説明する。バイトコード解釈部17は、Javaバイトコード命令で記載されたJavaプログラムを読み込み、メソッドの呼出し命令を見つけると、まずメソッドの開始アドレスをそのメソッドの最初のエントリーポイントとする。そして、バイトコード解釈部17は、そのエントリーポイントが既にエントリーポイントテーブル315に登録されているか否かを判定する。エントリーポイントが登録されていない場合エントリーポイントがエントリーポイントテーブル315に登録されていなければ、バイトコード解釈部17は、エントリーポイントテーブル315の最初のエントリーとしてエントリーポイント322にメソッドの開始アドレスを登録する。そして、バイトコード解釈部17は、コンパイルの実行をコンパイル実行部19に指示する。その後、バイトコード解釈部17は、そのメソッドの解釈を進める。そして、バイトコード解釈部17は、解釈結果をプログラム実行部18へ出力する。エントリーポイント作成後、バイトコード解釈部17は、メソッドの解釈を進めて、メソッドの分岐を検出した場合、そのエントリーのコンパイル状態フラグ323を確認し、そのエントリーがコンパイル中か否かを判定する。コンパイル中の場合、バイトコード解釈部17は、そのままメソッドの解釈を進める。その後、分岐を検出する都度、バイトコード解釈部17は、コンパイル中であることを確認し、Javaバイトコードの解釈を進める。そして、バイトコード解釈部17は、メソッドのreturn命令を検出すると、return命令のアドレスをリーブポイント324としてエントリーポイントテーブル315に記載する。そして、return命令の検出によりそのメソッドの解釈が終了すると、バイトコード解釈部17は、次のメソッドを検出後、検出したメソッドに対して上述したメソッドの開始を見つけた場合の処理を開始する。これに対して、分岐を検出したときにそのエントリーがコンパイル中で無い場合、バイトコード解釈部17は、分岐命令のアドレスをリーブポイント324としてエントリーポイントテーブル315に記載する。ここで、リーブポイントで指定されている戻り先アドレスは、分岐における呼出し先のメソッドである。そこで、バイトコード解釈部17は、上述したメソッドの開始を見つけた場合の処理を開始する。さらに、分岐後、return命令などにより分岐前のメソッドに戻ってきた場合、バイトコード解釈部17は、分岐命令の次に位置する命令コードのアドレスをそのメソッドにおける次のエントリーポイントとする。そして、バイトコード解釈部17は、エントリーポイントテーブル315の次のエントリーとしてエントリーポイント322にメソッドの開始アドレスを登録する。そして、バイトコード解釈部17は、そのエントリーポイントから始まるエントリーのコンパイルの実行をコンパイル実行部19に指示する。その後、バイトコード解釈部17は、そのメソッドの解釈を進める。そして、バイトコード解釈部17は、解釈結果をプログラム実行部18へ出力する。その後、バイトコード解釈部17は、上述した分岐の処理を繰り返す。そして、バイトコード解釈部17は、メソッドのreturn命令を検出すると、return命令のアドレスをリーブポイント324としてエントリーポイントテーブル315に記載する。そして、return命令の検出によりそのメソッドの解釈が終了すると、バイトコード解釈部17は、次のメソッドを検出後、検出したメソッドに対して上述したメソッドの開始を見つけた場合の処理を開始する。エントリーポイントが登録されている場合これに対して、エントリーポイントテーブル315に既に登録されている場合、コンパイル状態フラグ323を確認し、そのエントリーがコンパイル済みであるか否かを判定する。コンパイル済みであれば、バイトコード解釈部17は、エントリー生成アドレス325を確認し、エントリー生成アドレス325に記載されたアドレスにあるコンパイル済みの実行コードを実行する。その後、バイトコード解釈部17は、実行コードのリーブポイントに指定されたJavaバイトコードの戻り先アドレスから解釈を開始する。ここでリーブポイントは、分岐かreturn命令のいずれかにあたる。例えば、0xB1return命令や、0xB6invokevirtualなどの呼出し命令や、0xA7goto命令などの処理の流れが変わる命令コードが出現する位置を、リーブポイントとすればよい。その他にも、Java仮想マシン仕様httpjavasuncomdocsbooksjvmssecondeditionhtmlMnemonicsdochtmlに規定されている命令コードのうち、ifeqifnullifltifleifneifnonnullifgtifgeificmpeqificmpneificmpltificmpgtificmpleificmpgeifacmpeqifacmpnegotogotowjsrjsrwretlookupswitchtableswitchinvokevirtualinvokespecialinvokestaticinvokeinterfacereturnireturnlreturnfreturndreturnareturnなどの命令コードをリーブポイントの対象としてもよい。例えば、リーブポイントで指定されている戻り先アドレスは、分岐における呼出し先のメソッドか、メソッドの終了位置である。戻り先アドレスが呼出し先のメソッドの場合、バイトコード解釈部17は、上述したメソッドの開始を見つけた場合の処理を開始する。戻り先アドレスがメソッドの終了位置の場合、バイトコード解釈部17は、そこからJavaバイトコードの解釈を進め次のメソッドを見つけると、上述したメソッドの開始を見つけた場合の処理を開始する。また、バイトコード解釈部17は、一つのエントリーを作成する毎に、エントリーカウンタ321をインクリメントしていく。バイトコード解釈部17は、プログラムに記載されたJavaバイトコード命令を実行する処理を行ないながら、各メソッドに対して以上に説明したエントリーポイントの作成処理を繰り返す。これにより、バイトコード解釈部17は、プログラムの実行の流れに合わせて、メソッドの中で使用されるエントリーを抽出してコンパイル対象として指定することができる。また、バイトコード解釈部17は、コンパイルが終了したエントリーを再度呼び出した場合、そのエントリーに該当するJavaバイトコード命令にそのエントリーのコンパイル結果である実行コードの呼出しアドレスを埋め込む。そして、バイトコード解釈部17は、該当する実行コードのアドレスをプログラム実行部18に通知する。また、バイトコード解釈部17は、実行コードの呼出しアドレスの埋め込みをコンパイル実行部19へ通知する。また、バイトコード解釈部17は、Javaバイトコードの中にメソッドに対応した実行コードの呼出しアドレスが設定されている場合には、呼び出されているアドレスをプログラム実行部18に通知する。また、バイトコード解釈部17は、最適化を行う閾値である、メソッドの呼び出し回数の閾値を記憶している。そして、バイトコード解釈部17は、メソッドが呼び出された回数をカウントしていき、そのカウント数が閾値以上となったかを確認する。メソッドの呼び出された回数が閾値以上となった場合、バイトコード解釈部17は、そのメソッドの最適化処理の実行をコンパイル実行部19に通知する。バイトコード解釈部17は、Javaバイトコード命令の解釈及びメソッドアドレステーブルの作成などにおけるデータの読書きをJavaワーク領域部11に対して行いながら、以上の処理を行う。コンパイル実行部19は、エントリーのコンパイルの指示をバイトコード解釈部17から受ける。この時、コンパイル実行部19は、コンパイル対象のエントリーのメソッド名及びエントリーポイントの入力もバイトコード解釈部17から受ける。コンパイル実行部19は、コンパイルの指示を受けた順にエントリーのコンパイルを行なっていく。ここで、本実施例では、コンパイルは1つのCPUであるCPU200が行うため、バイトコード解釈部17は、1つのエントリーのコンパイルを完了しなければ、次のエントリーのコンパイルを行なえない。すなわち、コンパイル実行部19は、バイトコード解釈部17からのコンパイルの指示を受けたエントリーのコンパイルを直ぐに始められるとは限らない。そのため、上述したように、バイトコード解釈部17は、エントリーポイントを登録し直ぐにエントリーのコンパイルの指示をコンパイル実行部19に通知しても、その後で、そのエントリーの分岐などによるリーブポイントの指定が行える。コンパイル実行部19は、コンパイルを行う場合、必要な関数を関数アドレステーブル格納部16から取得する。また、コンパイル実行部19は、コンパイル実行の間、コンパイルワーク領域部13に対してコンパイル処理におけるデータの読書きを行う。コンパイル実行部19は、エントリーのコンパイルを開始するときに、コンパイルの指示を受けたエントリーのメソッド名及びエントリーポイントを用いてメソッドアドレステーブルを検索し、指定されたエントリーを特定する。その後、コンパイル実行部19は、メソッドアドレステーブルに指定されたエントリーのリーブポイントが登録されているか否かを判定する。リーブポイントが登録されていない場合は、コンパイル実行部19は、エントリーポイントからそのエントリーを含むメソッドのreturn命令までをまとめてコンパイルする。リーブポイントが登録されている場合は、コンパイル実行部19は、エントリーポイントからそのエントリーのリーブポイントまでをまとめてコンパイルする。すなわち、リーブポイントの指定が無い場合は、コンパイル実行部19は、そのメソッドのエントリーポイント以下の部分をまとめてコンパイルしてしまうため、プログラムの処理に使用しない部分までコンパイルしてしまうことも考えられる。これに対して、リーブポイントが設定されている場合、プログラムの実行に沿ったエントリーポイントからリーブポイントまでのコンパイルが行えるので、無駄なコンパイルを削減することができる。そして、コンパイル実行部19は、指定されたエントリーのコンパイルを開始すると、エントリーポイントテーブル315に記載されたそのエントリーのコンパイル状態フラグ323図2参照のコンパイル中のフラグ352図4参照をONにする。また、コンパイル実行部19は、指定されたエントリーのコンパイルが終了すると、エントリーポイントテーブル315に記載されたそのエントリーのコンパイル状態フラグ323図2参照のコンパイル済みのフラグ353図4参照をONにする。この時、コンパイル実行部19は、コンパイル中のフラグ352をOFFにする。さらに、コンパイル実行部19は、エントリーのコンパイル結果である実行コードをコンパイル結果格納部15に格納させる。そして、コンパイル実行部19は、エントリーポイントテーブル315のエントリー生成アドレス325にそのエントリーのコンパイル結果である実行コードの開始アドレスを登録する。また、コンパイル実行部19は、エントリーポイントテーブル315の出口アドレス326にそのエントリーのコンパイル結果である実行コードの戻り先アドレスを登録する。さらに、コンパイル実行部19は、メソッドのreturn命令までのコンパイルを終了すると、メソッドアドレステーブルにおけるそのメソッドの開始アドレス312図2参照に、そのメソッドの最初のエントリーの実行コードの開始アドレスを登録する。さらに、コンパイル実行部19は、メソッドアドレステーブルにおけるそのメソッドの実行フラグ314図2参照のフラグ344図3参照をONにする。さらに、コンパイル実行部19は、2回以上の呼び出しがあったメソッドに関しては、実行フラグ314の最適化が必要であることを示すフラグ342をONにする。また、コンパイル実行部19は、実行コードの呼出しアドレスの埋め込みの通知をバイトコード解釈部17から受けると、その実行コードが表すメソッドにおける実行フラグ314のフラグ343をONにする。また、コンパイル実行部19は、メソッドの最適化処理の実行の通知をバイトコード解釈部17から受ける。そして、コンパイル実行部19は、指定されたメソッドのエントリーポイントテーブル315に記載された各エントリーのコンパイル結果をコンパイル結果格納部15から取得する。そして、コンパイル実行部19は、取得した実行コードに対して最適化処理を行う。例えば、コンパイル実行部19は、取得した実行コードを結合することで最適化処理を行う。ここで、コンパイル実行部19は、プログラムの実行ルートを追うために、各エントリーの出口アドレス326を確認し、次のエントリーがどこにあるかを特定して行く。ここで、実行ルートとは、命令内容に従って実際に中間コード命令を実行していった場合の、実行した中間コード命令の順番である。これにより、コンパイル実行部19は、実行コードを全て確認しなくても、プログラムの実行ルートが簡単に把握でき、結合するエントリーの組合せを容易に取得することができる。そして、最適化が終了すると、コンパイル実行部19は、エントリーポイントテーブル315の最適化を行ったエントリーのコンパイル状態フラグ323図2参照のフラグ351図4参照をONにする。さらに、バイトコード解釈部17は、最適化処理を行なったメソッドの実行フラグ314のフラグ341図3参照をONにする。ここで、本実施例では、最適化処理としてエントリーを結合する処理を例に説明したが、この最適化処理には、既存のコンパイラ技術で実現されている最適化処理を用いてもよい。プログラム実行部18は、Javaバイトコード命令や実行コードに記載された内容に沿って、処理を実行していく機能を有する。プログラム実行部18は、バイトコード解釈部17によるJavaバイトコード命令の解釈結果の入力を受ける。これは、バイトコード解釈部17が解釈するJavaバイトコード命令が未だコンパイルされていない場合である。そして、プログラム実行部18は、バイトコード解釈部17が行なったJavaバイトコード命令の解釈に基づいて処理を実行する。また、プログラム実行部18は、実行コードの実行命令をバイトコード解釈部17から受ける。これは、バイトコード解釈部17が解釈しようとするJavaバイトコード命令が既にコンパイルされている場合である。これには、解釈対象のメソッド全てのコンパイルが終了している場合及び解釈対象のメソッドの中で、さらに解釈対象となっているエントリーのコンパイルが終了している場合がある。解釈対象のメソッド全てのコンパイルが終了している場合とは、実行フラグ314のフラグ344がONの場合又は実行フラグ314のフラグ343がON、すなわちJavaバイトコード命令に実行コードの呼出しアドレスが埋め込まれている場合である。また、解釈対象となっているエントリーのコンパイルが終了している場合とは、エントリーポイントテーブル315のそのエントリーのコンパイル状態フラグ323のフラグ353がONになっている場合である。そして、プログラム実行部18は、実行命令を受けた実行コードをコンパイル結果格納部15から読込む。そして、プログラム実行部18は、読み込んだ実行コードに基づいて処理を実行する。そして、プログラム実行部18は、Javaバイトコードの解釈基づく処理及び実行コードに基づく処理を実行するにあたり、Javaワーク領域部11を用いて処理の実行におけるデータの読書きを行う。また、プログラム実行部18は、ランタイムライブラリから処理に用いる関数を読込み使用する。次に、図5を参照して、本実施例に係る情報処理装置におけるJavaプログラム実行のメインの処理について説明する。図5は、メイン処理のフローチャートである。CPU100は、Javaプログラムの実行開始命令を受けて、JavaVMの起動などのJava実行開始処理を行うステップS101。JavaVMが起動することで、バイトコード解釈部17が起動する。バイトコード解釈部17は、Javaバイトコード命令記憶部14からJavaバイトコード命令を読み出すステップS102。バイトコード解釈部17は、読み出したバイトコード命令がメソッドの呼出しであるか否かを判定するステップS103。メソッドの呼び出しである場合ステップS103:肯定、バイトコード解釈部17は、メソッドアドレステーブルに対象メソッドが未登録か否かを判定するステップS104。ここで対象メソッドとは、コンパイルが必要か否かの判定を行う対象のメソッドのことを言う。そして、対象メソッドが未登録の場合ステップS104:肯定、バイトコード解釈部17は、対象メソッドの開始アドレスを対象メソッドの最初のエントリーのエントリーポイントとして登録するステップS105。これに対して、対象メソッドが登録済みの場合ステップS104:否定、バイトコード解釈部17は、エントリーポイントテーブルに対象エントリーが未登録か否かを判定するステップS106。ここで対象エントリーとは、コンパイルが必要か否かの判定を行う対象のエントリーのことを言う。そして、対象エントリーが未登録の場合ステップS106:肯定、バイトコード解釈部17は、対象エントリーの開始アドレスをエントリーポイントとして登録するステップS107。そして、バイトコード解釈部17は、エントリーポイントとされたアドレスをコンパイル対象として指定して、コンパイル実行部19にコンパイルの実行を指示するステップS108。これに対して、対象エントリーが登録済みの場合ステップS106:否定、バイトコード解釈部17は、メソッドアドレステーブルの実行フラグを参照して、対象エントリーがコンパイル済みか否かを判定するステップS109。対象エントリーがコンパイル済みの場合ステップS109:肯定、バイトコード解釈部17は、対象メソッドの呼出し回数が閾値を超えているか否かにより、最適化を行うか否かを判定するステップS110。最適化を行う場合ステップS110:肯定、バイトコード解釈部17は、メソッドアドレステーブルの実行フラグを参照して、対象メソッドが最適済みか否かを判定するステップS111。最適化していない場合ステップS111:否定、バイトコード解釈部17は、そのメソッドの最初のエントリーのエントリーポイントを指定して、最適化の実行をコンパイル実行部19に指示するステップS112。これに対して、最適化を行わない場合ステップS110:否定及び最適化済みの場合ステップS111:肯定、バイトコード解釈部17は、対象メソッドの実行コードを実行するようプログラム実行部18に指示する。プログラム実行部18は、指定された実行コードを実行するステップS113。次に、バイトコード解釈部17は、実行コードの最後がreturn命令か否かを判定するステップS114。return命令の場合ステップS114:肯定、バイトコード解釈部17は、ステップS104に戻る。これに対して、return命令で無い場合ステップS114:否定、バイトコード解釈部17は、実行した実行コードで表されるエントリーのJavaバイトコードにおける次の命令を対象エントリーとしてステップS102に戻る。一方、メソッドの呼び出しでない場合ステップS103:否定、ステップS108を処理した場合及び対象エントリーがコンパイル完了ではない場合ステップS109:否定、バイトコード解釈部17は、Javaバイトコード命令を解釈する。そして、プログラム実行部18は、解釈されたJavaバイトコード命令を実行するステップS115。その後、バイトコード解釈部17は、分岐命令を検出したか否かを判定するステップS116。分岐命令を検出した場合ステップS116:肯定、バイトコード解釈部17は、分岐命令を含むエントリーがコンパイル中であるか否かを判定するステップS117。エントリーがコンパイル中である場合ステップS117:肯定、バイトコード解釈部17は、ステップS115に戻る。これに対して、エントリーがコンパイル中でない場合ステップS117:否定、バイトコード解釈部17は、分岐命令のアドレスをリーブポイントとしてエントリーポイントテーブルに登録するステップS118。そして、バイトコード解釈部17は、分岐における呼出し先のメソッドを対象メソッドとし、呼出し先のメソッドの最初のエントリーを対象エントリーとしてステップS104に戻る。これに対して、分岐命令を検出しない場合ステップS116:否定、バイトコード解釈部17は、解釈しているメソッドの終了時点で、そのメソッドが他のメソッドの分岐により呼び出されたメソッドであり、分岐前のメソッドに戻るか否かを判定するステップS119。分岐前のメソッドに戻る場合ステップS119:肯定、分岐前のメソッドを対象メソッドとし、分岐前のメソッドの戻り先の命令以下を対象エントリーとし、ステップS104に戻る。これに対して、分岐前のメソッドに戻らない場合ステップS119:否定、バイトコード解釈部17は、プログラム終了か否かを判定するステップS120。プログラムが終了しない場合ステップS120:否定、バイトコード解釈部17は、ステップS102へ戻る。これに対して、プログラムが終了する場合ステップS120:肯定、CPU100は、プログラムの実行処理を終了するステップS121。次に、図6を参照して、本実施例に係る情報処理装置のコンパイル処理について説明する。図6は、コンパイル処理のフローチャートである。コンパイル実行部19は、エントリーのコンパイル実行の指示をバイトコード解釈部17から受ける。そして、コンパイル実行部19は、エントリーのコンパイル状態フラグのコンパイル中のフラグをONに設定するステップS201。コンパイル実行部19は、1つのJavaバイトコード命令のコンパイルを行うステップS202。次に、コンパイル実行部19は、次のJavaバイトコード命令がreturn命令か否かを判定するステップS203。return命令の場合ステップS203:肯定、コンパイル実行部19は、ステップS209へ進む。これに対して、return命令でない場合ステップS203:否定、コンパイル実行部19は、次のJavaバイトコード命令がリーブポイントか否かを判定するステップS204。リーブポイントでない場合ステップS204:否定、コンパイル実行部19は、ステップS202へ戻る。これに対して、リーブポイントの場合ステップS204:肯定、コンパイル実行部19は、リーブポイントが示すエントリーポイントがメソッドアドレステーブルにあるか否かを判定するステップS205。エントリーポイントがある場合ステップS205:肯定、コンパイル実行部19は、リーブポイントが示すエントリーポイントを開始アドレスとする次のエントリーのコンパイル状態フラグのコンパイル中のフラグをONにするステップS206。そして、コンパイル実行部19は、次のエントリーポイントからコンパイル元のアドレス、すなわち、コンパイルするJavaバイトコード命令のアドレスを取得するステップS207。その後、コンパイル実行部19は、ステップS202に戻る。これに対して、エントリーポイントがない場合ステップS205:否定、コンパイル実行部19は、現在コンパイルしているエントリーのリーブポイントにおいてJava戻り命令と戻り先のアドレスを設定するステップS208。そして、コンパイル実行部19は、メソッドアドレステーブルの開始アドレスにコンパイル結果のアドレス、すなわちメソッドの最初のエントリーポイントのアドレスを登録するステップS209。そして、コンパイル実行部19は、コンパイルを行なった各エントリーのコンパイル状態フラグにおけるコンパイル済みのフラグをONに設定し、さらに、メソッドの実行フラグにおけるコンパイル済みのフラグをONに設定するステップS210。また、コンパイル実行部19は、コンパイルを行なった各エントリーのコンパイル状態フラグにおけるコンパイル中のフラグをOFFに設定するステップS211。次に、図7~図10-2を参照して、サンプルプログラムを例に本実施例に係る情報処理装置の処理の全体的な流れについて説明する。図7は、Javaプログラミング言語で記述されたサンプルプログラムのソースコードを示す図である。図8は、サンプルプログラムのJavaコンパイル結果の概要を示す図である。図9は、サンプルプログラムから生成されたメソッドアドレステーブルを示す図である。図10-1は、サンプルプログラムから生成された実行コードを示す第1の図である。また、図10-2は、サンプルプログラムから生成された実行コードを示す第2の図である。図10-2は図10-1のプログラムの続きである。図7に示すように、ここで用いるサンプルプログラムは、1つのクラスファイルでできている。そして、そのクラスファイルは、メソッド401とメソッド402という2つのメソッドを有している。図8に示すコードは、図7のサンプルプログラムのソースコードをコンパイルしてJavaバイトコードに変換したものである。図8に示すようなJavaバイトコードで記述されたプログラムが、Javaバイトコード命令記憶部14に格納されている。そして、バイトコード解釈部17によって、図8に示すプログラムは、エントリー501~504及び511~514で構成されていると認識される。図7のメソッド401がエントリー501~504に対応し、メソッド402がエントリー511~514に対応している。具体的には、エントリー501の次の行0xA2icmpgeの命令コードを含む行で条件による分岐が発生し、リーブポイントとなるため、エントリー501が一つのエントリーとなる。また、エントリー502の次の行0xB8invokestaticの命令コードを含む行でメソッド402を呼出す分岐が発生し、リーブポイントとなるので、エントリー502が一つのエントリーとなる。さらに、エントリー503の次の行0xA7gotoの命令コードを含む行で他の行への分岐が発生し、リーブポイントなるので、エントリー503が一つのエントリーとなる。そして、エントリー503の後、メソッド401のreturn命令まで分岐が無いので、エントリー503の後からreturn命令までが一つのエントリー504となる。また、エントリー511の次の行0xA2icmpgeの命令コードを含む行で条件による分岐が発生し、リーブポイントとなるため、エントリー511が一つのエントリーとなる。また、また、エントリー512の次の行0xB8invokestaticの命令コードを含む行でメソッド401を呼出す分岐が発生し、リーブポイントとなるので、エントリー512が一つのエントリーとなる。さらに、エントリー513の次の行0xA7gotoの命令コードを含む行で他の行への分岐が発生し、リーブポイントなるので、エントリー513が一つのエントリーとなる。そして、エントリー513の後、メソッド402のreturn命令まで分岐が無いので、エントリー513の後からreturn命令までが一つのエントリー514となる。そして、図8におけるエントリー501~504及び511~514に基づいて、バイトコード解釈部17が生成したメソッドアドレステーブルが図9に示すメソッドアドレステーブルである。図9におけるテーブル602は、メソッドアドレステーブル601におけるエレメント0の中身を表している。また、テーブル603は、テーブル602におけるエントリーポイントテーブルの中身を表している。また、図9のメソッドアドレステーブルは、バイトコード解釈部17によるエントリーポイント及びリーブポイントの設定が終わった後に、コンパイル実行部19によってコンパイルが終了した状態を表している。まず、メソッド401及び402という2つのメソッドがあるので、各メソッドに対応させてエレメント0及び1の領域が確保される。図9では、エレメント0がメソッド402に対応し、エレメント1がメソッド401に対応している。そして、例えば、エレメント0には、メソッド名として、メソッド402の名前であるmainが登録されている。また、開始アドレスとして、メソッド402の開始アドレスが登録されている。また、メソッドサイズには、メソッド402のサイズである21が登録されている。また、実行フラグには、コンパイル実行部19によりコンパイル済みフラグがONに設定されている。そして、テーブル603は、図8におけるエントリー501~504及び511~514に基づいて、バイトコード解釈部17が生成したエントリーポイントテーブルである。メソッド401の中のエントリーは全部で4つあるので、バイトコード解釈部17は、エントリーカウンタを4とする。さらに、バイトコード解釈部17は、最初のエントリーのエントリーポイントとしてエントリー511の開始アドレスを登録する。さらに、最初のエントリーのコンパイルが開始されているので、コンパイル実行部19によりコンパイル済みのフラグがONにされている。そして、バイトコード解釈部17は、リーブポイントとして、エントリー511の分岐のアドレスである21のアドレスを登録している。さらに、コンパイル実行部19により、エントリー生成アドレスとして、エントリー511をコンパイルした実行コードの開始アドレスが登録されている。そして、コンパイル実行部19により、出口アドレスとして、エントリー511をコンパイルした実行コードの戻り先のアドレスが登録されている。同様に、バイトコード解釈部17は、エントリー512~514までの登録を行い。また、コンパイル実行部19は、エントリー512~514における実行フラグの設定、エントリー生成アドレスの登録及び出口アドレスの登録を行う。ここで、図9では、エントリーポイントテーブルにおけるエントリー512及び513に対する登録は図示を省略している。そして、図9に示すメソッドアドレステーブル601を用いて、コンパイル実行部19がJavaバイトコード命令のコンパイルを行なった結果が図10-1及び図10-2に示す実行コードのプログラムである。実行コード701が、エントリー513にあたる。また、実行コード702が、エントリー514にあたる。また、実行コード703が、エントリー501にあたる。また、実行コード704が、エントリー502にあたる。また、実行コード705が、エントリー511にあたる。また、実行コード706が、エントリー512にあたる。また、実行コード707が、エントリー503にあたる。また、実行コード708が、エントリー504にあたる。このように、実際に実行される処理だけコンパイル対象とすることにより、コンパイル時間及びメモリ資源の消費量を抑えることができる。[ハードウェア構成]以下では、図11を用いて、本実施例に係る情報処理装置のハードウェア構成について説明する。図11は、実施例に係る情報処理装置のハードウェア構成図である。図11に示すように、本実施例に係る情報処理装置1は、メモリ801、キャッシュ802、ハードディスク803、CPU100及びCPU200を有する。メモリ801、キャッシュ802、ハードディスク803、CPU100及びCPU200は、バス804によって接続されている。ハードディスク803には、Javaバイトコード命令で記述されたプログラム、ランタイムライブラリなどが格納されている。また、ハードディスク803には、図1に示す情報処理装置1の機能を実現するための各種プログラムが格納されている。そして、CPU100は、これらの各種プログラムを読み出して実行する。これによりJavaVMがメモリ801上に展開される。CPU100は、JavaVMを制御してバイトコード解釈部17の機能を実現させる。さらに、JavaVMからの命令を受けて、CPU200は、コンパイル実行部19の機能を有するコンパイラを起動する。また、CPU100は、ハードディスク803のJavaバイトコード命令で記述されたプログラム及びランタイムライブラリを読み込みメモリ801上に展開する。これにより、メモリ801が、ランタイムライブラリ記憶部12及びJavaバイトコード命令記憶部14の機能を実現する。また、メモリ801及びキャッシュ802が、Javaワーク領域部11、コンパイルワーク領域部13、コンパイル結果格納部15及び関数アドレステーブル格納部16の機能を実現する。なお、上記した図1に示す情報処理装置1の機能を実現するためのプログラムについては、必ずしもハードディスク803に記憶させなくてもよい。例えば、情報処理装置1に挿入されるフレキシブルディスク、CD-ROMCompactDiskReadOnlyMemory、DVDDigitalVersatileDisk又はICIntegratedCircuitカードなどの可搬用の物理媒体にプログラムを記憶させてもよい。または、情報処理装置1の外に備えられるハードディスクドライブなどの固定用の物理媒体にプログラムを記憶させてもよい。または、公衆回線、インターネット、LAN、WANなどを介して情報処理装置1に接続される他のコンピュータまたはサーバにプログラムを記憶させてもよい。そして、情報処理装置1は、上述したフレキシブルディスク等から各プログラムを読み出して実行するようにしてもよい。以上に説明したように、本実施例に係る情報処理装置は、プログラムの処理の実行要求が発生した場合に、コンパイルを待つことなくバイトコード解釈部及びプログラム実行部が直ぐに実行を開始できるので、実行開始までの待機時間が軽減できる。また、コンパイル完了後には、CPUによるコンパイル結果の直接実行が行なえるので、処理を高速に実行することができる。さらに、マルチコアシステムにおいては、異なるCPU間でテーブルなどのデータを共有する場合、同じデータのアクセス競合を避けるために、CPU間の同期やインターロックを行う必要があり、処理性能の低下を招くことが多い。これに対して、本実施例に係る情報処理装置では、互いに同じ情報を書き込むことがなくデータの不整合が発生しないので、CPU間の同期やインターロック処理が不要である。これにより、本実施例に係る情報処理装置においては、マルチコアシステムを用いたJavaプログラムの実行及びコンパイルを効率よく行なうことができる。また、本実施例に係る情報処理装置は、Javaバイトコードの解釈及び実行を行うCPUと異なるCPUによりコンパイル処理を独立して行う。これにより、コンパイラ処理の負荷が高くても、Javaバイトコードの解釈及び実行の処理に影響を与えず、高速処理が可能となる。また、以上の説明では、マルチコアシステムとして、CPUが2つの場合で説明したが、3つ以上のCPUを備えている場合にも同様の処理が可能である。例えば、複数のCPUにてメソッド毎にコンパイルを実行させるなどができ、よりコンパイル処理を高速化することができる。