(57)【要約】【課題】  ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法を提供する。【解決手段】  バイトコードを変換させた複数のマシンコードを保存するＤＢキャッシュと、マシンコードに含まれた所定の命令語を除去して、新たなマシンコードに変更させるマシンコード変更部と、マシンコードの演算に必要なスタックデータ及び演算を行うレジスタ領域を提供するレジスタファイルを管理するレジスタ管理部と、マシンコードについてのベーシックブロック情報、及びレジスタファイルのスタックデータについてのｓｐｉｌｌ及びｆｉｌｌ実行情報を保存するマシンコード情報保存部とを備えるジャバ仮想マシンでバイトコードの実行時間を短縮するシステム。【選択図】      図２
2006323844.tif 000002
【特許請求の範囲】
【請求項１】
バイトコードを変換させた複数のマシンコードを保存するＤＢキャッシュと、
前記マシンコードに含まれた所定の命令語を除去して、新たなマシンコードに変更させるマシンコード変更部と、
前記マシンコードの演算に必要なスタックデータ及び演算を行うレジスタ領域を提供するレジスタファイルを管理するレジスタ管理部と、
前記マシンコードについてのベーシックブロック情報、及び前記レジスタファイルのスタックデータについてのｓｐｉｌｌ及びｆｉｌｌ実行情報を保存するマシンコード情報保存部と、を備えるジャバ仮想マシンでバイトコードの実行時間を短縮するシステム。
【請求項２】
前記レジスタ管理部は、前記マシンコード情報保存部に保存されたｓｐｉｌｌ及びｆｉｌｌ実行情報に基づいてマシンコード演算に必要なスタックデータをレジスタファイルに持ってくるｆｉｌｌと、演算を行うレジスタ領域を確保するためにレジスタファイルに位置したスタックデータを移動させるｓｐｉｌｌを行う請求項１に記載のジャバ仮想マシンでバイトコードの実行時間を短縮するシステム。
【請求項３】
前記マシンコード変更部は、前記ＤＢキャッシュに保存されたマシンコードがベーシックブロックの開始アドレスである場合、マシンコード変更を行うマシンコードである請求項１に記載のジャバ仮想マシンでバイトコードの実行時間を短縮するシステム。
【請求項４】
前記マシンコード変更部が除去した所定の命令語は、ポップタイプ及びプッシュタイプのマシンコード命令語である請求項１に記載のジャバ仮想マシンでバイトコードの実行時間を短縮するシステム。
【請求項５】
バイトコードをマシンコードに変換して保存するステップと、
前記マシンコードの演算実行に必要なスタックデータ及び演算を行うレジスタが確保されたレジスタファイルを提供するステップと、
前記マシンコードに含まれた所定の命令語を除去して新たなマシンコードに変更するステップと、
前記変更されたマシンコードの演算を行うステップと、を含むジャバ仮想マシンでバイトコードの実行時間を短縮する方法。
【請求項６】
前記マシンコードの演算を実行に必要なスタックデータ及び演算を行うレジスタが確保されたレジスタファイルを提供するステップは、前記マシンコードの演算の実行に必要なスタックデータを提供されるためにｆｉｌｌを行い、前記マシンコードの演算を行うレジスタを確保するためにｓｐｉｌｌを行う請求項５に記載のジャバ仮想マシンでバイトコードの実行時間を短縮する方法。
【請求項７】
前記マシンコード変更部が除去した所定の命令語は、ポップタイプ及びプッシュタイプのマシンコード命令語である請求項５に記載のジャバ仮想マシンでバイトコードの実行時間を短縮する方法。
【請求項８】
前記マシンコード変更は、マシンコードのベーシックブロックアドレスが開始アドレスである場合に行われるマシンコード変更である請求項５に記載のジャバ仮想マシンでバイトコードの実行時間を短縮する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ジャバ仮想マシン（Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ：ＪＶＭ）でバイトコードの実行時間を短縮するシステム及び方法に係り、さらに詳細には、マシンコードの演算実行時にスタックメモリの接近を最小化して全体バイトコードの実行時間を短縮できる、ＪＶＭでバイトコードの実行時間を短縮するシステム及び方法に関する。
【背景技術】
【０００２】
一般的に、ジャバ（Ｊａｖａ（登録商標）は、ネットワークプログラミングで事実上標準になった客体指向プログラミング言語である。現在ジャバは、内蔵型システムまたはマイクロプロセッサーやマイクロコントローラを含むシステムの領域に利用されている。
【０００３】
そして、客体指向、自動ガーベジコレクション、及びランタイム保安特徴のようなジャバ環境の長所のうち一部は、内蔵型アプリケーションで成功的に使われうる。
【０００４】
しかし、ランタイム環境は、インタープリタまたはＪＩＴ（ｊｕｓｔ−ｉｎ−ｔｉｍｅ）コンパイラーのような仮想マシンでジャバコードを実行させることと関連したリソースオーバーヘッドのために、システム設計者に困難を与えている。
【０００５】
バイトコード（ｂｙｔｅ  ｃｏｄｅ）と呼ばれるジャバ２進コードは、一つ以上のクラスファイルに分散されている。バイトコードは、ジャバプログラムの実行のために特別に設計された仮想的なコンピュータ（ｈｙｐｏｔｈｅｔｉｃａｌ  ｃｏｍｐｕｔｅｒ）の命令語である。
【０００６】
従来のＣＰＵは、このようなバイトコードを行えないので、このバイトコードをＪＶＭと呼ばれるソフトウェア層で行う。ＪＶＭは、抽象的なマシンスペック（ｓｐｅｃｉｆｉｃａｔｉｏｎ）であり、ＪＶＭスペックは、サンマイクロシステム社（Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ）により発表された。
【０００７】
ジャバプログラム実行過程を説明すれば、‘．ｊａｖａ（登録商標）’形式のジャバプログラムは、コンパイラーによりコンパイルされて‘．ｃｌａｓｓ’のジャバ実行ファイルに変換され、このようなクラスファイルはインタープリタによりインタープリトされて実際行われる。ここで、インタープリトは、プログラム実行に必要なあらゆるクラスをロードするクラスローディング、クラスファイルフォーマット、接近権限、データ型変換などについての検査を行う検証、実際プログラム実行の３ステップで進む。
【０００８】
また、ジャバの階層構造は、ジャバ言語で作成されたジャバプログラムと、ＪＶＭ及びジャバＡＰＩを含むジャバプラットホームと、ハードウェア依存的プラットホームを含む。このような構造下でジャバの実行ファイルは、特定プラットホームとは関係ないバイトコードであるので、いかなるシステムで開発したかに関係なくジャバ実行環境（ＪＲＥ）さえあれば実行可能である。
【０００９】
これにより、ジャバ技術は、ＷＯＲＡ（Ｗｒｉｔｅ  Ｏｎｃｅ  Ｒｕｎ  Ａｎｙｗｈｅｒｅ）を保証するプラットホーム中立性、動的拡張性など多くの長所により色々な所で使われている。例えば、ウェブサービスのためのサーバ技術として活発に使われて大部分のウェブアプリケーションサーバがジャバ技術を基盤としており、エンベデッド機器では、ユーザサービスを提供するか、制御アプリケーションを行うための環境としてジャバ技術を採用する例が多くなっている。
【００１０】
図１は、従来マシンコードの演算実行のための命令語処理過程を示す図である。
【００１１】
図示されたように、ベーシックブロックの最初のアドレス（ｏｐ（Ａ０））であるマシンコードは、現在ローカルポインタ（ｌｏｃａｌ  ｐｏｉｎｔ：ｌｐ）の位置から＋４の位置に保存されたデータをレジスタ１  ｒ１に移動せよという命令語を行い、レジスタ１  ｒ１に保存されたデータを現在スタックポインタ（ｓｔａｃｋ  ｐｏｉｎｔ：ｓｐ）の位置から＋４の位置に保存した後、スタックポインタのアドレスを＋４した位置のアドレスに変えよという命令語を行う。
【００１２】
ベーシックブロックアドレスがｏｐ（Ａ１）であるマシンコードは、現在ローカルポインタの位置から＋８の位置に保存されたデータをレジスタ１に移動せよという命令語を行い、レジスタ１に保存されたデータを現在スタックポインタの位置から＋４の位置に保存した後、スタックポインタのアドレスを＋４した位置のアドレスに変えよという命令語を行う。
【００１３】
ベーシックブロックアドレスがｏｐ（Ａ２）であるマシンコードは、現在スタックポインタの位置から−４の位置に保存されたデータをレジスタ２  ｒ２に移動せよという命令語を行い、現在スタックポインタの位置から−４の位置に保存されたデータをレジスタ１に移動せよという命令語を行う（１）。また、レジスタ２とレジスタ１とを算術的に演算した後、演算された結果をレジスタ１に移動せよという命令語を行い（２）、レジスタ１に保存されたデータを現在スタックポインタの位置から＋４の位置に保存した後、スタックポインタのアドレスを＋４の位置のアドレスに変えよという命令語を行う（３）。
【００１４】
ここで、マシンコードには、ポップタイプ（ｐｏｐ  ｔｙｐｅ）１０、プッシュタイプ（ｐｕｓｈ  ｔｙｐｅ）３、コアタイプ（ｃｏｒｅ  ｔｙｐｅ）２など３タイプのマシン命令語が存在する。ポップタイプ命令語は、スタック領域から上位部分のデータをレジスタに移すものであり、プッシュタイプ命令語は、レジスタに保存されたデータをスタック領域に移すものであり、コアタイプ命令語は、ポップタイプとプッシュタイプを除外したあらゆる命令語をいう。また、ベーシックブロックで命令語の順序は、ポップタイプ、プッシュタイプ、コアタイプ順に現れ、ポップタイプの命令語は、順次的かつ連続的な逆順の（例えば、Ｒｅｇ＿ｋ、Ｒｅｇ＿（ｋ−１）、…Ｒｅｇ＿１）レジスタを使用し、プッシュタイプの命令語は順次的に連続的な（例えば、Ｒｅｇ＿１、…、Ｒｅｇ＿ｐ）レジスタを使用し、コアタイプの命令語は、ポップタイプ及びプッシュタイプで使用するレジスタを使用する。
【００１５】
ベーシックブロックアドレスがｏｐ（Ａ４）であるマシンコードは、現在スタックポインタの位置から−４の位置に保存されたデータをレジスタ１に移動せよという命令語を行い、レジスタ１に保存されたデータを現在ローカルポインタの位置から＋１２の位置に保存せよという命令語を行う。
【００１６】
これにより、同一ベーシックブロックＡ０ないしＡ４のバイトコードを行うために、１０個のマシンコードがスタックに６回ｌｏａｄ／ｓｔｏｒｅせよという命令語と、ローカルに３回ｌｏａｄ／ｓｔｏｒｅせよという命令語を行う。
【００１７】
一方、ジャバ環境でメモリアクセスを減らすための方法として、バイトコードフォールディング、ＤＢキャッシュ、及びスタックレジスタを利用した。
【００１８】
バイトコードフォールディングとは、バイトコード実行時に多く使われる３〜４個の連続したバイトコードのパターンをあらかじめ把握して、そのようなパターンが感知されれば、それぞれのバイトコードに該当するマシンコード（ｍａｃｈｉｎｅ  ｃｏｄｅ）を行う代わり、パターン全体に該当する最適化されたマシンコードを代わりに行う方法である。これにより、バイトコードフォールディングによりパターンに属する１つのバイトコードの演算結果をレジスタに保存し、パターンに属する他のバイトコードがそれを利用する時にレジスタを直接活用可能にすることによって、スタックメモリアクセスの回数を短縮できる。
【００１９】
バイトコードフォールディングの典型的な動作過程を説明すれば、行われるバイトコードから連続した３〜４個のバイトコードを検索して、既定の制限された数のパターンと一致するかどうかを検索する。次いで、一致するパターンが把握されればそのバイトコードを行う代わりに準備されたマシンコードを行い、実行後にパターンに該当するバイトコード数ほど行われるバイトコードの位置を修正する。一方、行われるバイトコードが所定パターンと一致するパターンでなければ、各バイトコードの実行を続ける。
【００２０】
しかし、バイトコードフォールディングは、バイトコードを行うのに必要な命令語の数を減らしつつ、不要なメモリアクセス回数を減らすことによって性能の向上をもたらすことができるが、既定のパターンのみを適用させうるために適用範囲が制限的であり、フォールディングユニットで処理しないバイトコード使用パターンを持つアプリケーションには大きい効果を奏しないという問題点がある。
【００２１】
ＤＢキャッシュとは、ピコジャバプロセッサー内で具現され、パイプラインステップ中に挿入された一種のインストラクションキャッシュとして行われるバイトコードと、バイトコードフォールディングの結果として生成されたマシンコードをフォールディングユニットから入力されて保存する領域である。ここで、ＤＢキャッシュは、一種のインストラクションキャッシュであるために、メモリに保存されたインストラクションアクセスを減らし、特に既にフォールディングされたバイトコードを保存する場合は再びフォールディングを行わなくてもよいために、さらに性能を向上させることができる。
【００２２】
ＤＢキャッシュの動作過程を説明すれば、フェッチステップでＤＢキャッシュに一致するインストラクションアドレスがあるかを確認し、確認結果、一致しなければ一般的なパイプライン実行過程を進めると同時に、インストラクションフォールディングユニットにバイトコードを伝達する。
【００２３】
それからインストラクションフォールディングユニットはバイトコードフォールディングを行って、ＤＢキャッシュにフォールディングされた結果やバイトコードを伝達して保存する。もし、フェッチステップで一致するインストラクションのアドレスがあれば、ＤＢキャッシュで選択されたインストラクションを行う。
【００２４】
このようにＤＢキャッシュからバイトコードを持ってくる場合にはメモリの接近回数を減らす長所があり、フォールディングされたマシンコードを持ってくる場合には、メモリ接近回数を減らす長所に、さらに追加的にフォールディングにかかる時間を短縮できる。
【００２５】
しかし、ＤＢキャッシュは、バイトコード及びフォールディングされた結果であるマシンコードを追加的なキャッシュに保管しておくことによってメモリアクセスを減らし、再びフォールディング作業をせずにすむ方法であるが、前記で説明したフォールディングの短所はそのまま持っているという問題点がある。
【００２６】
スタックレジスタとは、ジャバのようなスタックマシンのために制限された数の円形形態のレジスタとメモリとの結合でスタックを具現する方法であって、実行ユニット（Ｅｘｅｃｕｔｉｏｎ  Ｕｎｉｔ）がスタックを使用しようとする時に、常にレジスタに接近可能にするためにスタックのトップ領域はレジスタに移して（ｆｉｌｌ）使用し、レジスタが足りなくなれば頻繁に使われないスタックのボトム部分をメモリに移動（ｓｐｉｌｌ）させる方法である。
【００２７】
スタックレジスタの典型的な動作過程を説明すれば、実行ユニットでスタックにポップ及びプッシュを要請する。
【００２８】
もし、プッシュである場合にレジスタに一つの値が追加され、ポップの場合、レジスタから一つの値が除去されてレジスタに空いている空間が生じる。
【００２９】
一方、連続したプッシュでスタックのトップ空間がいずれも割り当てられた場合、使われないスタックのボトム部分をメモリに移しておき（ｓｐｉｌｌ）、連続したポップでスタックのトップ空間が空いている場合、メモリに移されて保存されていた内容をレジスタに移動（ｆｉｌｌ）させる。
【００３０】
しかし、スタックレジスタは制限されたレジスタ及びメモリを使用してスタックを構成し、実行ユニットの立場では、常にメモリではないレジスタを使用できるように保証することによってプッシュ及びポップ性能を向上させるが、既にコード上に存在する非効率的なスタックに対するプッシュ／ポップ命令語を除去できないという問題点がある。
【特許文献１】韓国公開特許第２００４−０３４６０１号
【発明の開示】
【発明が解決しようとする課題】
【００３１】
本発明は、マシンコードの演算実行時に演算に必要なスタックメモリの上位部分をスタックレジスタに保存し、演算を行うレジスタ領域を確保して置くことによって、スタックメモリの接近を最小化してバイトコードの実行時間を短縮することを目的とする。
【００３２】
本発明の他の目的は、スタックレジスタにスタックデータを保存しておくことによって、ポップタイプ及びプッシュタイプの命令語を除去した新たなマシンコードを提供することである。
【課題を解決するための手段】
【００３３】
前記目的を達成するために、本発明の一実施形態によるＪＶＭでバイトコードの実行時間を短縮するシステムは、バイトコードを変換させた複数のマシンコードを保存するＤＢキャッシュと、前記マシンコードに含まれた所定の命令語を除去して、新たなマシンコードに変更させるマシンコード変更部と、前記マシンコードの演算に必要なスタックデータ及び演算を行うレジスタ領域を提供するレジスタファイルを管理するレジスタ管理部と、前記マシンコードについてのベーシックブロック情報、及び前記レジスタファイルのスタックデータについてのｓｐｉｌｌ及びｆｉｌｌ実行情報を保存するマシンコード情報保存部と、を備える。
【００３４】
また、本発明の他の実施形態によるＪＶＭでバイトコードの実行時間を短縮する方法は、バイトコードをマシンコードに変換して保存するステップと、前記マシンコードの演算実行に必要なスタックデータ及び演算を行うレジスタが確保されたレジスタファイルを提供するステップと、前記マシンコードに含まれた所定の命令語を除去して新たなマシンコードに変更するステップと、前記変更されたマシンコードの演算を行うステップと、を備える。
【００３５】
その他の実施例の具体的な事項は詳細な説明及び図面に含まれている。
【発明の効果】
【００３６】
本発明のＪＶＭでバイトコードの実行時間を短縮するシステム及び方法によれば、次のような効果が一つあるいはそれ以上ある。
【００３７】
第１に、マシンコードの演算実行時に演算に必要なスタックメモリの上位部分をスタックレジスタに保存し、演算を行うレジスタ領域を確保しておくことによって、スタックメモリの接近を最小化して全体バイトコードの実行時間を短縮する。
【００３８】
第２に、スタックレジスタにスタックデータを保存しておくことによって、ポップタイプ及びプッシュタイプの命令語を除去した新たなマシンコードを提供して全体バイトコードの実行時間を短縮する。
【００３９】
第３に、新たなマシンコードを通じてスタックメモリ接近に対するオーバーヘッドをできる限り減らすことができる。
【発明を実施するための最良の形態】
【００４０】
本発明の利点及び特徴、そしてこれを達成する方法は添付された図面に基づいて詳細に後述されている実施例を参照すれば明確になる。しかし、本発明は以下で開示される実施例に限定されるものではなく、この実施例から外れて多様な形に具現でき、本明細書で説明する実施例は本発明の開示を完全にし、本発明が属する技術分野で当業者に発明の範ちゅうを完全に報せるために提供されるものであり、本発明は請求項及び発明の詳細な説明により定義されるだけである。一方、明細書全体に亙って同一な参照符号は同一な構成要素を示す。
【００４１】
以下、添付された図面を参照して本発明の望ましい実施形態を詳細に説明する。
【００４２】
図２は、本発明の一実施形態によるＪＶＭでバイトコードの実行時間を短縮するシステムの内部ブロック図である。
【００４３】
図示するように、バイトコードの実行時間を短縮するシステムは、メモリ１１０、命令語バッファ１２０、バイトコード変換部１３０、ＤＢキャッシュ１４０、マシンコード変更部１５０、マシンコード情報保存部１６０、レジスタ管理部１７０、及びレジスタファイル１８０を備えて構成される。ここで、ＪＶＭが動作する装置は、有無線端末機、家庭機器、エンベデッド機器などと理解されうる。
【００４４】
メモリ１１０は、ＪＶＭで使用するスタック領域（すなわち、スタックメモリ１１２）及び所定の命令語を保存する。
【００４５】
命令語バッファ１２０は、メモリ１１０からフェッチした命令語（例えば、バイトコード）を臨時に保存する。また、命令語バッファ１２０は、ＤＢキャッシュ１４０に行う命令語が保存されていない場合、メモリ１１０で行う命令語をフェッチする。この時、命令語バッファ１２０は、メモリ１１０で次に行われる命令語を共にフェッチして保存する。
【００４６】
バイトコード変換部１３０は、命令語バッファ１２０にフェッチされた命令語がバイトコードである場合、これをマシンコードに変換する。ここで、一つのバイトコードは複数個のマシンコードに変換される。また、バイトコード変換部１３０は、バイトコードを分析して変換されたマシンコードがベーシックブロックの開始アドレス及び終了アドレスである場合、該当マシンコードのアドレスをマシンコード情報保存部１６０に伝送する。
【００４７】
ＤＢキャッシュ１４０は、バイトコード変換部１３０で変換させたマシンコードを保存する。
【００４８】
マシンコード変更部１５０は、ＤＢキャッシュ１４０に保存された演算を行うマシンコードがベーシックブロックの最初のアドレスに該当する場合、前記ベーシックブロックに含まれるマシンコードを新たなマシンコードに変更させるものであって、すなわち、演算を行うオリジナルマシンコードをスタックリード／ライト命令実行を低減させる新たなマシンコードに変更するものである。ここで、マシンコード変更過程は、ベーシックブロックアドレス単位で行われ、マシンコードを変更するためには、レジスタファイル１８０がマシンコード変更条件を満足せねばならない。マシンコード変更条件は、レジスタファイル１８０に演算を行えるレジスタが存在せねばならず、演算時に必要なスタックデータが存在せねばならないということをいう。
【００４９】
ここで、レジスタファイル１８０がマシンコード変更条件を満足するように、レジスタ管理部１７０はｓｐｉｌｌまたはｆｉｌｌを演算時に行う。
【００５０】
また、マシンコード変更部１５０は、マシンコード変更を行う前のレジスタファイル１８０の状態（すなわち、マシンコード変更条件）を確認し、マシンコード変更条件を満足させるようにｓｐｉｌｌまたはｆｉｌｌの実行如何情報をマシンコード情報保存部１６０に伝送する。これにより、マシンコード情報保存部１６０に保存された情報（例えば、ｓｐｉｌｌまたはｆｉｌｌの実行如何情報）に基づいて、レジスタ管理部１７０がｓｐｉｌｌまたはｆｉｌｌを行う。
【００５１】
マシンコード情報保存部１６０は、バイトコード変換部１３０が変換させたマシンコードについてのベーシックブロック情報（開始アドレス、及び終了アドレス）を保存し、マシンコード変更部１５０から伝送されたレジスタファイル１８０のｓｐｉｌｌ及びｆｉｌｌ実行情報を保存する。また、マシンコード情報保存部１６０は、スタックマシン変更によりスタックレジスタ１８２のスタック情報、例えば、スタックトップ（ＳＴ）、スタックボトム（ＳＢ）、及びスタックハイト（Ｓｔａｃｋ  Ｈｅｉｇｈｔ：ＳＨ）が変更された場合、変更されたスタック情報を保存する。ここで、スタックトップは、上位スタックが保存されたレジスタについてのポインタであり、スタックボトムは、スタックレジスタ１８２のうち最も下位スタックを保存するレジスタについてのポインタであり、スタックハイトは、全体レジスタファイルのうちスタックレジスタとして使われるレジスタの数である。ここで、マシンコード情報保存部１６０は、演算が行われるマシンコードに関する情報を保存し、前記保存された情報はテーブル形態に保存される。以下、図３の情報テーブルを詳細に説明する。
【００５２】
レジスタファイル１８０は、データを臨時に保存するものであって、算術／論理演算、情報解釈、及び伝送などを行える一定長さの情報を保存する。ここで、レジスタファイル１８０は複数のレジスタを含み、例えば、スタックメモリ１１２のトップ領域を保存するスタックレジスタ１８２を含む。本願発明では、レジスタファイル１８０がマシンコード変更条件を満足するために、スタックレジスタ１８２に保存されたスタックデータをメモリ１１０にｓｐｉｌｌするか、メモリ１１０に保存されたスタックデータをｆｉｌｌする。以下、図４で、レジスタファイル１８０のスタックレジスタ１８２について詳細に説明する。
【００５３】
レジスタ管理部１７０は、レジスタファイル１８０のスタックレジスタ１８２を管理するものであって、すなわち、マシンコード変更が可能にスタックレジスタ１８２のｓｐｉｌｌまたはｆｉｌｌを行う。ここで、スタックレジスタ１８２に必要なｓｐｉｌｌまたはｆｉｌｌを行う情報は、マシンコード情報保存部１６０に保存されている。
【００５４】
例えば、マシンコード変更部１５０が所定マシンコードを変更しようとする時、スタックレジスタ１８２に演算を行うレジスタがない場合（すなわち、プッシュタイプ）、スタックレジスタ１８２に保存された所定数のスタックデータをスタックメモリ１１２に伝送（すなわち、ｓｐｉｌｌ実行）して演算を行うレジスタ領域が生じるようにし、もし演算に利用されるスタックデータがスタックレジスタ１８２に存在していない場合（すなわち、ポップタイプ）、該当スタックデータをスタックメモリ１１２から得る（すなわち、ｆｉｌｌ実行）。
【００５５】
また、レジスタ管理部１７０は、スタックレジスタ１８２を管理するためにスタック情報（例えば、スタックトップ、スタックボトム、及びスタックハイト）を保存する。ここで、スタックレジスタ１８２に対するｓｐｉｌｌ及びｆｉｌｌ実行によりスタック情報が変更され、レジスタ管理部１７０は、変更されたスタック情報を保存及び管理する。
【００５６】
図３は、本発明の他の実施形態によるＪＶＭでバイトコードの実行時間を短縮するシステムにおいて、マシンコード情報保存部の情報テーブルを示す図である。
【００５７】
図示するように、情報テーブルはマシンコードアドレス（１１）、ベーシックブロックの開始（Ｂａｓｉｃ  Ｂｌｏｃｋ  Ｆｉｒｓｔ：ＢＢＦ）及びベーシックブロックの終了アドレス（Ｂａｓｉｃ  Ｂｌｏｃｋ  Ｅｎｄ：ＢＢＥ）情報（１２）、（１３）、必要なレジスタ数（１４）、ｓｐｉｌｌ及びｆｉｌｌ実行可否（１５）、及び変化されたスタック情報（１６）などを保存する。
例えば、アドレスが０×３４００であるマシンコードはベーシックブロックの開始アドレスを持ち、必要なレジスタの数は１つである。また、スタックレジスタ１８２で演算を行うためにｓｐｉｌｌを行わねばならず、ｓｐｉｌｌを行った結果、スタックの変化はないということが分かる。
【００５８】
したがって、マシンコード情報保存部１６０に保存された情報に基づいて、レジスタ管理部１７０は、スタックレジスタ１８２に対するｓｐｉｌｌ及びｆｉｌｌ実行を決定し、これにより、スタックレジスタ１８２がマシンコード変更条件を満足すれば、マシンコード変更部１５０は、オリジナルマシンコードに対するコード変更を行う。
【００５９】
図４は、本発明の他の実施形態によるＪＶＭでバイトコードの実行時間を短縮するシステムにおいて、レジスタ管理部がｓｐｉｌｌ及びｆｉｌｌを行う過程を示す図である。
【００６０】
図示するように、スタックメモリ１１２に複数個のスタックデータが保存されており、スタックレジスタ１８２には５個のデータが保存されている。ここで、スタックレジスタ１８２は円形の形状であり、スタックトップ（ＳＴ）及びスタックボトム（ＳＢ）の位置が表示されている。
【００６１】
レジスタ管理部１７０がマシンコード情報保存部１６０に保存された情報に基づいてｆｉｌｌを行うとすれば、演算に必要なスタックデータをスタックレジスタ１８２に保存するために、スタックメモリ１１２のトップ部分のスタックデータを持ってきてスタックレジスタ１８２のボトム部分から追加する。
【００６２】
すなわち、レジスタ管理部１７０がｆｉｌｌを３ほど行った場合、スタックボトム（ＳＢ）は、Ｒ０からＲ１３に移されつつ、スタックメモリ１１２から４、５、及び６のデータ値を持ってきて、Ｒ１５からＲ１３まで満たす。
【００６３】
一方、レジスタ管理部１７０がマシンコード情報保存部１６０に保存された情報に基づいてｓｐｉｌｌを行うとすれば、演算を行うためのレジスタ領域を形成するために所定数のスタックデータをスタックメモリ１１２に移す。これにより、スタックレジスタ１８２に演算を行うレジスタ領域が確保され、スタックレジスタ１８２に位置したスタックボトム（ＳＢ）のポインタ値は、スタックメモリ１１２に移動したスタックデータ数ほど減少する。
【００６４】
図５は、本発明のさらに他の実施形態によるＪＶＭでバイトコードの実行時間を短縮するシステムにおいて、マシンコード変更部がマシンコードを変更する過程を示す図である。ここで、マシンコード変更を行うために、スタックレジスタ１８２はマシンコード演算に必要なスタックデータを含んでおり、演算を行うレジスタが割り当てられている。
【００６５】
図示されたように、ベーシックブロックの最初のアドレスｏｐ（Ａ０）であるマシンコードは、現在ローカルポインタの位置から＋４の位置に保存されたデータをレジスタ２に移動せよという命令語を行う。
【００６６】
ベーシックブロックアドレスがｏｐ（Ａ１）であるマシンコードは、現在ローカルポインタの位置から＋８の位置に保存されたデータをレジスタ３に移動せよという命令語を行う。
【００６７】
ベーシックブロックアドレスがｏｐ（Ａ３）であるマシンコードは、レジスタ３とレジスタ２とを演算した後、演算された結果をレジスタ２に移動せよという命令語を行う。
【００６８】
ベーシックブロックアドレスがｏｐ（Ａ３）であるマシンコードは、現在ローカルポインタの位置から＋１２の位置に保存されたデータをレジスタ２に移動せよという命令語を行う。
【００６９】
すなわち、変更されたマシンコードはポップタイプ及びプッシュタイプのマシンコード命令語を行わないために、従来のマシンコードの演算実行のための命令語処理より少ない命令語処理を行う。
【００７０】
これにより、同一ベーシックブロックＡ０ないしＡ４のバイトコードを行うためにローカルに３回のｌｏａｄ／ｓｔｏｒｅを行えという命令語を行えばよい。
【００７１】
したがって、マシンコードの演算に必要なスタックの上位部分をスタックレジスタ１８２に割り当てることによって、不要な動作命令を除去してスタックメモリの接近に対するオーバーヘッドをできる限り減らすことができる。
【００７２】
図６は、本発明のさらに他の実施形態によるＪＶＭでバイトコードの実行時間を短縮する方法を示すフローチャートである。
【００７３】
図示するように、メモリ１１０からフェッチされた命令語がバイトコードである場合、バイトコード変換部１３０は、該当バイトコードをマシンコード（オリジナルマシンコード）に変換させ（Ｓ２００）、ＤＢキャッシュ１４０に変換されたオリジナルマシンコードを保存する。
【００７４】
その後、マシンコード変更部１５０は、ＤＢキャッシュ１４０に保存された動作命令を行うオリジナルマシンコードがベーシックブロックの最初のアドレスに該当するかどうかを判断する。判断結果、行うオリジナルマシンコードがベーシックブロックの最初のアドレスである場合（Ｓ２１０）、該当オリジナルマシンコードについてのスタック情報（スタックトップ、スタックボトム、及びスタックハイト）、ベーシックブロック情報（開始アドレス、終了アドレス）をマシンコード情報保存部１６０に保存する（Ｓ２２０）。
【００７５】
その後、レジスタ管理部１７０は、マシンコード情報保存部１６０に保存されたマシンコードの情報に基づいてスタックレジスタ１８２の状態をチェックする（Ｓ２３０）。ここで、スタックレジスタ１８２の状態は、スタックレジスタ１８２に保存されたデータをスタックメモリ１１２に移動（ｓｐｉｌｌ）させるポップタイプと、スタックメモリ１１２に保存されたデータをスタックレジスタ１８２に移動（ｆｉｌｌ）させるプッシュタイプとで理解できる。
【００７６】
これにより、スタックレジスタ１８２の状態チェック結果、ポップタイプである場合（Ｓ２３１）、すなわち、演算を行うレジスタ領域が必要なために、レジスタ管理部１７０は、スタックレジスタ１８２に保存されたスタックデータをスタックメモリ１１２に伝送（ｓｐｉｌｌ）する（Ｓ２３２）。
【００７７】
一方、スタックレジスタ１８２の状態チェック結果、プッシュタイプである場合（Ｓ２３３）、すなわち、演算に必要なスタックデータがスタックレジスタ１８２に含まれていないために、レジスタ管理部１７０は、スタックメモリ１１２から演算に必要なスタックデータをスタックレジスタ１８２に移動（ｆｉｌｌ）させる（Ｓ２３４）。
【００７８】
その後、マシンコード変更部１５０は、オリジナルマシンコードを、スタックレジスタ１８２に保存された演算に必要なスタックデータを利用して、スタックメモリ１１２に接近しなくても演算を行える新たなマシンコードに変更させる（Ｓ２４０）。
【００７９】
一方、マシンコードのベーシックブロック終了アドレスまでコード変更が行われた場合（Ｓ２５０）にマシンコード変換過程を終了し（Ｓ２６０）、マシンコードのベーシックブロック終了アドレスまでコード変更が行われていない場合、マシンコードのベーシックブロック終了アドレスに対するコード変更が行われるまでステップＳ２３０及びステップＳ２４０を続ける。
【００８０】
したがって、マシンコード演算に必要なスタックの上位部分をスタックレジスタ１８２に割り当て、スタックレジスタ１８２に演算を行うレジスタ領域を形成することによって、スタックメモリ接近に対する動作命令を除去できてバイトコードの全体実行時間を短縮することができる。
【００８１】
また、マシンコードを変更することによってスタックメモリ接近に対するオーバーヘッドをできる限り減らすことができる。
【００８２】
以上、添付図を参照して本発明の実施例を説明したが、本発明が属する技術分野で当業者ならば本発明がその技術的思想や必須特徴を変更せずとも他の具体的な形に実施されうるということが理解できるであろう。したがって、前述した実施例は全ての面で例示的なものであって、限定的なものではないと理解せねばならない。
【産業上の利用可能性】
【００８３】
本発明は、ジャバ仮想マシンでバイトコードの実行時間を短縮するシステムの関連技術分野に好適に用いられる。
【図面の簡単な説明】
【００８４】
【図１】従来のマシンコードの演算実行のための命令語処理過程を示す図である。
【図２】本発明の一実施形態によるＪＶＭでバイトコードの実行時間を短縮するシステムの内部ブロック図である。
【図３】本発明の他の実施形態によるＪＶＭでバイトコードの実行時間を短縮するシステムにおいて、マシンコード情報保存部の情報テーブルを示す図である。
【図４】本発明の他の実施形態によるＪＶＭでバイトコードの実行時間を短縮するシステムにおいて、レジスタ管理部がｓｐｉｌｌ及びｆｉｌｌを行う過程を示す図である。
【図５】本発明のさらに他の実施形態によるＪＶＭでバイトコードの実行時間を短縮するシステムにおいて、マシンコード変更部がマシンコードを変更する過程を示す図である。
【図６】本発明のさらに他の実施形態によるＪＶＭでバイトコードの実行時間を短縮する方法を示すフローチャートである。
【符号の説明】
【００８５】
１１０    メモリ
１２０    命令語バッファ
１３０    バイトコード変換部
１４０    ＤＢキャッシュ
１５０    マシンコード変更部
１６０    マシンコード情報保存部
１７０    レジスタ管理部
１８０    レジスタファイル
【図１】
2006323844.tif 000003
【図２】
2006323844.tif 000004
【図３】
2006323844.tif 000005
【図４】
2006323844.tif 000006
【図５】
2006323844.tif 000007
【図６】
2006323844.tif 000008