(57)【要約】本発明のジャババイトコード変換方法は、ジャバクラスファイルからジャババイトコードをフェッチする段階(S110)と、第１フィールドアドレスFA1によりフィールド130にアクセスしてデータを処理する処理段階(S140)と、第１フィールドアドレスFA1のビットのうちの上位ビットから構成された第１上位フィールドアドレスFAU1を第１保存部110に保存し、第１フィールドアドレスFA1の下位ビットから構成された第１下位フィールドアドレスFAD1を被演算子フィールド120bに保存する段階(S150)と、演算コードフィールド120aに保存された演算コードを新たな静的フィールドアクセスのための演算コードNOPAに変換する段階(S160)と、第２フィールドアドレスFA2を生成する段階(S240)と、第２フィールドアドレスFA2によりフィールド130にアクセスしてデータを処理する段階(S250)とから構成される。【選択図】図６
2011501286.tif 000002
【特許請求の範囲】
【請求項１】
ジャバクラスファイルから演算コードが保存された演算コードフィールドと被演算子が保存された被演算子フィールドとからなるジャババイトコードをフェッチするバイトコードフェッチ段階（Ｓ１１０）；
前記バイトコードフェッチ段階でフェッチされたジャババイトコードの演算コードが静的フィールドにアクセスするための静的フィールドアクセスバイトコードである場合、前記フェッチされたバイトコードの被演算子により定数プールを解釈して、アクセスしようとする客体のフィールドオフセットと、既定された値である静的フィールドアドレスを合わせて第１フィールドアドレスを検出し、前記第１フィールドアドレスによりフィールドにアクセスしてデータを処理する静的フィールドアドレス検出およびデータ処理段階（Ｓ１４０）；
前記静的フィールドアドレス検出およびデータ処理段階（Ｓ１４０）で検出された前記第１フィールドアドレスのビットのうちの上位ビットで構成された第１上位フィールドアドレスを第１保存手段に保存し、前記第１フィールドアドレスのビットのうちの、第１上位フィールドアドレスを除いた残りの下位ビットで構成された第１下位フィールドアドレスを前記被演算子フィールドに保存する静的フィールドアドレス保存段階（Ｓ１５０）；
前記演算コードフィールドに保存された演算コードをユーザーにより既に設定された新たな静的フィールドアクセスのための演算コードに変換する静的演算コード変換段階（Ｓ１６０）；
前記バイトコードフェッチ段階でフェッチされたジャババイトコードが前記静的演算コード変換段階で変換された演算コードを有するジャババイトコードであれば、前記第１保存手段に保存された第１上位フィールドアドレスと、フェッチされたジャババイトコードの被演算子フィールドに保存された第１下位フィールドアドレスとを連結して第２フィールドアドレスを生成する第１フィールドアドレス生成段階（Ｓ２４０）；、および、
前記第２フィールドアドレスによりフィールドにアクセスしてデータを処理する第１データ処理段階（Ｓ２５０）を備えたことを特徴とするジャババイトコード変換方法。
【請求項２】
前記第１フィールドアドレスが３２ビットである場合、前記第１上位フィールドアドレスは上位１６ビットからなるデータであり、前記第１下位フィールドアドレスは下位１６ビットからなるデータであることを特徴とする請求項１に記載のジャババイトコード変換方法。
【請求項３】
前記第１保存手段は、臨時保存メモリ、メモリまたはレジスターのうちのいずれか一つであることを特徴とする請求項１に記載のジャババイトコード変換方法。
【請求項４】
ジャバクラスファイルから演算コードが保存された演算コードフィールドと被演算子が保存された被演算子フィールドとからなるジャババイトコードをフェッチするバイトコードフェッチ段階（Ｓ３１０）；
前記バイトコードフェッチ段階（Ｓ３１０）でフェッチされたジャババイトコードの演算コードが客体フィールドにアクセスするための客体フィールドアクセスバイトコードである場合、前記フェッチされたバイトコードの被演算子により定数プールを解釈して、アクセスしようとする客体のフィールドオフセットと、スタックの最上位に保存された第１客体参照データによる客体フィールドアドレスを合わせて第３フィールドアドレスを検出し、前記第３フィールドアドレスによりフィールドにアクセスしてデータを処理する客体フィールドアドレス検出およびデータ処理段階（Ｓ３４０）；
前記第１客体参照データと前記フィールドオフセットとを第２保存手段に保存するフィールドオフセットおよび客体参照データ保存段階（Ｓ３５０）；
前記客体フィールドアドレス検出およびデータ処理段階（Ｓ３４０）で検出された前記第３フィールドアドレスのビットのうちの上位ビットで構成された第２上位フィールドアドレスを第３保存手段に保存し、前記第３フィールドアドレスのビットのうちの、第２上位フィールドアドレスを除いた残りの下位ビットで構成された第２下位フィールドアドレスを前記被演算子フィールドに保存する第２フィールドアドレス保存段階（Ｓ３６０）；
前記演算コードフィールドに保存された演算コードをユーザーにより既に設定された新たな客体フィールドアクセスのための演算コードに変換する客体演算コード変換段階（Ｓ３９０）；
前記バイトコードフェッチ段階でフェッチされたジャババイトコードが前記客体演算コード変換段階（Ｓ３９０）で変換された演算コードを有するジャババイトコードであれば、前記第２保存手段に保存された第１客体参照データとスタックの最上位に保存された現在の客体参照データとが同一であるかを比較する比較段階（Ｓ４４０）；
前記比較段階（Ｓ４４０）で前記第１客体参照データとスタックの最上位に保存された現在の客体参照データとが同一であれば、前記第３保存手段に保存された第２上位フィールドアドレスとフェッチされたジャババイトコードの被演算子フィールドに保存された第２下位フィールドアドレスとを連結して第４フィールドアドレスを生成する第２フィールドアドレス生成段階（Ｓ４５０）；
前記第４フィールドアドレスによりフィールドにアクセスしてデータを処理する第２データ処理段階（Ｓ４６０）；
前記比較段階（Ｓ４４０）で前記第１客体参照データとスタックの最上位に保存された現在の客体参照データとが同一ではなければ、前記スタックの最上位に保存された現在の客体参照データから客体フィールドアドレスを検出し、検出された客体フィールドアドレスと、前記第２保存手段に保存されたフィールドオフセットとを合わせて第５フィールドアドレスを生成する第３フィールドアドレス生成段階（Ｓ４７０）；、および、
前記第５フィールドアドレスによりフィールドにアクセスしてデータを処理する第３データ処理段階（Ｓ４８０）を備えたことを特徴とするジャババイトコード変換方法。
【請求項５】
前記第１客体参照データとフィールドオフセットとを前記第２保存手段の特定位置に保存させ、前記第２保存手段の特定位置に保存された第１客体参照データとフィールドオフセットとを選択するための第１選択データを前記被演算子フィールドに保存する第１選択データ保存段階（Ｓ３７０）をさらに備えたことを特徴とする請求項４に記載のジャババイトコード変換方法。
【請求項６】
前記第２上位フィールドアドレスを前記第３保存手段の特定位置に保存させ、前記第３保存手段の特定位置に保存された第２上位フィールドアドレスを選択するための第２選択データを前記被演算子フィールドに保存する第２選択データ保存段階（Ｓ３８０）をさらに備えたことを特徴とする請求項４または５に記載のジャババイトコード変換方法。
【請求項７】
前記第３フィールドアドレスが３２ビットである場合、前記第２上位フィールドアドレスは上位１６ビットからなるデータであり、前記第２下位フィールドアドレスは下位１６ビットからなるデータであることを特徴とする請求項４に記載のジャババイトコード変換方法。
【請求項８】
前記第３フィールドアドレスが３２ビットである場合、前記第２上位フィールドアドレスは上位２１ビットからなるデータであり、前記第２下位フィールドアドレスは下位１１ビットからなるデータであり、前記第１選択データは３ビットからなるデータであり、前記第２選択データは２ビットからなるデータであることを特徴とする請求項６に記載のジャババイトコード変換方法。
【請求項９】
前記第２及び第３保存手段は、臨時保存メモリ、メモリまたはレジスターのうちのいずれか一つであることを特徴とする請求項４に記載のジャババイトコード変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ジャバ（登録商標）バイトコード変換方法（Java bytecode translating method）に関する。特に、ジャババイトコードの中でフィールドアクセスバイトコードの遂行時に定数プール（Constant Pool）の解釈過程の進行なしにフィールドアクセスバイトコードを変換させてネイティブコード（native code）の数を顕著に減少させることができ、これによってジャバ仮想マシンの性能を向上させることができるジャババイトコード変換方法に関するものである。
【背景技術】
【０００２】
ジャバは主にジャバ仮想マシン（Java Virtual Machine）が解釈（interpret）できるＪＶＭＬ（Java Virtual Machine Language）という中間言語でコンパイル（compile）され、コンパイルされた結果をクラスファイル（class file）といい、クラスファイルはバイトコード（bytecode）から構成される。
【０００３】
ジャバ仮想マシンは、スタック演算（Stack Operation）を基本とするため、全ての被演算子は使用される前にスタック（Stack）に保存され、演算の結果もスタックに保存されることによって、ジャバ仮想マシンが設置されたホストプロセッサー（Host Processor）のレジスター（register）の個数と関係なく作成されたジャバアプリケーションプログラム（Java Application）を遂行できる。
【０００４】
ジャバプログラミング言語は、ＣやＣ＋＋のような言語で作成されたコードに比べて遂行速度が遅いという短所があるが、これを克服するためにソフトウェア解釈（software interpretation）方式、ＪＩＴ（Just-In-Time）コンパイル（compilation）方式、ＡＯＴ（Ahead-Of-Time）コンパイル（compilation）方式およびハードウェア（hardware）実現方式を使用している。
【０００５】
ソフトウェア解釈方式は、資源の制約が激しい場合に多く使用されるが、バイトコードの解釈がソフトウェア（software）で遂行されるため、遂行速度が遅く、ＪＩＴコンパイル方式とＡＯＴコンパイル方式は全て大きなメモリを要求するという短所を有している。
【０００６】
ハードウェア実装（hardware implementation）方式は、他の方式と異なり、バイトコードの解釈をハードウェアが遂行することによって遂行速度を高めることができ、大きなメモリを必要としないため、内蔵型システム（Embedded-System）に適合する。
【０００７】
ソフトウェア解釈器（software interpreter）とハードウェア解釈器（hardware interpreter）を通称してジャバ解釈器（Java interpreter）といい、ジャバ解釈器は、各バイトコードに対してジャバ仮想マシンが実行するコードであるネイティブコード（native code）を有している。ジャバ解釈器はバイトコードを順次に実行する。ジャバ解釈器は、一つのバイトコードがフェッチ（fetch）されると、これをディコーディング（decoding）して、当該バイトコードのような動作を遂行する１個あるいは複数個のネイティブコードでもって、バイトコードを実行する。但し、ハードウェア解釈器は、実行するコードを予めメモリに有しており、このコードの位置をハードウェアー的にマッピング（mapping）することによって、ソフトウェアでマッピング過程を遂行するより速い。
【０００８】
バイトコードは、遂行動作を規定する演算コード（opcode）と、これに従属して当該演算コードを実行する際に使用される被演算子（operand）とに区分される。演算コードと被演算子は全て１バイトで構成されるため、可能な演算コードは総２５６個であるが、ジャバ仮想マシンスペック（Java Virtual Machine specification）によれば、演算コードは２０２個を規定しており、残りについてはジャバ仮想マシンで新たなバイトコードを定義して使用できるようにする。これは特定バイトコードを遂行する過程で当該演算コードをジャバ仮想マシンスペックに定義されていない新たな演算コードに変換させることによって定義され得る。また、被演算子もまたユーザーが望むデータに変換させ得る。
【０００９】
ジャバアプリケーションプログラムをコンパイルすれば、各演算コードの後に被演算子を置き、被演算子の後に次の演算コードを置く方式でクラスファイル（class file）が生成される。この時、各演算コードは被演算子を複数個有したり、有しない場合もある。
【００１０】
ジャバアプリケーションプログラムの遂行時にフィールドにアクセスすることが頻繁に発生し、フィールドアクセスと関連したバイトコードには、静的フィールドアクセスと客体フィールドアクセスとがあり、それぞれの場合に対してフィールドに書込みと読取りを遂行するバイトコードが二種類ずつ存在する。静的フィールドアクセスのためのバイトコードは'getstatic'及び'putstatic'と定義されており、客体フィールドアクセスのためのバイトコードは'getfield'及び'putfield'と定義され、これらは全て２個の被演算子を有する。
【００１１】
図１は、従来のフィールドアクセスバイトコードの処理過程を示すフローチャートである。
【００１２】
図１に示されているように、従来のフィールドアクセスバイトコードの処理過程は、クラスファイルからバイトコードをフェッチするバイトコードフェッチ段階（Ｓ１）と、バイトコードフェッチ段階（Ｓ１）でフェッチされたバイトコードの演算コードによりフェッチされたバイトコードがフィールドアクセスのためのバイトコードであるかを判別するフィールドアクセス判別段階（Ｓ２）と、フィールドアクセス判別段階（Ｓ２）でフェッチされたバイトコードがフィールドアクセスのためのバイトコードではなければ、当該バイトコードの演算コードに対応するハンドラーにジャンプして当該バイトコードを遂行する実行段階（Ｓ３）と、フィールドアクセス判別段階（Ｓ２）でフェッチされたバイトコードがフィールドアクセスのためのバイトコードであれば、フェッチされたバイトコードが静的フィールドアクセスであるか、あるいは客体フィールドアクセスのためのバイトコードであるかを判別するフィールド判別段階（Ｓ４）と、フィールド判別段階（Ｓ４）でフェッチされたバイトコードが静的フィールドアクセスgetstatic, putstaticであれば、既定されたジャバ仮想マシンの静的フィールドの最初アドレス（initial address）である静的フィールドアドレスを抽出する静的フィールドアドレス検出段階（Ｓ５）と、フィールド判別段階（Ｓ４）でフェッチされたバイトコードが客体フィールドアクセスgetfield, putfieldであれば、スタックの最上位に保存された客体参照データにより客体フィールドの最初アドレスである客体フィールドアドレスを検出する客体フィールドアドレス検出段階（Ｓ６）と、フェッチされたバイトコードの被演算子により定数プール（Constant Pool）を解釈して、アクセスしようとする客体のフィールドオフセット（offset）を検出するオフセット検出段階（Ｓ７）と、オフセット検出段階（Ｓ７）で検出されたフィールドオフセットと前記客体フィールドアドレスや静的フィールドアドレスとを合わせて最終フィールドアドレスを算出するフィールドアドレス算出段階（Ｓ８）と、フィールドアドレス算出段階（Ｓ８）で算出されたフィールドアドレスによるフィールドにアクセスしてデータを処理するデータ処理段階（Ｓ９）とから構成される。
【００１３】
データ処理段階（Ｓ９）では、フェッチされたバイトコードがgetstaticまたはgetfieldであれば、当該フィールドアドレスのフィールドに保存されたデータをスタックの最上位に保存し、フェッチされたバイトコードがputstaticまたはputfieldであれば、スタックの最上位の直ぐ下に保存されたデータを当該フィールドアドレスのフィールドに保存する。
【００１４】
図１に示されているように、フェッチされたバイトコードがフィールドアクセスと関連したバイトコードである場合、必ず、オフセット検出段階（Ｓ７）で定数プール（Constant Pool）を解釈して、アクセスしようとする客体のフィールドオフセット（offset）を検出しなければならず、この際、定数プールを解釈する過程だけで通常数千個のネイティブコード（native code）が要求されるので、ジャバアプリケーションプログラムを遂行させるのに性能低下が発生する。
【００１５】
図２および図３は、図１のジャバアプリケーションプログラムの遂行時の性能低下を防止するために改善された従来のジャババイトコード変換方法を示すフローチャートであり、図４は、図２の従来のジャババイトコード変換方法において客体フィールドアクセスのgetfieldを説明するためのブロック図である。
【００１６】
図２乃至図４に示された従来のジャババイトコード変換方法は、フィールドアクセスバイトコードである場合に、ネイティブコードの数を減少させるためにSUN Microsystem社により提案されたものである。フェッチされたバイトコードがフィールドアクセスのためのバイトコードである場合に、これらを新たなバイトコード（例えば、’x_quick'、ここでｘはgetstatic、putstatic、getfieldまたはputfieldのうちのいずれか一つである）に変換させてフィールドアクセスのためのバイトコードを処理する。
【００１７】
つまり、図２に示されているように、特定プログラムカウンター（Program Counter）でフェッチされたバイトコードがフィールドアクセスのためのバイトコードであれば（Ｓ１１）、図１に示されているようにフィールドアクセスのためのバイトコード処理過程と同一に、バイトコードの被演算子（operand）からこれに該当する定数プールを解釈し、定数プール解釈によりフィールドオフセットＦＯを検出してフィールドアドレスＦＡおよびデータを処理し（Ｓ１３）、フィールドオフセットＦＯをバイトコードの被演算子１ｂの位置に保存し（Ｓ１５）、バイトコードの演算コードＯＰを新たな演算コードである’x_quick'に変換させる（Ｓ１７）。ここでｘはgetstatic、putstatic、getfieldまたはputfieldのうちのいずれか一つである。以降、変換された演算コードはジャバ仮想マシンで’x_quick'と認識する。
【００１８】
図３および図４に示されているように、従来のジャババイトコード変換方法は次の通りである。
【００１９】
変換されたバイトコード検出段階（Ｓ２０）では、フェッチされたバイトコード１の演算コード（ＯＰ）１ａが、新たに変換されたフィールドアクセスのためのバイトコードの演算コード１ａである’x_quick'であるかを検出する。変換されたバイトコード検出段階（Ｓ２０）で、バイトコードが新たに変換されたフィールドアクセスのためのバイトコードであれば、フィールド判別段階（Ｓ３０）では、フェッチされたバイトコードが静的フィールドアクセスであるか、あるいは客体フィールドアクセスのためのバイトコードであるかを判別する。静的フィールドアドレス検出段階（Ｓ４０）では、フィールド判別段階（Ｓ３０）でフェッチされたバイトコードが静的フィールドアクセスgetstatic_quick、putstatic_quickであれば、既定されたジャバ仮想マシンの静的フィールドのアドレスを抽出する。客体フィールドアドレス検出段階（Ｓ５０）では、フィールド判別段階（Ｓ３０）でフェッチされたバイトコードが客体フィールドアクセスgetfield_quick、putfield_quickであれば、スタック３の最上位に保存された客体参照データＯＤにより客体フィールドアドレス５を検出する。フィールドアドレス算出段階（Ｓ６０）では、フェッチされたバイトコードの被演算子１ｂに保存されたフィールドオフセットＦＯと前記客体フィールドアドレスや静的フィールドアドレスとを合わせてフィールドアドレスＦＡを算出する。データ処理段階（Ｓ７０）では、算出されたフィールドアドレスＦＡによるフィールド７にアクセスしてフィールドデータＦＤを処理する。
【００２０】
図２乃至図４に示された従来のジャババイトコード変換方法は、フィールドアクセスのためのバイトコード遂行時に、新たなバイトコードに変換されたバイトコードである場合には、フィールドオフセットを検出するための定数プール解釈を行なう必要がないので、図１に比べてネイティブコードの数を顕著に減少させることができるという長所はある。しかし、従来のジャババイトコード変換方法は、客体フィールドアクセスのためのバイトコードである場合、スタックの最上位に位置した客体参照データから客体フィールドアドレスを検出しなければならず、フィールドアドレスを算出するために新たに変換されたバイトコードの被演算子に保存されたフィールドオフセットと客体フィールドフィールドアドレスを合わせたり、またはフィールドオフセットと静的フィールドアドレスを合わせなければならないので、これらの過程を遂行するために多くのネイティブコードが必要であり、これによって依然としてジャバアプリケーションプログラムの遂行時に性能低下が発生するという問題点を有している。
【先行技術文献】
【特許文献】
【００２１】
【特許文献１】米国特許出願公開US2006/0070049
【特許文献２】米国特許出願公開US2003/0192037
【特許文献３】米国特許出願公開US2005/0160415
【特許文献４】米国特許出願公開US2006/0253847
【特許文献５】米国特許US7263722
【特許文献６】米国特許出願公開US2007/0118724
【発明の概要】
【発明が解決しようとする課題】
【００２２】
本発明の目的は、静的フィールドアクセスおよび客体フィールドアクセスのためのバイトコードに対して算出されたフィールドアドレスを、バイトコードの被演算子と保存部に分けて保存した後、当該バイトコードの演算コードを既に設定された演算コードに変換させ、既に設定された演算コードに対応するフィールドアクセスのためのバイトコードがフェッチされれば、被演算子と保存部に保存されたデータによるフィールドアドレスによりフィールドにアクセスしてデータを処理し、このようにして、静的フィールドアクセスおよび客体フィールドアクセスのためのフィールドアドレスを迅速に算出でき、フィールドアドレス算出時に要求されるネイティブコードの数を減少させてジャバアプリケーションプログラムの遂行時に性能を向上させることができるジャババイトコード変換方法を提供することにある。
【課題を解決するための手段】
【００２３】
前記の目的を達成するために本発明のジャババイトコード変換方法は、ジャバクラスファイルから、演算コードが保存された演算コードフィールドと被演算子が保存された被演算子フィールドからなるジャババイトコードをフェッチするバイトコードフェッチ段階；前記バイトコードフェッチ段階でフェッチされたジャババイトコードの演算コードが静的フィールドにアクセスするための静的フィールドアクセスバイトコードである場合、前記フェッチされたバイトコードの被演算子によって、定数プールを解釈して、アクセスしようとする客体のフィールドオフセットと、既定された値である静的フィールドアドレスとを合わせて、第１フィールドアドレスを検出して、前記第１フィールドアドレスによりフィールドにアクセスしてデータを処理する静的フィールドアドレス検出およびデータ処理段階；前記静的フィールドアドレス検出およびデータ処理段階で検出された前記第１フィールドアドレスのビットのうちの上位ビットから構成された第１上位フィールドアドレスを第１保存手段に保存し、前記第１フィールドアドレスのビットのうちの、第１上位フィールドアドレスを除いた残りの下位ビットから構成された第１下位フィールドアドレスを前記被演算子フィールドに保存する静的フィールドアドレス保存段階；前記演算コードフィールドに保存された演算コードを、ユーザーによって、既に設定された新たな静的フィールドアクセスのための演算コードに変換する静的演算コード変換段階；前記バイトコードフェッチ段階でフェッチされたジャババイトコードが、前記静的演算コード変換段階で変換された演算コードを有するジャババイトコードであれば、前記第１保存手段に保存された第１上位フィールドアドレスと、フェッチされたジャババイトコードの被演算子フィールドに保存された第１下位フィールドアドレスとを連結して、第２フィールドアドレスを生成する第１フィールドアドレス生成段階；および、前記第２フィールドアドレスによりフィールドにアクセスしてデータを処理する第１データ処理段階を備えたことを特徴とする。
【００２４】
前記の目的を達成するために本発明のジャババイトコード変換方法は、ジャバクラスファイルから、演算コードが保存された演算コードフィールドと被演算子が保存された被演算子フィールドからなるジャババイトコードをフェッチするバイトコードフェッチ段階；前記バイトコードフェッチ段階でフェッチされたジャババイトコードの演算コードが客体フィールドにアクセスするための客体フィールドアクセスバイトコードである場合、前記フェッチされたバイトコードの被演算子によって、定数プールを解釈して、アクセスしようとする客体のフィールドオフセットと、スタックの最上位に保存された第１客体参照データによる客体フィールドアドレスとを合わせて、第３フィールドアドレスを検出して、前記第３フィールドアドレスによりフィールドにアクセスしてデータを処理する客体フィールドアドレス検出およびデータ処理段階；前記第１客体参照データと前記フィールドオフセットを第２保存手段に保存するフィールドオフセットおよび客体参照データ保存段階；前記客体フィールドアドレス検出およびデータ処理段階で検出された前記第３フィールドアドレスのビットのうちの上位ビットから構成された第２上位フィールドアドレスを第３保存手段に保存し、前記第３フィールドアドレスのビットのうちの、第２上位フィールドアドレスを除いた残りの下位ビットから構成された第２下位フィールドアドレスを前記被演算子フィールドに保存する第２フィールドアドレス保存段階；前記演算コードフィールドに保存された演算コードをユーザーによって、既に設定された新たな客体フィールドアクセスのための演算コードに変換する客体演算コード変換段階；前記バイトコードフェッチ段階でフェッチされたジャババイトコードが前記客体演算コード変換段階で変換された演算コードを有するジャババイトコードであれば、前記第２保存手段に保存された第１客体参照データと、スタックの最上位に保存された現在の客体参照データとが同一であるかを比較する比較段階；前記比較段階で、前記第１客体参照データと、スタックの最上位に保存された現在の客体参照データとが同一であれば、前記第３保存手段に保存された第２上位フィールドアドレスと、フェッチされたジャババイトコードの被演算子フィールドに保存された第２下位フィールドアドレスとを連結して、第４フィールドアドレスを生成する第２フィールドアドレス生成段階；前記第４フィールドアドレスによりフィールドにアクセスしてデータを処理する第２データ処理段階；前記比較段階で、前記第１客体参照データと、スタックの最上位に保存された現在の客体参照データとが同一ではなければ、前記スタックの最上位に保存された現在の客体参照データから客体フィールドアドレスを検出して、検出された客体フィールドアドレスと、前記第２保存手段に保存されたフィールドオフセットとを合わせて、第５フィールドアドレスを生成する第３フィールドアドレス生成段階；および、上記第５フィールドアドレスによりフィールドにアクセスしてデータを処理する第３データ処理段階を備えたことを特徴とする。
【発明の効果】
【００２５】
本発明のジャババイトコード変換方法は、静的フィールドアクセスおよび客体フィールドアクセスのためのバイトコードに対して算出されたフィールドアドレスを、バイトコードの被演算子と保存部に分けて保存した後、当該バイトコードの演算コードを既に設定された演算コードに変換させ、既に設定された演算コードに対応するフィールドアクセスのためのバイトコードがフェッチされれば、被演算子と保存部に保存されたデータによるフィールドアドレスによりフィールドにアクセスしてデータを処理し、静的フィールドアクセスおよび客体フィールドアクセスのためのフィールドアドレスを迅速に算出でき、フィールドアドレス算出時に要求されるネイティブコードの数を減少させてジャバアプリケーションプログラムの遂行時に性能を向上させることができる。
【図面の簡単な説明】
【００２６】
【図１】従来のフィールドアクセスのためのジャババイトコードの処理過程を示すフローチャートである。
【図２】従来のフィールドアクセスのためのジャババイトコード変換方法を示すフローチャート（１）である。
【図３】従来のフィールドアクセスのためのジャババイトコード変換方法を示すフローチャート（２）である。
【図４】図２および図３の従来のジャババイトコード変換方法を説明するためのブロック図である。
【図５】静的フィールドアクセスのための本発明のジャババイトコード変換方法とこれを処理する過程のフローチャート（１）である。
【図６】静的フィールドアクセスのための本発明のジャババイトコード変換方法とこれを処理する過程のフローチャート（２）である。
【図７】静的フィールドアクセスのための本発明のジャババイトコード変換方法を説明するためのブロック図（１）である。
【図８】静的フィールドアクセスのための本発明のジャババイトコード変換方法を説明するためのブロック図（２）である。
【図９】客体フィールドアクセスのための本発明のジャババイトコード変換方法とこれを処理する過程のフローチャート（１）である。
【図１０】客体フィールドアクセスのための本発明のジャババイトコード変換方法とこれを処理する過程のフローチャート（２）である。
【図１１】客体フィールドアクセスのための本発明のジャババイトコード変換方法を説明するためのブロック図（１）である。
【図１２】客体フィールドアクセスのための本発明のジャババイトコード変換方法を説明するためのブロック図（２）である。
【発明を実施するための形態】
【００２７】
以下、添付した図面を参照して本発明のジャババイトコード変換方法を詳しく説明する。
【００２８】
図５および図６は、本発明の静的フィールドアクセスのためのジャババイトコード変換方法とこれを処理する過程のフローチャートであり、図７および図８は、本発明の静的フィールドアクセスのためのジャババイトコード変換方法を説明するためのブロック図である。
【００２９】
図５乃至図８に示されているように、本発明のジャババイトコード変換方法は、ジャバクラスファイルから、演算コードが保存された演算コードフィールドと被演算子が保存された被演算子フィールドとからなるジャババイトコードをフェッチするバイトコードフェッチ段階（Ｓ１１０）と、バイトコードフェッチ段階（Ｓ１１０）でフェッチされたジャババイトコードの演算コードが静的フィールドにアクセスするための静的フィールドアクセスバイトコードである場合、フェッチされたバイトコードの被演算子により定数プールを解釈して、アクセスしようとする客体のフィールドオフセットと、既定された値である静的フィールドアドレスとを合わせて第１フィールドアドレスＦＡ１を検出し、第１フィールドアドレスＦＡ１によりフィールド１３０にアクセスしてデータを処理する静的フィールドアドレス検出およびデータ処理段階（Ｓ１４０）と、静的フィールドアドレス検出およびデータ処理段階（Ｓ１４０）で検出された第１フィールドアドレスＦＡ１のビットのうちの上位ビットから構成された第１上位フィールドアドレスＦＡＵ１を第１保存部１１０に保存し、第１フィールドアドレスＦＡ１のビットのうちの、第１上位フィールドアドレスＦＡＵ１を除いた残りの下位ビットから構成された第１下位フィールドアドレスＦＡＤ１を被演算子フィールド１２０ｂに保存する静的フィールドアドレス保存段階（Ｓ１５０）と、演算コードフィールド１２０ａに保存された演算コードをユーザーにより既に設定された新たな静的フィールドアクセスのための演算コードＮＯＰＡに変換する静的演算コード変換段階（Ｓ１６０）と、バイトコードフェッチ段階（Ｓ１１０）でフェッチされたジャババイトコードが静的演算コード変換段階（Ｓ１６０）で変換された演算コードＮＯＰＡを有するジャババイトコードであれば、第１保存部１１０に保存された第１上位フィールドアドレスＦＡＵ１と、フェッチされたジャババイトコードの被演算子フィールド１２０ｂに保存された第１下位フィールドアドレスＦＡＤ１とを連結して第２フィールドアドレスＦＡ２を生成する第１フィールドアドレス生成段階（Ｓ２４０）と、第２フィールドアドレスＦＡ２によりフィールド１３０にアクセスしてデータを処理する第１データ処理段階（Ｓ２５０）とから構成される。
【００３０】
第１フィールドアドレスＦＡ１が３２ビットである場合、第１上位フィールドアドレスＦＡＵ１は上位１６ビットからなるデータであり、第１下位フィールドアドレスＦＡＤ１は下位１６ビットからなるデータである。
【００３１】
第１保存部１１０は、臨時保存メモリ、メモリまたはレジスターのうちのいずれか一つから構成される。
【００３２】
図９および図１０は、本発明の客体フィールドアクセスのためのジャババイトコード変換方法とこれを処理する過程のフローチャートであり、図１１および図１２は、本発明の客体フィールドアクセスのためのジャババイトコード変換方法を説明するためのブロック図である。
【００３３】
図９乃至図１２に示されているように、本発明のジャババイトコード変換方法は、ジャバクラスファイルから、演算コードが保存された演算コードフィールドと被演算子が保存された被演算子フィールドとからなるジャババイトコードをフェッチするバイトコードフェッチ段階（Ｓ３１０）と、バイトコードフェッチ段階（Ｓ３１０）でフェッチされたジャババイトコードの演算コードが客体フィールドにアクセスするための客体フィールドアクセスバイトコードである場合、フェッチされたバイトコードの被演算子により定数プールを解釈して、アクセスしようとする客体のフィールドオフセットＦＯｉと、スタック２４０の最上位に保存された第１客体参照データＯＤｉによる客体フィールドアドレスとを合わせて第３フィールドアドレスＦＡ３を検出し、第３フィールドアドレスＦＡ３によりフィールド２３０にアクセスしてデータを処理する客体フィールドアドレス検出およびデータ処理段階（Ｓ３４０）と、第１客体参照データＯＤｉとフィールドオフセットＦＯｉとを第２保存部２１０ａに保存するフィールドオフセットおよび客体参照データ保存段階（Ｓ３５０）と、客体フィールドアドレス検出およびデータ処理段階（Ｓ３４０）で検出された第３フィールドアドレスＦＡ３のビットのうちの上位ビットから構成された第２上位フィールドアドレスＦＡＵ２を第３保存部２１０ｂに保存し、第３フィールドアドレスＦＡ３のビットのうちの、第２上位フィールドアドレスＦＡＵ２を除いた残りの下位ビットから構成された第２下位フィールドアドレスＦＡＤ２を被演算子フィールド２２０ｂに保存する第２フィールドアドレス保存段階（Ｓ３６０）と、演算コードフィールド２２０ａに保存された演算コードをユーザーにより既に設定された新たな客体フィールドアクセスのための演算コードＮＯＰＢに変換する客体演算コード変換段階（Ｓ３９０）と、バイトコードフェッチ段階（Ｓ３１０）でフェッチされたジャババイトコードが客体演算コード変換段階（Ｓ３９０）で変換された演算コードＮＯＰＢを有するジャババイトコードであれば、第２保存部２１０ａに保存された第１客体参照データＯＤｉとスタック２４０の最上位に保存された現在の客体参照データＣＯＤとが同一であるかを比較する比較段階（Ｓ４４０）と、比較段階（Ｓ４４０）で第１客体参照データＯＤｉとスタック２４０の最上位に保存された現在の客体参照データＣＯＤとが同一であれば、第３保存部２１０ｂに保存された第２上位フィールドアドレスＦＡＵ２とフェッチされたジャババイトコードの被演算子フィールド２２０ｂに保存された第２下位フィールドアドレスＦＡＤ２とを連結して第４フィールドアドレスＦＡ４を生成する第２フィールドアドレス生成段階（Ｓ４５０）と、第４フィールドアドレスＦＡ４によりフィールド２３０にアクセスしてデータを処理する第２データ処理段階（Ｓ４６０）と、比較段階（Ｓ４４０）で第１客体参照データＯＤｉとスタック２４０の最上位に保存された現在の客体参照データＣＯＤとが同一ではなければ、スタック２４０の最上位に保存された現在の客体参照データＣＯＤから客体フィールドアドレスを検出し、検出された客体フィールドアドレスと第２保存部２１０ａに保存されたフィールドオフセットＦＯｉとを合わせて第５フィールドアドレスＦＡ５を生成する第３フィールドアドレス生成段階（Ｓ４７０）と、第５フィールドアドレスＦＡ５によりフィールド２３０にアクセスしてデータを処理する第３データ処理段階（Ｓ４８０）とから構成される。
【００３４】
前記図９乃至図１２に示された本発明のジャババイトコード変換方法は、第１客体参照データＯＤｉとフィールドオフセットＦＯｉとを第２保存部２１０ａの特定位置に保存させ、第２保存部２１０ａの特定位置に保存された第１客体参照データＯＤｉとフィールドオフセットＦＯｉとを選択するための第１選択データＳ１を被演算子フィールド２２０ｂに保存する第１選択データ保存段階（Ｓ３７０）と、第２上位フィールドアドレスＦＡＵ２を第３保存部２１０ｂの特定位置に保存させ、第３保存部２１０ｂの特定位置に保存された第２上位フィールドアドレスＦＡＵ２を選択するための第２選択データＳ２を被演算子フィールド２２０ｂに保存する第２選択データ保存段階（Ｓ３８０）とをさらに備えることができる。
【００３５】
第３フィールドアドレスＦＡ３が３２ビットである場合、第２上位フィールドアドレスＦＡＵ２は上位１６ビットからなるデータであり、第２下位フィールドアドレスＦＡＤ２は下位１６ビットからなるデータから構成されることができ、または第３フィールドアドレスＦＡ３が３２ビットである場合、第２上位フィールドアドレスＦＡＵ２は上位２１ビットからなるデータであり、第２下位フィールドアドレスＦＡＤ２は下位１１ビットからなるデータであり、第１選択データＳ１は３ビットからなるデータであり、第２選択データＳ２は２ビットからなるデータから構成されることができる。
【００３６】
第２、第３保存部２１０ａ、２１０ｂは、臨時保存メモリ、メモリまたはレジスターのうちのいずれか一つから構成されることができる。
【００３７】
前記の構成による本発明のジャババイトコード変換方法の動作は次の通りである。
【００３８】
ジャバフィールドアクセスと関連したバイトコードには、静的フィールドアクセスのためのバイトコードと、客体フィールドアクセスのためのバイトコードとがあり、静的フィールドアクセスのためのバイトコードには、'getstatic'と'putstatic’とがあり、客体フィールドアクセスのためのバイトコードには、'getfield'と'putfield'とがある。
【００３９】
図５乃至図８は、本発明の静的フィールドアクセスのためのジャババイトコード変換方法に関するもので、本発明の静的フィールドアクセスのためのジャババイトコード変換方法の動作は次の通りである。
【００４０】
図５および図８に示されているように、バイトコードフェッチ段階（Ｓ１１０）では、ジャバクラスファイルから、演算コードが保存された演算コードフィールドと被演算子が保存された被演算子フィールドとからなるジャババイトコードをフェッチする。
【００４１】
静的フィールドアドレス検出およびデータ処理段階（Ｓ１４０）では、バイトコードフェッチ段階（Ｓ１１０）でフェッチされたジャババイトコードの演算コードが静的フィールドにアクセスするための静的フィールドアクセスバイトコードである場合、つまり、演算コードが'getstatic’または'putstatic'であれば、従来と同一に、フェッチされたバイトコードの被演算子により定数プールを解釈して、アクセスしようとする客体のフィールドオフセットと、既定された値である静的フィールドアドレスとを合わせて第１フィールドアドレスＦＡ１を算出する。静的フィールドアクセスのためのバイトコードがフェッチされるプログラムカウンターが同一であれば、算出される静的フィールドアクセスのためのフィールドアドレスは、常時同一の値を有する。算出された第１フィールドアドレスＦＡ１によりフィールド１３０にアクセスして、'getstatic’または'putstatic’の演算コードにより、第１フィールドアドレスＦＡ１に該当するフィールド１３０に保存されたフィールドデータＦＤをスタック１４０の最上位に保存したり、スタック１４０の最上位の下に保存されたデータを、第１フィールドアドレスＦＡ１に該当するアドレスのフィールド１３０に保存する。
【００４２】
静的フィールドアドレス保存段階（Ｓ１５０）では、第１フィールドアドレスＦＡ１のビットのうちの上位１６ビットである第１上位フィールドアドレスＦＡＵ１を、臨時保存メモリ、メモリまたはレジスターのうちのいずれか一つから構成された第１保存部１１０に保存し、第１フィールドアドレスＦＡ１の残りの下位１６ビットである第１下位フィールドアドレスＦＡＤ１を、被演算子フィールド１２０ｂに保存する。つまり、静的フィールドアクセスのための最終フィールドアドレスは３２ビットであり、これを１６ビットである被演算子フィールドに保存できないので、第１保存部１１０には第１フィールドアドレスＦＡ１の上位１６ビットである第１上位フィールドアドレスＦＡＵ１を保存し、第１フィールドアドレスＦＡ１の下位１６ビットである第１下位フィールドアドレスＦＡＤ１は、フェッチされたバイトコード１２０の被演算子フィールド１２０ｂに保存する。
【００４３】
静的演算コード変換段階（Ｓ１６０）では、演算コードフィールド１２０ａに保存された'getstatic’または'putstatic’の演算コードをユーザーにより既に設定された新たな静的フィールドアクセスのための演算コードＮＯＰＡである'getstatic_new’または'putstatic_new'に変換させる。
【００４４】
第１フィールドアドレス生成段階（Ｓ２４０）では、バイトコードフェッチ段階（Ｓ２１０）でフェッチされたジャババイトコードが静的演算コード変換段階（Ｓ１６０）で変換された演算コードＮＯＰＡを有するジャババイトコードであれば、第１保存部１１０に保存された第１上位フィールドアドレスＦＡＵ１と、フェッチされたジャババイトコードの被演算子フィールド１２０ｂに保存された第１下位フィールドアドレスＦＡＤ１とを連結して第２フィールドアドレスＦＡ２を生成し、第１データ処理段階（Ｓ２５０）では、第２フィールドアドレスＦＡ２によりフィールド１３０にアクセスしてデータを処理する。
【００４５】
従って、本発明の静的フィールドアクセスのためのバイトコードがバイトコードフェッチ段階（Ｓ２１０）で最初にフェッチされると、従来のような方法により定数プール解釈を通じて第１フィールドアドレスＦＡ１を算出してデータ処理した後、第１フィールドアドレスＦＡ１を、第１保存部１１０とフェッチされたバイトコードの被演算子フィールドとに分けて保存し、演算コードフィールドを新たな演算コードに変換させた後、バイトコードフェッチ段階（Ｓ１１０）で新たな演算コードに変換されたバイトコードがフェッチされると、第１保存部１１０に保存された第１上位フィールドアドレスＦＡＵ１とフェッチされたバイトコードの被演算子フィールド１２０ｂの被演算子である第１下位フィールドアドレスＦＡＤ１とを連結（concatenation）して第２フィールドアドレスＦＡ２を生成し、生成された第２フィールドアドレスＦＡ２によりフィールド１３０にアクセスしてデータを処理することによって、従来とは異なりフィールドアドレスを迅速に算出できる。つまり、図２および図３に示されているように、従来の場合、定数プール解釈を通じて算出されたフィールドオフセットと検出された静的フィールドアドレスとを合わせて最終フィールドアドレスを算出したが、本発明の場合、バイトコードがフェッチされるプログラムカウンターが同一であれば算出される静的フィールドアクセスのためのフィールドアドレスは同一であるので、同一のフィールドアドレスである第１フィールドアドレスＦＡ１の上位１６ビットを第１保存部１１０に保存し、下位１６ビットを被演算子フィールド１２０ｂに保存し、必要時にこれらを連結して迅速に最終フィールドアドレスである第２フィールドアドレスＦＡ２を算出できる。
【００４６】
ハードウェア解釈器がプログラムカウンターの更新を担当する場合、図８に示された'getstatic_new’のバイトコード命令を遂行するためには、第２フィールドアドレスＦＡ２からフィールド１３０に保存されたフィールドデータＦＤを読み取ってスタック１４０の最上位にフィールドデータＦＤを保存し、スタックポインタ（stack pointer）を更新する３個のネイティブコード（native code）が要求される。若しハードウェア解釈器がスタックポインタの更新までも担当する場合には、２個のネイティブコードが要求される。したがって、従来に比べてバイトコード命令遂行のために要求されるネイティブコードの数を減少させることができるので、ジャバアプリケーションプログラムの遂行時に性能を向上させることができる。
【００４７】
図９乃至図１２は、本発明の客体フィールドアクセスのためのジャババイトコード変換方法に関するもので、本発明の客体フィールドアクセスのためのジャババイトコード変換方法の動作は次の通りである。
【００４８】
客体フィールドアクセスのためのバイトコードである'getfield’および'putfield'はフェッチされるプログラムカウンターが同一であっても、スタック２４０の最上位に存在する客体参照データ（object reference data）が異なることがあるため、静的フィールドアクセスのためのバイトコードとは異なるように処理しなければならない。
【００４９】
図９および図１１に示されているように、バイトコードフェッチ段階（Ｓ３１０）では、ジャバクラスファイルから演算コードが保存された演算コードフィールドと被演算子が保存された被演算子フィールドとからなるジャババイトコードをフェッチする。客体フィールドアドレス検出およびデータ処理段階（Ｓ３４０）では、バイトコードフェッチ段階（Ｓ３１０）でフェッチされたジャババイトコードの演算コードが、客体フィールドにアクセスするための客体フィールドアクセスバイトコードである'getfield’または'putfield'であれば、従来の方法と同一に、フェッチされたバイトコードの被演算子により定数プールを解釈して、アクセスしようとする客体のフィールドオフセットＦＯｉと、スタック２４０の最上位に保存された第１客体参照データＯＤｉによる客体フィールドアドレスとを合わせて第３フィールドアドレスＦＡ３を検出し、第３フィールドアドレスＦＡ３によりフィールド２３０にアクセスしてデータを処理する。
【００５０】
フィールドオフセットおよび客体参照データ保存段階（Ｓ３５０）では、第１客体参照データＯＤｉとフィールドオフセットＦＯｉとを第２保存部２１０ａに保存し、第２フィールドアドレス保存段階（Ｓ３６０）では、客体フィールドアドレス検出およびデータ処理段階（Ｓ３４０）で検出された第３フィールドアドレスＦＡ３のビットのうちの上位ビットから構成された第２上位フィールドアドレスＦＡＵ２を第３保存部２１０ｂに保存し、第３フィールドアドレスＦＡ３のビットのうちの、第２上位フィールドアドレスＦＡＵ２を除いた残りの、下位ビットから構成された第２下位フィールドアドレスＦＡＤ２を被演算子フィールド２２０ｂに保存する。
【００５１】
第３フィールドアドレスＦＡ３が３２ビットである場合、静的フィールドアクセスと同一に、第２上位フィールドアドレスＦＡＵ２は上位１６ビットからなるデータであり、第２下位フィールドアドレスＦＡＤ２は下位１６ビットからなるデータから構成されることもできる。または、第２保存部２１０ａと第３保存部２１０ｂにそれぞれ保存される、第１客体参照データＯＤｉと、フィールドオフセットＦＯｉと、第２上位フィールドアドレスＦＡＵ２の数により、第２上位フィールドアドレスＦＡＵ２と第２下位フィールドアドレスＦＡＤ２のビットの大きさが相異なる。例えば、 図１１に示されているように、第２保存部２１０ａに保存され得るエントリー（entry）の数を８個に設定し、第３保存部２１０ｂに保存され得るエントリーの数を４個に設定する場合には（勿論このようなエントリーの数はユーザーにより決定される値である）、第２保存部２１０ａに保存されるフィールドオフセットＦＯｉと第１客体参照データＯＤｉはそれぞれ８個ずつ保存され得、保存される位置のエントリーを決定するために３ビットから構成された第１選択データＳ１が必要である。第３保存部２１０ｂに保存される第２上位フィールドアドレスＦＡＵ２が３個である場合には、保存される位置のエントリーを決定するために２ビットから構成された第２選択データＳ２が必要であり、この場合には被演算子フィールド２２０ｂに第１、第２選択データＳ１、Ｓ２を保存しなければならない。したがって、被演算子フィールド２２０ｂには５ビットである第１、第２選択データＳ１、Ｓ２を除いた１１ビットだけが保存され得るので、第２下位フィールドアドレスＦＡＤ２は第３フィールドアドレスＦＡ３の下位１１ビットから構成されたデータであり、第２上位フィールドアドレスＦＡＵ２は上位２１ビットからなるデータから構成される。
【００５２】
第１選択データ保存段階（Ｓ３７０）では、第１客体参照データＯＤｉとフィールドオフセットＦＯｉを第２保存部２１０ａの特定位置に保存し、第２保存部２１０ａの特定位置に保存された第１客体参照データＯＤｉとフィールドオフセットＦＯｉを選択するための第１選択データＳ１を被演算子フィールド２２０ｂに保存する。第２選択データ保存段階（Ｓ３８０）では、第２上位フィールドアドレスＦＡＵ２を第３保存部２１０ｂの特定位置に保存し、第３保存部２１０ｂの特定位置に保存された第２上位フィールドアドレスＦＡＵ２を選択するための第２選択データＳ２を被演算子フィールド２２０ｂに保存する。
【００５３】
客体演算コード変換段階（Ｓ３９０）では、演算コードフィールド２２０ａに保存された演算コードである'getfield’または'putfield'が、ユーザーにより既に設定された新たな客体フィールドアクセスのための演算コードＮＯＰＢである'getfield_new’または'putfield_new'に変換させる。
【００５４】
図１０および図１２に示されているように、比較段階（Ｓ４４０）は、バイトコードフェッチ段階（Ｓ４１０）でフェッチされたジャババイトコードが客体演算コード変換段階（Ｓ３９０）で変換された演算コードＮＯＰＢを有するジャババイトコードであれば（Ｓ４２０）、つまり、以前の客体演算コード変換段階（Ｓ３９０）で変換された演算コードＮＯＰＢを有するプログラムカウンターと同一のプログラムカウンターをフェッチする場合、第２保存部２１０ａに保存された第１客体参照データＯＤｉと、スタック２４０の最上位に保存された現在の客体参照データＣＯＤとが同一であるかを比較する。
【００５５】
バイトコードフェッチ段階（Ｓ４１０）でフェッチされたジャババイトコードが、客体演算コード変換段階（Ｓ３９０）で変換された演算コードＮＯＰＢを有するジャババイトコードではなければ、従来のバイトコード変換方法と同一の方法により遂行する（Ｓ４３０）。
【００５６】
比較段階（Ｓ４４０）で第１客体参照データＯＤｉとスタック２４０の最上位に保存された現在の客体参照データＣＯＤとが同一であれば、最終フィールドアドレスは客体フィールドアドレス検出およびデータ処理段階（Ｓ３４０）で検出された第３フィールドアドレスＦＡ３と同一である。そのため、第２フィールドアドレス生成段階（Ｓ４５０）では、第３保存部２１０ｂに保存された２１ビットから構成された第２上位フィールドアドレスＦＡＵ２と、フェッチされたジャババイトコードの被演算子フィールド２２０ｂに保存された１１ビットから構成された第２下位フィールドアドレスＦＡＤ２とを連結して第４フィールドアドレスＦＡ４を生成する。また、第２データ処理段階（Ｓ４６０）では、第４フィールドアドレスＦＡ４によりフィールド２３０にアクセスしてデータをを処理する。つまり、比較段階（Ｓ４４０）で第１客体参照データＯＤｉと現在の客体参照データＣＯＤとが同一であれば、図５の静的フィールドアクセスのためのジャババイトコード変換方法と同一に、保存部に保存された上位フィールドアドレスと、被演算子フィールドに保存された下位フィールドアドレスとを連結してフィールドアクセスのための最終フィールドアドレスを生成する。
【００５７】
第３フィールドアドレス生成段階（Ｓ４７０）では、比較段階（Ｓ４４０）で第２保存部２１０ａに保存された第１客体参照データＯＤｉと、スタック２４０の最上位に保存された現在の客体参照データＣＯＤとが同一ではなければ、客体フィールドアドレス検出およびデータ処理段階（Ｓ３４０）で検出された第３フィールドアドレスＦＡ３と、客体フィールドアクセスのためのフェッチされた変換された演算コードを有するバイトコードの最終フィールドアドレスは相異するので、最終フィールドアドレスである第５フィールドアドレスＦＡ５を生成するためにスタック２４０の最上位に保存された現在の客体参照データＣＯＤから客体フィールドアドレスを検出し、検出された客体フィールドアドレスと第２保存部２１０ａに保存されたフィールドオフセットＦＯｉとを合わせて第５フィールドアドレスＦＡ５を生成する。
【００５８】
第３データ処理段階（Ｓ４８０）では、第５フィールドアドレスＦＡ５によりフィールド２３０にアクセスしてデータを処理する。
【００５９】
比較段階（Ｓ４４０）と第３フィールドアドレス生成段階（Ｓ４７０）でそれぞれ第２保存部２１０ａに保存された、第１客体参照データＯＤｉとフィールドオフセットＦＯｉを第２保存部２１０ａから読み出す場合には、フェッチされたバイトコードの被演算子フィールド２２０ｂに保存された第１選択データＳ１のデータの論理値により決定される。つまり、第１選択データの論理値が０１１であれば、第２保存部２１０ａから第２保存部２１０ａの４番目のエントリーに保存された第１客体参照データＯＤ４とフィールドオフセットＦＯ４を読み出して処理する。
【００６０】
前記と同一に、第２フィールドアドレス保存段階（Ｓ３６０）で第３保存部２１０ｂに保存された第３フィールドアドレスＦＡ３の第２上位フィールドアドレスＦＡＵ２を、第３保存部２１０ｂから読み出す際には、第２選択データＳ２のデータ論理値により決定されるエントリーの位置に保存された第２上位フィールドアドレスＦＡＵ２を読み出す。例えば、第２選択データＳ２が１０であれば、第３保存部２１０ｂの３番目のエントリーに保存された第２上位フィールドアドレスＦＡＵ２を読み出して被演算子フィールド２２０ｂに保存された第２下位フィールドアドレスＦＡＤ２と連結して最終フィールドアドレスである第４フィールドアドレスＦＡ４を生成する。
【００６１】
第２保存部２１０ａおよび第３保存部２１０ｂは、臨時保存メモリ、メモリまたはレジスターらのうちのいずれか一つから構成されることができる。
【００６２】
従って、図９乃至図１２に示された本発明の客体フィールドアクセスのためのジャババイトコード変換方法は、特定プログラムカウンターでフェッチされた客体フィールドアクセスのためのバイトコードの処理時にスタック２４０の最上位に存在する現在の客体参照データＣＯＤとフィールドオフセットおよび客体参照データ保存段階（Ｓ３５０）で第２保存部２１０ａに保存された第１客体参照データＯＤｉとが同一である場合には、フェッチされた被演算子フィールドに保存された第２下位フィールドアドレスＦＡＤ２と、第３保存部２１０ｂに保存された第２上位フィールドアドレスＦＡＵ２とを連結してフィールドアクセスのための最終フィールドアドレスである第４フィールドアドレスＦＡ４を迅速に生成でき、これに要求されるネイティブコードの数を減少させることができる。現在の客体参照データＣＯＤと第１客体参照データＯＤｉとが同一ではない場合には、第２保存部２１０ａに保存されたフィールドオフセットＦＯｉを現在の客体参照データＣＯＤから検出された客体フィールドアドレスと合わせて、フィールドアクセスのための最終フィールドアドレスである第５フィールドアドレスＦＡ５を容易に生成できる。
【００６３】
本発明のジャババイトコード変換方法では、図５および図６の静的フィールドアクセスのためのジャババイトコード変換方法と、図９および図１０の客体フィールドアクセスのためのジャババイトコード変換方法を共に実現することもできる。このためには、バイトコードフェッチ段階（Ｓ１１０、Ｓ２１０、Ｓ３１０、Ｓ４１０）でバイトコードをフェッチした後、図１および図３に示されているように、フェッチされたバイトコードが客体フィールドアクセスであるか、あるいは静的フィールドアクセスに関するものであるかを判別するフィールド判別段階がさらに必要である。また、この場合、第１保存部１１０と第２保存部２１０ａを別途に構成する必要がなく、一つの保存部から構成することもできる。
【００６４】
図２および図３による従来のジャババイトコード変換方法と、本発明によるジャババイトコード変換方法について、ホストプロセッサーにハードウェア解釈器を内蔵させ、これを補助するソフトウェア解釈器で携帯用機器をターゲットとして作られたワバ仮想マシン（Waba Virtual Machine）を使用した場合に、それぞれ要求されるネイティブコードの数を比較する。次の通りである。
【表１】
2011501286.tif 000003
【００６５】
前記表１で、客体フィールドアクセスのための'getfield’および'putfield’のバイトコードを遂行するためには、第２保存部２１０ａにアクセスして第１客体参照データＯＤｉとスタック２４０の最上位の現在の客体参照データＣＯＤとが同一であるかを比較しなければならないので、静的フィールドアクセスのための'getstatic’および'putstatic’のバイトコードを遂行する場合に比べて多くのネイティブコードが必要であるということが分かる。また、本発明のジャババイトコード変換方法によるバイトコード遂行時には、従来の場合に比べて要求されるネイティブコードの数は顕著に減少したことが分かる。
【００６６】
従って、本発明のジャババイトコード変換方法は、静的フィールドアクセスおよび客体フィールドアクセスのためのフィールドアドレスを生成するために要求されるネイティブコードの数を減少させることができ、これによってジャバアプリケーションプログラムの遂行時に性能を向上させることができる。
【符号の説明】
【００６７】
Ｓ２１０：バイトコードフェッチ段階
Ｓ２２０：変換された演算コード判断段階
Ｓ２３０：既存のバイトコードにより遂行
Ｓ２４０：第１フィールドアドレス生成段階
Ｓ２５０：第１データ処理段階
【図１】
2011501286.tif 000004
【図２】
2011501286.tif 000005
【図３】
2011501286.tif 000006
【図４】
2011501286.tif 000007
【図５】
2011501286.tif 000008
【図６】
2011501286.tif 000009
【図７】
2011501286.tif 000010
【図８】
2011501286.tif 000011
【図９】
2011501286.tif 000012
【図１０】
2011501286.tif 000013
【図１１】
2011501286.tif 000014
【図１２】
2011501286.tif 000015
【国際調査報告】
2011501286.tif 000016
2011501286.tif 000017