JP2006323844A - ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法 - Google Patents

ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法 Download PDF

Info

Publication number
JP2006323844A
JP2006323844A JP2006133776A JP2006133776A JP2006323844A JP 2006323844 A JP2006323844 A JP 2006323844A JP 2006133776 A JP2006133776 A JP 2006133776A JP 2006133776 A JP2006133776 A JP 2006133776A JP 2006323844 A JP2006323844 A JP 2006323844A
Authority
JP
Japan
Prior art keywords
machine code
register
stack
machine
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
JP2006133776A
Other languages
English (en)
Inventor
Jung-Pil Choi
正 必 崔
Hyo-Jung Song
孝 晶 宋
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 JP2006323844A publication Critical patent/JP2006323844A/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
    • 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
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Abstract

【課題】 ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法を提供する。
【解決手段】 バイトコードを変換させた複数のマシンコードを保存するDBキャッシュと、マシンコードに含まれた所定の命令語を除去して、新たなマシンコードに変更させるマシンコード変更部と、マシンコードの演算に必要なスタックデータ及び演算を行うレジスタ領域を提供するレジスタファイルを管理するレジスタ管理部と、マシンコードについてのベーシックブロック情報、及びレジスタファイルのスタックデータについてのspill及びfill実行情報を保存するマシンコード情報保存部とを備えるジャバ仮想マシンでバイトコードの実行時間を短縮するシステム。
【選択図】 図2

Description

