JP2001056764A - 仮想計算機の実行方法および装置 - Google Patents

仮想計算機の実行方法および装置

Info

Publication number
JP2001056764A
JP2001056764A JP23164999A JP23164999A JP2001056764A JP 2001056764 A JP2001056764 A JP 2001056764A JP 23164999 A JP23164999 A JP 23164999A JP 23164999 A JP23164999 A JP 23164999A JP 2001056764 A JP2001056764 A JP 2001056764A
Authority
JP
Japan
Prior art keywords
code
instruction
executing
intermediate code
execution
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.)
Withdrawn
Application number
JP23164999A
Other languages
English (en)
Inventor
Ryota Kunisawa
亮太 國澤
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.)
Axess Corp
Original Assignee
Axess Corp
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 Axess Corp filed Critical Axess Corp
Priority to JP23164999A priority Critical patent/JP2001056764A/ja
Priority to PCT/JP2000/005540 priority patent/WO2001013223A1/ja
Priority to AU65957/00A priority patent/AU6595700A/en
Publication of JP2001056764A publication Critical patent/JP2001056764A/ja
Withdrawn legal-status Critical Current

Links

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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】中間コードからネイティブコードへの変換処理
時間を軽減するとともに、比較的小さいメモリ容量の装
置においても実行速度を総体的に向上させる。 【解決手段】中間コードの実行時に繰り返し実行される
ループ部分を、該実行中に動的に検出し、当該ループ部
分の中間コードをネイティブコードに変換する。中間コ
ードの当該ループ部分については、ネイティブコードを
CPUにより直接実行する。より具体的には、中間コー
ドをメモリ上にロードする際に、制御の流れが上に向か
う命令を検出し、該命令の検出時に該命令を第1の特別
の命令に書き換え、メモリ上の中間コードを実行する
際、第1の特別の命令の実行時に制御の飛び先を確認
し、再度同じ第1の特別の命令を実行したときに制御の
飛び先が一致したならば、当該飛び先から飛び元を前記
ループ部分であると判断し、該ループ部分のバイトコー
ドをネイティブコードに変換する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、バイトコードと呼
ばれる中間コードを実行する仮想計算機の実行方法およ
び装置に関する。
【0002】
【従来の技術】このような仮想計算機としては、Jav
aVM(Javaはサンマイクロシステムズ社の商標)
が知られている。
【0003】図10に示すように、Java言語で書か
れたプログラム(ソースコード)はコンパイルされてバ
イトコードと呼ばれる中間コードに変換される。バイト
コードは特定のハードウェアやOS(Operating System)
に依存せず、また比較的サイズが小さいため、ネットワ
ーク上でプログラムを配布するのに適している。また、
特定の装置への組み込み用のソフトウェアとしての利用
にも適している。
【0004】バイトコードは個々の計算機のCPUが直
接実行するのではなく、ソフトウェアで作られた計算エ
ンジンである仮想計算機により実行される。なお、バイ
トコードに対して、CPUが直接実行できるコードはネ
イティブコードと呼ばれる。
【0005】
【発明が解決しようとする課題】バイトコードはソフト
ウェアによって逐次解析され実行されるので、実行速度
が遅いという難点がある。従来、この問題を解決する手
法としてJIT(Just In Time)コンパイラというもの
が知られている。これは、バイトコードをネイティブコ
ードに変換し(この処理もコンパイルと呼ばれる)、こ
のネイティブコードを直接CPUが実行するものであ
る。
【0006】しかしながら、このJITには次のような
問題があった。すなわち、第1に、このバイトコードか
らネイティブコードへのコンパイル処理に時間がかか
る。第2に、バイトコードよりネイティブコードの方が
サイズが大きいので、メモリ容量が比較的小さくCPU
が比較的低速である組み込み機器や民生機器では問題と
なる。
【0007】本発明はこのような背景においてなされた
ものであり、その目的とするところは、中間コードから
ネイティブコードへの変換処理時間を軽減するととも
に、比較的小さいメモリ容量の装置においても実行速度
を総体的に向上させることができる仮想計算機の実行方
法および装置を提供することにある。
【0008】
【課題を解決するための手段】本発明による方法は、中
間コードを実行する仮想計算機の実行方法であって、
【0009】中間コードの実行時に繰り返し実行される
ループ部分を、該実行中に動的に検出するステップと、
当該ループ部分の中間コードをネイティブコードに変換
するステップと、前記中間コードの当該ループ部分につ
いては、前記ネイティブコードをCPUにより直接実行
するステップとを備えることを特徴とする。
【0010】本発明では、中間コードの実行時に動的に
ループ部分を検出することにより、確実にループ部分を
検出できる。また、ループ部分のみをネイティブコード
に変換するので、その変換に要する時間は比較的短く、
かつ、ネイティブコードを保持するメモリ容量も比較的
小さくて済む。
【0011】より具体的には、前記中間コードをメモリ
上にロードする際に、制御の流れが上に向かう命令を検
出し、該命令の検出時に該命令を第1の特別の命令に書
き換えるステップと、前記メモリ上の中間コードを実行
する際、前記第1の特別の命令の実行時に制御の飛び先
を確認し、再度同じ第1の特別の命令を実行したときに
制御の飛び先が一致したならば、当該飛び先から飛び元
を前記ループ部分であると判断し、該ループ部分の中間
コードをネイティブコードに変換するステップとを有す
る。これにより、中間コードのロード時に、後の実行中
におけるループ部分検出のための細工を中間コードに組
み込んでおくことができる。
【0012】但し、前記第1の特別の命令に書き換える
ステップを、中間コードのロード時に代えて実行時に行
うようにすることも可能である。
【0013】前記飛び先が一致した回数をカウントし、
該カウント値が予め定めた値に達したとき、さらに、当
該ループ部分のネイティブコードへの変換の可否を予め
定めた判断基準で判断し、該判断基準が満足されたとき
前記ネイティブコードへの変換を行うようにしてもよ
い。これによりアプリケーションや用途に応じて、より
適切なネイティブコードへの変換の条件を設定できる。
【0014】前記判断基準が満足されなかったとき、当
該第1の特別の命令を元の普通の命令に戻すことによ
り、当該ループについて以後、ネイティブコードへの変
換に関する無駄な処理を行わないようにすることができ
【0015】前記中間コードをメモリ上にロードする際
に、前記「制御の流れが上に向かう命令」以外の制御の
流れを変える命令を検出し、該命令の検出時に該命令を
第2の特別の命令に書き換えるステップと、前記メモリ
上の中間コードを実行する際、前記第2の特別の命令の
実行時に前記飛び先の情報を無効にするステップとをさ
らに備えてもよい。これは、ループ処理が行われなかっ
た、または中断された場合に相当し、この構成により上
記と同様、以後の無駄な処理の実行を防止する。
【0016】前記第2の特別の命令に書き換えるステッ
プは、中間コードのロード時に代えて実行時に行うよう
にすることも可能である。
【0017】上記方法を実行するための本発明による装
置は、中間コードを実行する仮想計算機の実行装置であ
って、ネイティブコードを実行するCPUと、中間コー
ドを記憶するメモリと、該メモリ上に中間コードをロー
ドする手段と、該中間コードを解釈して実行する、前記
CPU上の仮想計算機手段と、該仮想計算機手段による
前記中間コードの実行時に繰り返し実行されるループ部
分を、該実行中に動的に検出し、当該ループ部分の中間
コードをネイティブコードに変換する手段とを備え、前
記中間コードの当該ループ部分については、前記ネイテ
ィブコードを前記CPUにより直接実行することを特徴
とする。
【0018】
【発明の実施の形態】以下、本発明の実施の形態を詳細
に説明する。
【0019】図1は、本発明の仮想計算機の実行方法の
概念図である。Java言語等で記載されたアプリケー
ションプログラム(ソースコード)20は、コンパイラ
により中間コード(バイトコード)からなるクラスファ
イル21に変換される。クラスとは、種々の機能を実現
する複数の関数(メソッドと呼ばれる)を含むプログラ
ムのかたまりであり、ひとつのアプリケーションに対し
て複数のクラスファイルが作成されうる。各クラスファ
イルの中間コードは、実行に先立ってメモリ11内にロ
ードされる。バイトコードの実行時に繰り返し実行され
るループ部分を、プログラム実行時に検出するための細
工を、このロード時に行うことができる。この具体例に
ついては後述する。
【0020】メモリ11上のバイトコード111は、C
PU10上の仮想計算機(VM)101により逐次解釈
され実行される。この実行中、上記細工に基づいてルー
プ部分を検出したら、そのループ部分のバイトコードを
ネイティブコード112に変換してメモリ11上に置
く。このループ部分の実行時は、仮想計算機101によ
るバイトコードの実行に代わり、CPU10が当該ネイ
ティブコードを直接実行する。後述するように、上記
「細工」は実行中に行うことも可能である。
【0021】通常、このような繰り返し部分は比較的小
さいサイズなので、バイトコードをネイティブコードに
変換する処理に要する時間は小さい。また、ループ部分
のみに対応したネイティブコード112のサイズは小さ
くて済むので、ネイティブコード112のためにメモリ
11の大容量化を招来することもない。
【0022】図2は、本発明の方法が実行される装置の
ハードウェア構成を示すブロック図である。これは、一
般的なコンピュータシステムであり、CPU10、メモ
リ11、外部記憶装置(ハードディスク等)12、キー
ボード等の入力装置13、ディスプレイである表示装置
14、インターネットや外部装置との通信インタフェー
ス部15を有する。
【0023】図3は、バイトコードをメモリ上にロード
する際に行う処理のフローチャートである。
【0024】まず、ひとつの関数のエントリを見つける
(S11)。ロードするバイトコードのプログラム中に
複数の関数が存在する場合、未処理の関数がなくなるま
で、以下の処理を繰り返す(S12)。
【0025】関数があれば、まず、その関数中の最初の
命令を見つける(S13)。この命令が「上に向かう命
令」すなわち制御をプログラムの上方に戻す命令である
かを調べる(S14,Yes)。これは、命令を実行す
る前にその記述に基づいて判断できる。「上に向かう命
令」であった場合、この命令を「プロファイルを行う命
令(第1の特別の命令)」に書き換える(S17)。こ
の第1の特別の命令は、「上に向かう命令」に対してプ
ロファイルを行う機能を追加したものである。ここに、
「プロファイル」とは、一般に、特定のベーシックブロ
ックや、ソース中のある特定の行が、何回実行された
か、分岐があれば、どの方向に何回飛んだか、に関する
情報であるが、ここでは、分岐のコードの場所、ならび
に飛び先およびその回数である。「プロファイルを行
う」とはこのような情報を確認し記憶することをいう。
【0026】その後、後述するステップS17へ進む。
【0027】ステップS14で当該命令が「上に向かう
命令」ではなかった場合、「その他の制御の流れを変え
る命令」か否かを調べる(S15)。この「その他の制
御の流れを変える命令」は、ループ中の終了条件以外の
場所でループから抜ける場合に相当する。このような命
令であれば、当該命令を「プロファイルを無効にする命
令」に書き換える(S18)。この命令も、当該元の命
令の機能に対して無効にする機能が追加されたものであ
る。ここでプロファイルを無効にする理由は、「その他
の制御の流れを変える命令」によって、先に「上に向か
う命令」について「プロファイル」を作成していても、
当該「上に向かう命令」でのループの繰り返しが実行さ
れないことが判明したことになるからである。
【0028】ステップS15で当該命令が「その他の制
御の流れを変える命令」でもなかった場合には、当該関
数の終わりに達したかを調べ(S16)、終わりに達し
ていなければステップS13に戻って上記処理を繰り返
す。
【0029】このようにして、次に説明するプログラム
(バイトコード)の実行時に動的にループを見つけだす
細工が、ロード時に行われたことになる。
【0030】図4は、プログラム実行時の処理のフロー
チャートを示す。
【0031】この処理では、まず、最初のバイトコード
命令を取得し(S31)、この命令が「プロファイルを
行う命令」であるか否かを調べる(S32)。そうであ
れば、プロファイルを作成する(S33)。このプロフ
ァイルが先に記憶されているプロファイルと一致するか
否かを調べる(S34)。不一致ならば、今回得られた
新たなプロファイルで先のプロファイルを上書きする
(S39)。最初にプロファイルを行う命令が出現した
ときには「先のプロファイル」は存在しないので、その
まま、今回のプロファイルを記憶する。
【0032】ステップS34で、今回のプロファイルが
先のプロファイルと一致したら、同じ飛び元から同じ飛
び先に飛んだと判定できるので、カウンタ(変数)をイ
ンクリメントする(S35)。このカウンタの初期値
は”0”としておく。このカウンタ値が予め定めた値
(所定値)に達するまでは、ステップS37,S38を
迂回してステップS44へ進む。
【0033】所定回数のループの繰り返しを待つのは、
経験的に、あるいはそのアプリケーションの内容に基づ
いて、ループの繰り返しが当該所定回数に達するような
場合はさらに繰り返しが続くであろう、かつ、繰り返し
が当該所定回数に達しない場合には途中で繰り返しが停
止または流れが変わる可能性が高いという想定に基づい
ている。したがって、カウンタの「所定値」は場合によ
って変わりうる。
【0034】カウンタ値が所定値に達したら、当該ルー
プ部分(飛び先から飛び元まで)のコンパイルを行う価
値があるか否かを判断する(S37)。この判断の内容
については、後述する。コンパイルを行う価値がないと
判断されれば、「プロファイルを行う命令」を元の普通
の命令(上記追加機能のない命令)に戻す(S38)。
【0035】コンパイルを行う価値があると判断されれ
ば、当該ループ部分のバイトコードをコンパイルしてネ
イティブコードを作成する(S41)。ついで、このル
ープの先頭のバイトコード命令を、ネイティブコードに
ジャンプする命令に書き換える(S42)。以後、この
ループ部分についてはCPUによりネイティブコードを
直接実行する。ネイティブコードの実行後は、ループ内
の最後のバイトコード命令の次のバイトコード命令に戻
る。したがって、そのループの最後にある「プロファイ
ルを行う命令」は迂回される。
【0036】なお、ループを抜けた後も、当該ネイティ
ブコードは保存されており、次に同じループに再度突入
したときに同じネイティブコードが利用される。このよ
うに一度作成したネイティブコードを保存していくと、
最終的にネイティブコードのメモリ容量が過大になりう
るので、ネイティブコードを保存するメモリの最大容量
を予め定めておき、それを超えるようなネイティブコー
ドの生成は行わないようにする。あるいは、ネイティブ
コード化された各ループの実行回数を記録管理してお
き、メモリの最大容量を超えるような場合には、最も実
行回数の低いループのネイティブコードを無効化するよ
うにしてもよい。
【0037】先のステップS32において、命令が「プ
ロファイルを行う命令」でない場合、「プロファイルを
無効にする命令」であれば(S43,Yes)、現在記
憶されているプロファイル情報を無効にする(S4
5)。
【0038】「プロファイルを無効にする命令」でなけ
れば、その命令を実行する(S44)。先のステップS
38,S45,S42の後にも、このステップS44に
進む。ステップS44の後は、最初のステップS31に
戻り、後続のバイトコード命令について上記処理を繰り
返す。
【0039】上記ステップS37のコンパイルの実行可
否を決めるための判断条件について説明する。このよう
な判断条件の例として次の2つを挙げる。 (a)ループ内部の大きさとネイティブコードの読み出
しのオーバーヘッドを比較する。ループ内部の大きさ
は、そのバイトコードの命令数で決まり、これに適当な
値を掛けることにより、実際にループ1回の実行に要す
る時間を概算できる。ネイティブコードの読み出しのオ
ーバーヘッドとは、ネイティブコードを実行するために
余分に実行しなければならないコードで消費される時間
に相当する。これは一定ではないが、一定と仮定する。
「オーバーヘッド+ネイティブコードをCPUで実行す
る時間」が「ループ内部の大きさ」より小さい場合、ネ
イティブコードを実行した方が時間短縮できるので、コ
ンパイルを行うべきと判断する。そうでなければ、バイ
トコードを仮想計算機で実行した方が速いか等しいの
で、コンパイルを行わないと判断する。なお、上記判断
条件では、「ネイティブコードをCPUで実行する時
間」は0とみなしている。 (b)ループ内部の大きさにジャンプした回数(ループ
を実行した回数)を掛けて、関数内部のコードの静的な
大きさと比較する。ここで「ループ内部の大きさ」は上
記の通りである。「ループ内部の大きさにジャンプした
回数を掛けることにより、ループ内部のバイトコード命
令を仮想計算機で実行した場合の消費時間が概算され
る。「関数内部のコードの静的な大きさ」は、「ループ
を1回だけ実行する時間+ループ以外の部分の実行時
間」を推定するものである。「ループ内部の大きさ」と
「関数内部のコードの静的な大きさ」は、その関数内で
当該ループの実行の占める時間の割合を表す。この割合
が大きければ、コンパイルの対象にすべきと判断する。
ある関数を実行する時間のうち、特定のループを実行す
る時間が大きければ、当該ループのコンパイルによる実
行速度向上の寄与分が大きくなるからである。
【0040】上記判断条件(a)(b)はそれぞれ単独
で採用しても、あるいは、AND条件で採用してもよ
い。また、ループのある程度の繰り返し回数が見込める
ならば、実行時間短縮の効果が見込めるので、両条件の
判断を行わない実施の形態も考えられる。すなわち、上
記ステップS37は削除し、カウンタ値が所定値に達し
たら直ちにネイティブコードへの変換を行うようにして
もよい。
【0041】以下、図5〜図8により、具体的なプログ
ラム例を挙げて説明する。
【0042】図5は、ベーシックブロックが1個の極め
て簡単なソースプログラムの例を示す。この例は、整数
i,a,bについて、a,bの初期値をそれぞれ0と1
000とし、i=0から初めて、aにa+bの値を代入
し、iをインクリメントする処理を繰り返し、iの値が
1000に達したら、このループを抜けるものである。
【0043】図6は、このソースプログラムをコンパイ
ルして得られたバイトコードの例を示す。この例では、
変数iはvar[8]、aはvar[9]、bはvar[10]に割り付け
られている。変数a,bの初期化のコードは省略してあ
る。図6の番地34から番地52の前までがループ部分
であり、これがネイティブコードへのコンパイルの対象
となる。
【0044】これらのバイトコード列のロード時に、番
地49に上の番地34に向かう命令があるため、図7に
示すように、この番地49の命令が前記「プロファイル
を行う命令」に書き換えられる。また、「プロファイル
を無効にする命令」は存在しない。
【0045】この図7のバイトコード列のプログラムを
仮想計算機で実行する際、番地34から番地52の前ま
でのループ部分を所定回数繰り返した時点でコンパイル
により当該部分がネイティブコードに変換され、図8に
示すように、ループの先頭の番地34の命令が「ネイテ
ィブコードに飛ぶための命令」に書き換えられる。ネイ
ティブコードの具体例については、使用するCPUによ
り異なり、また、容量も大きいので、ここでは特に例示
はしない。
【0046】図9は、本発明による他の実施の形態にお
けるプログラム実行時の処理フローを示す。先の実施の
形態では、バイトコードのロード時(図3)に、ループ
部分検出のための細工を行ったが、この実施の形態では
プログラム実行処理の中に図3の処理を含めたものであ
る。このようにすることにより、プログラム実行開始ま
でに要する時間を短縮することができる。これは、起動
が速いことが望まれる一方、実行時にかかる時間はそれ
ほど気にしない場合(例えば、インタラクティブな処理
の場合)に適している。これに対して、先の実施の形態
は、実行開始までに時間がかかっても実行時の処理時間
は極力短縮したいような場合(例えば、リアルタイム処
理の場合)に適している。
【0047】図9において、具体的には、全ステップS
51〜S71のうち、S54,S55,S58,S60
が、先の実施の形態におけるプログラムロード時の処理
ステップである。ステップS52〜S56は順不同であ
る。また、ステップS57のエラー処理では、あり得な
い命令の検知時にその命令をスキップするか、あるいは
仮想計算機を異常終了するものである。このステップは
図4の実行処理には示さなかったが、図4の処理におい
て含めてもよい。
【0048】以上、本発明の好適な実施の形態について
説明したが、本発明の要旨を逸脱することなく、種々の
変形・変更を行うことが可能である。例えば、上記では
Javaアプリケーションの処理について説明したが、
いわゆるアプレットと呼ばれるプログラムを処理するW
ebブラウザに内蔵された仮想計算機にも本発明は同様
に適用可能である。
【0049】
【発明の効果】本発明の仮想計算機の実行方法および装
置によれば、中間コードからネイティブコードへの変換
処理時間を軽減するとともに、比較的小さいメモリ容量
の装置においても実行速度を総体的に向上させることが
できる。
【図面の簡単な説明】
【図1】本発明の仮想計算機の実行方法の概念図であ
る。
【図2】本発明の方法が実行される装置のハードウェア
構成を示すブロック図である。
【図3】本発明の実施の形態において、バイトコードを
メモリ上にロードする際に行う処理のフローチャートで
ある。
【図4】本発明の実施の形態におけるプログラム実行時
の処理のフローチャートを示すフローチャートである。
【図5】ベーシックブロックが1個の極めて簡単なソー
スプログラムの例を示す図である。
【図6】図5ののソースプログラムをコンパイルして得
られたバイトコードの例を示す図である。
【図7】図6のバイトコード列の中の命令が「プロファ
イルを行う命令」に書き換えられた様子を示す図であ
る。
【図8】図7のバイトコード列中のループの先頭の命令
が「ネイティブコードに飛ぶための命令」に書き換えら
れた様子を示す図である。
【図9】本発明の他の実施の形態におけるプログラム実
行時の処理のフローチャートを示すフローチャートであ
る。
【図10】Java言語で書かれたプログラム(ソース
コード)はコンパイルされてバイトコードと呼ばれる中
間コードに変換される様子を示す概念図である。
【符号の説明】
10 CPU 11 メモリ 20 アプリケーションプログラム(ソースコード) 21 クラスファイル 101 仮想計算機(VM) 111 中間コード(バイトコード) 112 ネイティブコード

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】中間コードを実行する仮想計算機の実行方
    法であって、 中間コードの実行時に繰り返し実行されるループ部分
    を、該実行中に動的に検出するステップと、 当該ループ部分の中間コードをネイティブコードに変換
    するステップと、 前記中間コードの当該ループ部分については、前記ネイ
    ティブコードをCPUにより直接実行するステップと、 を備えることを特徴とする仮想計算機の実行方法。
  2. 【請求項2】前記中間コードをメモリ上にロードする際
    に、制御の流れが上に向かう命令を検出し、該命令の検
    出時に該命令を第1の特別の命令に書き換えるステップ
    と、 前記メモリ上の中間コードを実行する際、前記第1の特
    別の命令の実行時に制御の飛び先を確認し、再度同じ第
    1の特別の命令を実行したときに制御の飛び先が一致し
    たならば、当該飛び先から飛び元を前記ループ部分であ
    ると判断し、該ループ部分の中間コードをネイティブコ
    ードに変換するステップと、 を有することを特徴とする請求項1記載の仮想計算機の
    実行方法。
  3. 【請求項3】前記第1の特別の命令に書き換えるステッ
    プを、中間コードのロード時に代えて実行時に行うこと
    を特徴とする請求項2記載の仮想計算機の実行方法。
  4. 【請求項4】前記飛び先が一致した回数をカウントし、
    該カウント値が予め定めた値に達したとき、さらに、当
    該ループ部分のネイティブコードへの変換の可否を予め
    定めた判断基準で判断し、該判断基準が満足されたとき
    前記ネイティブコードへの変換を行うことを特徴とする
    請求項2または3記載の仮想計算機の実行方法。
  5. 【請求項5】前記判断基準が満足されなかったとき、当
    該第1の特別の命令を元の普通の命令に戻すことを特徴
    とする請求項4記載の仮想計算機の実行方法。
  6. 【請求項6】前記中間コードをメモリ上にロードする際
    に、前記「制御の流れが上に向かう命令」以外の制御の
    流れを変える命令を検出し、該命令の検出時に該命令を
    第2の特別の命令に書き換えるステップと、 前記メモリ上の中間コードを実行する際、前記第2の特
    別の命令の実行時に前記飛び先の情報を無効にするステ
    ップと、 を有することを特徴とする請求項2記載の仮想計算機の
    実行方法。
  7. 【請求項7】前記第2の特別の命令に書き換えるステッ
    プを、中間コードのロード時に代えて実行時に行うこと
    を特徴とする請求項2記載の仮想計算機の実行方法。
  8. 【請求項8】中間コードを実行する仮想計算機の実行装
    置であって、 ネイティブコードを実行するCPUと、 中間コードを記憶するメモリと、 該メモリ上に中間コードをロードする手段と、 該中間コードを解釈して実行する、前記CPU上の仮想
    計算機手段と、 該仮想計算機手段による前記中間コードの実行時に繰り
    返し実行されるループ部分を、該実行中に動的に検出
    し、当該ループ部分の中間コードをネイティブコードに
    変換する手段とを備え、 前記中間コードの当該ループ部分については、前記ネイ
    ティブコードを前記CPUにより直接実行することを特
    徴とする仮想計算機の実行装置。
