JP2006302272A - ジャバ仮想マシンの命令語実行方法及びその装置 - Google Patents

ジャバ仮想マシンの命令語実行方法及びその装置 Download PDF

Info

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
Application number
JP2006106637A
Other languages
English (en)
Inventor
Romanovskiy Alexey
ロマノフスキ アレクセイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of JP2006302272A publication Critical patent/JP2006302272A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation 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

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番目ビットまでを表している。
したがって、‘(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)でも行える融通性を持つ。
本実施形態で、バイトコードから第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コード命令語をスキャンする。このスキャン過程で、ハンドラオフセットを演算コードに変換するためにハンドラオフセット−演算コードルックアップテーブルが使われうる。
以上、添付図を参照して本発明の実施例を説明したが、本発明が属する技術分野で当業者ならば本発明がその技術的思想や必須特徴を変更せずとも他の具体的な形に実施されうるということが理解できるであろう。したがって、前述した実施例は全ての面で例示的なものであって、限定的なものではないと理解せねばならない。
本発明は、ジャバ仮想マシンの命令語実行装置の関連技術分野に好適に用いられる。
従来のジャバクラスファイルの一般的な構成を示す例示図である。 従来のジャバ仮想マシンで行われるバイトコードを示す例示図である。 従来のジャバインタープリタでそれぞれのバイトコードを行う動作を示す一実施形態のフローチャートである。 本発明の実施形態によるジャバ仮想マシンの構成を示すブロック図である。 本発明の実施形態によるジャバ仮想マシンの命令語実行過程を示すフローチャートである。 本発明の実施形態によるジャバ仮想マシンの命令語実行過程のうち、バイトコードを第2コードに変換するステップの詳細過程を示すフローチャートである。 バイトコードを第2コードに変換する第1実施形態を示す図である。 バイトコードを第2コードに変換する第2実施形態を示す図である。 バイトコードを第2コードに変換する第3実施形態を示す図である。 本発明の実施形態による演算コードハンドラオフセット−演算コードテーブルの資料構造を示す図である。
符号の説明
400 ジャバ仮想マシン
410 クラス
420 バイトコード抽出部
430 第2コード変換部
440 命令語実行部

