(57)【特許請求の範囲】
【請求項１】
所定のプログラム言語で作成されたソースコードをコンパイルして得られた中間コードを実行する中間コード実行システムにおいて、
前記中間コードを実行する複数の中間コード実行手段と、
前記中間コードを記憶すると共に、当該中間コードに含まれる命令と当該命令の効率的実行に適切な前記中間コード実行手段との対応関係を記憶した記憶手段と、
中間コード解析手段とを具備し、
前記中間コード解析手段が、
ａ）前記記憶手段に格納された中間コードに含まれる命令を特定する処理と、
ｂ）特定された命令と前記対応関係とに基づいて、前記中間コードの効率的実行に適切な中間コード実行手段を特定する処理と、
ｃ）前記中間コードと特定された中間コード実行手段との関係を記録する処理とを実行することを特徴とする中間コード実行システム。
【請求項２】
前記記憶手段における命令と当該命令の効率的実行に適切な中間コード実行手段との対応関係は、各命令を前記中間コード実行手段のそれぞれで実行した場合の処理効率度のスコアテーブルを含み、
前記ｂ）の処理は、
ｂ１）前記スコアテーブルに基づいて、特定された命令を前記中間コード実行手段のそれぞれで実行した場合の処理効率度のスコアを取得する処理と、
ｂ２）取得されたスコアを中間コード実行手段ごとに合計する処理と、
ｂ３）中間コード実行手段ごとに合計されたスコアに基づいて、前記中間コードの実行に用いる前記中間コード実行手段を特定する処理と
を含むことを特徴とする請求項１に記載の中間コード実行システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、中間コードを実行する中間コード実行システムに関するものである。
【０００２】
【従来の技術】
ハードウェアやＯＳといった、コンピュータのプラットフォームに依存しないプログラムを提供することを目的として、各プラットフォーム上にソフトウェア的な手法またはハードウェア的な手法により仮想機械（ＶＭ; Virtual Machine）を構築し、この仮想機械上でソースコードとオブジェクトコードとの間の中間的なコード（以下、中間コードという）を実行する方法が提案されている。このような方法を採用したプログラム言語の一つとしては、クラスファイルと呼ばれる中間コードの形式を採用したＪａｖａ（Ｒ）が挙げられる。なお、以下ではハードウェアと当該ハードウェア上に構築された仮想機械とを一体的に、中間コード実行システムと呼称する場合がある。
【０００３】
上記の方法によれば、単一のプログラムコードを種々のプラットフォームに供給して実行することが可能となるため、個々のプラットフォームでしか実行できないオブジェクトコードを準備する必要がなくなる。これにより、プログラムの配信を簡潔化することができるばかりでなく、ソフトウェア開発を効率化することも可能である。このため、種々のコンピュータのプラットフォームにおいて仮想機械を構築することが行われている。さらに、近時ではプロセッサを搭載した種々の電子機器（以下、組込み機器という）においても、プロセッサ上に仮想計算機を構築することが行われはじめている。
【０００４】
ここで、仮想計算機としては、プラットフォーム上にソフトウェア的に構築され、クラスファイルに含まれるバイトコード命令を逐次的に解釈して実行するインタープリター方式のものが知られている。
【０００５】
しかしながら、インタープリター方式の仮想計算機は、クラスファイルから一つ一つバイトコード命令を取り出してはその内容を解釈するというプロセスが必要であり、このプロセスがシステムのオーバーヘッドとなる場合がある。このようなオーバーヘッドを軽減してパフォーマンスを向上するために、クラスファイルを各ハードウェアに固有のネイティブコードにコンパイルしてから実行するＪＩＴコンパイラ（Just In Time Compiler）方式や、ＡＯＴコンパイラ（Ahead Of Time Compiler）方式等が提案されている。さらに、バイトコード命令を直接実行することができるように特別に設計されたＪａｖａ（Ｒ）チップのように、仮想計算機をハードウェア的に構築することも試みられている。
【０００６】
上記のＪＩＴやＡＯＴ等のコンパイラ方式ではプロセッサのネイティブコードを実行することになるので、命令実行の速度だけを見ればインタープリター方式よりも優れている。しかしながら、コンパイラ方式では、コンパイルの作業自体に必要なワークメモリや、クラスファイルに比べてサイズが４〜１０倍と大きいネイティブコードを保存する領域も必要となるため、インタープリター方式よりも大量のメモリが必要となるという問題がある。
【０００７】
このような問題は、特に通常のコンピュータよりもハードウェア資源の制約が厳しい組み込み機器において顕著となる。また、クラスファイルの実行を指示してからコンパイルを開始する場合には、コンパイルの作業がオーバーヘッドとなって十分なパフォーマンスが得られないという可能性もある。
【０００８】
また、上記のＪａｖａ（Ｒ）チップによれば、コンパイルすることもなく高パフォーマンスでクラスファイルを実行することが可能であるが、このような専用チップの開発には高額の開発費を要し、チップ自体の高コスト化を免れることはできない。また、技術の進歩や市場のニーズに応じた言語仕様のバージョンアップや修正が適宜行われることを鑑みると、仮想機械をハードウェア的に構成することは必ずしも好適ではないという一面もある。特に、組み込み機器における仮想機械には、低コスト化に対する強い要請と短サイクルで仕様がバージョンアップされることとが相俟って、Ｊａｖａ（Ｒ）チップの採用は現実的ではない。
【０００９】
以上説明したように、コンパイラ方式やＪａｖａ（Ｒ）チップ等の技術は、コストおよび要求ハードウェア資源等の点で問題があり、特に、これらの制限が厳しい組み込み機器に適用することは難しい。このため、組み込み機器に適用することを視野に入れて、別の方法により仮想機械ないし中間コード実行システムのパフォーマンスを向上することが望まれている。
【００１０】
【発明が解決しようとする課題】
本発明は、上記事情に鑑みてなされたものであって、前処理を施すことにより中間コード実行時のパフォーマンスを向上することができる、かかる前処理が組み込まれた中間コード実行システムを提供することを目的とする。
【００１１】
【課題を解決するための手段】
上記課題を解決するために、本発明の第１の観点では、所定のプログラム言語で作成されたソースコードをコンパイルして得られた中間コードを実行する中間コード実行システムにおいて、前記中間コードを実行する複数の中間コード実行手段と、前記中間コードを記憶すると共に、当該中間コードに含まれる命令と当該命令の効率的実行に適切な前記中間コード実行手段との対応関係を記憶した記憶手段と、中間コード解析手段とを具備し、前記中間コード解析手段が、ａ）前記記憶手段に格納された中間コードに含まれる命令を特定する処理と、ｂ）特定された命令と前記対応関係とに基づいて、前記中間コードの効率的実行に適切な中間コード実行手段を特定する処理と、ｃ）前記中間コードと特定された中間コード実行手段との関係を記録する処理とを実行することを特徴とする中間コード実行システムが提供される。
【００１２】
本発明の第１の観点によれば、中間コード実行システムに複数の中間コード実行手段を設け、中間コードに含まれる命令とその効率的実行に適切な前記中間コード実行手段との対応関係を記憶手段に記憶しておき、中間コード解析手段により中間コードを解析し、記憶手段に記憶してある対応関係に基づいて、当該中間コードの効率的実行に適切な中間コード実行手段を特定して記録するので、中間コード実行システムは個々の中間コードに対して最適な中間コード実行手段を識別できるようになる。
【００１３】
したがって、本発明の第１の観点によれば、実行する中間コードに適した中間コード実行手段を用いて中間コードを実行することが可能となり、これにより複数設けられた中間コード実行手段のそれぞれを活用して、中間コード実行時のパフォーマンスを向上することができる。
【００１４】
本発明の第２の観点においては、前記記憶手段における命令と当該命令の効率的実行に適切な中間コード実行手段との対応関係は、各命令を前記中間コード実行手段のそれぞれで実行した場合の処理効率度のスコアテーブルを含み、前記ｂ）の処理は、ｂ１）前記スコアテーブルに基づいて、特定された命令を前記中間コード実行手段のそれぞれで実行した場合の処理効率度のスコアを取得する処理と、ｂ２）取得されたスコアを中間コード実行手段ごとに合計する処理と、ｂ３）中間コード実行手段ごとに合計されたスコアに基づいて、前記中間コードの実行に用いる前記中間コード実行手段を特定する処理とを含む構成とすることができる。
【００１５】
また、前記記憶手段における命令と当該命令の効率的実行に適切な中間コード実行手段との対応関係は、各命令に割り当てられたポイントの値と、前記中間コード実行手段のそれぞれに対応した前記ポイントの合計値の範囲とを含み、前記ｂ）の処理は、ｂ１）前記対応関係に基づいて、特定された命令のポイントを取得する処理と、ｂ２）取得されたポイントの合計値を求める処理と、ｂ３）前記対応関係および求められた合計値に基づいて、前記中間コードの実行に用いる前記中間コード実行手段を特定する処理とを含む構成としてもよい。
【００１６】
本発明の第３の観点では、所定のプログラム言語で作成されたソースコードをコンパイルして得られた中間コードを実行する中間コード実行システムにおいて、全ての命令を実行可能な一般中間コード実行手段と、一部の命令のみを実行可能な特殊中間コード実行手段と、中間コードが格納された記憶手段と、中間コード解析手段とを具備し、前記中間コード解析手段が、ａ）前記記憶手段に格納された中間コードを解析し、前記中間コードに含まれる命令に前記特殊中間コード実行手段が実行不能な命令が含まれないかを判定する処理と、ｂ）前記実行不能な命令が含まれないと判定したときには、前記中間コードを前記特殊中間コード実行手段で実行すべきことを記録し、前記実行不能な命令が含まれると判定したときには、前記中間コードを前記一般中間コード実行手段で実行すべきことを記録する処理とを実行することを特徴とする中間コード実行システムが提供される。
【００１７】
本発明の第３の観点によれば、全ての命令を実行可能な一般中間コード実行手段と、一部の命令のみを実行可能な特殊中間コード実行手段とを備えた中間コード実行システムにおいて、実行する中間コードに特殊中間コード実行手段で実行可能な命令が含まれているか否かに応じて、一般中間コード実行手段と特殊中間コード実行手段とのいずれで実行すべきかが記録される。
【００１８】
したがって、本発明の第３の観点によれば、一部の命令のみに特化した特殊中間コード実行手段の追加された中間コード実行システムにおいて、一般中間コード実行手段と特殊中間コード実行手段とを使い分けることが可能となり、これにより中間コード実行時のパフォーマンスを向上することができる。
【００１９】
本発明の第４の観点では、所定のプログラム言語で作成されたソースコードをコンパイルして得られた中間コードをインタープリタ方式で実行する中間コード実行システムにおいて、中間コードが格納された記憶手段と、前記記憶手段に格納された中間コードに、当該中間コードに含まれる特定の命令パターンを、予め前記特定の命令パターンと関連付けられた代替命令に置換する処理を施す前処理手段と、前記代替命令を解釈して実行することができない第１のインタープリタと、前記代替命令を置換前の命令パターンと同等の内容に解釈して実行することができる第２のインタープリタと、前記前処理手段により処理された中間コードを解析し、当該中間コードに前記代替命令が含まれているか否かを判定し、前記代替命令が含まれている場合には当該中間コードを前記第１のインタープリタで実行すべきことを記録し、前記代替命令が含まれていない場合には当該中間コードを前記第２のインタープリタで実行すべきことを記録する中間コード解析手段とを具備することを特徴とする中間コード実行システムが提供される。
【００２０】
本発明の第４の観点によれば、特定の命令パターンを代替命令に置換する前処理を行う前処理手段と、代替命令に対応した第１のインタープリタと、代替命令に対応していない第２のインタープリタと、中間コード解析手段とを備えた構成において、中間コード解析手段によって前処理後の中間コードを解析し、前処理で特定の命令パターンが代替命令に置換された中間コードについては第１のインタープリタで実行すべきことを記録し、前処理を施しても置換が行われなかった中間コードについては第２のインタープリタで実行すべきことを記録する。
【００２１】
したがって、本発明の第４の観点によれば、前処理手段と、第１のインタープリタと、第２のインタープリタとを備えた構成を有効に活用して中間コードを高いパフォーマンスで実行することができる。
【００２２】
本発明の第５の観点では、所定のプログラム言語で作成されたソースコードをコンパイルして得られた中間コードをインタープリタ方式で実行する中間コード実行システムにおいて、コンパイルにより生成される命令の全てを解釈して実行することができる第１のインタープリタを有する第１のサブシステムと、中間コードに含まれる複数の命令からなる命令パターンを代替命令に置換する前処理を施す前処理部と、当該代替命令を置換前の命令コードと実質的に同等の内容に解釈して実行することができる第２のインタープリタと、を有する第２のサブシステムと、実行する中間コードに応じて、前記第１のサブシステムにおいて前記第１のインタープリタにより中間コードを実行する処理と、前記第２のサブシステムにおいて前記前処理部により中間コードに前処理を施してから前記第２のインタープリタで実行する処理とのいずれか一方を選択する選択部とを具備することを特徴とする中間コード実行システムが提供される。
【００２３】
本発明の第５の観点によれば、通常のインタープリタを有する第１のサブシステムと、特定の命令パターンを代替命令に置換する前処理手段および当該前処理手段によって前処理の施された中間コードの実行に特化した第２のインタープリタを有する第２のサブシステムとを、実行する中間コードに応じて使い分ける。
【００２４】
これにより、本発明の第５の観点によれば、中間コード実行時のパフォーマンスを向上することができる。
【００２５】
本発明の第５の観点においては、前記第２のサブシステムは、前記第１のサブシステムにおいて特定の命令が割り付けられているオペコードに代替命令を割り付けており、前記選択部は、実行する中間コードに前記特定の命令が含まれている場合には前記第１のサブシステムによる処理を選択し、実行する中間コードに前記特定の命令が含まれていない場合には前記第２のサブシステムによる処理を選択する構成とすることができる。
【００２６】
本発明の第６の観点では、所定のプログラム言語で作成されたソースコードをコンパイルして得られた中間コードを実行する中間コード実行システムであって、中間コードに含まれる複数の命令からなる第１の命令パターンを第１の代替命令に置換する前処理を施す前処理部と、当該第１の代替命令を置換前の命令コードと実質的に同等の内容に解釈して実行することができる第１のインタープリタとを有する第１のサブシステムと、中間コードに含まれる第２の命令パターンを第２の代替命令に置換する前処理を施す前処理部と、当該第２の代替命令を置換前の命令コードと実質的に同等の内容に解釈して実行することができる第２のインタープリタとを有する第２のサブシステムと、実行する中間コードに応じて、前記第１のサブシステムにおいて前記第１のインタープリタにより中間コードを実行する処理と、前記第２のサブシステムにおいて前記前処理部により中間コードに前処理を施してから前記第２のインタープリタで実行する処理とのいずれか一方を選択する選択部とを具備することを特徴とする中間コード実行システムが提供される。
【００２７】
本発明の第６の観点によれば、特定の命令パターンを代替命令に置換する前処理手段および当該前処理手段によって前処理の施された中間コードの実行に特化したインタープリタを有するサブシステムを、互いに異なる命令パターンおよび代替命令について２系統備えた中間コード実行システムにおいて、２系統のサブシステムを実行する中間コードに応じて使い分けることにより、中間コード実行時のパフォーマンスを向上することができる。
【００２８】
本発明の第６の観点においては、前記第１のサブシステムは前記第１の代替命令を第１のオペコードに割り付けており、前記第２のサブシステムは前記第２の代替命令を第２のオペコードに割り付けており、上記選択部は、実行する中間コードが第１のオペコードに係る命令を含んでいる場合には第２のサブシステムによる処理を選択し、実行する中間コードが第２のオペコードに係る命令を含んでいる場合には第１のサブシステムによる処理を選択する構成とすることができる。
【００２９】
尚、上記各観点において、「命令パターン」とは、所定の命令の一連の集合である。また、「代替命令」とは、前記命令パターンに置換される命令をいい、当該命令パターンよりも短いコードで表現され、代替命令に対応した実行環境において実行される独自の命令である。
【００３０】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態について説明する。
［第１実施形態］
先ず、図１から４を参照して、本発明の第１実施形態に係る中間コード前処理装置について詳細に説明する。
図１は、中間コードとしてＪａｖａ（Ｒ）のクラスファイルを前処理する第１実施形態に係る中間コード前処理装置１のハードウェア的な構成を示している。
【００３１】
この中間コード前処理装置１は、記憶部１０１、処理部１０２、および入力部１０３を備えている。処理部１０２は、ＭＰＵやマイクロコントローラ等の演算装置である。この処理部１０２は、１つに限られるものではなく、複数のＭＰＵや複数種類の演算装置により分散処理を可能とした構成としてもよい。
【００３２】
入力部１０３は、この中間コード前処理装置１にクラスファイル等を入力するものである。この入力部１０３から入力されたクラスファイルは記憶部１０１に格納される。記憶部１０１は、例えばＲＡＭやＲＯＭ等のメモリからなる。ここでは、説明の便宜上、１つの記憶部１０１のみを記載しているが、複数の記憶部を分散配置した構成としてもよい。
【００３３】
上記記憶部１０１の所定の領域には、複数の命令からなる命令パターン１０１ａと代替命令１０１ｂとが関連付けられたテーブルが格納されており、さらにはクラスファイル１０１ｃが格納されている。ここで命令パターン１０１ａは、複数のバイトコード命令からなるパターンのことである。
【００３４】
以下、例えば整数同士の加算を行う場合を例に挙げて説明する。この場合には、Ｊａｖａ（Ｒ）のクラスファイルに含まれるメソッドには、例えばＦＩＧ．３に示されるように、「ｉｌｏａｄ」、「ｉｌｏａｄ」、「ｉａｄｄ」という命令パターンが頻出することがある。そこで、第１実施形態に係る中間コード前処理装置１では、このように頻出する命令パターンを、当該命令パターンと同様の処理を行う代替命令、例えば「ｖ＿ｖ＿ｉａｄｄ」と関連付けたテーブルを記憶部１０１に格納する。ここで、「ｉｌｏａｄ」は、ローカル変数の値をオペランドスタックにプッシュする２バイトからなる中間コードをニーモニック表記したものである。また、「ｉａｄｄ」は、オペランドスタックから値を２つポップし加算して、その結果をオペランドスタックにプッシュする１バイトの中間コードをニーモニック表記したものである。
【００３５】
前記代替命令１０１ｂは、代替命令１０１ｂを実行可能な環境下において、前記命令パターン１０１ａと同様の処理に解釈される命令である。逆に言えば、本実施形態は、代替命令１０１ｂを置換前の命令パターンと実質的に同等に解釈して実行することができる中間コード実行システムの存在を前提としたものである。そのような中間コード実行システムは、例えば上記の場合、代替命令「ｖ＿ｖ＿ｉａｄｄ」を上記「ｉｌｏａｄ」、「ｉｌｏａｄ」、「ｉａｄｄ」という命令パターンと同様の処理に解釈して実行する。なお、かかる代替命令の実行に際しては、メモリアクセスの頻発防止、冗長な処理の省略、レジスタの活用等により、命令実行にあたってのオーバーヘッド要因を最低減とすることが望ましい。
【００３６】
また、代替命令１０１ｂは、前記命令パターン１０１ａと比してコード長が短くなっている。例えば、前記代替命令「ｖ＿ｖ＿ｉａｄｄ」は３バイトのコード長であり、置換前のコード長である５バイトよりも短くなっている。
【００３７】
したがって、このような前処理によれば、クラスファイル１０１ｃのサイズを小さくすることも可能である。
【００３８】
なお、本実施形態は、主として請求項１または１５に記載の発明に対応しており、前記記憶部等１０１は当該発明における記憶手段に相当し、前記処理部１０２は処理手段に相当している。
【００３９】
以上のような構成において、処理部１０２により一連のソフトウェアプログラムを実行することにより、中間コード前処理装置１の各機能が実現され、クラスファイル１０１ｃに以下に述べるような前処理が施される。
【００４０】
図２は、本実施形態における前処理の手順を説明するためのフローチャートである。ここでは、予め、入力部１０３からクラスファイル１０１ｃが中間コード前処理装置１に入力され、記憶部１０１に格納されていることが前提となっている。この前提の下に、以下の如き手順で処理を行う。
【００４１】
即ち、先ず中間コード前処理を開始すると（Ｓ１０１）、処理部１０２は記憶部１０１から互いに関連付けられた命令パターン１０１ａおよび代替命令１０１ｂのテーブルを読み出す（Ｓ１０２）。次いで、処理部１０２は、クラスファイル１０１ｃを検索して命令パターン１０１ａを特定する（Ｓ１０３）。即ち、例えば、図３および図４に示すように、「ｉｌｏａｄ」、「ｉｌｏａｄ」、「ｉａｄｄ」の一連の命令パターン１０１ａをクラスファイル１０１ｃの中で特定する。こうして命令パターンを特定すると、処理部１０２は、特定したクラスファイル１０１ｃ中の命令パターン１０１ａを、当該命令パターン１０１ａに関連付けられた代替命令１０１ｂに置換する（Ｓ１０４）。
【００４２】
図４は、Ｓ１０４における処理の一例を具体的に説明するための図である。この例では、特定した命令パターンに含まれる「ｉｌｏａｄ ８」、「ｉｌｏａｄ９」、「ｉａｄｄ」は、まず、「ｎｏｐ」、「ｎｏｐ」、「ｖ＿ｖ＿ｉａｄｄ８，９」に変換される（第１段階）。ここで、「ｎｏｐ」は、何も行わない命令である。このように、「ｖ＿ｖ＿ｉａｄｄ ８，９」の前に複数の「ｎｏｐ」を挿入したのは、変換されるクラスファイルのサイズを変更させず、クラスファイルに含まれる条件分岐の飛び先等を変更させないためである。この第１段階の処理を施した後に、条件分岐の飛び先等を変更しつつ「ｎｏｐ」を削除する処理を行う（第２段階）。これにより、Ｓ１０４の処理は完了する。
【００４３】
以上のようにして、中間コードの前処理は終了する（Ｓ１０５）。
【００４４】
この第１実施形態に係る中間コード前処理装置によれば、前述した一連の処理により、実行されるコードの長さが「ｉｌｏａｄ」、「ｉｌｏａｄ」、「ｉａｄｄ」の合計５バイトコードから、「ｖ＿ｖ＿ｉａｄｄ」の３バイトの１命令に短縮される。したがって、実行すべき命令の個数を少なくして命令間の冗長な処理を省することができるとともに、クラスファイルのサイズを低減することができる
【００４５】
このようにして得られた中間コードは、「ｖ＿ｖ＿ｉａｄｄ」のような代替命令１０１ｂに対応した実行環境において、代替命令１０１ｂを置換前の命令パターン１０１ａと同等かつメモリアクセス等のオーバーヘッド要因を最小とした処理に解釈して実行することにより、高速に実行することができる。また、以上のような中間コードの前処理は、単なるコードの置換であるため低オーバーヘッドで実行することができ、かつ、ネイティブコードにコンパイルする場合のようにクラスファイルのサイズを増大させることもないので、中間コード実行のパフォーマンスを有為に向上させることができる。
【００４６】
例えば、第１実施形態を携帯電話等の組込み機器に適用する場合には、当該組み込み機器に上述の代替命令１０１ｂを実行可能な実行環境を搭載し、中間コード前処理装置１により前処理済みのクラスファイルを当該組み込み機器にプリインストールまたは配信するようにしてもよい。このようにすることで、組み込み機器上で実行されるＪａｖａ（Ｒ）アプリケーションのパフォーマンスを向上することができる。
【００４７】
また、当該組み込み機器に上述した前処理装置１および代替命令１０１ｂを実行可能な実行環境を搭載し、携帯電話上でクラスファイルの前処理と、前処理されたクラスファイルの実行との双方を行うようにしてもよい。
【００４８】
なお、第１実施形態では、命令パターン１０１ａと代替命令１０１ｂとが関連付けられたテーブルを記憶部１０１に格納することとしているが、このようなテーブルは前処理を行うためのソフトウェアプログラムの中に埋め込んだ形態としてもよいし、前処理を行うためのソフトウェアプログラムから独立して設けても構わない。
【００４９】
また、上述した前処理の手順において、Ｓ１０４における処理は図４に示したものに限られない。例えば、図４に示した第１段階の処理の後、第２段階の処理を行わず、「ｎｏｐ」を削除しなくても構わない。このような場合には、「ｎｏｐ」を含んだ中間コードをそのまま実行環境において実行してもよいし、実行環境にて「ｎｏｐ」の削除および条件分岐の飛び先変更等を行いつつクラスファイルを実行してもよい。特に、後者の場合には、実行環境がアイドル時間を利用する等して上述の前処理を行うことが好適である。
【００５０】
［第２実施形態］
次に、図５，６を参照して、本発明の第２実施形態に係る中間コード実行システムについて詳細に説明する。
図５は、中間コードとしてＪａｖａ（Ｒ）のクラスファイルを実行する本発明の第２実施形態に係る中間コード実行システム２のハードウェア的な構成を示している。中間コード実行システム２は、記憶部２０１、処理部２０２、および入力部２０３を備えている。尚、これら記憶部２０１、処理部２０２、および入力部２０３は、第１実施形態に係る中間コード前処理装置１の記憶部１０１、処理部１０２、および入力部１０３と略同様である。また、記憶部２０１に格納される、命令パターン２０１ａ、代替命令２０１ｂおよびクラスファイル２０１ｃは、第１実施形態に係る中間コード前処理装置１の記憶部１０１に格納される、命令パターン１０１ａ、代替命令１０１ｂ、およびクラスファイル１０１ｃと略同様である。従って、ここでは、これらについての重複した説明は省略する。
【００５１】
なお、本実施形態は、主として請求項３または１７に記載の発明に対応しており、前記記憶部等２０１は当該発明における記憶手段に相当し、前記処理部２０２は処理手段に相当している。
【００５２】
以上のような構成において、処理部２０２により一連のソフトウェアプログラムを実行することにより、中間コード実行システム２の各機能が実現され、以下に述べるようにしてクラスファイル２０１ｃに前処理が施され、前処理の施されたクラスファイル２０１ｃが実行される。
【００５３】
図６は、本実施形態におけるクラスファイル２０１ｃの前処理および実行の手順を説明するためのフローチャートである。この手順は、上記第１実施形態と同様に、予め入力部２０３から入力されたクラスファイル２０１ｃが記憶部２０１に格納されていることを前提としている。
【００５４】
まず、中間コードの前処理が開始され（Ｓ２０１）、処理部２０２は記憶部２０１から互いに関連付けられた命令パターン２０１ａおよび代替命令２０１ｂのテーブルを読み出す（Ｓ２０２）。次いで、処理部２０２はクラスファイル２０１ｃを検索して命令パターン２０１ａを特定する（Ｓ２０３）。そして、処理部２０２は特定された命令パターン２０１ａを代替命令２０１ｂに置換し（Ｓ２０４）、中間コードの前処理は終了する（Ｓ２０５）。以上の処理は、第１実施形態における前処理と同様の手順であるため、詳細な説明は省略する。
【００５５】
次いで、以上のようにして前処理の施されたクラスファイル２０１ｃを実行する。ここでは、代替命令２０１ｂを命令パターン２０１ａと同等の内容に解釈して実行することができるインタープリタをなすソフトウェアプログラムが実行され、これにより処理部２０２は記憶部２０１に格納されたクラスファイル２０１ｃから命令を取り出し（Ｓ２０６）、取り出された命令に相当する処理が処理部２０２により実行される（Ｓ２０７）。
【００５６】
第２実施形態に係る中間コード実行システム２によれば、以上のような手順により、クラスファイル２０１ｃに命令パターン２０１ａを代替命令２０１ｂに置換する前処理を施し、この前処理の施された中間コードを実行することができる。よって、クラスファイル２０１ｃのコード長を短縮し、かつ、命令間の冗長な処理を省略した中間コードを実行することができ、これにより中間コード実行時のパフォーマンスを向上することができる。さらに、前処理後の中間コードを実行するにあたり、代替命令をメモリアクセス等のオーバーヘッド要因を最小とした処理に解釈して実行することにより、中間コード実行時のパフォーマンスを一層向上することも可能である。
【００５７】
なお、図６に示した手順では、前処理とクラスファイルの実行とを連続して行う場合を示したが、前処理とクラスファイルの実行とは必ずしも連続していなくてもよく、予めクラスファイルに前処理を施しておき、時間をおいてから前処理を施したクラスファイルを実行するようにしても構わない。
【００５８】
また、代替命令２０１ｂの関連づけられた命令パターン２０１ａは１種に限られるものではなく、２種以上であってもよい。このような場合に、図６に示したような手順で前処理とクラスファイルの実行とを連続して行う際には、前処理のオーバーヘッドをできるだけ小さくしてクラスファイルの実行を開始するために、代替命令２０１ｂの関連づけられた命令パターン２０１ａのうち一部の命令パターンについてのみ代替命令と置換する前処理を行うようにしてもよい。
【００５９】
さらに、中間コード実行システム２が搭載される機器によって処理部２０２をなすＭＰＵやマイクロコントローラの性能は様々であり、また、状況に応じて前処理にかけられる時間的な余裕や機器システムの処理能力にも変化がある。したがって、代替命令の関連付けられた複数の命令パターンがある場合には、どれだけの命令パターンを置換するかを機器の特性や状況に応じて静的に調整するようにしてもよい。このようにすることで、中間コード実行システム２が搭載される機器の特性や状況に応じた前処理を実現することができる。例えば、本発明の中間コード実行システム２を携帯電話に搭載した場合、携帯電話にダウンロードしたクラスファイルを直ちに実行する際には一部の命令パターンだけを置換するようにし、直ちに実行しない場合には全命令パターンを置換するように調整するようにしてもよい。このようにすることで、携帯電話上にて、状況に応じた前処理を施しつつクラスファイルを実行することが可能となる。
【００６０】
［第３実施形態］
次に、図７から９を参照して、本発明の第３実施形態に係る中間コード実行システムについて詳細に説明する。
図７は、中間コードとしてＪａｖａ（Ｒ）のクラスファイルを実行する本発明の第３実施形態に係る中間コード実行システム１００を概略的に示す図面である。この中間コード実行システム１００は、ＭＰＵないしマイクロコントローラを含んだ演算部５と、前記演算部５に接続された記憶部１０とを有している。
【００６１】
演算部５は、所定のソフトウェアプログラムを実行することにより、中間コード解析部２０と、中間コード実行部３０Ａ，３０Ｂ，３０Ｃとを構成する。そのようなソフトウェアプログラムは記憶部１０に格納してもよいし、別の記憶部に格納するようにしても構わない。
【００６２】
上記中間コード実行部３０Ａ，３０Ｂ，３０Ｃは、それぞれ中間コードを逐次的に解釈して実行するインタープリタとして機能する。そして、これらの中間コード実行部３０Ａ，３０Ｂ，３０Ｃは、それぞれの処理特性が互いに異なるタイプとなっている。例えば、中間コード実行部３０Ａはバイトコード命令Ｆの処理は速いがバイトコード命令Ｇの処理は遅く、中間コード実行部Ｂはバイトコード命令Ｇの処理は速いがバイトコード命令Ｆの処理は遅く、中間コード実行部Ｃはいずれのバイトコード命令においても平均的な処理速度となっているが如くである。
【００６３】
さらに、中間コード解析部２０は、記憶部１０に記憶されたクラスファイル１２に含まれるメソッドの性質を解析し、その性質に応じた中間コード実行部３０を選択し、当該メソッドと選択された中間コード実行部３０との組み合わせを記録する処理を行う。この中間コード解析部２０が行う処理については、後に詳細に説明する。
【００６４】
記憶部１０は、ＲＡＭやＲＯＭ等を有し、クラスファイル１２と、対応関係データベース１３とを格納している。記憶部１０は、物理的に単一の構成としてもよいし、複数からなる構成としても構わない。
【００６５】
クラスファイル１２は、Ｊａｖａ（Ｒ）言語により作成されたソースコードファイルをコンパイルして生成されたものであり、１以上のメソッドが含まれている。このメソッドは、特定の処理を実現するために複数のバイトコード命令が集合したものである。上記対応関係データベース１３は、上記中間コード実行部３０Ａ，Ｂ，Ｃのそれぞれにおける各バイトコード命令の処理効率度のスコアを管理するデータベースである。
【００６６】
なお、本実施形態は、主として請求項４に記載の発明に対応しており、前記中間コード実行部３０Ａ，３０Ｂ，３０Ｃは当該発明における中間コード実行手段に相当し、前記記憶部１０は記憶手段に相当し、前記中間コード解析部２０は中間コード解析手段に相当している。
【００６７】
図８は、対応関係データベース１３の具体的内容の一例を示したデータ構造図である。図８に示されるように、対応関係データベース１３は、中間コード実行部３０Ａ，３０Ｂ，３０Ｃのそれぞれにおける各バイトコード命令の処理効率度のスコアを記憶している。ここで、処理効率度のスコアとは当該バイトコード命令をどの程度効率的に実行することができるかを数値化した値であり、このようなスコアは各中間コード実行部の４０Ａ，３０Ｂ，３０Ｃの仕様に応じて予め定義しておくことが好ましい。なお、図８に示したデータ構造は、主として請求項５に記載の発明に対応したものである。
【００６８】
例えば、図８の最上段では、バイトコード命令ａの中間コード実行部３０Ａ，３０Ｂ，３０Ｃのそれぞれにおける処理効率度のスコアが定義されている。詳細には、バイトコード命令ａの中間コード実行部３０Ａにおける処理効率度のスコアは９０、中間コード実行部３０Ｂにおける処理効率度のスコアは１０、中間コード実行部３０Ｃにおける処理効率度のスコアは１０と定義されている（ここでは、数値が高いほど効率がよいものとする）。従って、このような対応関係データベース１３によれば、バイトコード命令ａについては中間コード実行部３０Ａにより実行されるのが最も効率的であることが分かる。これと同様に、バイトコード命令ｂ，ｃ、さらには他の全てのバイトコード命令について各中間コード実行部３０Ａ、３０Ｂ，３０Ｃのそれぞれにおける処理効率度スコアが、対応関係データベース１３に定義されている。なお、請求項５に記載の処理効率度のスコアテーブルは、この対応関係データベース１３に蓄積されている。
【００６９】
以下、図９のフローチャートを参照して、第３実施形態に係る中間コード実行システム１００の中間コード解析部２０が実行する処理の手順を説明する。まず、中間コード解析部２０は、記憶部１０のクラスファイル１２からメソッドを読み出す（Ｓ３０１）。次に、中間コード解析部２０は、当該読み出したメソッドを解析し、メソッドに含まれるバイトコード命令を特定する（Ｓ３０２）。一つのメソッドには、複数のバイトコード命令が含まれているので、中間コード解析部２０はメソッドに含まれる複数のバイトコード命令を、個々に特定する手順を繰り返す。
【００７０】
次いで、中間コード解析部２０は、記憶部１０における対応関係データベース１３に問い合わせ、上記Ｓ１０２において特定した各バイトコード命令に対応する処理効率度のスコアを取得し、それらを合計する（Ｓ３０３）。
【００７１】
その後、中間コード解析部２０は、Ｓ３０３にて得られた中間コード実行部３０Ａ，３０Ｂ，３０Ｃのそれぞれにおける処理効率度の合計スコアに基づいて、クラスファイル１２を最も効率よく実行することができる中間コード実行部を特定する（Ｓ３０４）。具体的には、中間コード解析部２０にて中間コード実行部ごとの合計スコアを比較し、最も合計スコアの高いものを当該メソッドの実行に利用する中間コード実行部として特定するようにしてもよい。
【００７２】
最後に、中間コード解析部２０は、当該メソッドをＳ３０４において特定した中間コード実行部３０で実行すべきことを記録する（Ｓ３０５）。具体的には、例えば、メソッド毎に保有されている管理情報に、実行すべき中間コード実行部３０の種別を記録しておくようにしてもよいし、メソッドに実行すべき中間コード実行部３０の種別をマークしておくようにしてもよい。以上の動作をクラスファイル１２に含まれる全てのメソッドについて実行し、中間コード解析部２０は処理を終了する。
【００７３】
以下、図８に示した対応関係データベース１３を例に、上記Ｓ３０３および上記Ｓ３０４における処理の内容をより具体的に説明する。メソッドにバイトコード命令ａ，ｄが含まれていた場合を想定すると、中間コード解析部２０は、バイトコード命令ａの中間コード実行部３０Ａにおける処理効率度のスコアである９０、中間コード実行部３０Ｂにおける処理効率度のスコアである１０、中間コード実行部３０Ｃにおける処理効率度のスコアである１０をそれぞれ取得する。次いで、中間コード解析部２０は、バイトコード命令ｄの中間コード実行部３０Ａにおける処理効率度スコアである５０、中間コード実行部３０Ｂにおける処理効率度スコアである４０、中間コード実行部３０Ｃにおける処理効率度スコアである９０をそれぞれ取得し、バイトコード命令ａのスコアに加算する。
【００７４】
この場合には、中間コード実行部３０Ａにおける処理効率度の合計スコアは１４０、中間コード実行部３０Ｂにおける合計スコアは５０、中間コード実行部３０Ｃにおける合計スコアは１００となる。従って、中間コード解析部２０は、中間コード実行部３０Ａを当該メソッドの実行に利用するものとして特定する。以上のような処理を行うことにより、中間コード実行システム１００は、クラスファイル１２に含まれるメソッドを実行する際に、中間コード解析部２０にて記録した内容に基づいて、メソッドに含まれるバイトコード命令に応じて決定された最も効率的な中間コード実行部３０Ａ，３０Ｂまたは３０Ｃを用いることが可能となる。したがって、第３実施形態によれば、特性の異なる中間コード実行部３０Ａ，３０Ｂ，３０Ｃを活用して、クラスファイル１２に含まれるメソッドの実行を効率よく行うことができるので、パフォーマンスの高い中間コード実行システム１００が提供される。
【００７５】
［第４実施形態］
次に、図１０，１１を参照して、本発明の第４実施形態に係る中間コード実行システムについて詳細に説明する。
第４実施形態に係る中間コード実行システムは、その基本構成は第３実施形態と同様である。ただし、第４実施形態に係る中間コード実行システムは、中間コード解析部２０において、メソッドに含まれる各バイトコード命令に対して一意に定められたスコアの合計値を求め、その合計値のランクに応じて中間コード実行部３０Ａ，３０ｂ、３０Ｃのいずれかを特定する点で第３実施形態と相違する。なお、本実施形態は主として請求項６に記載の発明に対応したものである。
【００７６】
以下、この点について詳細に説明する。中間コード解析部２０において、上記のような特定方法を実現するために、第４実施形態における対応関係データベース１３は、図１０に示すような各バイトコード命令と当該各バイトコード命令のスコアとの対応関係を定義するテーブルと、図１１に示すような合計スコアの範囲と中間コード実行部３０Ａ，３０Ｂ，３０Ｃとの対応関係を定義するテーブルとを含んでいる。
【００７７】
このうち、前者について図１０の例に基づいて説明すると、図１０の左側は各バイトコード命令を示しており、図１０の右側はそれに対応して設定されたスコアの値を示している。ここでは、バイトコード命令ａのスコアは４０、バイトコード命令ｂのスコアは９０、バイトコード命令ｃのスコアは５５と一意に設定されている。また、後者について図１１の例に基づいて説明すると、図１１の左側は合計スコアの範囲を示しており、この図１１の右側は当該合計スコアの範囲に対応して特定される中間コード実行部３０Ａ，３０Ｂ，３０Ｃのいずれかを示している。ここでは、あるメソッドに含まれるバイトコード命令に対応する合計スコアが２０１未満の範囲に属するときには中間コード実行部３０Ａが特定される。同様に、スコアの総計が２０１以上４０１未満のときには中間コード実行部３０Ｂが、４０１以上のときは中間コード実行部３０Ｃが、それぞれ特定されるように設定されている。
【００７８】
第４実施形態において中間コード解析部２０が実行する処理の基本手順は第３実施形態とほぼ同様である。すなわち、図７に示したように、中間コード解析部２０は記憶部１０のクラスファイル１２からメソッドを読み出し（Ｓ１０１）、メソッドに含まれるバイトコード命令を特定し（Ｓ１０２）、対応関係データベース１３に問い合わせて特定した各バイトコード命令に対応するスコアを取得し、合計する（Ｓ１０３）。その後、再度対応関係データベース１３に問い合わせて合計スコアに応じた中間コード実行部を特定し（Ｓ１０４）、当該メソッドを特定した中間コード実行部で実行すべきことを記録し（Ｓ１０５）、処理を終了する。
【００７９】
以下、図１０および図１１に示した対応関係データベース１３を例に、上記Ｓ１０３および上記Ｓ１０４における処理の内容を具体的に説明する。メソッドにバイトコード命令ａ，ｃが含まれていた場合を想定すると、中間コード解析部２０は、バイトコード命令ａのスコアである４０と、バイトコード命令ｃのスコアである５５とを取得し、その合計値は９５となる（ＳＴ１０３）。中間コード解析部２０は、この合計値とＦｉｇ．１１のテーブルとから、中間コード実行部３０Ａを当該メソッドの実行に利用するものとして特定する。
【００８０】
以上のような処理を行う第４実施形態においても、第３実施形態と同様に、メソッドに含まれるバイトコード命令に応じて決定された最も効率的な中間コード実行部３０Ａ，３０Ｂまたは３０Ｃを用いることが可能となるので、極めてパフォーマンスの高い中間コード実行システム１００が提供される。
【００８１】
［第５実施形態］
次に、図１２，１３を参照して、本発明の第５実施形態に係る中間コード実行システムについて詳細に説明する。
図１２は、本発明の第５実施形態に係る中間コード実行システム２００を概略的に示す図面である。この中間コード実行システム２００は、その基本構成は第３および第４実施形態と同様であるが、一般中間コード実行部３１と特殊中間コード実行部３２とを有する点で第３および第４実施形態と相違している。
【００８２】
この中間コード実行システムは、一般中間コード実行部３１と特殊中間コード実行部３２とによりクラスファイル１２を実行する。一般中間コード実行部３１は、クラスファイルを逐次的に解釈して実行するインタープリタであり、全てのバイトコード命令を実行する通常の機能を有している。これに対して、特殊中間コード実行部３２は、特定のバイトコード命令を一般中間コード実行部３１よりも高速に実行することができるが、一部の命令（例えば、浮動小数点演算に関するバイトコード命令）を実行することができない特殊なインタープリタである。
【００８３】
また、第５実施形態における対応関係データベース１３は、各バイトコード命令について、当該バイトコード命令が上記特殊中間コード実行部３２によって実行可能であるか否かを識別するためのデータ構造となっている。
【００８４】
なお、本実施形態は、主として請求項７に記載の発明に対応しており、前記特殊中間コード実行部３２は当該発明における特殊中間コード実行手段に相当し、前記一般中間コード実行部３１は一般中間コード実行手段に相当し、記憶部１０は記憶手段に相当し、中間コード解析部２０は中間コード解析手段に相当している。
【００８５】
以下、図１３のフローチャートを参照して、第５実施形態に係る中間コード実行システム２００の中間コード解析部２０が実行する処理の手順を説明する。先ず、中間コード解析部２０は、記憶部１０のクラスファイル１２からメソッドを読み出す（Ｓ２０１）。次に、中間コード解析部２０は、当該読み出したメソッドを解析し、メソッドに含まれるバイトコード命令を特定し（Ｓ２０２）、当該特定したバイトコード命令が特殊中間コード実行部３２では実行不能なバイトコード命令か否かを対応関係データベース１３の内容に基づいて判定する（Ｓ２０３）。このＳ２０３において、特殊中間コード実行部３２では実行不能なバイトコード命令が含まれないと判定された場合には、中間コード解析部２０は当該メソッドを特殊中間コード実行部３２で実行すべきことを記録する（Ｓ２０４）。一方、Ｓ２０３において、特殊中間コード実行部３２では実行不能なバイトコード命令が含まれると判定したとき、中間コード解析部２０は当該メソッドを一般中間コード実行部３１で実行すべきことを記録する（Ｓ２０５）。なお、記録の方法は第３および第４実施形態と同様でよい。以上の動作をクラスファイル１２に含まれる全てのメソッドについて実行し、中間コード解析部２０は処理を終了する。
【００８６】
以上のような第５実施形態によれば、特定のバイトコード命令を高速に実行することができるが一部のバイトコード命令を実行不能な特殊中間コード実行部３２と、全ての命令を実行することができる一般中間コード実行部３１とを、メソッド毎に使い分けることにより、特定のバイトコード命令を高速に実行することができるとともに、全てのバイトコード命令を実行することの可能な中間コード実行システム２００が提供される。
【００８７】
［第６実施形態］
次に、図１４を参照して、本発明の第６実施形態に係る中間コード実行システムについて詳細に説明する。
第６実施形態に係る中間コード実行システム３００は、中間コードとしてＪａｖａ（Ｒ）のクラスファイルを実行するものである。そして、図１４に示すように、この中間コード実行システム３００は、主としてクラスファイル３０２を格納した記憶部３０１と、不図示の処理部により所定のプログラムを実行することで仮想的に構成されるメソッド解析部３０７、第１のサブシステム３０８および第２のサブシステム３１０とから構成されている。
【００８８】
上記記憶部３０１に格納されたクラスファイル３０２は、Ｊａｖａ（Ｒ）言語により作成されたソースコードをコンパイルすることにより得られるものである。このクラスファイル３０２は、メソッド３０３〜３０５を含んでいる。
【００８９】
クラスファイル３０２は圧縮されたｊａｒファイルの状態で配信され、中間コード実行システム３００により伸張される場合もある。尚、このｊａｒファイルとは、Ｊａｖａ（Ｒ）プログラムを動作させるために必要なクラスファイルを一つにまとめたアーカイブ・ファイルである。但し、図１４では、既にクラスファイルの状態で記憶部３０１に格納されている。
【００９０】
第１のサブシステム３０８は、第１のインタープリタ３０９を有している。そして、この第１のインタープリタ３０９によりＪａｖａ（Ｒ）のクラスファイルに含まれるバイトコード命令を逐次的に解釈して実行することが可能である。この第１のインタープリタ３０９は、コンパイル時に生成される命令コードセット、即ち、ここではＪａｖａ（Ｒ）言語により作成されたソースコードをコンパイルすることで生成されるバイトコード命令の全てに対応した通常のインタープリタである。
【００９１】
一方、上記第２のサブシステム３１０は、前述の中間コード前処理装置と略同様の構成と機能とを有する前処理部３１１と、第２のインタープリタ３１２とを有している。前処理部３１１は、前述の通り、例えば「ｉｌｏａｄ」、「ｉｌｏａｄ」、「ｉａｄｄ」という命令パターンを「ｖ＿ｖ＿ｉａｄｄ」と置換するように、特定のバイトコード命令のパターンを対応する代替命令に置換する処理をクラスファイル３０２の各メソッドに施す。また、第２のインタープリタ３１２は、このように処理を施されたメソッドに対応するために、置換後にメソッドに追加される代替命令を解釈して実行することができるように構成されている。
【００９２】
より具体的には、前処理部３１１において特定の命令パターンを代替命令に置換することは、特定の命令パターンをなすオペコードおよびオペランドの組み合わせを、新たに定義した代替命令のオペコードおよびオペランドのセットに置換するということを意味している。尚、オペコードは命令の動作を表しており、オペランドは命令の対象となるスタックやレジスタ等を表している。
【００９３】
しかしながら、Ｊａｖａ（Ｒ）の場合には、オペコード長は１バイトと限られているためオペコードの種類を自由に増やすことはできない。そこで、第６実施形態では、通常は別の命令が割り付けられているオペコードに代替命令を割り当て、実行時には当該オペコードを代替命令として解釈し、置換前の命令パターンがなすものと実質的に同様の手順を実行するようにする。
【００９４】
すなわち、第６実施形態では、例えば、通常のバイトコード命令において浮動小数点演算の命令が割り付けられているオペコードに代替命令を割り付ける。そして、第２のインタープリタ３１２において、当該オペコードを代替命令に置換する前の命令パターンと同様の手順に解釈して実行する。
【００９５】
以上のようにすることで、第２のサブシステム３１０において、メソッドを前処理部３１１で前処理してから第２のインタープリタ３１２で実行することが可能となる。但し、前述した例では、第２のサブシステム３１０で浮動小数点演算の命令を含むメソッドを実行することはできなくなる。
【００９６】
上記メソッド解析部３０７は、実行されるメソッドに含まれる命令を解析しそれに応じてメソッドを第１のサブシステム３０８と第２のサブシステム３１０とのいずれで実行するかを選択する。そして、その結果を当該メソッドにマークする。即ち、第６実施形態におけるメソッド解析部３０７の機能は、第５実施形態における中間コード解析部２０の機能に対応している。
【００９７】
なお、本実施形態は主として請求項９ないし１４に記載の発明に対応しており、前記記憶部３０１は当該発明における記憶手段に相当し、前記前処理部３１１は前処理手段に相当し、前記第１および第２のインタープリタ３０９，３１０は第１および第２のインタープリタに相当し、メソッド解析部３０７は中間コード解析手段または選択部に相当している。
【００９８】
次に、以上のような構成の中間コード実行システム３００により、クラスファイル３１２に含まれるメソッド３０３を実行する手順について説明する。先ずメソッド解析部３０７によりメソッド３０３に含まれる命令を解析する。例えば、上述のように第２のサブシステム３１０において代替命令のオペコードを浮動小数点演算命令のオペコードに割り付けている場合には、メソッド３０３が浮動小数点演算の命令を含むか否かを判断する。そして、その結果からメソッド３０３を実行に用いるべきサブシステムをメソッド３０３の所定位置３０６にマークする。すなわち、メソッド３０３が浮動小数点演算の命令を含むと判断した場合には、第１のサブシステム３０９で実行することを選択する。そして、メソッド３０３が浮動小数点演算の命令を含まないと判断した場合には、第２のサブシステム３１０で実行することを選択する。
【００９９】
第１のサブシステム３０９で実行することを選択した時には、メソッド３０３をそのまま第１のインタープリタ３０９で逐次的に解釈して実行する。
【０１００】
一方、第２のサブシステム３１０で実行することを選択した時には、前処理部３１１によりメソッド３０３に前処理を施して、メソッド３０３に含まれる複数の命令がなす一定のパターンを代替命令に置換する。そして、この後、当該代替命令に対応した第２のインタープリタ３１２で逐次的に解釈して実行する。
【０１０１】
そして、以上のようにしてメソッド３０３の実行を終了したら、クラスファイル３０２の内容に応じて、メソッド３０３〜３０５のいずれかを逐次実行することをプログラムを終了するまで続けることになる。
【０１０２】
第６実施形態に係る中間コード実行システム３００の構成およびメソッド実行の手順によれば、一部の命令を実行することができないものの、メソッドに含まれる特定の命令パターンを代替命令に置換して実行することにより、命令間の冗長な処理を省いてメソッドを高速に実行することができる第２のサブシステム３１０と、メソッド実行の高速化は図られていないものの、全命令を実行することができる第１のサブシステム３０８とを有効に運用し、優れたパフォーマンスでクラスファイルを実行することができる。
【０１０３】
なお、上記第１から第６実施形態は、種々変形が可能である。例えば、上記第１および第２実施形態では、クラスファイル単位で前処理を施す場合を示したが、これらの実施形態でも第６実施形態と同様にメソッド単位で前処理を施すようにしても構わない。また、第３および第４実施形態における対応関係データベース１３内のデータ構造や、そこでのスコア設定についても上記に限られるものではない。
【０１０４】
また、第６実施形態における第１のサブシステム３０９および第２のサブシステムの組み合わせに替えて、いずれも特定の命令パターンを代替命令に置換する前処理部および代替命令を実行可能なインタープリタを有する２つのサブシステムを用いてもよい。このようなサブシステムの組み合わせを用いる場合、両サブシステムで互いに異なるオペコードに代替命令を割り付けることで、両サブシステムの使い分けが可能となる。サブシステムの数が３以上であってもよい。
【０１０５】
さらに、第６実施形態では、第２のサブシステム３１０においてメソッドの実行時に前処理を施す場合を示したが、１度実行したメソッドについては前処理後のメソッドを記憶部３０１に保持することにより前処理を省略するようにしてもよい。また、クラスロードの際に全メソッドをメソッド解析部３０７により解析し、第２のサブシステム３１０で実行するものとされたメソッドについて予め前処理を施しておいてもよい。さらに、コンパイル時に前処理を施してもよい。
【０１０６】
また、メソッド解析部３０７による解析や、前処理部３１１による前処理でのメモリ消費やオーバーヘッド等を許容し難い状況においては、これらを省略して第１のサブシステム３０８においてメソッドを実行する構成としてもよい。さらにまた、第６実施形態では、一例として浮動小数点演算の命令を割り付けられたオペコードに代替命令を割り付ける場合を示したが、これに限られるものではない。他の命令を割り当てられたオペコードに代替命令を割り付けてもよい。
【０１０７】
そして、上記第１から第６実施形態は、いずれもＪａｖａ（Ｒ）のクラスファイルをモディファイした中間コードに適用することも可能であるし、Ｊａｖａ（Ｒ）以外の言語であってもソースコードとネイティブコードとの間の中間的なコードで実行することを想定したものであれば適用することが可能である。
【０１０８】
以上、本発明の第１から第６実施形態について説明した。即ち、第１および第２の実施形態によると、所定の命令パターンを特定し、当該特定された命令パターンを短縮されたコードである代替命令に置換する。したがって、命令の種類を少なくすることができると共に、命令間の冗長な処理が省かれた新たな中間コードを得ることができる。しかも、この前処理で中間コードのサイズは大きくなることがない。また、前処理自体は単純な置換を行っているだけなので高速で実行可能である。さらに、得られた新たな中間コードを、代替命令に対応した実行系で実行することで、中間コードを高速で実行できる。
【０１０９】
そして、第３実施形態によれば、装置内に複数の中間コード実行部を設ける一方、中間コード解析部が、実行対象となる中間コードを解析することにより当該中間コードの効率的実行に適切な中間コード実行部を選択して記録する。したがって、その記録された中間コード実行部を選択することにより、中間コードを高速で実行することができる。また、中間コードに含まれる各バイトコード命令と、各中間コード実行手段における処理効率度のスコアの対応関係を記憶し、これに基づいて中間コードの実行に利用する中間コード実行部を特定する。したがって、各中間コード実行部の性質を考慮した細かな設定に基づいて、バイトコード命令の効率的実行に適切な中間コード実行部を判断することが可能になる。
【０１１０】
また、第４実施形態によれば、中間コードに含まれる各バイトコード命令と中間コード実行部における処理効率度スコアとの対応関係、およびスコアの範囲とこれに応じて特定する中間コード実行部との対応関係を記憶し、これらに基づいて、中間コードの実行に利用する中間コード実行部を特定している。従って、準備される中間コード実行部が多数に及ぶ場合でも、各中間コード実行部毎の処理効率度スコアを設定、および積算する必要がなくなるというメリットを享受できる。
【０１１１】
また、第５実施形態によれば、特殊中間コード実行部と、一般中間コード実行部という２種類の中間コード実行部を設け、特殊中間コード実行部が実行不能なバイトコード命令を含む中間コードについてのみ一般中間コード実行部に実行させる一方で、他の中間コードは特殊中間コード実行部に実行させる。したがって、特定の処理に特化した中間コード実行部と汎用的に利用できる中間コード実行部との間で中間コードの出力先を二者択一的に選択するといったケースにおいて、中間コードの実行を極めて高速に実現するシステムを提供できる。
【０１１２】
そして、上記第６実施形態によれば、一部の命令を実行することができないものの、メソッドに含まれる特定の命令パターンを代替命令に置検して実行することにより、命令問の冗長な処理を省いてメソッドを高速に実行することができる第２のサブシステムと、メソッド実行の高速化は図られていないものの、全命令を実行することができる第１のサブシステムとを有効に運用し、優れたパフォーマンスでクラスファイルを実行することができる。
【０１１３】
尚、本発明は、上記第１から第６実施形態に限定されることなく、その目的の範囲内で種々の改良・変更が可能である。例えば、上述した第３から第５の実施形態では、当該中間コードに含まれるバイトコード命令と当該バイトコード命令の効率的実行に適切な前記中間コード実行部との対応関係を予め記憶した構成とした。しかし、これに限定されるものではなく、前記対応関係を状況に応じて変化させるように構成してもよい。また、インタープリタ機能の少なくとも一部をハードウェアアクセラレータで実現することで、実行速度の高速化を図ることもできる。このハードウェアアクセラレータを採用することには、メモリ要求量が増加せず、さらに組み込み機器に適した方法が取れる等、種々の利点がある。
【０１１４】
【発明の効果】
本発明によれば、仮想計算機により実行される中間コードに前処理を施すことで実行速度を向上させ、組み込み機器に好適に適用することができ、中間コードを高速に処理することが可能な中間コード実行システムを提供することができる。
【図面の簡単な説明】
【図１】本発明の第１実施形態に係る中間コード前処理装置の構成を示すブロック図である。
【図２】本発明の第１実施形態に係る中間コード前処理装置により中間コードに前処理を施す過程を説明するためのフローチャートである。
【図３】本発明の第１実施形態に係る中間コード前処理装置による中間コードと代替命令の関連付けを説明するための対応図である。
【図４】本発明の第１実施形態に係る中間コード前処理装置により中間コードに前処理を施す過程の各段階を説明するための図である。
【図５】本発明の第２実施形態に係る中間コード実行システムの構成を示すブロック図である。
【図６】本発明の第２実施形態に係る中間コード実行システムによる処理を説明するためのフローチャートである。
【図７】本発明の第３実施形態に係る中間コード実行システムの構成を示すブロック図である。
【図８】本発明の第３実施形態に係る中間コード実行システムが採用する対応関係データベース１３のデータ構造図である。
【図９】本発明の第３実施形態に係る中間コード実行システムにおける中間コード解析部２０による動作を示すフローチャートである。
【図１０】本発明の第４実施形態に係る中間コード実行システムが採用する対応関係データベース１３のデータ構造図である。
【図１１】本発明の第４実施形態に係る中間コード実行システムが採用する対応関係データベース１３のデータ構造図である。
【図１２】本発明の第５実施形態に係る中間コード実行システムの構成を示すブロック図である。
【図１３】本発明の第５実施形態に係る中間コード実行システムが採用する中間コード解析部２０による動作を示すフローチャートである。
【図１４】本発明の第６実施形態に係る中間コード実行システムの構成を示すブロック図である。
【符号の説明】
１  中間コード前処理装置
２  中間コード実行システム
５  演算部
１０  記憶部
１２  クラスファイル
１３  対応関係Ｄ／Ｂ
２０  中間コード解析部
３０  中間コード実行部
３１  一般中間コード実行部
３２  特殊中間コード実行部
１０１  記憶部
１０２  処理部
１０３  入力部
２０１  記憶部
２０２  処理部
２０３  入力部
【図１】
0004234976.tif 000002
【図２】
0004234976.tif 000003
【図３】
0004234976.tif 000004
【図４】
0004234976.tif 000005
【図５】
0004234976.tif 000006
【図６】
0004234976.tif 000007
【図７】
0004234976.tif 000008
【図８】
0004234976.tif 000009
【図９】
0004234976.tif 000010
【図１０】
0004234976.tif 000011
【図１１】
0004234976.tif 000012
【図１２】
0004234976.tif 000013
【図１３】
0004234976.tif 000014
【図１４】
0004234976.tif 000015