JP23164999A 1999-08-18 1999-08-18 仮想計算機の実行方法および装置 Withdrawn JP2001056764A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP23164999A JP2001056764A (ja) 1999-08-18 1999-08-18 仮想計算機の実行方法および装置
PCT/JP2000/005540 WO2001013223A1 (fr) 1999-08-18 2000-08-18 Procede et appareil permettant de faire fonctionner un ordinateur virtuel
AU65957/00A AU6595700A (en) 1999-08-18 2000-08-18 Method and apparatus for operating virtual computer

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP23164999A JP2001056764A (ja) 1999-08-18 1999-08-18 仮想計算機の実行方法および装置

Publications (1)

Publication Number Publication Date
JP2001056764A true JP2001056764A (ja) 2001-02-27

Family

ID=16926815

Family Applications (1)

Application Number Title Priority Date Filing Date
JP23164999A Withdrawn JP2001056764A (ja) 1999-08-18 1999-08-18 仮想計算機の実行方法および装置

Country Status (3)

Country Link
JP (1) JP2001056764A (ja)
AU (1) AU6595700A (ja)
WO (1) WO2001013223A1 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040044655A (ko) * 2002-11-21 2004-05-31 한국전자통신연구원 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법
KR100506522B1 (ko) * 2003-02-24 2005-08-03 삼성전자주식회사 자바 프로그램에서 바이트 코드의 컴파일 시간 단축시스템 및 방법
JP2006126947A (ja) * 2004-10-26 2006-05-18 Hitachi Software Eng Co Ltd 情報処理装置、情報処理方法、およびプログラム
KR100763177B1 (ko) 2005-04-21 2007-10-04 삼성전자주식회사 자바 가상 머신의 명령어 수행 방법 및 그 장치
US8214812B2 (en) 2005-10-18 2012-07-03 Samsung Electronics Co., Ltd. Method of interpreting method bytecode and system operated by the same

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1313012A1 (en) 2001-11-15 2003-05-21 Texas Instruments France Java DSP acceleration by byte-code optimization

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5815720A (en) * 1996-03-15 1998-09-29 Institute For The Development Of Emerging Architectures, L.L.C. Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system
JP3538292B2 (ja) * 1997-02-28 2004-06-14 株式会社日立製作所 実行時プログラム翻訳方法
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040044655A (ko) * 2002-11-21 2004-05-31 한국전자통신연구원 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법
KR100506522B1 (ko) * 2003-02-24 2005-08-03 삼성전자주식회사 자바 프로그램에서 바이트 코드의 컴파일 시간 단축시스템 및 방법
JP2006126947A (ja) * 2004-10-26 2006-05-18 Hitachi Software Eng Co Ltd 情報処理装置、情報処理方法、およびプログラム
KR100763177B1 (ko) 2005-04-21 2007-10-04 삼성전자주식회사 자바 가상 머신의 명령어 수행 방법 및 그 장치
US7725879B2 (en) 2005-04-21 2010-05-25 Samsung Electronics Co., Ltd. Method and apparatus for executing instructions of java virtual machine and transforming bytecode
US8214812B2 (en) 2005-10-18 2012-07-03 Samsung Electronics Co., Ltd. Method of interpreting method bytecode and system operated by the same

