(57)【要約】【課題】キャッシュメモリや内蔵メモリ等の高速メモリを有効に利用して、中間コードを高速で実行することができる中間コード実行装置を提供すること。【解決手段】第１の記憶手段に格納された中間コードに含まれるメソッドを実行する際に、当該メソッドを高速な第２の記憶手段にコピーし、第２の記憶手段から当該メソッドを呼び出して実行する中間コード実行装置。【選択図】　　　図１
2004005139.tif 000002
【特許請求の範囲】
【請求項１】
中間コードを実行する中間コード実行装置であって、
第１の記憶手段と、
前記第１の記憶手段よりも高速な第２の記憶手段とを具備し、
前記第１の記憶手段に格納された中間コードに含まれるルーチンを実行するにあたり、当該ルーチンを前記第１の記憶手段から前記第２の記憶手段にコピーし、前記第２の記憶手段から当該ルーチンを呼び出して実行することを特徴とする中間コード実行装置。
【請求項２】
中間コードを実行する中間コード実行装置であって、
第１の記憶手段と、
前記第１の記憶手段よりも高速な第２の記憶手段とを具備し、
前記第１の記憶手段に格納された中間コードに含まれるルーチンを実行するにあたり、当該ルーチンの呼び出しを前記第２の記憶手段から試行し、呼び出しに成功した場合にはそのまま当該ルーチンを実行し、呼び出しに失敗した場合には当該ルーチンを前記第１の記憶手段から前記第２の記憶手段にコピーした後に、前記第２の記憶手段から当該ルーチンを呼び出して実行することを特徴とする中間コード実行装置。
【請求項３】
記憶手段を具備し、前記記憶手段に格納された中間コードを実行する中間コード実行装置であって、前記記憶手段の特定領域に格納された中間コードを他の領域に格納された中間コードよりも高速に実行する機能を有し、
前記記憶手段の他の領域に格納された中間コードに含まれるルーチンを実行するにあたり、当該ルーチンを前記記憶手段の他の領域から特定領域にコピーし、前記記憶手段の特定領域から当該ルーチンを呼び出して実行することを特徴とする中間コード実行装置。
【請求項４】
記憶手段を具備し、前記記憶手段に格納された中間コードを実行する中間コード実行装置であって、前記記憶手段の特定領域に格納された中間コードを他の領域に格納された中間コードよりも高速に実行する機能を有し、
中間コードに含まれるルーチンを実行するにあたり、当該ルーチンの呼び出しを前記特定領域から試行し、呼び出しに成功した場合にはそのまま当該ルーチンを実行し、呼び出しに失敗した場合には前記他の領域から前記特定領域に当該ルーチンをコピーした後に、前記特定領域から当該ルーチンを呼び出して実行することを特徴とする中間コード実行装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、中間コード実行装置に関する。
【０００２】
【従来の技術】
ハードウェアやＯＳといった、コンピュータのプラットフォームに依存しないプログラムを提供することを目的として、各プラットフォーム上にソフトウェア的ないしハードウェア的な手法により仮想機械（ＶＭ；　Ｖｉｒｔｕａｌ　Ｍａｃｈｉｎｅ）を構築し、この仮想機械上でソースコードとオブジェクトコードとの間の中間的なコードを実行する方法が提案されている。このような方法を採用したプログラム言語の一つに、クラスファイルと呼ばれる中間コードの形式を採用したＪａｖａ（Ｒ）が挙げられる。
【０００３】
このような方法によれば、単一のコードを種々のプラットフォームに供給して実行することが可能となるため、個々のプラットフォームでしか実行できないオブジェクトコードを準備する必要がなくなり、ソフトウェア開発を効率化することができるという利点があるため、種々のプラットフォームにおいて仮想機械を構築することが行われている。さらに、近時ではコンピュータを組み込んだ種々の機器（以下、組込み機器という）においても仮想計算機を搭載することが試みられている。
【０００４】
しかしながら、ハードウェア資源が制限された組込み機器上に仮想機械を構築して中間コードを実行する場合、ＰＣやサーバーといった通常のコンピュータで用いられている仮想機械ではメモリ容量や機能の制限のため実装が困難であり、実装できたとしても実行速度等のパフォーマンスが低く非実用的である。ここで、例えばＪａｖａ（Ｒ）の場合には制限されたプラットフォーム向けの標準的な仮想機械も提供されているが、組込み機器のハードウェア構成は多種多様であり、標準的な仮想機械では個々のハードウェア構成が有する特性を有効に利用することができないため十分なパフォーマンスが得られない。
【０００５】
例えば、組込み機器のハードウェア構成が、通常のメモリに加えて、キャッシュメモリやＡＳＩＣの内蔵メモリ等のような高速メモリを備えていても、標準的な仮想機械ではこのような高速メモリを有効に利用することはできず、高速メモリを備えているというハードウェア構成の特性を生かして高いパフォーマンスを得ることは不可能である。
【０００６】
また、キャッシュメモリを備えたハードウェア構成でＣＰＵが備えたキャッシュ機能を利用するとしても、かかるキャッシュ機能は使用したデータを機械的にキャッシュメモリにコピーして蓄積しておき、以降に使用されるデータがキャッシュメモリ内に蓄積されていた場合にはキャッシュメモリ内のデータを使用するというものにすぎず、キャッシュメモリの扱う単位のサイズやキャッシュメモリの入れ替えアルゴリズムが中間コードの実行にはそぐわない場合も多い。そのような場合には、中間コードの実行にキャッシュ機能を利用しても、次に実行するコードがキャッシュメモリに格納されている頻度、すなわちヒット率は低く、中間コードの実行速度を向上する効果は十分に得られない。
【０００７】
【発明が解決しようとする課題】
本発明は、上記事情を鑑みてなされたものであって、キャッシュメモリや内蔵メモリ等のような高速メモリを有効に利用して、中間コードを高速で実行することができる中間コード実行装置を提供することを目的とする。
【０００８】
【課題を解決するための手段】
上記課題を解決するために、本発明の第１の観点は、中間コードを実行する中間コード実行装置であって、
第１の記憶手段と、
前記第１の記憶手段よりも高速な第２の記憶手段とを具備し、
前記第１の記憶手段に格納された中間コードに含まれるルーチンを実行するにあたり、当該ルーチンを前記第１の記憶手段から前記第２の記憶手段にコピーし、前記第２の記憶手段から当該ルーチンを呼び出して実行することを特徴とする中間コード実行装置を提供する。
【０００９】
上記本発明の第１の観点によれば、前記第１の記憶手段に格納された中間コードに含まれるルーチンを実行するにあたり、当該ルーチンを前記第１の記憶手段から前記第２の記憶手段にコピーし、前記第２の記憶手段から当該ルーチンを呼び出して実行するので、ルーチンを第１の記憶手段よりも読み出しが高速な第２の記憶手段から呼び出して実行することができ、これにより当該ルーチンの実行速度を向上することができる。なおかつ、このような構成では、中間コードをその実行単位であるルーチン毎に第２の記憶手段にコピーするので、一部のハードウェアが備えている機械的なキャッシュ機構よりも中間コードの実行速度を向上する効果に優れている。
【００１０】
また、本発明の第２の観点は、中間コードを実行する中間コード実行装置であって、
第１の記憶手段と、
前記第１の記憶手段よりも高速な第２の記憶手段とを具備し、
前記第１の記憶手段に格納された中間コードに含まれるルーチンを実行するにあたり、当該ルーチンの呼び出しを前記第２の記憶手段から試行し、呼び出しに成功した場合にはそのまま当該ルーチンを実行し、呼び出しに失敗した場合には当該ルーチンを前記第１の記憶手段から前記第２の記憶手段にコピーした後に、前記第２の記憶手段から当該ルーチンを呼び出して実行することを特徴とする中間コード実行装置を提供する。
【００１１】
上記本発明の第２の観点によれば、上述した第１の観点の作用効果に加えて、当該ルーチンの呼び出しを前記第２の記憶手段から試行し、呼び出しに成功した場合にはそのまま当該ルーチンを実行し、呼び出しに失敗した場合には当該ルーチンを前記第１の記憶手段から前記第２の記憶手段にコピーした後に、前記第２の記憶手段から当該ルーチンを呼び出して実行することにより、呼び出すルーチンが第２の記憶手段に存在するか否かを判断するステップを経ずに第２の記憶手段からルーチンの呼び出しが行われるから、呼び出すルーチンが既に第２の記憶手段にコピー済みである場合には極めて迅速に当該ルーチンの実行を行うことができる。呼び出すルーチンが第２の記憶手段にコピー済みでない場合には、第２の記憶手段から当該ルーチンを呼び出す分だけオーバーヘッド増となるが、コピー済みの場合における高速化の効果は極めて高いので、中間コード全体としての実行速度を向上することが可能である。
【００１２】
さらに、本発明の第３の観点は、記憶手段を具備し、前記記憶手段に格納された中間コードを実行する中間コード実行装置であって、前記記憶手段の特定領域に格納された中間コードを他の領域に格納された中間コードよりも高速に実行する機能を有し、
前記記憶手段の他の領域に格納された中間コードに含まれるルーチンを実行するにあたり、当該ルーチンを前記記憶手段の他の領域から特定領域にコピーし、前記記憶手段の特定領域から当該ルーチンを呼び出して実行することを特徴とする中間コード実行装置を提供する。
【００１３】
上記本発明の第３の観点によれば、記憶手段の特定領域に格納された中間コードを他の領域に格納された中間コードよりも高速に実行する機能を有する中間コード実行装置を前提として、前記記憶手段の他の領域に格納された中間コードに含まれるルーチンを実行するにあたり、当該ルーチンを前記記憶手段の他の領域から特定領域にコピーし、前記記憶手段の特定領域から当該ルーチンを呼び出して実行するので、中間コードが格納された領域によって実行速度が異なる特性の環境であっても、常に中間コードを高速で実行することができる。なおかつ、このような構成では、中間コードをその実行単位であるルーチン毎に特定領域にコピーするので、第１の観点と同様にルーチン単位で中間コードの実行速度を向上することができる。
【００１４】
さらにまた、本発明の第４の観点は、記憶手段を具備し、前記記憶手段に格納された中間コードを実行する中間コード実行装置であって、前記記憶手段の特定領域に格納された中間コードを他の領域に格納された中間コードよりも高速に実行する機能を有し、
中間コードに含まれるルーチンを実行するにあたり、当該ルーチンの呼び出しを前記特定領域から試行し、呼び出しに成功した場合にはそのまま当該ルーチンを実行し、呼び出しに失敗した場合には前記他の領域から前記特定領域に当該ルーチンをコピーした後に、前記特定領域から当該ルーチンを呼び出して実行することを特徴とする中間コード実行装置を提供する。
【００１５】
上記本発明の第４の観点によれば、上述した第３の観点の作用効果に加えて、当該ルーチンの呼び出しを前記特定領域から試行し、呼び出しに成功した場合にはそのまま当該ルーチンを実行し、呼び出しに失敗した場合には前記他の領域から前記特定領域に当該ルーチンをコピーした後に、前記特定領域から当該ルーチンを呼び出して実行するので、呼び出すルーチンが特定領域に存在するか否かを判断するステップを経ずに特定領域から当該ルーチンの呼び出しを行うことができ、当該ルーチンが第２の記憶手段にコピー済みである場合には極めて迅速に当該ルーチンを実行することができる。呼び出すルーチンが特定領域にコピー済みでない場合には、特定領域から当該ルーチンを呼び出すステップを無駄に行うことになるが、コピー済みである場合の実行速度を向上する効果は極めて高いので、中間コード全体としての実行速度は向上する。
【００１６】
なお、上記本発明の第１から第４の観点におけるルーチンとは、Ｊａｖａ（Ｒ）言語におけるメソッド、他言語における関数ないし手続等といったサブルーチンさらにはメインルーチンを含むものであり、一連の情報処理を行うプログラムないしプログラム群のコードにおける機能的な単位をいうものとする。
【００１７】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照しながら詳細に説明する。図１は、本発明の一実施形態に係る中間コード実行装置を概略的に示す図面である。図１に示すように、中間コード実行装置１００は、処理手段１１と、記憶手段１２と、処理手段１１上に構成されたＶＭ（Ｖｉｒｔｕａｌ　Ｍａｃｈｉｎｅ；仮想機械）１３とを有しており、記憶手段１２にはクラスファイル１４が格納されている。
【００１８】
図２は、図１に示した中間コード実行装置１００における処理手段１１および記憶手段１２の構成について、より詳細に示した図面である。図２に示すように、処理手段１１は、プロセッサ２１を有しており、さらに高速メモリ２２を内蔵している。プロセッサ２１としては、例えば、ＣＰＵ、ＭＰＵ、ＤＳＰまたはこれらの組み合わせ等を用いることができ、さらにコプロセッサを含んだ構成としてもかまわない。このような構成の処理手段１１は、代表的にはＡＳＩＣとして構成されたものを用いることができる。
【００１９】
処理手段１１のプロセッサ２１には外部バス２３が接続されており、記憶手段１２はこの外部バス２３に接続されたＲＯＭ２４およびＲＡＭ２５を有している。ＲＯＭ２５としては書き換え可能なフラッシュメモリを用いてもよく、また、ＲＡＭ２５としてはバッテリーによりバックアップされたＳＲＡＭ、ＤＲＡＭ、ＳＤＲＡＭ、ＦＣＲＡＭ等を用いることができる。記憶手段１２をこのように構成した場合には、ＲＯＭ２４をストレージ的な用途に用い、ＲＡＭ２５をワークメモリ的な用途に用いることができる。また、ＲＡＭ２５は中間コード実行システム１００に追加されたプログラムのストレージとしても利用可能である。
【００２０】
上記において、処理手段１１が備える高速メモリ２２（第２の記憶手段）は、外部バス２３を介さずにプロセッサ２１に接続されており、ＲＯＭ２４およびＲＡＭ２５からなる記憶手段１２（第１の記憶手段）よりも高速である。本実施形態は、かかるハードウェア的な特徴を有効に活用して、中間コードの高速な実行を図るものである。
【００２１】
図１に示したＶＭ１３は、後述するクラスファイル１４を実行する機能を備えたＪａｖａ（Ｒ）仮想機械（Ｖｉｒｔｕａｌ　Ｍａｃｈｉｎｅ）である。このＶＭ２１は処理手段１１上にソフトウェア的に構成したものであっても、ハードワイヤードロジックやコプロセッサ等のようにハードウェア的な構成であってもよく、ソフトウェアとハードウェアとの組み合わせにより構成しても構わない。
【００２２】
クラスファイル１４は、Ｊａｖａ（Ｒ）言語により作成されたソースコードをコンパイルすることに得られる中間コードであり、ＶＭ１３により実行可能なバイトコード命令を含んでいる。クラスファイル１４はＶＭ１３上で実行することを前提としているので、バイトコード命令は処理手段１１やＯＳの種類に依存しない形態となっている。クラスファイル１４は、互いに関連する複数のファイルをパッケージ化したＪＡＲファイル形式で配信するようにしてもよい。
【００２３】
以下、上述した中間コード実行システム１００でクラスファイル１４を実行する方法について説明する。図３は、ＪＡＲファイル３０の形態で配信された中間コードの実行中におけるＲＡＭ２５および内部ＲＡＭ２２内のデータ配置を概略的に示す図面である（ＲＯＭ２４は図示略）。図３に示すように、中間コードの実行時には、ＪＡＲファイル３０から展開されたクラスファイル１４がＲＡＭ２５内に配置される。ここでは、クラスファイル１４がクラスＡおよびクラスＢを含んでいる場合を示す。クラスＡおよびクラスＢは、それぞれ定数もしくは変数としてのフィールドと、関数もしくは手続としてのメソッドとを含んでいる。
【００２４】
ＶＭ１３は、上記クラスファイル１４に含まれるクラスからインスタンスを形成してＲＡＭ２５のＪａｖａ（Ｒ）ヒープ領域３４に配置しながら、クラスファイル３１に含まれるバイトコード命令を実行する。図３には、クラスＡからインスタンスＡ１およびインスタンスＡ２が形成され、クラスＢからインスタンスＢ１が形成されている場合を示す。
【００２５】
この際、ＶＭ１３は各メソッドを実行するにあたり、高速メモリ２２にメソッドを配置して、高速メモリ２２からメソッドを呼び出して実行する。高速メモリ２２はＲＡＭ２５よりも高速なため、このようにすることでメソッドの実行を高速化することができ、ひいては中間コードの実行速度を向上することが可能となる。高速メモリ２２には、ＶＭ１３が配置するメソッドの他に、予め所定の固定位置にｄｕｍｍｙメソッドが配置されている。このｄｕｍｍｙメソッドは、ＶＭ１３に呼び出された際に自己がダミーであることを通知する機能を有している。
【００２６】
また、ＶＭ１３は、上述のようにしてインスタンスＡ１，Ａ２，Ｂ１を形成するとともに、ＲＡＭ２５上にメソッド構造体３８を形成する。メソッド構造体３８は、インスタンスＡ１，Ａ２，Ｂ１のそれぞれが有するメソッドに関する種々のデータを集積したものである。本実施形態では、このメソッド構造体３８を、各メソッドの高速メモリ上の位置を示すアドレスまたはオフセットの値ＸＸＸＸと、ＲＡＭ２５上の位置を示すアドレスまたはオフセットの値ＹＹＹＹとを含んだ構成とし、値ＸＸＸＸの初期値として高速メモリ２２に格納されたｄｕｍｍｙを指し示す値を設定する。
【００２７】
以下、ＶＭ１３が各メソッドを呼び出して実行する基本的な手順について、図４のフローチャートに基づいて詳細に説明する。この手順は、ＶＭ１３がクラスファイル１４のバイトコード命令を順次実行し、任意のメソッドを呼び出す命令を実行する際に開始される（ＳＴＡＲＴ）。
【００２８】
まず、ＶＭ１３がメソッド構造体３８を参照して呼び出すメソッドのＸＸＸＸ値、すなわち高速メモリ２２上の位置を示すアドレスまたはオフセットの値を取得し（ＳＴ１０１）、このＸＸＸＸ値に基づいて高速メモリ２２からメソッドを呼び出す（ＳＴ１０２）。
【００２９】
次に、ＶＭ１３は呼び出したメソッドがｄｕｍｍｙメソッドであるか否かを判断する（ＳＴ１０３）。ここで、メソッド構造体３８のＸＸＸＸ値は、その初期値が高速メモリ２２上のｄｕｍｍｙメソッドを指すアドレスまたはオフセットに設定されている。したがって、メソッドをはじめて呼び出す場合には必ずｄｕｍｍｙメソッドが呼び出され、ＶＭ１３はＳＴ１０３において呼び出されたメソッドがｄｕｍｍｙであると判断する。
【００３０】
この場合、次いでＶＭ１３は、メソッド構造体３８を参照して本来呼び出すべきメソッドのＹＹＹＹ値を取得し（ＳＴ１０４）、このＹＹＹＹ値に基づいてＲＡＭ２５から高速メモリ２２に当該メソッドをコピーする（ＳＴ１０５）とともに、メソッド構造体３８における当該メソッドのＸＸＸＸ値をコピーした位置のアドレスまたはオフセットの値に書き換える（ＳＴ１０６）。このようにして呼び出すべきメソッドを高速メモリ２２にコピーして、メソッド構造体３８のＸＸＸＸ値を書き換えた後、そのＸＸＸＸ値を用いて高速メモリ２２からコピーされたメソッドを呼び出し（ＳＴ１０７）、実行する（ＳＴ１０８）。
【００３１】
一方、上記の手順で高速メモリ２２上にコピーされたメソッドを２回目以降に実行する場合、メソッド構造体３８のＸＸＸＸ値は高速メモリ２２にコピーされたメソッドの位置を指す値に書き換えられているので、本来呼び出すべきメソッドが高速メモリ２２から正しく呼び出される。したがって、ＳＴ１０３において呼ぶ出されたメソッドはｄｕｍｍｙでないと判断され、ＶＭ１３は呼び出されたメソッドをそのまま実行する（ＳＴ１０８）。
【００３２】
上記の手順によれば、メソッドを常に高速メモリ２２から呼び出して実行することができ、これによりメソッドの実行速度を向上して、中間コードであるクラスファイル３２の実行速度を高速化することが可能となる。
【００３３】
また、メソッドはＪａｖａ（Ｒ）言語における関数ないし手続といった処理の単位であり、クラスファイル３２の実行はこのメソッドを単位にして行われることが通常である。したがって、本実施形態のようにメソッド単位で高速化を図ることによって、使用済みのデータを機械的に保存して再利用するキャッシュメモリよりも優れた効果を得ることができる。
【００３４】
これに加えて、上記の手順では、呼び出すメソッドが高速メモリ２２上に存在するか否かを判断する工程を行うことなく、高速メモリ２２からメソッドの呼び出しを行うことができるので、高速メモリ２２にメソッドがコピー済みの場合（上記では１度実行したメソッドを２回目以降に実行する場合）には、極めて迅速にメソッドを実行することができる。呼び出すメソッドが高速メモリ２２にコピー済みでない場合（上記ではメソッドを初めて実行する場合）には上記ＳＴ１０２を無駄に行うことになるものの、コピー済みの場合にメソッドの実行速度を向上する効果は極めて高いので、総合的なクラスファイル１４の実行速度は向上される。
【００３５】
また、上記の基本的な手順においては、高速メモリ２２の空き容量に関わらずにメソッドをコピーしているが、容量の制限された高速メモリ２２にメソッドのコピーを繰り返していると、高速メモリ２２の空き容量が足りなくなるおそれがある。このような不都合は、例えば、高速メモリ２２にコピーされているメソッドから、次に実行するメソッドと同等サイズのメソッドを選択し、次に実行するメソッドで選択されたメソッドを上書きする方法を採用することにより回避することができる。より詳細には、例えば、高速メモリ２２内のメソッドを調査し、最初に見出された同等サイズのメソッドを上書きする。このようにした場合には、上書きするメソッドを選択する際のオーバーヘッドを低減することができる。また、同等サイズのメソッドのうち、直近における使用頻度が最も低いものを選択してもよく、この場合にはキャッシュとして用いる高速メモリ２２のヒット率を向上することができる。ただし、いずれの場合も高速メモリ２２内のメソッドを上書きする際には、メソッド構造体３８において、上書きするメソッドのＸＸＸＸ値を上書きした位置に対応させ、上書きされるメソッドについてＸＸＸＸ値を初期値（ｄｕｍｍｙメソッドを指す値）に書き戻す必要がある。
【００３６】
さらに、通常のＪａｖａ（Ｒ）バイトコード命令に加えて、上記の手順におけるＳＴ１０４〜ＳＴ１０８に対応した処理を行う拡張バイトコード命令をＶＭ１３で実行可能な構成とし、ｄｕｍｍｙメソッドに当該拡張バイトコード命令を記述することによって、ＶＭ１３がｄｕｍｍｙメソッドを呼び出した場合には、この拡張バイトコード命令を実行することにより、図４と同様の手順を行うようにしても構わない。
【００３７】
なお、本発明は上記実施の形態に限られるものではなく、種々変形が可能である。例えば、上記実施形態ではＲＡＭ２５に格納されたＪＡＲファイルからクラスファイル３２を展開して実行する場合について説明したが、本発明はＲＯＭ２４に予め格納されたクラスファイルを実行する場合にも適用することができる。また、上記実施形態では高速メモリ２２（第２の記憶手段）としてＡＳＩＣの内蔵メモリを用いる構成としたが、このような構成に限られるものでもない。本発明の本質は、低速な第１の記憶手段から高速な第２の記憶手段にメソッドをコピーすることによりメソッドの呼び出しおよび実行を高速化することにある。したがって、速度の異なる複数の記憶手段がシステムに存在する場合には、相対的に低速な任意の記憶手段を第１の記憶手段として用い、相対的に高速な任意の記憶手段を第２の記憶手段として用いることができる。
【００３８】
また、上記実施の形態では、ＶＭ１３がメソッド構造体３８を参照して呼び出すメソッドの位置を求める場合について示したが、メソッド構造体３８を用いることは必須ではなく、別の方法によりメソッドの位置を求めるようにしても構わない。
【００３９】
さらに、本発明は、特定領域に格納された中間コードを他の領域に格納された中間コードよりも高速に実行する機能を有するＶＭを用いる場合にも適用することができる。この場合には、メソッドを特定領域にコピーし、特定領域からコピーされたメソッドを呼び出して実行する構成とすることにより、上記実施形態と同様に中間コードの実行速度を向上することができる。さらに、メソッドが特定領域に存在することを前提として呼び出し、呼び出しに成功した場合にはそのままメソッドを実行し、呼び出しに失敗した場合には特定領域にメソッドをコピーした後に、特定領域からメソッドを呼び出して実行する構成とすることにより、実行速度の向上を低オーバーヘッドで実現することができる。
【００４０】
さらにまた、本発明は、Ｊａｖａ（Ｒ）以外の言語における中間コードを実行する中間コード実行装置に適用することも可能であり、その場合にはメソッドに限らず、各言語における関数、手続、サブルーチン等の呼び出しおよび実行を上記と同様の手順で高速化することにより、中間コードの実行速度を向上することができる。
【００４１】
【発明の効果】
以上説明したように、本発明によれば、第１の記憶手段に格納された中間コードに含まれるルーチンを実行するにあたり、当該ルーチンを第１の記憶手段から高速な第２の記憶手段にコピーし、第２の記憶手段から当該ルーチンを呼び出して実行するので、ルーチンを第１の記憶手段よりも高速な第２の記憶手段から呼び出して実行することができ、これにより当該ルーチンの実行速度を向上することができる。なおかつ、このような構成では、中間コードをその実行単位であるルーチン毎に第２の記憶手段にコピーするので、一部のハードウェアが備えている機械的なキャッシュ機構よりも中間コードの実行速度を向上する効果に優れている。
【００４２】
さらに、当該ルーチンの呼び出しを第２の記憶手段から試行し、呼び出しに成功した場合にはそのまま当該ルーチンを実行し、呼び出しに失敗した場合には当該ルーチンを第１の記憶手段から第２の記憶手段にコピーした後に、第２の記憶手段から当該ルーチンを呼び出して実行することにより、呼び出すルーチンが第２の記憶手段に存在するか否かを判断するステップを経ずに第２の記憶手段からルーチンの呼び出しが行われるから、極めて低オーバーヘッドでルーチンの実行を高速化することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る中間コード実行装置を概略的に示す図面。
【図２】図１に示した中間コード実行装置の処理手段および記憶手段の構成について、より詳細に示した図面。
【図３】中間コードの実行中におけるＲＡＭ２５および内部ＲＡＭ２２内のデータ配置を概略的に示す図面。
【図４】ＶＭ１３が各メソッドを呼び出して実行する基本的な手順を示すフローチャート。
【符号の説明】
１１；処理手段
１２；ＶＭ
１３；記憶手段
１４；クラスファイル
２１；プロセッサ
２２；高速メモリ
２３；外部バス
２４；ＲＯＭ
２５；ＲＡＭ
３０；ＪＡＲファイル
３４；Ｊａｖａ（Ｒ）ヒープ領域
３８；メソッド構造体
【図１】
2004005139.tif 000003
【図２】
2004005139.tif 000004
【図３】
2004005139.tif 000005
【図４】
2004005139.tif 000006