Claims (21)

  1. (a)ジャバクラスを構成するメソードのバイトコードを抽出するステップと、
    (b)前記抽出されたバイトコードを、前記バイトコード内の演算コードに対応する動作を行う演算コードハンドラの位置に関する情報を含み、かつ16ビットのメモリ要素を使用する第2コードに変換するステップと、
    (c)前記第2コードを行うステップと、を含むジャバ仮想マシンの命令実行方法。
  2. 前記(c)ステップは、
    (c1)前記第2コードをランタイム状態でリンキングするステップと、
    (c2)前記リンキングされた第2コードが行えるように初期化するステップと、
    (c3)前記初期化された第2コードを行うステップと、を含む請求項1に記載のジャバ仮想マシンの命令実行方法。
  3. 前記(c1)ステップは、
    (c11)前記第2コード内の前記演算コードハンドラの位置に関する情報及び前記演算コードハンドラに対応する前記演算コードを含むテーブルを参照して、前記第2コードを検証するステップを含む請求項2に記載のジャバ仮想マシンの命令実行方法。
  4. 前記演算コードハンドラの位置を表す値は、前記演算コードハンドラのオフセットである請求項1に記載のジャバ仮想マシンの命令実行方法。
  5. 前記(b)ステップは、
    (b1)前記バイトコード内のバイト単位の被演算子を、16ビットのメモリ要素を使用する第2被演算子に変換するステップを含む請求項1に記載のジャバ仮想マシンの命令実行方法。
  6. 前記(b1)ステップは、
    (b11)前記バイトコード内のバイト単位の被演算子を左側に2ビットシフトするステップを含む請求項5に記載のジャバ仮想マシンの命令実行方法。
  7. 前記(b)ステップは、
    (b1)前記バイトコード内の被演算子を表す連続的なバイトを組み合わせて、16ビットのメモリ要素を使用する第2被演算子に変換するステップを含む請求項1に記載のジャバ仮想マシンの命令実行方法。
  8. 前記(b1)ステップは、
    (b11)前記バイトコード内の被演算子を表す1以上の連続的なバイトをOR演算及びシフト演算で組み合わせるステップと、
    (b12)前記組み合わせられた結果を左側に2ビットシフトするステップと、を含む請求項7に記載のジャバ仮想マシンの命令実行方法。
  9. 前記第2被演算子は、前記バイトコード内の被演算子がオフセットである場合、基礎アドレスに前記オフセットを加えたメモリアドレスである請求項7に記載のジャバ仮想マシンの命令実行方法。
  10. 前記(b)ステップは、前記入力されたバイトコード内の演算コードがワイド被演算子を使用する演算コードである場合、前記演算コードをワイド被演算子を使用しない演算コードに変更するステップを含む請求項1に記載のジャバ仮想マシンの命令実行方法。
  11. ジャバクラスを構成するメソードのバイトコードを抽出するバイトコード抽出部と、
    前記バイトコード抽出部により抽出されたバイトコードを、前記バイトコード内の演算コードに対応する動作を行う演算コードハンドラの位置に関する情報を含み、16ビットのメモリ要素を使用する第2コードに変換する第2コード変換部と、
    前記第2コード変換部により変換された前記第2コードを行う命令語実行部と、を備えるジャバ仮想マシン。
  12. 前記第2コードをランタイム状態にするリンキング作業を行うリンキング部と、
    前記リンキングされた第2コードが行われるように初期化する初期化部と、をさらに備える請求項11に記載のジャバ仮想マシン。
  13. 前記リンキング部は、前記第2コード内の前記演算コードハンドラの位置に関する情報及び前記演算コードハンドラに対応する前記演算コードを含むテーブルを参照して前記第2コードを検証する請求項12に記載のジャバ仮想マシン。
  14. 前記演算コードハンドラの位置を表す値は、前記演算コードハンドラのオフセットである請求項11に記載のジャバ仮想マシン。
  15. 前記第2コード変換部は、前記バイトコード内のバイト単位の被演算子を16ビット単位の第2被演算子に変換する請求項11に記載のジャバ仮想マシン。
  16. 前記第2コード変換部は、前記バイトコード内のバイト単位の被演算子を左側に2ビットシフトする請求項11に記載のジャバ仮想マシンの命令実行方法。
  17. 前記第2コード変換部は、前記バイトコード内の被演算子を表す連続的なバイトを組み合わせて16ビット単位の第2被演算子に変換する請求項11に記載のジャバ仮想マシン。
  18. 前記第2被演算子は、前記バイトコード内の被演算子がオフセットである場合、基礎アドレスに前記オフセットを加えたメモリアドレスである請求項17に記載のジャバ仮想マシン。
  19. 前記第2コード変換部は、前記バイトコード内の被演算子を表す1以上の連続的なバイトをOR演算及びシフト演算で組み合わせ、前記組み合わせられた結果を左側に2ビットシフトする請求項11に記載のジャバ仮想マシンの命令実行方法。
  20. 前記第2コード変換部は、前記入力されたバイトコード内の演算コードがワイド被演算子を使用する演算コードである場合、前記演算コードを、ワイド被演算子を使用しない演算コードに変更する請求項11に記載のジャバ仮想マシン。
  21. 請求項1ないし請求項10のうちいずれか1項による方法を実行するためのコンピュータ可読プログラムを記録した記録媒体。
JP2006106637A 2005-04-21 2006-04-07 ジャバ仮想マシンの命令語実行方法及びその装置 Pending JP2006302272A (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (11)

* Cited by examiner, † Cited by third party
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