Also Published As

Publication number Publication date
AU6595700A (en) 2001-03-13
WO2001013223A1 (fr) 2001-02-22

Similar Documents

Publication Publication Date Title
US6170083B1 (en) Method for performing dynamic optimization of computer code
JP3470948B2 (ja) 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US6484188B1 (en) Optimization of garbage collection code in the context of raw native interface function calls in the java programming language
US8769511B2 (en) Dynamic incremental compiler and method
US6078744A (en) Method and apparatus for improving compiler performance during subsequent compilations of a source program
US6453411B1 (en) System and method using a hardware embedded run-time optimizer
US7543285B2 (en) Method and system of adaptive dynamic compiler resolution
US7725883B1 (en) Program interpreter
US7698697B2 (en) Transforming code to expose glacial constants to a compiler
JP2003140909A (ja) Jitコンパイラを備えた仮想計算機
US6205578B1 (en) Interpreter for stack-based languages
US10216497B2 (en) Selective compiling method, device, and corresponding computer program product
JP5583514B2 (ja) バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
US7213237B2 (en) Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code
US9038039B2 (en) Apparatus and method for accelerating java translation
US6931638B2 (en) Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine
US7739674B2 (en) Method and apparatus for selectively optimizing interpreted language code
WO2002015003A2 (en) Method and apparatus for caching native code in a virtual machine interpreter
JP2001056764A (ja) 仮想計算機の実行方法および装置
JP2003186675A (ja) Javaコンピューティング環境におけるタイプチェック
US7698534B2 (en) Reordering application code to improve processing performance
JP2005284729A (ja) バイトコードをネイティブコードにコンパイルする仮想マシン
JP2002073345A (ja) 情報処理装置及び記録媒体
JP3296027B2 (ja) ロードストア型プロセッサの付加的レジスタを利用する際のコンパイル方法
JP2006164294A (ja) Jitコンパイラを備えた仮想計算機

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20061107