(57)【要約】【課題】  ＪＡＶＡ(登録商標)仮想マシンの性能を向上させる方法及びその方法により動作されるシステムを提供する。  【解決手段】  本発明ＪＡＶＡ(登録商標)仮想マシンの性能を向上させる方法は、ＪＡＶＡ(登録商標)クラスを構成するメソッドのバイトコードを抽出する第１段階と、前記抽出されたバイトコードを組み合わせて所定のバイトサイズを有する第２コードを生成して所定のタイプを有するデータ構造に割り当てる第２段階と、ＪＡＶＡ(登録商標)仮想マシンを構成する実行エンジンが前記第２コードを実行する第３段階とを含むことを特徴とする。【選択図】  図８
2005202936.tif 000002
【特許請求の範囲】
【請求項１】
ＪＡＶＡ(登録商標)クラスを構成するメソッドのバイトコードを抽出する第１段階と、
前記抽出されたバイトコードを組み合わせて所定のバイトサイズを有する第２コードを生成して所定のタイプを有するデータ構造に割り当てる第２段階と、
ＪＡＶＡ(登録商標)仮想マシンを構成する実行エンジンが前記第２コードを実行する第３段階とを含むことを特徴とするＪＡＶＡ(登録商標)仮想マシンの性能を向上させる方法。
【請求項２】
前記バイトサイズは、前記ＪＡＶＡ(登録商標)仮想マシンが搭載された装置を制御する中央制御装置（ＣＰＵ）のデータ処理能力により決定されることを特徴とする請求項１記載のＪＡＶＡ(登録商標)仮想マシンの性能を向上させる方法。
【請求項３】
前記データ構造は、整数タイプのデータ構造であることを特徴とする請求項１記載のＪＡＶＡ(登録商標)仮想マシンの性能を向上させる方法。
【請求項４】
前記第２段階は、前記抽出されたバイトコードの中で少なくとも２以上のバイトが結合して論理的な値を示す場合、前記２以上のバイトを組み合わせて所定のサイズを有する第２コードを生成して前記データ構造に割り当てる段階であることを特徴とする請求項１記載のＪＡＶＡ(登録商標)仮想マシンの性能を向上させる方法。
【請求項５】
前記第２段階は、前記抽出されたバイトコードがワイドオペランドを使用する演算コードである場合、前記演算コードをワイドオペランドを使用しない演算コードへ変更した後、前記変更された演算コードを含む所定のサイズを有する第２コードを生成して前記データ構造に割り当てる段階であることを特徴とする請求項１記載のＪＡＶＡ(登録商標)仮想マシンの性能を向上させる方法。
【請求項６】
ＪＡＶＡ(登録商標)クラスを構成するメソッドのバイトコードを抽出し、前記抽出されたバイトコードを組み合わせて所定のバイトサイズを有する第２コードを生成して所定のタイプを有するデータ構造に割り当てた後、実行エンジンが前記第２コードを実行するようにすることを特徴とするＪＡＶＡ(登録商標)仮想マシンが搭載されたシステム。
【請求項７】
前記データ構造は、整数タイプのデータ構造であることを特徴とする請求項６記載のＪＡＶＡ(登録商標)仮想マシンが搭載されたシステム。
【請求項８】
前記バイトサイズは、前記ＪＡＶＡ(登録商標)仮想マシンが搭載された装置を制御する中央制御装置（ＣＰＵ）のデータ処理能力により決定されることを特徴とする請求項６記載のＪＡＶＡ(登録商標)仮想マシンが搭載されたシステム。
【請求項９】
前記抽出されたバイトコードの中で少なくとも２以上のバイトが結合して論理的な値を示す場合、前記２以上のバイトを組み合わせて所定のサイズを有する第２コードを生成することを特徴とする請求項６記載のＪＡＶＡ(登録商標)仮想マシンが搭載されたシステム。
【請求項１０】
前記抽出されたバイトコードがワイドオペランドを使用する演算コードである場合、前記演算コードをワイドオペランドを使用しない演算コードへ変更した後、前記変更された演算コードを含む所定のサイズを有する第２コードを生成することを特徴とする請求項６記載のＪＡＶＡ(登録商標)仮想マシンが搭載されたシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＪＡＶＡ(登録商標)仮想マシン（Java(登録商標) Virtual Machine）の性能を向上させる方法及びその方法により動作されるシステムに関し、より詳しくは、従来のバイト単位のＪＡＶＡ(登録商標)バイトコード（bytecode）を４倍拡張した４バイトサイズのデータタイプを有するコードへ変換することによりＪＡＶＡ(登録商標)プログラムの実行速度を向上させる方法を提供することに関する。
【背景技術】
【０００２】
ＪＡＶＡ(登録商標)プログラミング言語（Java(登録商標) programming language）は、１９９０年代中半に発表された以後急速に伝播されてきたが、Ｃ或いはＣ++のような言語で作成されたコードに比して速度が遅く短所がある。このような短所を克服するため、既存のインタプリタ（Interpreter）方式のＪＡＶＡ(登録商標)仮想マシンにＪＩＴ（Just in time）コンパイラ（Compiler）のような動的コード生成技法、またはＡＯＴ（Ahead of time）コンパイラのような静的なコード生成技法が考案された。
【０００３】
ＪＡＶＡ(登録商標)プラットフォームは、主にＪＡＶＡ(登録商標)仮想マシンとクラス（Class）から構成される。クラスファイルはクラスの資料構造に関する情報とフィールドとメソッド情報などで構成され、その中でメソッドの実行コードはハードウェア又は運営体制（Operating System）から独立的なバイトコードになっている。
【０００４】
従来のＪＡＶＡ(登録商標)仮想マシンを実行エンジンを基準として分類すると、インタープリティング（Interpreting） 方式のＪＡＶＡ(登録商標)仮想マシンとＪＩＴコンパイル方式のＪＡＶＡ(登録商標)仮想マシン、インタープリティングとＪＩＴコンパイルを全て使用する方式のＪＡＶＡ(登録商標)仮想マシン、または、ＡＯＴコンパイル方式のＪＡＶＡ(登録商標)仮想マシン等で分類できる。
【０００５】
インタープリティング方式のＪＡＶＡ(登録商標)仮想マシンは、実行するメソッド（Method）のバイトコードを一つずつ解析してアプリケーションを実行し、ＪＩＴコンパイラは、前記バイトコードをコンパイルして現在のＪＡＶＡ(登録商標)プラットフォームに従属的な機械語コードを得た後に前記機械語コードを実行することによりアプリケーションを実行する。
【０００６】
図１は、従来のＪＡＶＡ(登録商標)仮想マシンの構造を示す例示図である。ＪＡＶＡ(登録商標)仮想マシン１００は、インタプリタ１１０、ＪＩＴまたはＡＯＴコンパイラ１２０、クラスをローディングするクラスローダー１３０、前記要素を結合して運営するランタイムシステム１４０、実行するアプリケーションクラス１５０、予め定義されているシステムクラス１６０から構成される。
【０００７】
図２は、従来のＪＡＶＡ(登録商標)クラスファイルの一般的な構成を示す例示図である。クラスファイルは、クラス或いはインターフェースの定義を含み、クラスに定義された多様な属性、フィールド情報、メソッド情報等で構成されている。メソッド情報の中には、インタプリタで実行するバイトコードと言われるバイトストリームが定義されている。前記バイトコードは、ＪＡＶＡ(登録商標)原始言語文章を含んでいるファイル（例えば、拡張子が‘java(登録商標)’であるファイル）をコンパイルしてその結果物として得られたものである。
【０００８】
前記バイトコードは、一回に１バイトずつコンピューター内で実行されるという側面では実行する準備がなっているプログラムモジュールと類似であるが、前記バイトコード命令語は、論理的で抽象的なＪＡＶＡ(登録商標)仮想マシンに伝送される実際の命令語である。前記バイトコードは、一回に１バイトずつ翻訳される形式の以外にも、特定なシステムプラットフォームに合わせるようにＪＩＴコンパイラにより更にコンパイルされることもできる。このようにすると、ＪＡＶＡ(登録商標)プログラムの実行速度が一層速くなる。インタプリタ上でＪＡＶＡ(登録商標)プログラムの実行速度を増加する時の方法としては、バイトコード上で演算コード（Opcode）位置にインタプリタ内の演算コードハンドラ（Opcode Handler）のアドレスを書き込む‘Threaded Interpreter’技術がある。
【０００９】
図３は、従来のＪＡＶＡ(登録商標)仮想マシンで実行されるバイトコードを示す例示図である。
【００１０】
バイトコード命令語は、実行動作を区別するためのバイトサイズの演算コードとオペランド（Operand）で構成される。一つの演算コードは多数のオペランドを持つことができる。演算コードとオペランドは全てバイト（Byte）単位で記憶されるので、１バイト以上のサイズを有するオペランドを表現するために連続されたバイトとして表現される。例えば、１６ビット値は２個の連続されたバイトで、３２ビット値は４個の連続されたバイトからなる。
【００１１】
図３において、一番目のラインは実際のバイトコードの１６進数値であり、二番目のラインは各々のバイトコードを演算コードとオペランドで区分して示すものである。
【００１２】
図４は、従来のＪＡＶＡ(登録商標)仮想マシンでクラスローディング及び実行過程を示す例示図である。
【００１３】
図示されるように、アプリケーションクラスは、ＪＡＶＡ(登録商標)仮想マシンのクラスローダーにより積載され（Ｓ４００）、リンク過程（Linking）（Ｓ４１０）と初期化過程（Initialization）（Ｓ４２０）を経由してランタイムシステム（Runtime System）内の資料構造に該当情報が記憶され、インタプリタ又はＪＩＴコンパイラのような実行エンジン（Execution Engine）によりメソッドが実行される（Ｓ４３０）。
【００１４】
図５は、従来のＪＡＶＡ(登録商標)インタプリタで各々の命令コードを実行する動作を示す一実施例の処理フローチャートである。
【００１５】
典型的なインタプリタでは、図５に図示した方法でバイトコードを実行する。インタプリタ内でメソッドが呼び出されると（Ｓ５００）、前記メソッドのバイトコードを指定するプログラムカウンタ（Program Counter）を増加させた後（Ｓ５１０）、前記メソッドのバイトコードの最終バイトであるか否かを判断する（Ｓ５２０）。もし、前記メソッドのバイトコードの最終バイトではなければ（Ｓ５２０で「いいえ」）、１バイト演算コードをフェッチ（fetch）し（Ｓ５３０）、プログラム内のスイッチ（Switch）文を利用して前記フェッチされた演算コードに該当するハンドラへ移動して前記ハンドラが実行される（Ｓ５４０、Ｓ５５０）。このような過程をバイトコードのサイズほど繰り返すと前記メソッドに対するインタープリティング過程が終了される（Ｓ５６０）。
【００１６】
図５に図示した過程を疑似(Pseudo)コードで示すと次のようになる。
Loop {
Op =  *pc++;
switch (Op) {
case op_1:    
// op_1’s implementation
break;
case op_2:
// op_2's implementation
break;
case op_3:
// op_3's implementation
break;
・・・
}
【００１７】
各々の演算コードに対するハンドラで前記演算コードが必要とするオペランドが１バイトより大きい場合、前記被演算子の値は連続されたバイトで記憶される。したがって、前記連続されたバイトを各々のビット別にＯＲ演算子とシフト（Shift）演算子を通じて一つの意味のある値で再構成する。例えは、リトルエンディアン（Little Endian）を使用するＣＰＵである演算コードＡが必要とするオペランドが連続するbyte１、byte２、byte３、byte４に存在する場合、byte４は論理的に表示しようとする３２ビット値の１番目のビットから８番目のビットまで、byte３は論理的に表示しようとする３２ビット値の９番目のビットから１６番目のビットまで、byte２は論理的に表示しようとする３２ビット値の１７番目のビットから２４番目のビットまで、byte１は論理的に表示しようとする３２ビット値の２５番目のビットから３２番目のビットまでを示している。
【特許文献１】韓国公開特許第2000-55363号
【発明の開示】
【発明が解決しようとする課題】
【００１８】
したがって、‘(byte１<<２４)|( byte２ <<１６)|( byte３ <<８)| byte４’のような演算を通じて演算コードＡが実際に必要とする３２ビット値を求められる。従来のＪＡＶＡ(登録商標)仮想マシンではこのようなオペランドを組み合わせる過程がメソッドが実行される時ごとに発生する。
【００１９】
現在の多くのＣＰＵが３２ビットのアーキテクチャ（Architecture）になっており、内部的に３２ビットレジスターを使用するので、８ビットデータを持ち込むことより３２ビットサイズのデータを持ち込むことが一層良好な性能を示す。
【００２０】
また、従来のＪＡＶＡ(登録商標)バイトコードは、演算コードとオペランドがバイト単位で記憶されるので、演算コードは１バイトで表示できる最大数字である２５６個で限定されるしかない。しかし、予め定義されている演算コードを除外すると新しく定義できる演算コードの個数は非常に制限的である。そのため、できるだけ多数の再定義（Redefine）が可能な演算コードを必要とする動的なコードの生産技法に多くの制約があった。
【００２１】
オペランドの場合、前記オペランドが１バイトより大きい場合に連続されたバイトで羅列され、前記連続的に羅列されたバイトはメソッドが実行される時ごとに各々のビット別にＯＲ演算子とシフト演算子を通じて再構成される。このような過程はＪＡＶＡ(登録商標)プログラムの実行においてオーバーヘッドで作用できる。したがって、前記のような制約を克服することによりＪＡＶＡ(登録商標)仮想マシンの性能を向上させる必要があった。
【００２２】
本発明は、上述したような従来技術の問題点を解決するためになされたもので、その目的は、従来のバイト単位のＪＡＶＡ(登録商標)バイトコードを４倍拡張した４バイトサイズのデータタイプを有するコード（以下、‘Intcode’と称する）へ変換することによりＪＡＶＡ(登録商標)仮想マシンの実行速度を向上させる方法を提供することにある。
【課題を解決するための手段】
【００２３】
前記目的を達成するために、本発明の実施例によるＪＡＶＡ(登録商標)仮想マシンの性能を向上させる方法は、ＪＡＶＡ(登録商標)クラスを構成するメソッドのバイトコードを抽出する第１段階と、前記抽出されたバイトコードを組み合わせて所定のバイトサイズを有する第２コードを生成して所定のタイプを有するデータ構造に割り当てる第２段階と、ＪＡＶＡ(登録商標)仮想マシンを構成する実行エンジンが前記第２コードを実行する第３段階とを含む。
【００２４】
この時、前記バイトサイズは、前記ＪＡＶＡ(登録商標)仮想マシンが搭載された装置を制御する中央制御装置（ＣＰＵ）のデータ処理能力により決定されることを特徴とする。
【００２５】
好ましくは、前記データ構造は、整数（Integer）タイプのデータ構造であることを特徴とする。
【００２６】
好ましくは、前記第２段階は、前記抽出されたバイトコードの中で少なくとも２以上のバイトが結合して論理的な値を示す場合、前記２以上のバイトを組み合わせて所定のサイズを有する第２コードを生成して前記データ構造に割り当てる段階であることを特徴とする。
【００２７】
好ましくは、前記第２段階は、前記抽出されたバイトコードがワイドオペランド（Wide Operand）を使用する演算コードである場合、前記演算コードをワイドオペランドを使用しない演算コードへ変更した後、前記変更された演算コードを含む所定のサイズを有する第２コードを生成して前記データ構造に割り当てる段階であることを特徴とする。
【００２８】
前記目的を達成するために、本発明に実施例によるＪＡＶＡ(登録商標)仮想マシンの性能を向上させるシステムは、ＪＡＶＡ(登録商標)クラスを構成するメソッドのバイトコードを抽出し、前記抽出されたバイトコードを組み合わせて所定のバイトサイズを有する第２コードを生成して所定のタイプを有するデータ構造に割り当てた後、実行エンジンが前記第２コードを実行するようにすることを特徴とする。
【００２９】
この時、前記データ構造は、整数タイプのデータ構造であることを特徴とする。
【００３０】
好ましくは、前記バイトサイズは、前記ＪＡＶＡ(登録商標)仮想マシンが搭載された装置を制御する中央制御装置（ＣＰＵ）のデータ処理能力により決定されることを特徴とする。
【００３１】
好ましくは、前記抽出されたバイトコードの中で少なくとも２以上のバイトが結合して論理的な値を示す場合、前記２以上のバイトを組み合わせて所定のサイズを有する第２コードを生成することを特徴とする。
【００３２】
好ましくは、前記抽出されたバイトコードがワイドオペランドを使用する演算コードである場合、前記演算コードをワイドオペランドを使用しない演算コードへ変更した後、前記変更された演算コードを含む所定のサイズを有する第２コードを生成することを特徴とする。
【発明の効果】
【００３３】
本発明の実施例によってインタプリタ方式またはＪＩＴコンパイラが適用されたＪＡＶＡ(登録商標)仮想マシンでバイトコードを拡張して３２ビット配列（Array）であるIntcodeへ変換することにより、３２ビットＣＰＵを搭載したハードウェアで実行速度を向上させ、前記配列の中で空いている空間を利用して各々の演算コードに関連された付加情報を簡便に記憶または管理できる効果がある。
【００３４】
また、ワイドオペランドを処理するためのワイド演算コードがその以上使用されないので、前記演算コードを使用者が定義した新しい演算コードで再定義できる長所がある。
【発明を実施するための最良の形態】
【００３５】
以下、添付の図面を参照して本発明の一実施例によるＪＡＶＡ(登録商標)仮想マシンの性能を向上させる方法及びその方法により動作されるシステムについて説明する。
【００３６】
図６は、本発明の実施例によるコンバータが含まれたＪＡＶＡ(登録商標)仮想マシンの構造を示す例示図である。
【００３７】
図６では、従来のＪＡＶＡ(登録商標)仮想マシンに本発明の実施例によって１バイトのバイトコード４個を配列して４バイトへ変換させるコンバータ（Converter）６３０を含むＪＡＶＡ(登録商標)仮想マシンの構造を示す。即ち、ＪＡＶＡ(登録商標)仮想マシン６００で、従来のインタプリタ６１０、ＪＩＴコンパイラ６２０、クラスローダー６４０、ランタイム６５０、アプリケーションクラス（Application Class）６６０、システムクラス６７０の以外に前記コンバータ６３０を追加した。前記コンバータ６３０は、スレッド（Thread）の形態で具現できる。
【００３８】
図７は、本発明の実施例によってＪＡＶＡ(登録商標)仮想マシンでクラスローディング及び実行過程を示す例示図である。
【００３９】
新しいクラスは、クラスローダー６４０を通じてＪＡＶＡ(登録商標)仮想マシン６００の内部に積載され（Ｓ７００）、コンバータ６３０は前記新しいクラスの積載が完了された後に呼び出される。それから、前記コンバータ６３０は、前記積載されたクラスに宣言された各々のメソッドに対して１バイトのバイトコード４個を配列してIntcodeへ変換する（Ｓ７１０）。
【００４０】
前記S７１０段階以後には、前記図４に図示した従来の方法と同様にリンキング（Ｓ７２０）、初期化（Ｓ７３０）過程を経由して、実行エンジンを通じて該当メソッドが実行される（Ｓ７４０）。
【００４１】
前記Ｓ７１０段階の実行過程をプログラムコードで示すと次のようになる。
int[] byte-To-int (char *bytecode, int size_of_bytecode)
{
int* intcode;
intcode = (int *)malloc(４ * size_of_bytecode) //現在バイトコードより４倍大きいメモリを割り当て
Loop {
char *pc;
int intcodePC = 0;
pc = bytecode;
Op =*pc++;
switch (OP) {
case opcode_1:
// opcode_1 に対する intcode conversion scheme
pc++;
intcodePC++;
break;
case opcode_2:
// opcode_2 に対する intcode conversion scheme
pc++;
intcodePC++;
break;
・・・・・・・・・
} 
}
}
【００４２】
以下、前記プログラムコードについて説明する。
【００４３】
前記コンバータ６３０は、新しいクラスがＪＡＶＡ(登録商標)仮想マシンに積載される際にクラス内部に宣言された各々のメソッドに対して呼び出される。この時、前記コンバータ６３０は、メソッドバイトコードと前記メソッドバイトコードのサイズをパラメータ（Parameter）で受ける。
【００４４】
前記コンバータ６３０内で先にメソッドサイズ（長さ）の４倍サイズのメモリを割り当て、それを３２ビット整数ポインタ（Integer pointer）であるIntcodeで指定させる。その下には一つの大きいループ（Loop）が存在し、前記ループはバイトコードでその以上はフェッチするバイトが存在しないまで継続循環する。前記ループ内には一つのスイッチ文が存在し、前記スイッチ文内には各々の演算コードに対する変換過程を実行するルーチンが定義されている。
【００４５】
図８は、本発明の実施例によってバイトコードの変換過程を示す一実施例の処理フローチャートである。
【００４６】
クラスローダーにより新しいクラスが積載されると、本発明に実施例によってバイトコードの変換過程が開始される（Ｓ８００）。まず、現在のプログラムカウンタ（Program Counter）が指定する演算コードがワイドインデックス（Wide Index）をオペランドで持つか否かを確認する（Ｓ８１０）。ワイドオペランドを必要としない場合は（Ｓ８１０で「いいえ」）、前記演算コードをIntcodeに記憶する（Ｓ８３０）。
【００４７】
もし、ワイドオペランドを必要とする演算コードの場合には（Ｓ８１０で「はい」）、ＪＡＶＡ(登録商標)仮想マシンバージョン２上で同一な役割を実行するが、ワイドオペランドを必要としない演算コードを探して前記演算コードを代わりにIntcodeに記憶する（Ｓ８１０、Ｓ８２０）。例えば、ＪＡＶＡ(登録商標)仮想マシンバージョン２に定義された命令語の中で、‘jsr_w’の場合には‘jsr’と同一な機能を行うが、前記‘jsr_w’の場合は３２ビットワイドインデックスがオペランド（連続された４個のバイト）であり、‘jsr’の場合には１６ビットインデックスがオペランド（連続された２個のバイト）である。
【００４８】
即ち、この場合、‘jsr_w’の代わりに‘jsr’をIntcode配列に記憶するようになる。このようにすることにより、ワイドオペランドがくる演算コードは消えて、前記演算コードは動的コード生成時に新たに定義して使用できるようになる。このように、演算コードを３２ビット元素に書き込むと、演算コードのサイズ（８ビット)以外に残りの２４ビットが空になり、もし、この演算コードとその以後のいくつかのバイトコードに対してＪＩＴ技法を適用すると、それにより生成されるコードブロックのアドレス等を書き込み、残りの１バイトはＪＩＴが適用されたことを表示する新しい演算コードを定義して記憶する空間等で空いた空間が利用できるようになる。
【００４９】
前記Ｓ８３０段階を実行した後、次のバイトコードを指定しているプログラムカウンタとIntcodeを指定するIntcodeＰＣを増加させる。もし、前記演算コードがオペランドを随伴する場合には、オペランドをIntcodeに入れる必要があるが、この時、前記オペランドが１バイトより大きいか否か検査する必要がある（Ｓ８４０、Ｓ８５０）。即ち、連続されたバイトからなったオペランドである場合（Ｓ８４０、Ｓ８５０で「はい」）、Intcodeに書き込む前にシフト演算子と各々のビット別に演算を実行するＯＲ演算子により現在使用しているＣＰＵの エンディアン（Endian）によって組み合わせて一つのIntcodeに記憶する（Ｓ８６０、Ｓ８７０）。多数のバイトを組み合わせて作ったオペランドのサイズは４バイトを超えないので、一つのIntcodeに記憶することが可能である。メソッド実行の前に前記機能を実行する関数が前記のようなオペランド組合せを一回だけ実行するので、従来のインタプリタより一層良好な性能を現す。もし、組み合わせた連続したバイトの数字がn個であれば、Intcodeには組み合わせた結果物を書き込んで、次のn-1個のIntocodeには空白を入れる。
【００５０】
図９は、本発明の実施例によってＪＡＶＡ(登録商標)仮想マシンで実行されるバイトコードを示す例示図である。
【００５１】
例えば、本来のバイトコード‘goto’は、intcode変換アルゴリズムを通じて‘intcode[0]’の値へ変換される。‘nop’を書き込む理由はインタプリタをIntcode方式へ転換する際の便宜性のためのことで、具現方式によって入れる値が相違になる。
【００５２】
本発明は、本発明の技数的思想から逸脱することなく、他の種々の形態で実施することができる。前述の実施例は、あくまでも、本発明の技数内容を明らかにするものであって、そのような具体例のみに限定して狭義に解釈されるべきものではなく、本発明の精神と特許請求の範囲内で、いろいろと変更して実施することができるものである。
【図面の簡単な説明】
【００５３】
【図１】従来のＪＡＶＡ(登録商標)仮想マシンの構造を示す例示図である。
【図２】従来のＪＡＶＡ(登録商標)クラスファイルの一般的な構成を示す例示図である。
【図３】従来のＪＡＶＡ(登録商標)仮想マシンで実行されるバイトコードを示す例示図である。
【図４】従来のＪＡＶＡ(登録商標)仮想マシンでクラスローディング及び実行過程を示す例示図である。
【図５】従来のＪＡＶＡ(登録商標)インタプリタで各々の命令コードを実行する動作を示す一実施例の処理フローチャートである。
【図６】本発明の実施例によってコンバータが含まれたＪＡＶＡ(登録商標)仮想マシンの構造を示す例示図である。
【図７】本発明の実施例によってＪＡＶＡ(登録商標)仮想マシンでクラスローディング及び実行過程を示す例示図である。
【図８】本発明の実施例によってバイトコードの変換過程を示す一実施例の処理フローチャートである。
【図９】本発明の実施例によってＪＡＶＡ(登録商標)仮想マシンで実行されるバイトコードを示す例示図である。
【符号の説明】
【００５４】
６００  ＪＡＶＡ(登録商標)仮想マシン
６１０  インタプリタ
６２０  コンパイラ
６３０  コンバータ
６４０  クラスローダー
６５０  ランタイム
６６０  アプリケーションクラス
６７０  システムクラス
【図１】
2005202936.tif 000003
【図２】
2005202936.tif 000004
【図３】
2005202936.tif 000005
【図４】
2005202936.tif 000006
【図５】
2005202936.tif 000007
【図６】
2005202936.tif 000008
【図７】
2005202936.tif 000009
【図８】
2005202936.tif 000010
【図９】
2005202936.tif 000011