JP2006302272A - ジャバ仮想マシンの命令語実行方法及びその装置 - Google Patents
ジャバ仮想マシンの命令語実行方法及びその装置 Download PDFInfo
- Publication number
- JP2006302272A JP2006302272A JP2006106637A JP2006106637A JP2006302272A JP 2006302272 A JP2006302272 A JP 2006302272A JP 2006106637 A JP2006106637 A JP 2006106637A JP 2006106637 A JP2006106637 A JP 2006106637A JP 2006302272 A JP2006302272 A JP 2006302272A
- Authority
- JP
- Japan
- Prior art keywords
- code
- virtual machine
- operand
- java virtual
- bytecode
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
【課題】 ジャバ仮想マシンの命令語実行方法及びその装置を提供する。
【解決手段】 (a)ジャバクラスを構成するメソードのバイトコードを抽出するステップと、(b)抽出されたバイトコードを、バイトコード内の演算コードに対応する動作を行う演算コードハンドラの位置に関する情報を含み、かつ16ビットのメモリ要素を使用する第2コードに変換するステップと、(c)第2コードを行うステップとを含む。
【選択図】 図5
【解決手段】 (a)ジャバクラスを構成するメソードのバイトコードを抽出するステップと、(b)抽出されたバイトコードを、バイトコード内の演算コードに対応する動作を行う演算コードハンドラの位置に関する情報を含み、かつ16ビットのメモリ要素を使用する第2コードに変換するステップと、(c)第2コードを行うステップとを含む。
【選択図】 図5
Description
本発明は、ジャバ仮想マシン(Java(登録商標)Virtual Machine)の命令語実行方法及びその装置に係り、さらに詳細には、ジャバ仮想マシンで行われるバイトコードを、16ビットのメモリ要素(16−bit memory element)を使用する第2コードに変換することによって、さらに速い命令語の実行速度を提供するジャバ仮想マシンの命令語実行方法及びその装置に関する。
ジャバプログラミング言語(Java(登録商標)programming language)は、1990年代中盤に発表された以降、急速に伝播されてきたが、CやC++などの言語で作成されたコードに比べて速度が遅いという短所がある。このような短所を克服するために、既存のインタープリタ(interpreter)方式のジャバ仮想マシンにJIT(ジャストインタイム)コンパイラーのような動的コード生成技法、またはAOT(アヘッドオブタイム)コンパイラーのような静的なコード生成技法が考案された。
ジャバプラットホームは、主にジャバ仮想マシンとクラスとで構成される。クラスファイルは、クラスの資料構造に関する情報及びフィールドとメソード情報などで構成されるが、そのうちメソードの実行コードは、ハードウェアまたは運用体制(OS)に独立的なバイトコードからなっている。
従来のジャバ仮想マシンを実行エンジンを基準に分類すれば、インタープリティング方式のジャバ仮想マシンと、JITコンパイル方式のジャバ仮想マシン、インタープリティングとJITコンパイルとをいずれも使用する方式のジャバ仮想マシン、または、AOTコンパイル方式のジャバ仮想マシンに分類できる。
インタープリティング方式のジャバ仮想マシンは、行うべきメソードのバイトコードを一つずつ解釈してアプリケーションを行い、JITコンパイラーは、前記バイトコードをコンパイルして現在のジャバプラットホームに従属的な機械語コードを得た後、前記機械語コードを行うことによってアプリケーションを行う。
図1は、従来のジャバクラスファイルの一般的な構成を示す例示図である。
クラスファイルは、クラスやインターフェースの定義を含むが、クラスに定義されたいろいろな属性、フィールド情報、メソード情報などで構成されている。メソード情報のうち、インタープリタで行うバイトコードと呼ばれるバイトストリームが定義されている。前記バイトコードは、ジャバ原始言語文章を含んでいるファイル(例えば、拡張子が‘ジャバ’であるファイル)をコンパイルして、その結果物として得たものである。
前記バイトコードは、一回に1バイトずつコンピュータ内で行われるという側面では、行う準備ができたプログラムモジュールと類似しているが、前記バイトコード命令語は、論理的かつ抽象的なジャバ仮想マシンに送る実際命令語である。前記バイトコードは、一回に1バイトずつ翻訳される形式以外にも、特定のシステムプラットホームに合わせてJITコンパイラーにより再びコンパイルされることもあるが、このようにすれば、ジャバプログラムの実行がさらに速くなる。
図2は、従来のジャバ仮想マシンで行われるバイトコードを示す例示図である。
バイトコード命令語は、実行動作を区別するためのバイトサイズの演算コード(opcode)と被演算子(operand)とで構成される。一つの演算コードは複数の被演算子を持つことができる。演算コードおよび被演算子いずれもバイト単位で保存されるので、1バイト以上のサイズを持つ被演算子を表現するために連続したバイトとして表現される。例えば、16ビット値は2個の連続したバイトで、32ビット値は4個の連続したバイトでなる。
前記図2で、上段は実際バイトコードの16進数値であり、下段はそれぞれのバイトコードを演算コードと被演算子とに区分して表したものである。
図3は、従来のジャバインタープリタでそれぞれのバイトコードを行う動作を示す一実施形態のフローチャートである。
アプリケーションクラスはジャバ仮想マシンのクラスローダにより積載され、リンク過程(リンキング)及び初期化過程(イニシャライぜーション)を経てランタイムシステム内の資料構造に該当情報が保存され、インタープリタまたはJITコンパイラーのような実行エンジン(Execution Engine)によりメソードが行われる。
典型的なインタープリタでは、前記図3で図示した方法でバイトコードを行う。インタープリタは、メソードが呼び出されれば前記メソードのバイトコードを示すプログラムカウンタを増加させた後(S310)、前記メソードのバイトコードの終端であるかどうかを判断する(S320)。もし、前記メソードのバイトコードの終端でなければ(S320のいいえ)、1バイト演算コード(opcode)をフェッチし(S330)、プログラム内のスイッチ(switch)文を利用して前記フェッチされた演算コードに該当するハンドラに移動(S340)して、前記ハンドラが行われる(S350)。このような過程をバイトコードのサイズほど反復すれば、前記メソードに対するインタープリティング過程が終了する。
前述した過程を擬似コードで表せば、次の通りである。
Loop{
Op=*pc++;
switch(Op){
case op_1:
//op_1’s implementation
break;
case op_2:
//op_2’s impl ementation
break;
case op_3:
//op_3’s implementation
break;
…
}
それぞれの演算コードに対するハンドラで、もし前記演算コードが必要とする被演算子が一バイトより大きければ、前記被演算子の値は連続したバイトで保存される。したがって、前記連続したバイトをそれぞれのビット別に、OR演算子及びシフト(shift)演算子を通じて一つの意味のある値に再構成する。例えば、リトルエンディアン(little endian)を使用するCPUで、もしある演算コードAが必要とする被演算子が、後続のbyte1、byte2、byte3、byte4にあれば、byte4は、論理的に表そうとする32ビット値の1番目ビットから8番目ビットまで、byte3は、論理的に表そうとする32ビット値の9番目ビットから16番目ビットまで、byte2は、論理的に表そうとする32ビット値の17番目ビットから24番目ビットまで、byte1は、論理的に表そうとする32ビット値の25番目ビットから32番目ビットまでを表している。
Op=*pc++;
switch(Op){
case op_1:
//op_1’s implementation
break;
case op_2:
//op_2’s impl ementation
break;
case op_3:
//op_3’s implementation
break;
…
}
それぞれの演算コードに対するハンドラで、もし前記演算コードが必要とする被演算子が一バイトより大きければ、前記被演算子の値は連続したバイトで保存される。したがって、前記連続したバイトをそれぞれのビット別に、OR演算子及びシフト(shift)演算子を通じて一つの意味のある値に再構成する。例えば、リトルエンディアン(little endian)を使用するCPUで、もしある演算コードAが必要とする被演算子が、後続のbyte1、byte2、byte3、byte4にあれば、byte4は、論理的に表そうとする32ビット値の1番目ビットから8番目ビットまで、byte3は、論理的に表そうとする32ビット値の9番目ビットから16番目ビットまで、byte2は、論理的に表そうとする32ビット値の17番目ビットから24番目ビットまで、byte1は、論理的に表そうとする32ビット値の25番目ビットから32番目ビットまでを表している。
したがって、‘(byte1<<24)|(byte2<<16)|(byte3<<8)|byte4’のような演算を通じて演算コードAが実際必要とする32ビットの被演算子の値を求めることができる。既存のジャバ仮想マシンでは、かかる被演算子を組み合わせる過程がメソードが行われる度に発生する。
したがって、被演算子の場合に、前記被演算子が1バイトより大きい場合に連続したバイトで羅列され、前記連続的に羅列されたバイトはメソードが行われる度にそれぞれのビット別にOR演算子及びシフト演算子を通じて再構成されるが、かかる過程は、ジャバプログラム実行において相当なオーバーヘッドとして作用できる。
また、バイトコードは演算コードを使用するので、一つのバイトコードを機械語に変換する度に前記擬似コードのスイッチ文の条件を判断する過程を経るという問題点がある。したがって、前記のような制約を克服することによって、ジャバ仮想マシンの性能を向上させる必要がある。
米国特許第2003−041322号公報
本発明が解決しようとする技術的課題は、ジャバ仮想マシンがバイトコードをインタープリット(Interpret)する前に、16ビットのメモリ要素を使用する第2コードに変換させる前処理(Precomputation)過程を行うことによって、ジャバプログラムの実行速度を向上させることができるジャバ仮想マシンの命令語実行方法及びその装置を提供することである。
本発明が解決しようとする他の技術的課題は、バイトコードを16ビットのメモリ要素を使用する第2コードに変換することによって、さらに多くのメモリを要求するコードへの変換に比べてメモリ増加によるオーバーヘッドが比較的少ないジャバ仮想マシンの命令語実行方法及びその装置を提供することである。
本発明の目的は、以上で言及した目的に制限されず、言及されていない他の目的は下の記載から当業者に明確に理解されうる。
前記目的を達成するために、本発明の実施形態によるジャバ仮想マシンの命令語実行方法は、(a)ジャバクラスを構成するメソードのバイトコードを抽出するステップと、(b)前記抽出されたバイトコードを、前記バイトコード内の演算コードに対応する動作を行う演算コードハンドラの位置に関する情報を含み、かつ16ビットのメモリ要素を使用する第2コードに変換するステップと、(c)前記第2コードを行うステップと、を含む。
一方、本発明の実施形態によるジャバ仮想マシンは、ジャバクラスを構成するメソードのバイトコードを抽出するバイトコード抽出部と、前記バイトコード抽出部により抽出されたバイトコードを、前記バイトコード内の演算コードに対応する動作を行う演算コードハンドラの位置に関する情報を含み、16ビットのメモリ要素を使用する第2コードに変換する第2コード変換部と、前記第2コード変換部により変換された前記第2コードを行う命令語実行部と、を備える。
その他の実施例の具体的な事項は詳細な説明及び図面に含まれている。
本発明のジャバ仮想マシンの命令語実行方法及びその装置によれば、次のような効果が一つあるいはそれ以上ある。
第1に、バイトコードを16ビットのメモリ要素を使用する第2コードに変換することによって、ジャバプログラムの実行速度を向上させることができる。
第2に、バイトコードを16ビットのメモリ要素を使用する第2コードに変換することによって、さらに多くのメモリを要求するコードへの変換に比べてメモリ増加によるオーバーヘッドが比較的少ない。
本発明の利点及び特徴、そしてこれを達成する方法は添付された図面に基づいて詳細に後述されている実施例を参照すれば明確になる。しかし、本発明は以下で開示される実施例に限定されるものではなく、この実施例から外れて多様な形に具現でき、本明細書で説明する実施例は本発明の開示を完全にし、本発明が属する技術分野で当業者に発明の範ちゅうを完全に報せるために提供されるものであり、本発明は請求項及び発明の詳細な説明により定義されるだけである。一方、明細書全体に亙って同一な参照符号は同一な構成要素を示す。
以下、添付された図面を参照して本発明の望ましい実施形態を詳細に説明する。
図4は、本発明の実施形態によるジャバ仮想マシンの構成を示すブロック図である。
本実施形態で、ジャバ仮想マシン400は、バイトコード抽出部420、第2コード変換部430、リンキング部440、初期化部450、及び命令語実行部460を備えて構成できる。
バイトコード抽出部420は、ジャバ仮想マシンにローディングされて積載されるクラス410からメソードのバイトコードを抽出して、第2コード変換部430に提供する。
第2コード変換部430は、8ビット単位のバイトコードを16ビットのメモリ要素を使用する第2コードに変換する。第2コードへの変換過程は、バイトコードの演算コードを16ビットの演算コードハンドラオフセットに変換するステップと、被演算子がある場合、バイトコード内の被演算子フィールドのビットを適切に組み合わせて16ビットまたは32ビットのインデックスまたはメモリアドレスに変換するステップを含む。第2コードへの変換過程の詳細な事項は、図6ないし図10を参照して後述する。
リンキング部440は、変換された第2コードを検証(verification)、準備(preparation)、及び分析(resolution)を含むリンキング作業を行って、ジャバ仮想マシンのランタイム状態に加える。
初期化部450は、リンクされた第2コードを、静的初期化部及びクラスに宣言された静的フィールドのための初期化部の実行を経て初期化させる。
命令語実行部460は、ジャバクラスメソードの第2コードを解釈して行う。命令語実行部の一実施形態はインタープリタであってもよく、他の実施形態でコンパイラーであってもよい。インタープリティング方式のジャバ仮想マシンは、行うべきメソードのバイトコードを一つずつ解釈してアプリケーションを行い、JITコンパイラーを使用するジャバ仮想マシンは、バイトコードをコンパイルして現在のジャバプラットホームに従属的な機械語コードを得た後、その機械語コードを行うことによってアプリケーションを行う。
前記図4の各構成要素は、ソフトウェアまたはFPGA(Field Programmable Gate Array)または注文型半導体(Application Specific Integrated Circuit;ASIC)のようなハードウェア構成要素を意味する。しかし、前記構成要素は、ソフトウェアまたはハードウェアに限定されるものではない。アドレッシング可能な保存媒体に存在すべく構成されても良く、1つまたはそれ以上のプロセッサーを実行させるように構成されても良い。構成要素から提供される機能は、より少数の構成要素及びモジュールで結合されるか、追加的な構成要素とモジュールにさらに分離されうる。複数の構成要素を結合して特定の機能を行う一つの構成要素で具現されることもある。
図5は、本発明の実施形態によるジャバ仮想マシンの命令語実行過程を示すフローチャートである。
新たなクラス410は、クラスローダを通じてローディングされてジャバ仮想マシン400の内部に積載され、バイトコード抽出部400が積載されたクラスからメソードを行うためのバイトコードを抽出(S510)する。抽出されたバイトコードは、第2コード変換部430により16ビットのメモリ要素を使用する第2コードに変換(S520)される。変換された第2コードは検証、準備、及び分析を含むリンキングステップ(S530)を経てジャバ仮想マシンのランタイム状態に加えられる(combine)。リンクされた第2コードは、静的初期化部及びクラスに宣言された静的フィールドのための初期化部の実行を経て初期化(S540)される。初期化された第2コードは、命令語実行部440により翻訳されるか、または機械語にコンパイルされた後に行われる(S550)。
バイトコードを第2コードに変換するステップの詳細は、図6を参照して説明する。
図6は、本発明の実施形態によるジャバ仮想マシンの命令語実行過程のうち、バイトコードを第2コードに変換するステップの詳細過程を示すフローチャートである。
バイトコードは、図2に示すように、バイト単位の演算コード及び被演算子でなる。バイトコードを第2コードに変換する過程は、次の通りである。
バイトコードの1バイト(8ビット)の演算コードは、該当演算コードハンドラの16ビットオフセットで代替される(S610)。演算コードハンドラオフセットを基礎アドレス(Base address)に加えることによって、演算コードに該当する動作を行うハンドラのメモリアドレスが分かる。したがって、第2コードをインタープリタまたはコンパイラーが行う場合、演算コードハンドラオフセットから直ちにハンドラのアドレスが分かるので、インタープリタループ内で図3で説明したスイッチ文を行う必要なく直ちに該当演算コードハンドラに分岐する。これにより、ジャバプログラムの実行時間を短縮できる。
演算コードが被演算子を持つ場合(S620の例)、バイト単位の被演算子を16ビット単位の被演算子に変換する。バイトコードで1バイトを占める被演算子は、符号または非符号ワード(Signed or unsigned word)に転換されて、第2コードに16ビットで満たされる(packed)。バイトコードで2バイトを占める被演算子は、符号または非符号ワードに転換されて、第2コードに2個の連続する(consecutive)16ビットで満たされる。また、バイトコードで4バイトを占める被演算子は、符号または非符号ワードに転換されて第2コードに2個の連続する16ビットで満たされる。
被演算子の変換ステップはまた、被演算子がインデックスである場合と被演算子がオフセット値である場合に細分化できる。バイトコードの被演算子がインデックスである場合(S630のはい)、バイトコードのインデックスを16ビットのメモリ要素に適するように変換する。本実施形態は16ビットのメモリ要素を使用するので、バイトコードのインデックスを左側に2ビットシフトして第2コードのインデックス値を生成する。被演算子としてインデックスを持つバイトコードの変換例は、図7で後述する。
バイトコードの被演算子がオフセット値である場合(S630のいいえ)、オフセット値を基礎アドレスに加えて32ビットのメモリアドレスに変換する(S650)。被演算子としてオフセットを持つバイトコードの変換例は、図8ないし図9で後述する。
第2コードが翻訳されて行われる過程を擬似コードで表現すれば、次の通りである。
nop_label:
++pc;goto*(nop_label+pc[0]);
aconst_null_label:
*sp=0;
++sp;
++pc;goto*(nop_label+pc[0]);
…
//other opcode handlers
ジャバ仮想マシンでのリンキングステップ(S530)は、2進形態のクラスまたはインターフェースタイプをとってジャバ仮想マシンのランタイム状態に加える過程をいう。本実施形態でリンキングステップは、初期化ステップ(S540)前に行われると図示されているが、命令語の実行ステップ(S550)でも行える融通性を持つ。
++pc;goto*(nop_label+pc[0]);
aconst_null_label:
*sp=0;
++sp;
++pc;goto*(nop_label+pc[0]);
…
//other opcode handlers
ジャバ仮想マシンでのリンキングステップ(S530)は、2進形態のクラスまたはインターフェースタイプをとってジャバ仮想マシンのランタイム状態に加える過程をいう。本実施形態でリンキングステップは、初期化ステップ(S540)前に行われると図示されているが、命令語の実行ステップ(S550)でも行える融通性を持つ。
本実施形態で、バイトコードから第2コードへの変換は検証過程より先に行われるので、第2コードの検証は、第2コード命令語のレイアウト、命令語被演算子の変換及び先計算(precomputation)を考慮する。第2コードの検証過程でいかなる演算コードが検証さるかを決定するためにハンドラオフセット−演算コードルックアップテーブルが使われる。ハンドラオフセット−演算コードルックアップテーブルの構造は、図10で後述する。本実施形態によるジャバ仮想マシンは、メソードを翻訳する過程で他のクラスに対する参照を分析(resolve)するために、分析を必要とするあらゆる命令語のための共通の関数を持つことができる。分析のための一つの共通の関数を持つことは、インタープリタループサイズをさらに小さくし、コードキャッシュミス(code cache miss)を減らすことができる。その結果、インタープリタの性能を向上させる。共通の関数内部でいかなる演算コードが分析されるか決定するために、ハンドラオフセット−演算コードルックアップテーブルが使われる。ハンドラオフセット−演算コードルックアップテーブルの構造は、図10で後述する。
図7は、バイトコードを第2コードに変換する第1実施形態を示す図面であり、バイトコードの被演算子がインデックスである場合の第2コードのレイアウトを示す。8ビットの演算コード710及び8ビットの被演算子として地域変数インデックス720を含むバイトコード命令語、例えば、aload、astoreなどの命令語は、16ビットの演算コードハンドラオフセット730及び16ビットの被演算子740を持つ第2コードに変換される。16ビットの被演算子は、目的プロセッサー(target processor)がバイトアドレッシングモード(byte addressing mode)のみを持つならば、左側に2ビットあらかじめシフトされた(pre−shifted)地域変数インデックスを持つ。
図8は、バイトコードを第2コードに変換する第2実施形態を示す図面であり、被演算子が2コードのオフセットである場合の第2コードのレイアウトを示す。
8ビットの演算コード810及び一つの被演算子として2バイトでなるオフセット820、830を含むバイトコード命令語、例えば、goto、ifなどの命令語は、第2コードで3個の16ビット要素を占める。3個の16ビット要素は、一つの演算コードハンドラオフセット840及び、命令語実行ステップで使われる命令語の32ビットアドレスを構成する2個の16ビット要素850である。
一方、8ビットの演算コード810及び一つの被演算子として2バイトでなるフィールドオフセット(field−offset)820、830を含むバイトコード命令語、例えば、getfield_quick、putfield_quickなどの命令語も、第2コードで3個の16ビット要素を占める。3個の16ビット要素は、一つの演算コードハンドラオフセット840及び32ビットフィールドオフセットを構成する2個の16ビット要素である。被演算子のための16ビット要素は、目的プロセッサーがバイトアドレッシングモードのみを持つならば、左側に2ビットほどあらかじめシフトされた32ビットフィールドオフセットを持つ。
ワイド演算、例えばgoto_w、jsr_wなどの命令語は、8ビットの演算コード及び4バイトの被演算子で構成される。第2コードの場合、一般演算とワイド演算とを区別する必要がないので、ワイド演算の代わりに普通演算コード(goto_wの代わりにgoto)のハンドラオフセットに代え、32ビットの被演算子を作るために2個の連続する16ビット要素を使用する。
本実施形態では、第2コードの被演算子が32ビットアドレスである場合を中心に説明したが、バイトコードのオフセットを組み合わせて32ビットのオフセット値に変換する場合も含まれうるということは、当業者に自明な事項である。
図9は、バイトコードを第2コードに変換する第3実施形態を示す図面である。
バイトコード命令語がtableswitchであり、命令語全体としてNバイトを占めるならば、第2コード命令語は、tableswitchの16ビットの演算コードハンドラオフセット910から始める。tableswitchの演算コードハンドラオフセット910に後続する被演算子を32ビット境界に整列させるための選択的パッド930が位置できる。下限アドレス(low address)960は、バイトコードのデフォルトバイト940に下限バイト(low byte)950を加えて生成し、上限アドレス(high address)980は、バイトコードのデフォルトバイト940に上限バイト(high byte)950を加えて生成する。バイトコードの4バイトの分岐オフセット990は、32ビットの分岐アドレス995に変換される。
本実施形態では、第2コードの被演算子が32ビットアドレスである場合を中心に説明したが、バイトコードのオフセットを組み合わせて32ビットのオフセット値に変換する場合も含まれうるということは当業者に自明な事項である。
図10は、本発明の実施形態による演算コードハンドラオフセット−演算コードテーブルの資料構造を示す図面である。
ジャバ仮想マシンは、一定の命令語に対して演算コードを必要とする時があるが、この場合、オフセットに対応する演算コードを探せるルックアップテーブルを使用すれば便利である。図10に図示されたオフセット−演算コードルックアップテーブルは、演算コードハンドラオフセットがインデックスになって、探そうとする演算コードハンドラオフセットに該当する演算コードの値が配列に入っている。
第2コードのためのスタックマップを計算するために、ジャバ仮想マシンは第2コード命令語をスキャンする。このスキャン過程で、ハンドラオフセットを演算コードに変換するためにハンドラオフセット−演算コードルックアップテーブルが使われうる。
以上、添付図を参照して本発明の実施例を説明したが、本発明が属する技術分野で当業者ならば本発明がその技術的思想や必須特徴を変更せずとも他の具体的な形に実施されうるということが理解できるであろう。したがって、前述した実施例は全ての面で例示的なものであって、限定的なものではないと理解せねばならない。
本発明は、ジャバ仮想マシンの命令語実行装置の関連技術分野に好適に用いられる。
400 ジャバ仮想マシン
410 クラス
420 バイトコード抽出部
430 第2コード変換部
440 命令語実行部
410 クラス
420 バイトコード抽出部
430 第2コード変換部
440 命令語実行部
Claims (21)
- (a)ジャバクラスを構成するメソードのバイトコードを抽出するステップと、
(b)前記抽出されたバイトコードを、前記バイトコード内の演算コードに対応する動作を行う演算コードハンドラの位置に関する情報を含み、かつ16ビットのメモリ要素を使用する第2コードに変換するステップと、
(c)前記第2コードを行うステップと、を含むジャバ仮想マシンの命令実行方法。 - 前記(c)ステップは、
(c1)前記第2コードをランタイム状態でリンキングするステップと、
(c2)前記リンキングされた第2コードが行えるように初期化するステップと、
(c3)前記初期化された第2コードを行うステップと、を含む請求項1に記載のジャバ仮想マシンの命令実行方法。 - 前記(c1)ステップは、
(c11)前記第2コード内の前記演算コードハンドラの位置に関する情報及び前記演算コードハンドラに対応する前記演算コードを含むテーブルを参照して、前記第2コードを検証するステップを含む請求項2に記載のジャバ仮想マシンの命令実行方法。 - 前記演算コードハンドラの位置を表す値は、前記演算コードハンドラのオフセットである請求項1に記載のジャバ仮想マシンの命令実行方法。
- 前記(b)ステップは、
(b1)前記バイトコード内のバイト単位の被演算子を、16ビットのメモリ要素を使用する第2被演算子に変換するステップを含む請求項1に記載のジャバ仮想マシンの命令実行方法。 - 前記(b1)ステップは、
(b11)前記バイトコード内のバイト単位の被演算子を左側に2ビットシフトするステップを含む請求項5に記載のジャバ仮想マシンの命令実行方法。 - 前記(b)ステップは、
(b1)前記バイトコード内の被演算子を表す連続的なバイトを組み合わせて、16ビットのメモリ要素を使用する第2被演算子に変換するステップを含む請求項1に記載のジャバ仮想マシンの命令実行方法。 - 前記(b1)ステップは、
(b11)前記バイトコード内の被演算子を表す1以上の連続的なバイトをOR演算及びシフト演算で組み合わせるステップと、
(b12)前記組み合わせられた結果を左側に2ビットシフトするステップと、を含む請求項7に記載のジャバ仮想マシンの命令実行方法。 - 前記第2被演算子は、前記バイトコード内の被演算子がオフセットである場合、基礎アドレスに前記オフセットを加えたメモリアドレスである請求項7に記載のジャバ仮想マシンの命令実行方法。
- 前記(b)ステップは、前記入力されたバイトコード内の演算コードがワイド被演算子を使用する演算コードである場合、前記演算コードをワイド被演算子を使用しない演算コードに変更するステップを含む請求項1に記載のジャバ仮想マシンの命令実行方法。
- ジャバクラスを構成するメソードのバイトコードを抽出するバイトコード抽出部と、
前記バイトコード抽出部により抽出されたバイトコードを、前記バイトコード内の演算コードに対応する動作を行う演算コードハンドラの位置に関する情報を含み、16ビットのメモリ要素を使用する第2コードに変換する第2コード変換部と、
前記第2コード変換部により変換された前記第2コードを行う命令語実行部と、を備えるジャバ仮想マシン。 - 前記第2コードをランタイム状態にするリンキング作業を行うリンキング部と、
前記リンキングされた第2コードが行われるように初期化する初期化部と、をさらに備える請求項11に記載のジャバ仮想マシン。 - 前記リンキング部は、前記第2コード内の前記演算コードハンドラの位置に関する情報及び前記演算コードハンドラに対応する前記演算コードを含むテーブルを参照して前記第2コードを検証する請求項12に記載のジャバ仮想マシン。
- 前記演算コードハンドラの位置を表す値は、前記演算コードハンドラのオフセットである請求項11に記載のジャバ仮想マシン。
- 前記第2コード変換部は、前記バイトコード内のバイト単位の被演算子を16ビット単位の第2被演算子に変換する請求項11に記載のジャバ仮想マシン。
- 前記第2コード変換部は、前記バイトコード内のバイト単位の被演算子を左側に2ビットシフトする請求項11に記載のジャバ仮想マシンの命令実行方法。
- 前記第2コード変換部は、前記バイトコード内の被演算子を表す連続的なバイトを組み合わせて16ビット単位の第2被演算子に変換する請求項11に記載のジャバ仮想マシン。
- 前記第2被演算子は、前記バイトコード内の被演算子がオフセットである場合、基礎アドレスに前記オフセットを加えたメモリアドレスである請求項17に記載のジャバ仮想マシン。
- 前記第2コード変換部は、前記バイトコード内の被演算子を表す1以上の連続的なバイトをOR演算及びシフト演算で組み合わせ、前記組み合わせられた結果を左側に2ビットシフトする請求項11に記載のジャバ仮想マシンの命令実行方法。
- 前記第2コード変換部は、前記入力されたバイトコード内の演算コードがワイド被演算子を使用する演算コードである場合、前記演算コードを、ワイド被演算子を使用しない演算コードに変更する請求項11に記載のジャバ仮想マシン。
- 請求項1ないし請求項10のうちいずれか1項による方法を実行するためのコンピュータ可読プログラムを記録した記録媒体。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020050033235A KR100763177B1 (ko) | 2005-04-21 | 2005-04-21 | 자바 가상 머신의 명령어 수행 방법 및 그 장치 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006302272A true JP2006302272A (ja) | 2006-11-02 |
Family
ID=37195240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006106637A Pending JP2006302272A (ja) | 2005-04-21 | 2006-04-07 | ジャバ仮想マシンの命令語実行方法及びその装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US7725879B2 (ja) |
JP (1) | JP2006302272A (ja) |
KR (1) | KR100763177B1 (ja) |
CN (1) | CN100573454C (ja) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7693887B2 (en) | 2005-02-01 | 2010-04-06 | Strands, Inc. | Dynamic identification of a new set of media items responsive to an input mediaset |
KR100678912B1 (ko) * | 2005-10-18 | 2007-02-05 | 삼성전자주식회사 | 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템 |
KR101407629B1 (ko) | 2007-06-04 | 2014-06-13 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
US9164783B2 (en) * | 2007-08-20 | 2015-10-20 | International Business Machines Corporation | Load time resolution for dynamic binding languages |
KR100936401B1 (ko) * | 2007-10-17 | 2010-01-12 | 주식회사 에이디칩스 | 자바 바이트코드 변환방법 |
KR100930831B1 (ko) * | 2009-03-24 | 2009-12-10 | 주식회사 에이디칩스 | 바이트코드 변환 가속 장치 및 그 방법 |
US9152437B2 (en) * | 2010-10-28 | 2015-10-06 | Hewlett-Packard Development Company, L.P. | Dynamically installing image processing |
US10466989B2 (en) | 2011-09-02 | 2019-11-05 | Microsoft Technology Licensing, Llc. | Fast presentation of markup content having script code |
US10481876B2 (en) | 2017-01-11 | 2019-11-19 | Microsoft Technology Licensing, Llc | Methods and systems for application rendering |
CN110675256B (zh) * | 2019-08-30 | 2020-08-21 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
US10783082B2 (en) | 2019-08-30 | 2020-09-22 | Alibaba Group Holding Limited | Deploying a smart contract |
CN112052433B (zh) * | 2020-08-05 | 2024-05-07 | 北京智游网安科技有限公司 | 一种Jar文件的虚拟化保护方法、终端及存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08286911A (ja) * | 1995-04-11 | 1996-11-01 | Mitsubishi Electric Corp | 機械語命令翻訳方法 |
JPH11175349A (ja) * | 1997-11-11 | 1999-07-02 | Internatl Business Mach Corp <Ibm> | データ列生成方法及び装置、変換方法、及びコンピュータ |
JP2000267862A (ja) * | 1999-03-09 | 2000-09-29 | Hewlett Packard Co <Hp> | 資源の消費を最小限にするハイブリッド式ジャストインタイム・コンパイラ |
JP2000311089A (ja) * | 1999-04-28 | 2000-11-07 | Nec Corp | インタプリタの高速化方法ならびに装置 |
JP2003501742A (ja) * | 1999-06-07 | 2003-01-14 | マイクロソフト コーポレイション | 中間言語内のオペランド・タイプの推定 |
JP2003508844A (ja) * | 1999-09-01 | 2003-03-04 | タオ グループ リミテッド | オブジェクト指向コンピュータプログラムの変換および実行 |
JP2003202995A (ja) * | 2001-10-31 | 2003-07-18 | Aplix Corp | 中間コード前処理装置、中間コード実行システム、中間コード前処理プログラムおよび中間コード実行プログラム |
JP2003216443A (ja) * | 2002-01-25 | 2003-07-31 | Hitachi Ltd | 中間コード実行装置および方法 |
JP2003337708A (ja) * | 2002-05-20 | 2003-11-28 | Nec Corp | 文字列変換システム及びプログラム |
JP2005501331A (ja) * | 2001-08-24 | 2005-01-13 | サン・マイクロシステムズ・インコーポレーテッド | Javaオブジェクトをインスタンス化するためのJavaマクロインストラクションを生成するフレームワーク |
JP2005202936A (ja) * | 2004-01-17 | 2005-07-28 | Samsung Electronics Co Ltd | Java(登録商標)仮想マシンの性能を向上させる方法及びその方法により動作されるシステム |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7137107B1 (en) * | 2003-04-29 | 2006-11-14 | Roy-G-Biv Corporation | Motion control systems and methods |
US5887172A (en) * | 1996-01-10 | 1999-03-23 | Sun Microsystems, Inc. | Remote procedure call system and method for RPC mechanism independent client and server interfaces interoperable with any of a plurality of remote procedure call backends |
US5875335A (en) * | 1996-09-30 | 1999-02-23 | Apple Computer, Inc. | Parameter marshaling techniques for dynamic object-oriented programming languages |
US6139199A (en) * | 1997-06-11 | 2000-10-31 | Sun Microsystems, Inc. | Fast just-in-time (JIT) scheduler |
US6154877A (en) * | 1997-07-03 | 2000-11-28 | The University Of Iowa Research Foundation | Method and apparatus for portable checkpointing using data structure metrics and conversion functions |
US6233733B1 (en) * | 1997-09-30 | 2001-05-15 | Sun Microsystems, Inc. | Method for generating a Java bytecode data flow graph |
US6081665A (en) * | 1997-12-19 | 2000-06-27 | Newmonics Inc. | Method for efficient soft real-time execution of portable byte code computer programs |
US6282698B1 (en) * | 1998-02-09 | 2001-08-28 | Lucent Technologies Inc. | Detecting similarities in Java sources from bytecodes |
US6011918A (en) * | 1998-04-22 | 2000-01-04 | International Business Machines Corporation | Methods, systems and computer program products for generating client/server applications |
US6324688B1 (en) | 1998-07-30 | 2001-11-27 | International Business Machines Corporation | Method and apparatus for optimizing execution of Java programs |
US6256784B1 (en) * | 1998-08-14 | 2001-07-03 | Ati International Srl | Interpreter with reduced memory access and improved jump-through-register handling |
US6205578B1 (en) * | 1998-08-14 | 2001-03-20 | Ati International Srl | Interpreter for stack-based languages |
JP2001056764A (ja) | 1999-08-18 | 2001-02-27 | Access:Kk | 仮想計算機の実行方法および装置 |
US6560774B1 (en) * | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
DE10104043A1 (de) * | 2000-02-23 | 2001-08-30 | Ibm | Die Schaffung der Möglichkeit, dass vorhandene Anwendungen andere Sprachen als ihre eingebauten Makrosprachen benutzen, ohne die vorhandene Anwendung zu ändern |
US6865730B1 (en) * | 2000-03-08 | 2005-03-08 | International Business Machines Corporation | Interprocedural analysis and optimization of an object oriented program in the presence of dynamic class loading |
US6775680B2 (en) * | 2000-08-08 | 2004-08-10 | International Business Machines Corporation | High level assembler metamodel |
US6993751B2 (en) * | 2001-05-14 | 2006-01-31 | Microsoft Corporation | Placing exception throwing instructions in compiled code |
JP2003050844A (ja) | 2001-08-03 | 2003-02-21 | Jamsea Mutual Aid Co Ltd | 適任性等照会システム |
JP4093810B2 (ja) * | 2002-05-31 | 2008-06-04 | 三洋電機株式会社 | 冷却貯蔵庫 |
US20040088703A1 (en) | 2002-11-05 | 2004-05-06 | Nedim Fresko | Mechanism for implementing an interpreter with hierarchical execution loops |
KR20040068653A (ko) * | 2003-01-27 | 2004-08-02 | 삼성전자주식회사 | 자바 기반의 스마트카드에서의 실행속도 향상 장치 |
KR100506522B1 (ko) * | 2003-02-24 | 2005-08-03 | 삼성전자주식회사 | 자바 프로그램에서 바이트 코드의 컴파일 시간 단축시스템 및 방법 |
US7120898B2 (en) * | 2003-06-26 | 2006-10-10 | Microsoft Corporation | Intermediate representation for multiple exception handling models |
US7434209B2 (en) * | 2003-07-15 | 2008-10-07 | Transitive Limited | Method and apparatus for performing native binding to execute native code |
EP1678564A1 (en) * | 2003-09-03 | 2006-07-12 | Unitronics (1989) (R"G) Ltd. | System and method for implementing logic control in programmable controllers in distributed control systems |
US7287243B2 (en) * | 2004-01-06 | 2007-10-23 | Hewlett-Packard Development Company, L.P. | Code verification system and method |
US7574692B2 (en) * | 2004-11-19 | 2009-08-11 | Adrian Herscu | Method for building component-software for execution in a standards-compliant programming environment |
-
2005
- 2005-04-21 KR KR1020050033235A patent/KR100763177B1/ko not_active IP Right Cessation
-
2006
- 2006-04-07 JP JP2006106637A patent/JP2006302272A/ja active Pending
- 2006-04-11 CN CNB2006100724102A patent/CN100573454C/zh not_active Expired - Fee Related
- 2006-04-11 US US11/401,403 patent/US7725879B2/en not_active Expired - Fee Related
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08286911A (ja) * | 1995-04-11 | 1996-11-01 | Mitsubishi Electric Corp | 機械語命令翻訳方法 |
JPH11175349A (ja) * | 1997-11-11 | 1999-07-02 | Internatl Business Mach Corp <Ibm> | データ列生成方法及び装置、変換方法、及びコンピュータ |
JP2000267862A (ja) * | 1999-03-09 | 2000-09-29 | Hewlett Packard Co <Hp> | 資源の消費を最小限にするハイブリッド式ジャストインタイム・コンパイラ |
JP2000311089A (ja) * | 1999-04-28 | 2000-11-07 | Nec Corp | インタプリタの高速化方法ならびに装置 |
JP2003501742A (ja) * | 1999-06-07 | 2003-01-14 | マイクロソフト コーポレイション | 中間言語内のオペランド・タイプの推定 |
JP2003508844A (ja) * | 1999-09-01 | 2003-03-04 | タオ グループ リミテッド | オブジェクト指向コンピュータプログラムの変換および実行 |
JP2005501331A (ja) * | 2001-08-24 | 2005-01-13 | サン・マイクロシステムズ・インコーポレーテッド | Javaオブジェクトをインスタンス化するためのJavaマクロインストラクションを生成するフレームワーク |
JP2003202995A (ja) * | 2001-10-31 | 2003-07-18 | Aplix Corp | 中間コード前処理装置、中間コード実行システム、中間コード前処理プログラムおよび中間コード実行プログラム |
JP2003216443A (ja) * | 2002-01-25 | 2003-07-31 | Hitachi Ltd | 中間コード実行装置および方法 |
JP2003337708A (ja) * | 2002-05-20 | 2003-11-28 | Nec Corp | 文字列変換システム及びプログラム |
JP2005202936A (ja) * | 2004-01-17 | 2005-07-28 | Samsung Electronics Co Ltd | Java(登録商標)仮想マシンの性能を向上させる方法及びその方法により動作されるシステム |
Also Published As
Publication number | Publication date |
---|---|
US7725879B2 (en) | 2010-05-25 |
KR20060110971A (ko) | 2006-10-26 |
US20060253847A1 (en) | 2006-11-09 |
CN1855053A (zh) | 2006-11-01 |
CN100573454C (zh) | 2009-12-23 |
KR100763177B1 (ko) | 2007-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2006302272A (ja) | ジャバ仮想マシンの命令語実行方法及びその装置 | |
KR100643268B1 (ko) | 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템 | |
US6438745B1 (en) | Program conversion apparatus | |
US7823140B2 (en) | Java bytecode translation method and Java interpreter performing the same | |
US8863079B2 (en) | Efficient and expansive conversions between reference and primitive | |
US7809547B2 (en) | Host computer system emulating target system legacy software and providing for incorporating more powerful application program elements into the flow of the legacy software | |
JP2008123545A (ja) | 複数の命令セットを用いるデータ処理 | |
JPH0782441B2 (ja) | シミユレーシヨン方法 | |
JPH0628036B2 (ja) | シミュレーシヨン方法 | |
KR19990083019A (ko) | 정적 초기화 방법, 데이터 처리 시스템 및 컴퓨터 판독 가능한 매체 | |
US8042103B2 (en) | Pre-translated files used in a virtual machine | |
KR101407629B1 (ko) | 자바 변환 가속 장치 및 방법 | |
JP2002366367A (ja) | プログラム命令解釈 | |
US7219337B2 (en) | Direct instructions rendering emulation computer technique | |
Mong et al. | DynamoSim: a trace-based dynamically compiled instruction set simulator | |
EP1438644A2 (en) | Method for fast compilation of preverified java bytecode to high quality native machine code | |
JPH0668724B2 (ja) | シミユレーシヨン方法 | |
Troger et al. | Analysis of virtual method invocation for binary translation | |
Cifuentes et al. | The university of queensland binary translator (uqbt) framework | |
Korenčik | Decompiling binaries into LLVM IR using McSema and Dyninst | |
Veldema | Jcc, a native Java compiler | |
Markstedter | Blue Fox: Arm Assembly Internals and Reverse Engineering | |
Kågström et al. | Cibyl: an environment for language diversity on mobile devices | |
US11194756B2 (en) | Systems and methods for facilitating interactions with remote memory spaces | |
Clark | Transparently integrating debugging and dynamic binary instrumentation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090602 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090825 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100622 |