本発明は、ジャバ仮想マシン(Java(登録商標) Virtual Machine:JVM)でバイトコードの実行時間を短縮するシステム及び方法に係り、さらに詳細には、マシンコードの演算実行時にスタックメモリの接近を最小化して全体バイトコードの実行時間を短縮できる、JVMでバイトコードの実行時間を短縮するシステム及び方法に関する。
一般的に、ジャバ(Java(登録商標)は、ネットワークプログラミングで事実上標準になった客体指向プログラミング言語である。現在ジャバは、内蔵型システムまたはマイクロプロセッサーやマイクロコントローラを含むシステムの領域に利用されている。
そして、客体指向、自動ガーベジコレクション、及びランタイム保安特徴のようなジャバ環境の長所のうち一部は、内蔵型アプリケーションで成功的に使われうる。
しかし、ランタイム環境は、インタープリタまたはJIT(just−in−time)コンパイラーのような仮想マシンでジャバコードを実行させることと関連したリソースオーバーヘッドのために、システム設計者に困難を与えている。
バイトコード(byte code)と呼ばれるジャバ2進コードは、一つ以上のクラスファイルに分散されている。バイトコードは、ジャバプログラムの実行のために特別に設計された仮想的なコンピュータ(hypothetical computer)の命令語である。
従来のCPUは、このようなバイトコードを行えないので、このバイトコードをJVMと呼ばれるソフトウェア層で行う。JVMは、抽象的なマシンスペック(specification)であり、JVMスペックは、サンマイクロシステム社(Sun Microsystems)により発表された。
ジャバプログラム実行過程を説明すれば、‘.java(登録商標)’形式のジャバプログラムは、コンパイラーによりコンパイルされて‘.class’のジャバ実行ファイルに変換され、このようなクラスファイルはインタープリタによりインタープリトされて実際行われる。ここで、インタープリトは、プログラム実行に必要なあらゆるクラスをロードするクラスローディング、クラスファイルフォーマット、接近権限、データ型変換などについての検査を行う検証、実際プログラム実行の3ステップで進む。
また、ジャバの階層構造は、ジャバ言語で作成されたジャバプログラムと、JVM及びジャバAPIを含むジャバプラットホームと、ハードウェア依存的プラットホームを含む。このような構造下でジャバの実行ファイルは、特定プラットホームとは関係ないバイトコードであるので、いかなるシステムで開発したかに関係なくジャバ実行環境(JRE)さえあれば実行可能である。
これにより、ジャバ技術は、WORA(Write Once Run Anywhere)を保証するプラットホーム中立性、動的拡張性など多くの長所により色々な所で使われている。例えば、ウェブサービスのためのサーバ技術として活発に使われて大部分のウェブアプリケーションサーバがジャバ技術を基盤としており、エンベデッド機器では、ユーザサービスを提供するか、制御アプリケーションを行うための環境としてジャバ技術を採用する例が多くなっている。
図1は、従来マシンコードの演算実行のための命令語処理過程を示す図である。
図示されたように、ベーシックブロックの最初のアドレス(op(A0))であるマシンコードは、現在ローカルポインタ(local point:lp)の位置から+4の位置に保存されたデータをレジスタ1 r1に移動せよという命令語を行い、レジスタ1 r1に保存されたデータを現在スタックポインタ(stack point:sp)の位置から+4の位置に保存した後、スタックポインタのアドレスを+4した位置のアドレスに変えよという命令語を行う。
ベーシックブロックアドレスがop(A1)であるマシンコードは、現在ローカルポインタの位置から+8の位置に保存されたデータをレジスタ1に移動せよという命令語を行い、レジスタ1に保存されたデータを現在スタックポインタの位置から+4の位置に保存した後、スタックポインタのアドレスを+4した位置のアドレスに変えよという命令語を行う。
ベーシックブロックアドレスがop(A2)であるマシンコードは、現在スタックポインタの位置から−4の位置に保存されたデータをレジスタ2 r2に移動せよという命令語を行い、現在スタックポインタの位置から−4の位置に保存されたデータをレジスタ1に移動せよという命令語を行う(1)。また、レジスタ2とレジスタ1とを算術的に演算した後、演算された結果をレジスタ1に移動せよという命令語を行い(2)、レジスタ1に保存されたデータを現在スタックポインタの位置から+4の位置に保存した後、スタックポインタのアドレスを+4の位置のアドレスに変えよという命令語を行う(3)。
ここで、マシンコードには、ポップタイプ(pop type)10、プッシュタイプ(push type)3、コアタイプ(core type)2など3タイプのマシン命令語が存在する。ポップタイプ命令語は、スタック領域から上位部分のデータをレジスタに移すものであり、プッシュタイプ命令語は、レジスタに保存されたデータをスタック領域に移すものであり、コアタイプ命令語は、ポップタイプとプッシュタイプを除外したあらゆる命令語をいう。また、ベーシックブロックで命令語の順序は、ポップタイプ、プッシュタイプ、コアタイプ順に現れ、ポップタイプの命令語は、順次的かつ連続的な逆順の(例えば、Reg_k、Reg_(k−1)、…Reg_1)レジスタを使用し、プッシュタイプの命令語は順次的に連続的な(例えば、Reg_1、…、Reg_p)レジスタを使用し、コアタイプの命令語は、ポップタイプ及びプッシュタイプで使用するレジスタを使用する。
ベーシックブロックアドレスがop(A4)であるマシンコードは、現在スタックポインタの位置から−4の位置に保存されたデータをレジスタ1に移動せよという命令語を行い、レジスタ1に保存されたデータを現在ローカルポインタの位置から+12の位置に保存せよという命令語を行う。
これにより、同一ベーシックブロックA0ないしA4のバイトコードを行うために、10個のマシンコードがスタックに6回load/storeせよという命令語と、ローカルに3回load/storeせよという命令語を行う。
一方、ジャバ環境でメモリアクセスを減らすための方法として、バイトコードフォールディング、DBキャッシュ、及びスタックレジスタを利用した。
バイトコードフォールディングとは、バイトコード実行時に多く使われる3〜4個の連続したバイトコードのパターンをあらかじめ把握して、そのようなパターンが感知されれば、それぞれのバイトコードに該当するマシンコード(machine code)を行う代わり、パターン全体に該当する最適化されたマシンコードを代わりに行う方法である。これにより、バイトコードフォールディングによりパターンに属する1つのバイトコードの演算結果をレジスタに保存し、パターンに属する他のバイトコードがそれを利用する時にレジスタを直接活用可能にすることによって、スタックメモリアクセスの回数を短縮できる。
バイトコードフォールディングの典型的な動作過程を説明すれば、行われるバイトコードから連続した3〜4個のバイトコードを検索して、既定の制限された数のパターンと一致するかどうかを検索する。次いで、一致するパターンが把握されればそのバイトコードを行う代わりに準備されたマシンコードを行い、実行後にパターンに該当するバイトコード数ほど行われるバイトコードの位置を修正する。一方、行われるバイトコードが所定パターンと一致するパターンでなければ、各バイトコードの実行を続ける。
しかし、バイトコードフォールディングは、バイトコードを行うのに必要な命令語の数を減らしつつ、不要なメモリアクセス回数を減らすことによって性能の向上をもたらすことができるが、既定のパターンのみを適用させうるために適用範囲が制限的であり、フォールディングユニットで処理しないバイトコード使用パターンを持つアプリケーションには大きい効果を奏しないという問題点がある。
DBキャッシュとは、ピコジャバプロセッサー内で具現され、パイプラインステップ中に挿入された一種のインストラクションキャッシュとして行われるバイトコードと、バイトコードフォールディングの結果として生成されたマシンコードをフォールディングユニットから入力されて保存する領域である。ここで、DBキャッシュは、一種のインストラクションキャッシュであるために、メモリに保存されたインストラクションアクセスを減らし、特に既にフォールディングされたバイトコードを保存する場合は再びフォールディングを行わなくてもよいために、さらに性能を向上させることができる。
DBキャッシュの動作過程を説明すれば、フェッチステップでDBキャッシュに一致するインストラクションアドレスがあるかを確認し、確認結果、一致しなければ一般的なパイプライン実行過程を進めると同時に、インストラクションフォールディングユニットにバイトコードを伝達する。
それからインストラクションフォールディングユニットはバイトコードフォールディングを行って、DBキャッシュにフォールディングされた結果やバイトコードを伝達して保存する。もし、フェッチステップで一致するインストラクションのアドレスがあれば、DBキャッシュで選択されたインストラクションを行う。
このようにDBキャッシュからバイトコードを持ってくる場合にはメモリの接近回数を減らす長所があり、フォールディングされたマシンコードを持ってくる場合には、メモリ接近回数を減らす長所に、さらに追加的にフォールディングにかかる時間を短縮できる。
しかし、DBキャッシュは、バイトコード及びフォールディングされた結果であるマシンコードを追加的なキャッシュに保管しておくことによってメモリアクセスを減らし、再びフォールディング作業をせずにすむ方法であるが、前記で説明したフォールディングの短所はそのまま持っているという問題点がある。
スタックレジスタとは、ジャバのようなスタックマシンのために制限された数の円形形態のレジスタとメモリとの結合でスタックを具現する方法であって、実行ユニット(Execution Unit)がスタックを使用しようとする時に、常にレジスタに接近可能にするためにスタックのトップ領域はレジスタに移して(fill)使用し、レジスタが足りなくなれば頻繁に使われないスタックのボトム部分をメモリに移動(spill)させる方法である。
スタックレジスタの典型的な動作過程を説明すれば、実行ユニットでスタックにポップ及びプッシュを要請する。
もし、プッシュである場合にレジスタに一つの値が追加され、ポップの場合、レジスタから一つの値が除去されてレジスタに空いている空間が生じる。
一方、連続したプッシュでスタックのトップ空間がいずれも割り当てられた場合、使われないスタックのボトム部分をメモリに移しておき(spill)、連続したポップでスタックのトップ空間が空いている場合、メモリに移されて保存されていた内容をレジスタに移動(fill)させる。
しかし、スタックレジスタは制限されたレジスタ及びメモリを使用してスタックを構成し、実行ユニットの立場では、常にメモリではないレジスタを使用できるように保証することによってプッシュ及びポップ性能を向上させるが、既にコード上に存在する非効率的なスタックに対するプッシュ/ポップ命令語を除去できないという問題点がある。
韓国公開特許第2004−034601号
本発明は、マシンコードの演算実行時に演算に必要なスタックメモリの上位部分をスタックレジスタに保存し、演算を行うレジスタ領域を確保して置くことによって、スタックメモリの接近を最小化してバイトコードの実行時間を短縮することを目的とする。
本発明の他の目的は、スタックレジスタにスタックデータを保存しておくことによって、ポップタイプ及びプッシュタイプの命令語を除去した新たなマシンコードを提供することである。
前記目的を達成するために、本発明の一実施形態によるJVMでバイトコードの実行時間を短縮するシステムは、バイトコードを変換させた複数のマシンコードを保存するDBキャッシュと、前記マシンコードに含まれた所定の命令語を除去して、新たなマシンコードに変更させるマシンコード変更部と、前記マシンコードの演算に必要なスタックデータ及び演算を行うレジスタ領域を提供するレジスタファイルを管理するレジスタ管理部と、前記マシンコードについてのベーシックブロック情報、及び前記レジスタファイルのスタックデータについてのspill及びfill実行情報を保存するマシンコード情報保存部と、を備える。
また、本発明の他の実施形態によるJVMでバイトコードの実行時間を短縮する方法は、バイトコードをマシンコードに変換して保存するステップと、前記マシンコードの演算実行に必要なスタックデータ及び演算を行うレジスタが確保されたレジスタファイルを提供するステップと、前記マシンコードに含まれた所定の命令語を除去して新たなマシンコードに変更するステップと、前記変更されたマシンコードの演算を行うステップと、を備える。
その他の実施例の具体的な事項は詳細な説明及び図面に含まれている。
本発明のJVMでバイトコードの実行時間を短縮するシステム及び方法によれば、次のような効果が一つあるいはそれ以上ある。
第1に、マシンコードの演算実行時に演算に必要なスタックメモリの上位部分をスタックレジスタに保存し、演算を行うレジスタ領域を確保しておくことによって、スタックメモリの接近を最小化して全体バイトコードの実行時間を短縮する。
第2に、スタックレジスタにスタックデータを保存しておくことによって、ポップタイプ及びプッシュタイプの命令語を除去した新たなマシンコードを提供して全体バイトコードの実行時間を短縮する。
第3に、新たなマシンコードを通じてスタックメモリ接近に対するオーバーヘッドをできる限り減らすことができる。
本発明の利点及び特徴、そしてこれを達成する方法は添付された図面に基づいて詳細に後述されている実施例を参照すれば明確になる。しかし、本発明は以下で開示される実施例に限定されるものではなく、この実施例から外れて多様な形に具現でき、本明細書で説明する実施例は本発明の開示を完全にし、本発明が属する技術分野で当業者に発明の範ちゅうを完全に報せるために提供されるものであり、本発明は請求項及び発明の詳細な説明により定義されるだけである。一方、明細書全体に亙って同一な参照符号は同一な構成要素を示す。
以下、添付された図面を参照して本発明の望ましい実施形態を詳細に説明する。
図2は、本発明の一実施形態によるJVMでバイトコードの実行時間を短縮するシステムの内部ブロック図である。
図示するように、バイトコードの実行時間を短縮するシステムは、メモリ110、命令語バッファ120、バイトコード変換部130、DBキャッシュ140、マシンコード変更部150、マシンコード情報保存部160、レジスタ管理部170、及びレジスタファイル180を備えて構成される。ここで、JVMが動作する装置は、有無線端末機、家庭機器、エンベデッド機器などと理解されうる。
メモリ110は、JVMで使用するスタック領域(すなわち、スタックメモリ112)及び所定の命令語を保存する。
命令語バッファ120は、メモリ110からフェッチした命令語(例えば、バイトコード)を臨時に保存する。また、命令語バッファ120は、DBキャッシュ140に行う命令語が保存されていない場合、メモリ110で行う命令語をフェッチする。この時、命令語バッファ120は、メモリ110で次に行われる命令語を共にフェッチして保存する。
バイトコード変換部130は、命令語バッファ120にフェッチされた命令語がバイトコードである場合、これをマシンコードに変換する。ここで、一つのバイトコードは複数個のマシンコードに変換される。また、バイトコード変換部130は、バイトコードを分析して変換されたマシンコードがベーシックブロックの開始アドレス及び終了アドレスである場合、該当マシンコードのアドレスをマシンコード情報保存部160に伝送する。
DBキャッシュ140は、バイトコード変換部130で変換させたマシンコードを保存する。
マシンコード変更部150は、DBキャッシュ140に保存された演算を行うマシンコードがベーシックブロックの最初のアドレスに該当する場合、前記ベーシックブロックに含まれるマシンコードを新たなマシンコードに変更させるものであって、すなわち、演算を行うオリジナルマシンコードをスタックリード/ライト命令実行を低減させる新たなマシンコードに変更するものである。ここで、マシンコード変更過程は、ベーシックブロックアドレス単位で行われ、マシンコードを変更するためには、レジスタファイル180がマシンコード変更条件を満足せねばならない。マシンコード変更条件は、レジスタファイル180に演算を行えるレジスタが存在せねばならず、演算時に必要なスタックデータが存在せねばならないということをいう。
ここで、レジスタファイル180がマシンコード変更条件を満足するように、レジスタ管理部170はspillまたはfillを演算時に行う。
また、マシンコード変更部150は、マシンコード変更を行う前のレジスタファイル180の状態(すなわち、マシンコード変更条件)を確認し、マシンコード変更条件を満足させるようにspillまたはfillの実行如何情報をマシンコード情報保存部160に伝送する。これにより、マシンコード情報保存部160に保存された情報(例えば、spillまたはfillの実行如何情報)に基づいて、レジスタ管理部170がspillまたはfillを行う。
マシンコード情報保存部160は、バイトコード変換部130が変換させたマシンコードについてのベーシックブロック情報(開始アドレス、及び終了アドレス)を保存し、マシンコード変更部150から伝送されたレジスタファイル180のspill及びfill実行情報を保存する。また、マシンコード情報保存部160は、スタックマシン変更によりスタックレジスタ182のスタック情報、例えば、スタックトップ(ST)、スタックボトム(SB)、及びスタックハイト(Stack Height:SH)が変更された場合、変更されたスタック情報を保存する。ここで、スタックトップは、上位スタックが保存されたレジスタについてのポインタであり、スタックボトムは、スタックレジスタ182のうち最も下位スタックを保存するレジスタについてのポインタであり、スタックハイトは、全体レジスタファイルのうちスタックレジスタとして使われるレジスタの数である。ここで、マシンコード情報保存部160は、演算が行われるマシンコードに関する情報を保存し、前記保存された情報はテーブル形態に保存される。以下、図3の情報テーブルを詳細に説明する。
レジスタファイル180は、データを臨時に保存するものであって、算術/論理演算、情報解釈、及び伝送などを行える一定長さの情報を保存する。ここで、レジスタファイル180は複数のレジスタを含み、例えば、スタックメモリ112のトップ領域を保存するスタックレジスタ182を含む。本願発明では、レジスタファイル180がマシンコード変更条件を満足するために、スタックレジスタ182に保存されたスタックデータをメモリ110にspillするか、メモリ110に保存されたスタックデータをfillする。以下、図4で、レジスタファイル180のスタックレジスタ182について詳細に説明する。
レジスタ管理部170は、レジスタファイル180のスタックレジスタ182を管理するものであって、すなわち、マシンコード変更が可能にスタックレジスタ182のspillまたはfillを行う。ここで、スタックレジスタ182に必要なspillまたはfillを行う情報は、マシンコード情報保存部160に保存されている。
例えば、マシンコード変更部150が所定マシンコードを変更しようとする時、スタックレジスタ182に演算を行うレジスタがない場合(すなわち、プッシュタイプ)、スタックレジスタ182に保存された所定数のスタックデータをスタックメモリ112に伝送(すなわち、spill実行)して演算を行うレジスタ領域が生じるようにし、もし演算に利用されるスタックデータがスタックレジスタ182に存在していない場合(すなわち、ポップタイプ)、該当スタックデータをスタックメモリ112から得る(すなわち、fill実行)。
また、レジスタ管理部170は、スタックレジスタ182を管理するためにスタック情報(例えば、スタックトップ、スタックボトム、及びスタックハイト)を保存する。ここで、スタックレジスタ182に対するspill及びfill実行によりスタック情報が変更され、レジスタ管理部170は、変更されたスタック情報を保存及び管理する。
図3は、本発明の他の実施形態によるJVMでバイトコードの実行時間を短縮するシステムにおいて、マシンコード情報保存部の情報テーブルを示す図である。
図示するように、情報テーブルはマシンコードアドレス(11)、ベーシックブロックの開始(Basic Block First:BBF)及びベーシックブロックの終了アドレス(Basic Block End:BBE)情報(12)、(13)、必要なレジスタ数(14)、spill及びfill実行可否(15)、及び変化されたスタック情報(16)などを保存する。
例えば、アドレスが0×3400であるマシンコードはベーシックブロックの開始アドレスを持ち、必要なレジスタの数は1つである。また、スタックレジスタ182で演算を行うためにspillを行わねばならず、spillを行った結果、スタックの変化はないということが分かる。
したがって、マシンコード情報保存部160に保存された情報に基づいて、レジスタ管理部170は、スタックレジスタ182に対するspill及びfill実行を決定し、これにより、スタックレジスタ182がマシンコード変更条件を満足すれば、マシンコード変更部150は、オリジナルマシンコードに対するコード変更を行う。
図4は、本発明の他の実施形態によるJVMでバイトコードの実行時間を短縮するシステムにおいて、レジスタ管理部がspill及びfillを行う過程を示す図である。
図示するように、スタックメモリ112に複数個のスタックデータが保存されており、スタックレジスタ182には5個のデータが保存されている。ここで、スタックレジスタ182は円形の形状であり、スタックトップ(ST)及びスタックボトム(SB)の位置が表示されている。
レジスタ管理部170がマシンコード情報保存部160に保存された情報に基づいてfillを行うとすれば、演算に必要なスタックデータをスタックレジスタ182に保存するために、スタックメモリ112のトップ部分のスタックデータを持ってきてスタックレジスタ182のボトム部分から追加する。
すなわち、レジスタ管理部170がfillを3ほど行った場合、スタックボトム(SB)は、R0からR13に移されつつ、スタックメモリ112から4、5、及び6のデータ値を持ってきて、R15からR13まで満たす。
一方、レジスタ管理部170がマシンコード情報保存部160に保存された情報に基づいてspillを行うとすれば、演算を行うためのレジスタ領域を形成するために所定数のスタックデータをスタックメモリ112に移す。これにより、スタックレジスタ182に演算を行うレジスタ領域が確保され、スタックレジスタ182に位置したスタックボトム(SB)のポインタ値は、スタックメモリ112に移動したスタックデータ数ほど減少する。
図5は、本発明のさらに他の実施形態によるJVMでバイトコードの実行時間を短縮するシステムにおいて、マシンコード変更部がマシンコードを変更する過程を示す図である。ここで、マシンコード変更を行うために、スタックレジスタ182はマシンコード演算に必要なスタックデータを含んでおり、演算を行うレジスタが割り当てられている。
図示されたように、ベーシックブロックの最初のアドレスop(A0)であるマシンコードは、現在ローカルポインタの位置から+4の位置に保存されたデータをレジスタ2に移動せよという命令語を行う。
ベーシックブロックアドレスがop(A1)であるマシンコードは、現在ローカルポインタの位置から+8の位置に保存されたデータをレジスタ3に移動せよという命令語を行う。
ベーシックブロックアドレスがop(A3)であるマシンコードは、レジスタ3とレジスタ2とを演算した後、演算された結果をレジスタ2に移動せよという命令語を行う。
ベーシックブロックアドレスがop(A3)であるマシンコードは、現在ローカルポインタの位置から+12の位置に保存されたデータをレジスタ2に移動せよという命令語を行う。
すなわち、変更されたマシンコードはポップタイプ及びプッシュタイプのマシンコード命令語を行わないために、従来のマシンコードの演算実行のための命令語処理より少ない命令語処理を行う。
これにより、同一ベーシックブロックA0ないしA4のバイトコードを行うためにローカルに3回のload/storeを行えという命令語を行えばよい。
したがって、マシンコードの演算に必要なスタックの上位部分をスタックレジスタ182に割り当てることによって、不要な動作命令を除去してスタックメモリの接近に対するオーバーヘッドをできる限り減らすことができる。
図6は、本発明のさらに他の実施形態によるJVMでバイトコードの実行時間を短縮する方法を示すフローチャートである。
図示するように、メモリ110からフェッチされた命令語がバイトコードである場合、バイトコード変換部130は、該当バイトコードをマシンコード(オリジナルマシンコード)に変換させ(S200)、DBキャッシュ140に変換されたオリジナルマシンコードを保存する。
その後、マシンコード変更部150は、DBキャッシュ140に保存された動作命令を行うオリジナルマシンコードがベーシックブロックの最初のアドレスに該当するかどうかを判断する。判断結果、行うオリジナルマシンコードがベーシックブロックの最初のアドレスである場合(S210)、該当オリジナルマシンコードについてのスタック情報(スタックトップ、スタックボトム、及びスタックハイト)、ベーシックブロック情報(開始アドレス、終了アドレス)をマシンコード情報保存部160に保存する(S220)。
その後、レジスタ管理部170は、マシンコード情報保存部160に保存されたマシンコードの情報に基づいてスタックレジスタ182の状態をチェックする(S230)。ここで、スタックレジスタ182の状態は、スタックレジスタ182に保存されたデータをスタックメモリ112に移動(spill)させるポップタイプと、スタックメモリ112に保存されたデータをスタックレジスタ182に移動(fill)させるプッシュタイプとで理解できる。
これにより、スタックレジスタ182の状態チェック結果、ポップタイプである場合(S231)、すなわち、演算を行うレジスタ領域が必要なために、レジスタ管理部170は、スタックレジスタ182に保存されたスタックデータをスタックメモリ112に伝送(spill)する(S232)。
一方、スタックレジスタ182の状態チェック結果、プッシュタイプである場合(S233)、すなわち、演算に必要なスタックデータがスタックレジスタ182に含まれていないために、レジスタ管理部170は、スタックメモリ112から演算に必要なスタックデータをスタックレジスタ182に移動(fill)させる(S234)。
その後、マシンコード変更部150は、オリジナルマシンコードを、スタックレジスタ182に保存された演算に必要なスタックデータを利用して、スタックメモリ112に接近しなくても演算を行える新たなマシンコードに変更させる(S240)。
一方、マシンコードのベーシックブロック終了アドレスまでコード変更が行われた場合(S250)にマシンコード変換過程を終了し(S260)、マシンコードのベーシックブロック終了アドレスまでコード変更が行われていない場合、マシンコードのベーシックブロック終了アドレスに対するコード変更が行われるまでステップS230及びステップS240を続ける。
したがって、マシンコード演算に必要なスタックの上位部分をスタックレジスタ182に割り当て、スタックレジスタ182に演算を行うレジスタ領域を形成することによって、スタックメモリ接近に対する動作命令を除去できてバイトコードの全体実行時間を短縮することができる。
また、マシンコードを変更することによってスタックメモリ接近に対するオーバーヘッドをできる限り減らすことができる。
以上、添付図を参照して本発明の実施例を説明したが、本発明が属する技術分野で当業者ならば本発明がその技術的思想や必須特徴を変更せずとも他の具体的な形に実施されうるということが理解できるであろう。したがって、前述した実施例は全ての面で例示的なものであって、限定的なものではないと理解せねばならない。
本発明は、ジャバ仮想マシンでバイトコードの実行時間を短縮するシステムの関連技術分野に好適に用いられる。
従来のマシンコードの演算実行のための命令語処理過程を示す図である。 本発明の一実施形態によるJVMでバイトコードの実行時間を短縮するシステムの内部ブロック図である。 本発明の他の実施形態によるJVMでバイトコードの実行時間を短縮するシステムにおいて、マシンコード情報保存部の情報テーブルを示す図である。 本発明の他の実施形態によるJVMでバイトコードの実行時間を短縮するシステムにおいて、レジスタ管理部がspill及びfillを行う過程を示す図である。 本発明のさらに他の実施形態によるJVMでバイトコードの実行時間を短縮するシステムにおいて、マシンコード変更部がマシンコードを変更する過程を示す図である。 本発明のさらに他の実施形態によるJVMでバイトコードの実行時間を短縮する方法を示すフローチャートである。
符号の説明
110 メモリ
120 命令語バッファ
130 バイトコード変換部
140 DBキャッシュ
150 マシンコード変更部
160 マシンコード情報保存部
170 レジスタ管理部
180 レジスタファイル

Claims (8)

  1. バイトコードを変換させた複数のマシンコードを保存するDBキャッシュと、
    前記マシンコードに含まれた所定の命令語を除去して、新たなマシンコードに変更させるマシンコード変更部と、
    前記マシンコードの演算に必要なスタックデータ及び演算を行うレジスタ領域を提供するレジスタファイルを管理するレジスタ管理部と、
    前記マシンコードについてのベーシックブロック情報、及び前記レジスタファイルのスタックデータについてのspill及びfill実行情報を保存するマシンコード情報保存部と、を備えるジャバ仮想マシンでバイトコードの実行時間を短縮するシステム。
  2. 前記レジスタ管理部は、前記マシンコード情報保存部に保存されたspill及びfill実行情報に基づいてマシンコード演算に必要なスタックデータをレジスタファイルに持ってくるfillと、演算を行うレジスタ領域を確保するためにレジスタファイルに位置したスタックデータを移動させるspillを行う請求項1に記載のジャバ仮想マシンでバイトコードの実行時間を短縮するシステム。
  3. 前記マシンコード変更部は、前記DBキャッシュに保存されたマシンコードがベーシックブロックの開始アドレスである場合、マシンコード変更を行うマシンコードである請求項1に記載のジャバ仮想マシンでバイトコードの実行時間を短縮するシステム。
  4. 前記マシンコード変更部が除去した所定の命令語は、ポップタイプ及びプッシュタイプのマシンコード命令語である請求項1に記載のジャバ仮想マシンでバイトコードの実行時間を短縮するシステム。
  5. バイトコードをマシンコードに変換して保存するステップと、
    前記マシンコードの演算実行に必要なスタックデータ及び演算を行うレジスタが確保されたレジスタファイルを提供するステップと、
    前記マシンコードに含まれた所定の命令語を除去して新たなマシンコードに変更するステップと、
    前記変更されたマシンコードの演算を行うステップと、を含むジャバ仮想マシンでバイトコードの実行時間を短縮する方法。
  6. 前記マシンコードの演算を実行に必要なスタックデータ及び演算を行うレジスタが確保されたレジスタファイルを提供するステップは、前記マシンコードの演算の実行に必要なスタックデータを提供されるためにfillを行い、前記マシンコードの演算を行うレジスタを確保するためにspillを行う請求項5に記載のジャバ仮想マシンでバイトコードの実行時間を短縮する方法。
  7. 前記マシンコード変更部が除去した所定の命令語は、ポップタイプ及びプッシュタイプのマシンコード命令語である請求項5に記載のジャバ仮想マシンでバイトコードの実行時間を短縮する方法。
  8. 前記マシンコード変更は、マシンコードのベーシックブロックアドレスが開始アドレスである場合に行われるマシンコード変更である請求項5に記載のジャバ仮想マシンでバイトコードの実行時間を短縮する方法。
JP2006133776A 2005-05-19 2006-05-12 ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法 Pending JP2006323844A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020050042082A KR100725393B1 (ko) 2005-05-19 2005-05-19 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법

Publications (1)

Publication Number Publication Date
JP2006323844A true JP2006323844A (ja) 2006-11-30

Family

ID=36694197

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006133776A Pending JP2006323844A (ja) 2005-05-19 2006-05-12 ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法

Country Status (4)

Country Link
US (1) US8561042B2 (ja)
EP (1) EP1724683A3 (ja)
JP (1) JP2006323844A (ja)
KR (1) KR100725393B1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008299833A (ja) * 2007-06-04 2008-12-11 Samsung Electronics Co Ltd 作業遂行速度を向上させる装置および方法

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9250938B2 (en) * 2008-10-15 2016-02-02 Microsoft Technology Licensing, Llc Caching runtime generated code
CN101697117B (zh) * 2009-09-30 2012-09-05 江南大学 用于实时Java处理器的字节码高速缓存装置及存取方法
US8689200B1 (en) * 2011-01-12 2014-04-01 Google Inc. Method and system for optimizing an executable program by generating special operations for identical program entities
US8683455B1 (en) 2011-01-12 2014-03-25 Google Inc. Method and system for optimizing an executable program by selectively merging identical program entities
FR2971229B1 (fr) * 2011-02-03 2013-03-15 Algorithme Procede et dispositif flottant autonome d'asservissement de position d'une embarcation nautique
US9584877B2 (en) * 2011-06-16 2017-02-28 Microsoft Technology Licensing, Llc Light-weight validation of native images
US11347498B2 (en) * 2013-02-26 2022-05-31 Red Hat, Inc. Bytecode modification
US10783082B2 (en) 2019-08-30 2020-09-22 Alibaba Group Holding Limited Deploying a smart contract

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000267862A (ja) * 1999-03-09 2000-09-29 Hewlett Packard Co <Hp> 資源の消費を最小限にするハイブリッド式ジャストインタイム・コンパイラ
JP2000311089A (ja) * 1999-04-28 2000-11-07 Nec Corp インタプリタの高速化方法ならびに装置
JP2003280894A (ja) * 2002-03-27 2003-10-02 Hitachi Ulsi Systems Co Ltd 命令セット変換装置
JP2004133641A (ja) * 2002-10-10 2004-04-30 Renesas Technology Corp 情報処理装置
JP2004522236A (ja) * 2001-07-02 2004-07-22 ナゾミ コミュニケイションズ インコーポレイテッド 中間言語アクセラレータチップ

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5222244A (en) 1990-12-20 1993-06-22 Intel Corporation Method of modifying a microinstruction with operands specified by an instruction held in an alias register
DE69311330T2 (de) 1992-03-31 1997-09-25 Seiko Epson Corp Befehlsablauffolgeplanung von einem risc-superskalarprozessor
US6021469A (en) * 1996-01-24 2000-02-01 Sun Microsystems, Inc. Hardware virtual machine instruction processor
EP0976050B1 (en) * 1996-01-24 2002-06-12 Sun Microsystems, Inc. Processor with array access bounds checking
JP3634379B2 (ja) * 1996-01-24 2005-03-30 サン・マイクロシステムズ・インコーポレイテッド スタックキャッシングのための方法及び装置
US5974531A (en) * 1998-02-17 1999-10-26 Industrial Technology Research Institute Methods and systems of stack renaming for superscalar stack-based data processors
US6256637B1 (en) * 1998-05-05 2001-07-03 Gemstone Systems, Inc. Transactional virtual machine architecture
US6018799A (en) 1998-07-22 2000-01-25 Sun Microsystems, Inc. Method, apparatus and computer program product for optimizing registers in a stack using a register allocator
DE69942011D1 (de) 1998-10-10 2010-03-25 Ibm Programmkodekonvertierung mit verringerter Übersetzung
GB9822191D0 (en) * 1998-10-13 1998-12-02 Kubiczek Maciej High performance low cost microprocessor
US6618737B2 (en) * 2000-03-09 2003-09-09 International Business Machines Corporation Speculative caching of individual fields in a distributed object system
EP1410174A2 (en) 2001-04-23 2004-04-21 Atmel Corporation Microprocessor for executing byte compiled java code
US7512638B2 (en) * 2003-08-21 2009-03-31 Microsoft Corporation Systems and methods for providing conflict handling for peer-to-peer synchronization of units of information manageable by a hardware/software interface system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000267862A (ja) * 1999-03-09 2000-09-29 Hewlett Packard Co <Hp> 資源の消費を最小限にするハイブリッド式ジャストインタイム・コンパイラ
JP2000311089A (ja) * 1999-04-28 2000-11-07 Nec Corp インタプリタの高速化方法ならびに装置
JP2004522236A (ja) * 2001-07-02 2004-07-22 ナゾミ コミュニケイションズ インコーポレイテッド 中間言語アクセラレータチップ
JP2003280894A (ja) * 2002-03-27 2003-10-02 Hitachi Ulsi Systems Co Ltd 命令セット変換装置
JP2004133641A (ja) * 2002-10-10 2004-04-30 Renesas Technology Corp 情報処理装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008299833A (ja) * 2007-06-04 2008-12-11 Samsung Electronics Co Ltd 作業遂行速度を向上させる装置および方法

Also Published As

Publication number Publication date
KR100725393B1 (ko) 2007-06-07
KR20060120312A (ko) 2006-11-27
US20070006185A1 (en) 2007-01-04
EP1724683A3 (en) 2007-11-14
US8561042B2 (en) 2013-10-15
EP1724683A2 (en) 2006-11-22

Similar Documents

Publication Publication Date Title
JP2006323844A (ja) ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法
JP3816586B2 (ja) 先取り命令を生成する方法とシステム
TWI377502B (en) Method and apparatus for performing interpreter optimizations during program code conversion
US8028148B2 (en) Safe and efficient allocation of memory
US7882198B2 (en) Shared JAVA JAR files
JP3739491B2 (ja) プリフェッチ命令を用いるハーバードアーキテクチャキャッシュメモリの調和したソフトウェア制御
US8131925B2 (en) Runtime machine supported method level caching
US8621443B2 (en) Processor emulation using speculative forward translation
US20030070161A1 (en) Platform-independent selective ahead-of-time compilation
US8429629B2 (en) In-kernel virtual machine for low overhead startup and low resource usage
CN111399990B (zh) 解释执行智能合约指令的方法及装置
US20050028155A1 (en) Java execution device and Java execution method
JP2001109661A (ja) キャッシュメモリの割当方法及びオペレーティングシステム及びそのオペレーティングシステムを有するコンピュータシステム
JP2010170585A (ja) ディスパッチテーブル構造のための方法と装置
JPH113269A (ja) スタックの内容をサブスタックに分離することによる正確なガーベイジ・コレクションを補助するシステムと方法
CN100414517C (zh) 异构体系结构中的覆盖生成、管理的方法和设备
JP2007026094A (ja) 実行装置およびアプリケーションプログラム
AU2891900A (en) Method and apparatus for handling exceptions as normal control flow
JP3973129B2 (ja) キャッシュメモリ装置及びそれを用いた中央演算処理装置
KR100493893B1 (ko) 자바 프로그램에서 클래스 로딩 과정을 단축시키는 시스템및 방법
WO2018125408A1 (en) Automatic identification and generation of non-temporal store and load operations in a dynamic optimization environment
CN116934330A (zh) 一种调用智能合约的方法及执行方法、计算机设备及存储介质
US7299318B2 (en) Method for reducing cache conflict misses
US7937552B2 (en) Cache line reservations
CN114816666A (zh) 虚拟机管理器的配置方法、tlb管理方法及嵌入式实时操作系统

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090609

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090909

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100713