JP2003140909A - Jitコンパイラを備えた仮想計算機 - Google Patents
Jitコンパイラを備えた仮想計算機Info
- Publication number
- JP2003140909A JP2003140909A JP2001341577A JP2001341577A JP2003140909A JP 2003140909 A JP2003140909 A JP 2003140909A JP 2001341577 A JP2001341577 A JP 2001341577A JP 2001341577 A JP2001341577 A JP 2001341577A JP 2003140909 A JP2003140909 A JP 2003140909A
- Authority
- JP
- Japan
- Prior art keywords
- code
- processing
- compiled
- native code
- 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.)
- Granted
Links
- 230000006870 function Effects 0.000 claims abstract description 7
- 238000000034 method Methods 0.000 claims description 129
- 230000004043 responsiveness Effects 0.000 abstract description 8
- 238000004891 communication Methods 0.000 description 8
- 238000001514 detection method Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000013467 fragmentation Methods 0.000 description 4
- 238000006062 fragmentation reaction Methods 0.000 description 4
- 238000004904 shortening Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 2
- 238000005056 compaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- 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
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
に関し、限られたメモリ容量で処理の高速化を図り、応
答性能の向上を図る。 【解決手段】仮想計算機のバイトコードをソフトウェア
で解釈・実行する機能を有し、メモリ上に容量の制限さ
れたネイティブコードの格納領域としてコードキャッシ
ュを持ち、バイトコードを実行する際にバイトコードを
仮想計算機が直接実行できるネイティブコードにコンパ
イルしてコードキャッシュ3に格納した後、そのネイテ
ィブコードを実行するJITコンパイラを備え、バイト
コードのアドレスから、コンパイルされているか否かを
判断するための情報と、コンパイルされたネイティブコ
ードのアドレスを検索する検索テーブル2を備えた。
Description
通信機能を有する携帯情報端末(PDA)等の携帯型無
線通信機器に利用可能なJITコンパイラを備えた仮想
計算機に関する。
ワークを介してプログラムを実行するシステムが実用化
されている。特に、Java言語は、携帯電話機上で
「i−aPPli」としてプログラムを実行させること
のできるものとして急速に広まってきている。
トホームを選ばない仮想計算機のプログラム(以下「バ
イトコード」と記す)として配付されるため、携帯型無
線通信機器のプロセッサでは直接実行することができ
ず、エミュレーション等の技術により実行を行ってい
る。
バイトコードを携帯電話機、PDA等に利用し、メモリ
が少ない携帯型無線通信機器上で高速に動作させること
の可能なJITコンパイラを備えた仮想計算機に関す
る。
釈、実行するインタプリタの処理フローチャートであ
る。以下、図12に基づいて、インタプリタの処理を説
明する。なお、S1〜S6は各処理ステップを示す。
る手段として、ソフトウェアによりバイトコードを逐次
解釈、実行するインタプリタ方式が知られていた。しか
し、このインタプリタ方式では、バイトコードの命令を
1つずつ実行するため、処理速度が遅い。具体的には次
の通りである。
(S1)、フェッチした命令をデコードする(S2)。
そして、デコードした結果が命令の実行であれば、その
命令を実行し(S3、S4)、S1の処理へ移行する。
また、デコードした結果が分岐であれば分岐処理を行い
(S5)、S1の処理へ移行する。更に、デコードした
結果がメソッド呼び出しであれば(S6)、メソッド呼
び出しを行い(S6)、S1の処理へ移行する。以降、
同様にして、命令毎に処理を行う。
ンパイラの説明 図13は、インタプリタとJITコンパイラを組み合わ
せた時の処理フローチャートである。以下、図13に基
づき、インタプリタと、従来一般に使用されているJI
Tコンパイラ(携帯電話機では使用されておらず、パー
ソナルコンピュータ等で使用されている)を組み合わせ
た時の処理を説明する。なお、S11〜S20は各処理
ステップを示す。また、S11〜S16はインタプリタ
の処理であり、S17〜S20がJITコンパイラの処
理である。
解決する方法として、JIT(Just-IN-Compiler) コン
パイラを使う手法が一般に使用されていた。このJIT
コンパイラはバイトコードをネイティブコードにコンパ
イルする。これにより、アプリケーションは直接そのマ
シンのプロセッサで実行できるようになり、高速な実行
が可能になる。
ドしたクラス、又は実行を開始したメソッドという単位
でコンパイルを行う。すなわち、メソッドのバイトコー
ド全体をコンパイルする。また、コンパイルしたネイテ
ィブコードは、メモリ(プログラム上の格納領域)上に
格納され、再び実行を行う時は再利用され、1度目の実
行時には、コンパイルのオーバヘッドがあるが、2度目
からはこのオーバヘッド無しに高速に実行できる。具体
的には次のようになる。
(S11)、フェッチした命令をデコードする(S1
2)。そして、デコードした結果が実行であれば、その
命令を実行し(S13、S14)、S11の処理へ移行
する。また、デコードした結果が分岐であれば、分岐処
理を行い(S15)、S11の処理へ移行する。更に、
デコードした結果がメソッド呼び出しであれば、メソッ
ド呼び出しを行い(S16)、コンパイル済みか否かを
判断する(S17)。
ンパイルすべきか否かを判断し(S18)、コンパイル
すべきでなければ、S11の処理へ移行するが、コンパ
イルすべきであれば、メソッドで呼び出したコードをJ
ITコンパイラによりコンパイルしてネイティブコード
を生成し、ネイティブコードの格納領域に格納し(S1
9)、ネイティブコードを実行する(S20)。ネイテ
ィブコードの実行中、メソッド呼び出しがあれば、S1
6の処理へ移行し、メソッドの処理が終了すれば、S1
1へ移行する。また、S17の処理において、コンパイ
ル済みであれば、S20の処理へ移行する。以降、同様
にして処理を行う。
は、Javaで開発したソフトのバイナリ表現形式とし
て米サン・マイクロシステムズが定めたJava仮想マ
シン(仮想計算機)のマシン・コードのことを言う。ま
た、バイトコードをマシンが直接実行できるネイティブ
コードへ変換するソフトを「JIT(Just-in-time)コ
ンパイラ」と呼ぶ。
ジェクト指向プログラミングにおいて、オブジェクトの
実行する操作の方法を記述したプログラム(サブルーチ
ンと同じ意味)のことを言う。
のにおいては、次のような課題があった。
無線通信機器では使用できるメモリ容量が限られてお
り、コンパイルしたコードを全てメモリ上に格納するこ
とはできない。また、前記携帯型無線通信機器でのソフ
トウェアの実行は、ゲームなどの対話型のアプリケーシ
ョンが多く、応答性を高めるためには、コンパイルにあ
まり時間をかけることはできない。
たプロセッサでは処理能力が比較的低いため、大きなプ
ログラムをコンパイルすると、実行中のプログラムが一
瞬止まって見えることもある。また、一度しか実行され
ないようなバイトコードの場合、コンパイルする時間の
オーバーヘッドのため、インタプリタで実行するよりも
遅くなる。
し、限られたメモリ容量で処理の高速化を図り、応答性
能の向上を図ることを目的とする。
成するため、次のように構成した。
ウェアで解釈・実行する機能を有し、メモリ上に、容量
の制限されたネイティブコードの格納領域としてコード
キャッシュを持ち、前記バイトコードを実行する際に、
JITコンパイラによりバイトコードを仮想計算機が直
接実行できるネイティブコードにコンパイルして前記コ
ードキャッシュに格納した後、そのネイティブコードを
実行するJITコンパイラを備えた仮想計算機におい
て、前記バイトコードのアドレスから、コンパイルされ
ているか否かを判断するための情報と、コンパイルされ
たネイティブコードのアドレスを検索する検索テーブル
を備えていることを特徴とする。
記検索テーブル上、又は前記コードキャッシュ上に、命
令の実行回数を計数するための実行カウンタを設け、バ
イトコードを実行する際に、前記実行カウンタの値を調
べ、予め決めた特定回数より小さい場合はインタプリタ
で実行し、前記特定回数以上の場合は、JITコンパイ
ラによりバイトコードをコンパイルしてから実行する選
択処理手段を備えていることを特徴とする。
記検索テーブルに、1度目の実行時にバイトコードのア
ドレスだけ登録し、ネイティブコードのアドレスの登録
は特別な値、又は数字の0を登録にしておく検索テーブ
ル情報登録手段と、1度目はインタプリタで実行し、2
度目はJITコンパイルによりコンパイルして実行する
実行制御手段を備えていることを特徴とする。
ンパイル時間を短縮するために、コンパイルする範囲を
制限し、処理の途中であっても、バイトコードの特定の
命令を検出したら、そこまでをコンパイルして処理を中
断する命令を生成し、残りはコンパイルしないように処
理を制限する処理制限手段を備えていることを特徴とす
る。
記コードキャッシュに空きがなくなった時、コードキャ
ッシュの先頭から順にネイティブコードを破棄する第1
の破棄手段と、FILO方式で最も昔にコンパイルした
コードから順に破棄する第2の破棄手段を備えているこ
とを特徴とする。
ンパイルされているか否かを判断するための情報と、コ
ンパイルされたネイティブコードのアドレスを検索する
検索テーブルを備えている。
でコンパイルされているか否かを判断したり、コンパイ
ルされている場合に、該当するネイティブコードの格納
アドレスを検索することが容易になる。その結果、バイ
トコードをネイティブコードにコンパイルすることで、
アプリケーションプログラムの実行時間を速くすること
が可能になる。また、従来のJITコンパイラがネイテ
ィブコードを生成し格納するために使用するメモリが制
限され、少ないメモリでも処理が高速化できる。
イトコードを実行する際に、実行カウンタの値を調べ、
予め決めた特定回数より小さい場合はインタプリタで実
行し、前記特定回数以上の場合は、JITコンパイラに
よりバイトコードをコンパイルしてから実行する。
ため、一度しか実行はないようなバイトコードはコンパ
イルして実行するよりもインタプリタで実行する方が速
い。そこで、前記のように処理を行うことで、アプリケ
ーションプログラムの全体の実行速度を速くすることが
できる。
録手段は、検索テーブルに、1度目の実行時にバイトコ
ードのアドレスだけ登録し、ネイティブコードのアドレ
スの登録は特別な値、又は数字の0を登録しておく。ま
た、実行制御手段は、1度目はインタプリタで実行し、
2度目はJITコンパイルによりコンパイルして実行す
るように制御する。
ため、一度しか実行はないようなバイトコードはコンパ
イルして実行するよりもインタプリタで実行する方が速
い。そこで、前記のように処理を行うことで、アプリケ
ーションプログラムの全体の実行速度を速くすることが
できる。また、前記(2) と比較して、実行カウンタのた
めの領域が必要なく、メモリを節約できる。
ンパイル時間を短縮するために、コンパイルする範囲を
制限し、処理の途中であっても、バイトコードの特定の
命令を検出したら、そこまでをコンパイルして処理を中
断する命令を生成し、残りはコンパイルしないように処
理を制限する。
イルしていたので、全く実行しない部分もコンパイルし
ていた。これに対して本発明の前記(4) では、必ず実行
する部分だけをコンパイルするので、コンパイルに消費
する時間の無駄がなく高速である。
していたので、全く実行しない部分のネイティブコード
も生成していた。しかし、本発明の前記(4) では、必ず
実行する部分だけをコンパイルするので、生成するネイ
ティブコードに無駄がなく、メモリの消費が抑えられ
る。また、アプリケーションプログラムの応答性を向上
させることができる。すなわち、コンパイルしている最
中はアプリケーションプログラムの実行は停止するの
で、この停止している時間が短縮する。
コードキャッシュに空きがなくなった時、コードキャッ
シュの先頭から順にネイティブコードを破棄する。そし
て、第2の破棄手段は、FILO方式で最も昔にコンパ
イルしたコードから順に破棄する。
棄の方式が簡単なため、実現し易く、ネイティブコード
の断片化が起きない。
に基づいて詳細に説明する。なお、以下に説明する仮想
計算機は、プログラム上だけで実現される仮想的な計算
機であり、前記携帯型無線通信機器内のメモリに格納さ
れたプログラムを、内部のプロセッサ(CPU、又はM
PU)が実行することで実現される仮想マシンである。
表現された処理は、全て前記プログラム上で実行される
ものである。そのため、仮想計算機上のメモリ、コード
キャッシュ、検索テーブル等は、全て前記プログラム上
で実現されるものである。
釈・実行する機能を有し、メモリ上に、容量の制限され
たネイティブコードの格納領域としてコードキャッシュ
を持ち、バイトコードを実行する際に、JITコンパイ
ラによりバイトコードを仮想計算機が直接実行できるネ
イティブコードにコンパイルしてコードキャッシュに格
納した後、そのネイティブコードを実行するJITコン
パイラ(以下、単に「コンパイラ」とも記す)を備えた
仮想計算機に関するものであり、バイトコードのアドレ
スから、コンパイルされているか否かを判断するための
情報(後述する)と、コンパイルされたネイティブコー
ドのアドレスを検索する検索テーブルを備えている。
コードの格納領域に空きがなければ、既に格納済みのコ
ンパイルコードを破棄して前記格納領域に空き領域を作
り、検索テーブルを更新するものである。
の説明 図1は例1の処理フローチャート(その1)である。以
下、図1に基づいて、例1の処理(その1)を説明す
る。なお、S31〜S40は各処理ステップを示す。こ
の処理では、全てのバイトコードを対象としてコンパイ
ルされているかどうかをチェックする例であり、仮想計
算機上の処理である。
テーブル上のタグ(tag)情報を利用して(詳細は後
述する)コンパイル済みか否かを判断し(S31)、コ
ンパイル済みでなければ、コンパイルすべきか否かを判
断し(S32)、コンパイルすべきでないと判断した場
合には、バイトコード命令のフェッチを行い(S3
3)、フェッチされた命令のデコードを行う(S3
4)。
6)その命令を実行し、S31の処理へ移行する。ま
た、分岐であれば(S37)分岐処理を行い、S31の
処理へ移行する。更に、メソッド呼び出しであれば(S
38)、メソッド呼び出しを行い、S31の処理へ移行
する。
べきであると判断した場合には、部分的にコンパイル
し、ネイティブコードを生成してネイティブコード格納
領域へ格納し(S39)、ネイティブコードを実行し
(S40)、S31の処理へ移行する。また、S31の
処理で、コンパイル済みであれば、S40の処理へ移行
する。前記処理において、S31〜S38はインタプリ
タの処理であり、S39、S40がJITコンパイラに
よる処理である。
の説明 図2は例1の処理フローチャート(その2)である。以
下、図2に基づいて、例1の処理(その2)を説明す
る。なお、S41〜S50は各処理ステップを示す。
どの実行制御が途切れる地点で、コンパイルのチェック
を行う。一般のJITコンパイラとの違いとしては、コ
ンパイルをメソッド単位で行わず、以下に説明する例
5、例6、例7、例8等の条件で、コンパイルを中断す
ることが特徴である。
(S41)、命令デコードを行う(S42)。その結
果、実行であれば(S43、S44)、その命令を実行
し、S41の処理へ移行する。また、分岐であれば(S
45)、分岐処理を行い(S45)、メソッド呼び出し
であれば(S46)メソッド呼び出しを行う。
た場合、コンパイル済みか否かを判断し(S47)、コ
ンパイル済みでなければ、コンパイルすべきか否かを判
断する(S48)。その結果、コンパイルすべきでない
と判断した場合には、S41の処理へ移行する。
場合は、途中までコンパイルを行い、ネイティブコード
を生成しネイティブコード格納領域へ格納する(S4
9)。そして、ネイティブコードを実行し(S50)、
S47の処理、又はS46の処理へ移行する。
パイル済みか否かを調べて判断するために、検索テーブ
ルを使用するが、その検索テーブルの1例を図3に示
す。図3において、1はコンパレータ、2は検索テーブ
ル、3はコードキャッシュである。
と、ネイティブコードのアドレス(コードキャッシュ3
内のネイティブコード領域のアドレス)との対応情報が
登録できるようになっており、ネイティブコードのアド
レスからコードキャッシュ3のネイティブコード領域の
データが検索できるようになっている。
ドレス(上位Mビット+下位Nビットとする)の下位N
ビットを利用してタグ(tag)を検索することで、ネ
イティブコードのアドレスが検索できるようになってい
る。そして、バイトコードアドレスの上位Mビットをコ
ンパレータ1に入力すると共に、検索テーブルのタグ
(tag)情報をコンパレータ1に入力し、両者が一致
するか否かの比較を自動的に行うようになっている。
た場合、コンパレータ1から一致出力が出され、この一
致出力信号によりコンパイル済みと判断できるようにな
っている。
れているか否かを判断したり、コンパイルされている場
合に、該当するネイティブコードの格納アドレス(コー
ドキャッシュ3内のネイティブコード領域のアドレス)
を検索することが容易になる。
ドにコンパイルすることで、アプリケーションプログラ
ムの実行時間を速くすることが可能になる。また、従来
のJITコンパイラがネイティブコードを生成し、格納
するために使用するメモリが制限され、少ないメモリ容
量でも処理が高速化できる。
キャッシュ3上に命令の実行回数を計数する実行カウン
タを設け、仮想計算機のコードであるバイトコードを実
行する際に、実行カウンタの値が、予め決めた特定回数
より小さければインタプリタで実行し、前記特定回数よ
り大きく、頻繁に実行されるバイトコードはJITコン
パイラによりコンパイルして実行する例である。
に、検索テーブル2は、タグ(tag)と、実行カウン
タと、ネイティブコードのアドレスを対応させた情報が
格納されており、ネイティブコードのアドレスから、コ
ードキャッシュ3のネイティブコード領域のアドレスが
検索できるようになっている。
ドレス(上位Mビット+下位Nビットとする)の下位N
ビットを利用してタグ(tag)を検索することで、ネ
イティブコードアドレスが検索できるようになってい
る。そして、バイトコードアドレスの上位Mビットをコ
ンパレータ1に入力すると共に、検索テーブルのタグ
(tag)情報をコンパレータ1に入力し、両者が一致
する(hit)か否かの比較を行う。
た場合、コンパレータ1から一致出力が出され、この一
致出力信号によりコンパイル済みと判断する。このよう
な検索テーブルを利用し、バイトコードを実行する際に
実行カウンタの値が特定回数より小さければインタプリ
タ(従来の処理)で実行し、特定回数より大きく頻繁に
実行されるバイトコードはコンパイルして実行する。な
お、前記実行カウンタは、コードキャッシュ3に設けて
も良い。
る。以下、図5に基づいて、例2のコンパイルの選択処
理を説明する。なお、S61〜S75は各処理ステップ
を示す。
〜S67)と、JITコンパイラによるコンパイラの処
理(S71〜S75)とに分かれている。インタプリタ
の処理では、コンパイル済みか否かを判断し(S6
1)、コンパイル済みでなければ、テーブル登録済み
(図4の検索テーブル2のtagに登録されているか否
か)を判断する(S62)。その結果、テーブル登録済
みでなければ、タグ(tag)にアドレス登録を行い
(S63)、実行カウンタをクリアする(S64)。次
に、命令フェッチを行い(S65)、デコードを行って
(S66)、実行する(S67)。そして、S61の処
理に移行する。
判断した場合には、検索テーブル2の実行カウンタをU
P(+1)し(S71)、予め決めた特定回数より大き
いか否かを判断する(S72)。その結果、特定回数よ
り小さければ、S65に移行しインタプリタで実行し、
特定回数以上の場合は、S73に移行してJITコンパ
イラによりバイトコードをコンパイルしてネイティブコ
ードを生成し、コードキャッシュ3に登録する。また、
この時、検索テーブル2にも必要な情報(ネイティブコ
ードのアドレス)を登録する(S74)。
75)、S61へ移行する。また、S61の処理でコン
パイル済みであると判断した場合には、S75へ移行す
る。
いバイトコードはコンパイルして実行するよりも、イン
タプリタで実行する方が、全体の処理速度が上がる。
パイルの選択を行う例であり、例1の処理において、検
索テーブルに1度目の実行時にはバイトコードアドレス
だけを登録(検索テーブル2のtagに登録)し、ネイ
ティブコードのアドレスの登録は特別なコンパイルの処
理を行う関数(コンパイル又は処理の先頭アドレス)、
又は数字の0にしておき、1度目はインタプリタで実行
し、2度目はコンパイルして実行する例である。
る。以下、図6に基づいて、例3のコンパイルの選択処
理を説明する。なお、S81〜S94は各処理ステップ
を示す。
〜S86)と、コンパイラの処理(S91〜S94)と
に分かれている。インタプリタの処理では、先ず、Aか
ら始まりテーブル登録済み(検索テーブル2に登録され
ている)か否かを判断し(S81)、登録済みでなけれ
ば(1度目)、インタプリタによる処理を行う。この場
合、検索テーブル2のタグ(tag)にバイトコードア
ドレス(バイトコードのアドレスのみ)を登録する(S
82)。
トリBを登録して(S83)、命令フェッチを行い(S
84)、デコードを行う(S85)。そして、デコード
した命令を実行し(S86)、S81の処理へ移行す
る。
であると判断した場合(2度目)は、JITコンパイラ
による処理を行う。この場合、ネイティブコードアドレ
スへジャンプし(S91)、エントリBからJITコン
パイラによるコンパイルを行い(S92)、ネイティブ
コードアドレス登録を行う(S93)。そして、ネイテ
ィブコードを実行し(S94)、S81の処理へ移行す
る。
4に移行してネイティブコードを実行し(S94)、S
81の処理へ移行する。
いようなバイトコードはコンパイルして実行するよりも
インタプリタで実行する方が速い。そこで、前記のよう
に処理を行うことで、アプリケーションプログラムの全
体の実行速度を速くすることができる。また、前記例2
と比較して、実行カウンタのための領域が必要なく、メ
モリを節約できる。
ているかどうかだけの情報(タグの情報)を持ち、ネイ
ティブコードのアドレスはバイトコードのアドレスから
計算する例である。
成例 図7は例4の検索テーブルとコードキャッシュの構成例
である。この検索テーブル2には、タグ(tag)のみ
格納されている。この場合、バイトコードアドレスの下
位Nビットを利用して検索テーブル2をアクセスすると
共に、前記Nビットの下位アドレスを演算器4により整
数倍、例えば、8倍(×8)した値によりコードキャッ
シュ3のネイティブコード領域のアドレスへアクセスで
きるようになっている。
ドレス(上位Mビット+下位Nビットとする)の下位N
ビットを利用してタグ(tag)を検索できるようにな
っている。そして、バイトコードアドレスの上位Mビッ
トをコンパレータ1に入力すると共に、検索テーブルの
タグ(tag)情報をコンパレータ1に入力し、両者が
一致するか否かの比較を行う。前記比較の結果、両者が
一致した場合、コンパレータ1から一致出力が出される
が、この一致出力信号によりコンパイル済みと判断す
る。
ティブコードのメモリ上の位置が一意に決まるため、テ
ーブルからネイティブコードのアドレスを索引する必要
がなくなる。また、置換の際には、破棄すべきネイティ
ブコードを探す必要がなく単純に処理できる。
を向上)するために、コンパイルする範囲を制限する。
処理の途中であっても、バイトコードの特定の命令(分
岐命令、メソッド呼び出しなど)を検出したら、そこま
でをコンパイルし、処理を中断する命令(ネイティブコ
ードの分岐命令や割り込み命令)を生成し(ネイティブ
コードの最終コードの後に、分岐命令や割り込み命令を
生成し)、残りはコンパイルしない例である。
ル時間を短縮するために、コンパイルする範囲を制限
し、処理の途中であっても、バイトコードの特定の命令
を検出したら、そこまでをコンパイルして処理を中断す
る命令を生成し、残りはコンパイルしないように処理を
制限する処理制限手段を備えている。
えば、“IF条件THEN処理”のようなバイトコード
の列をコンパイルするとき、「条件」を処理する部分だ
けコンパイルを行い、「処理」の部分はコンパイルしな
い。
イルしていたので、全く実行しない部分もコンパイルし
ていた。これに対して例5では、必ず実行する部分だけ
をコンパイルするので、コンパイルに消費する時間の無
駄がなく高速である。
していたので、全く実行しない部分のネイティブコード
も生成していた。しかし、例5では、必ず実行する部分
だけをコンパイルするので、生成するネイティブコード
に無駄がなく、メモリの消費が抑えられる。また、アプ
リケーションプログラムの応答性を向上させることがで
きる。すなわち、コンパイルしている最中はアプリケー
ションプログラムの実行は停止するので、この停止して
いる時間が短縮する。
おいて、特定な命令の検出のほかに、バイトコードの量
でコンパイルを中断する。例えば、100命令コンパイ
ルしたところでコンパイルを中断する例である。なお、
例6は、例4と同様に、例1の処理におけるコンパイル
を中断させる条件を提供するものである。
するので、生成するネイティブコードに無駄がなく、メ
モリの消費が抑えられる。また、アプリケーションプロ
グラムの応答性を向上させることができる。すなわち、
コンパイルしている最中はアプリケーションプログラム
の実行は停止するので、この停止している時間が短縮す
る。
いて、特定な命令の検出のほかに、生成したネイティブ
コードの量でコンパイルを中断する。例えば、コンパイ
ルが128ワード分だけネイティブコードを生成した
ら、コンパイルを中断する。なお、例7は、例4と同様
に、例1の処理におけるコンパイルを中断させる条件を
提供するものである。
するので、生成するネイティブコードに無駄がなく、メ
モリの消費が抑えられる。また、アプリケーションプロ
グラムの応答性を向上させることができる。すなわち、
コンパイルしている最中はアプリケーションプログラム
の実行は停止するので、この停止している時間が短縮す
る。
令の検出のほかに、時間によってコンパイルを中断す
る。例えば、コンパイラがコンパイルの処理に100ミ
リセカンド消費したら、コンパイルを中断する。なお、
例8は、例4と同様に、例1の処理におけるコンパイル
を中断させる条件を提供するものである。
するので、生成するネイティブコードに無駄がなく、メ
モリの消費が抑えられる。また、アプリケーションプロ
グラムの応答性を向上させることができる。すなわち、
コンパイルしている最中はアプリケーションプログラム
の実行は停止するので、この停止している時間が短縮す
る。
において、コードキャッシュに空きがなくなったとき、
コードキャッシュの先頭から順にネイティブコードを破
棄する。この処理では、FILO(First In Last Out
)方式で最も昔にコンパイルしたコードから順に破棄
する。
る。この例では、初期値として、P1:命令生成ポイン
タはコードキャッシュの先頭、P2:解放ポインタはコ
ードキャッシュの末尾を指しておく。実行が進む(コン
パイルが何度も行われる)につれて、コードキャッシュ
3は小さなブロックに分けられ、ブロックの先頭にタグ
(tag)ポインタ(検索テーブルへのポインタ)と、
ネクスト(next)ポインタ(次のブロックを指すポ
インタ)が格納される。
格納する命令領域である。ネクスト(next)ポイン
タはポインタである必要はなく、ブロックの切れ目が判
れば良い。
トである。以下、図9に基づいて、例9の処理を説明す
る。なお、S101〜S111は各処理ステップを示
す。
ードキャッシュ3の置換処理を行う例である。先ず、生
成する領域のタグ(tag)ポインタに検索テーブル2
へのタグ(tag)ポインタを設定する(S101)。
設定する領域は図8のP1(命令生成ポインタ)によっ
て指示される。S102、S103、S104、S10
5がコンパイル処理のメインループであり、バイトコー
ドからネイティブコードを生成する処理である。
により、バイトコードからネイティブコードへの変換を
行う(S102)。変換後のネイティブコードをコード
キャッシュ3に格納する前に、命令生成ポインタと解放
ポインタの値を比較(命令生成ポインタ<解放ポインタ
の条件を満たしているか否かを比較)する(S103)
ことで、有効なコードを上書きしてしまわないかチェッ
クする。
タより小さければ、全て解放済みの領域なので、コード
キャッシュ3にネイティブコードを生成して書き込む
(S104)。この時、命令生成ポインタを進める。次
に、コンパイル終了条件を満たしたか否かを判断する
(S105)。
ければ、S102の処理へ移行し、コンパイル処理を継
続する。また、コンパイル終了条件を満たしたら、生成
したネイティブコードを1つのブロックとして構成す
る。この場合、生成した領域のネクストポインタに、命
令生成ポインタの値を設定する(S106)。
していない場合、すなわち、命令生成ポインタが解放ポ
インタと等しいか、又は大きい場合、有効なブロックを
解放する必要がある。そこで、解放ポインタがコードキ
ャッシュの最後を指している(解放ポインタ<コードキ
ャッシュの末尾の条件を満たしている)か否かをチェッ
クする(S107)。
ュの最後を指している場合は、解放ポインタをコードキ
ャッシュ3の先頭に設定し(S108)、命令生成ポイ
ンタをコードキャッシュ3の先頭のブロックの命令領域
に設定する(S109)。この処理により、コードキャ
ッシュ3の先頭に戻ってブロックの解放を行う。
ポインタから検索テーブル2のタグ(tag)をクリア
する(S110)。そして、前記S110の処理によ
り、検索テーブルのタグ(tag)が無効化され、解放
ポインタが示すブロックが実際に解放される。次に、解
放ポインタを次のポインタ(nextポインタ)に設定
して(S111)、S104の処理へ移行する。この処
理で、解放ポインタが次のブロックを指すようになる。
ことによって、キャッシュブロックのサイズを可変長に
でき、メモリを有効に活用することが可能になる。この
ポインタがない場合でも、検索テーブル全体を調べてキ
ャッシュを無効化することができるが、検索テーブル全
体を調べるのは処理量が多く、コンパイルに時間を浪費
するが、例9の処理により、キャッシュの無効化を高速
に行うことができる。
ある。例10は、コードキャッシュの置換を行う例であ
り、コードキャッシュ3に空きがなくなったとき、検索
テーブル2の実行カウンタを値の小さいものをスキャン
し、実行カウンタの値の小さなものから順に破棄する。
実行カウンタはコンパイル直後は適当な大きな値を設定
しておき、実行する度に実行したコードに対応するカウ
ンタを増加するようにし、置換が必要となったときに、
全体のカウンタを減少するようにする。
11に基づいて例10の処理を説明する。なお、S12
1〜S136は各処理ステップを示す。また、S121
〜S131の処理は、図5に示した例2のS61〜S7
5の処理と同じである。
か否かを判断し(S121)、コンパイル済みでなけれ
ば、テーブル登録済み(図4の検索テーブル2のtag
に登録されているか否か)を判断する(S122)。そ
の結果、テーブル登録済みでなければ、タグ(tag)
にアドレス登録を行い(S123)、実行カウンタをク
リアする(S124)。
デコードを行って(S126)、前記処理と同様にして
命令を実行する(S127)。そして、S121の処理
に移行する。
済みであると判断した場合には、検索テーブル2の実行
カウンタをUP(+1)し(S129)、予め決めた特
定回数より大きいか否かを判断する(S130)。その
結果、特定回数より小さければ、S125に移行しイン
タプリタで実行し、特定回数以上の場合は、JITコン
パイラによりバイトコードをコンパイルしてネイティブ
コードを生成し(S131)、生成したネイティブコー
ドをコードキャッシュ3に登録する(S132)。
ンタを設定する。次に、前記S132の処理で登録した
ネイティブコードを実行し(S133)、S121の処
理へ移行する。また、S121の処理で、コンパイル済
みであると判断した場合は、検索テーブル2の実行カウ
ンタをUP(+1)して(S128)、S133の処理
へ移行する。
ティブコードを生成した場合、コードキャッシュ3に空
きがあるか否かを判断し(S134)、空きがあれば、
S131の処理へ戻る。しかし、コードキャッシュ3に
空きがなければ、実行カウンタ全体をスキャンし、個々
の実行カウンタを減少させる(S135)。そして、実
行回数が少ないエントリを破棄して、コードキャッシュ
3に空きを作成し(S136)、S131の処理に戻
る。
る。しかし、空き領域が断片化し、ネイティブコード上
で断片化した箇所への無駄な分岐命令が必要となる。
あり、例10において、コードキャッシュ3の空き領域
の断片化が起きる。この時に、ネイティブコードのかた
まりを移動(リロケーション)することで、コンパイラ
が一度に生成するコードを一塊にまとめる。
入する必要がなくなる。実行する命令列がコードキャッ
シュ上に分断されることがなくなり、一塊となるため、
命令キャッシュが効率的に使われ、性能が向上する。
り、例5において、コンパイルした全てのバイトコード
の命令を検索テーブルに登録せず、コンパイルした命令
シーケンスの先頭だけ検索テーブルに登録する。
した全てのバイトコード命令のアドレスを登録すると、
検索テーブル2を上書きする機会が増えるため、コンパ
イル済みにもかかわらず、検索ミスする率が大きくな
り、無駄なコンパイルを行う。これを防ぐため、コンパ
イルした命令シーケンスの先頭だけを登録する。
フトウェアで解釈・実行する機能を有し、メモリ上に、
容量の制限されたネイティブコードの格納領域としてコ
ードキャッシュを持ち、前記バイトコードを実行する際
に、JITコンパイラによりバイトコードを仮想計算機
が直接実行できるネイティブコードにコンパイルして前
記コードキャッシュに格納した後、そのネイティブコー
ドを実行するJITコンパイラを備えた仮想計算機にお
いて、前記バイトコードのアドレスから、コンパイルさ
れているか否かを判断するための情報と、コンパイルさ
れたネイティブコードのアドレスを検索する検索テーブ
ルを備えていることを特徴とするJITコンパイラを備
えた仮想計算機。
コードキャッシュ上に、命令の実行回数を計数するため
の実行カウンタを設け、前記バイトコードを実行する際
に、実行カウンタの値を調べ、予め決めた特定回数より
小さい場合はインタプリタで実行し、前記特定回数以上
の場合は、JITコンパイラによりバイトコードをコン
パイルしてから実行する選択処理手段を備えていること
を特徴とする(付記1)記載のJITコンパイラを備え
た仮想計算機。
実行時にバイトコードのアドレスだけ登録し、ネイティ
ブコードのアドレスの登録は特別な値、又は数字の0に
しておく検索テーブル情報登録手段と、1度目はインタ
プリタで実行し、2度目はJITコンパイルによりコン
パイルして実行する実行制御手段を備えていることを特
徴とする(付記1)記載のJITコンパイラを備えた仮
想計算機。
ルされているかどうかを判断するだけの情報を持ち、ネ
イティブコードのアドレスは、バイトコードのアドレス
から計算して求める演算手段を備えていることを特徴と
する(付記1)記載の仮想計算機。
に、コンパイルする範囲を制限し、処理の途中であって
も、バイトコードの特定の命令を検出したら、そこまで
をコンパイルし、処理を中断する命令を生成し、残りは
コンパイルしないように処理を制限する処理制限手段を
備えていることを特徴とする(付記1)記載のJITコ
ンパイラを備えた仮想計算機。
検出の他に、バイトコードの量でコンパイルを中断する
ことを特徴とする(付記5)記載の仮想計算機。
検出の他に、生成したネイティブコードの量でコンパイ
ルを中断することを特徴とする(付記5)記載の仮想計
算機。
検出の他に、時間によってコンパイルを中断することを
特徴とする(付記5)記載の仮想計算機。
なくなった時、コードキャッシュの先頭から順にネイテ
ィブコードを破棄する第1の破棄手段と、FILO方式
で最も昔にコンパイルしたコードから順に破棄する第2
の破棄手段を備えていることを特徴とする(付記1)記
載のJITコンパイラを備えた仮想計算機。
のような効果がある。
レスから、コンパイルされているか否かを判断するため
の情報と、コンパイルされたネイティブコードのアドレ
スを検索する検索テーブルを備えている。
でコンパイルされているか否かを判断したり、コンパイ
ルされている場合に、該当するネイティブコードの格納
アドレスを検索することが容易になる。その結果、バイ
トコードをネイティブコードにコンパイルすることで、
アプリケーションプログラムの実行時間を速くすること
が可能になる。また、従来のJITコンパイラがネイテ
ィブコードを生成し、格納するために使用するメモリが
制限され、少ないメモリでも処理が高速化できる。
トコードを実行する際に、実行カウンタの値を調べ、予
め決めた特定回数より小さい場合はインタプリタで実行
し、前記特定回数以上の場合は、JITコンパイラによ
りバイトコードをコンパイルしてから実行する。
ため、一度しか実行はないようなバイトコードはコンパ
イルして実行するよりもインタプリタで実行する方が速
い。そこで、前記のように処理を行うことで、アプリケ
ーションプログラムの全体の実行速度を速くすることが
できる。
録手段は、検索テーブルに、1度目の実行時にバイトコ
ードのアドレスだけ登録し、ネイティブコードのアドレ
スの登録は特別な値、又は数字の0を登録にしておく。
また、実行制御手段は、1度目はインタプリタで実行
し、2度目はJITコンパイルによりコンパイルして実
行するように制御する。
ため、一度しか実行しないようなバイトコードはコンパ
イルして実行するよりもインタプリタで実行する方が速
い。そこで、前記のように処理を行うことで、アプリケ
ーションプログラムの全体の実行速度を速くすることが
できる。また、前記(2) と比較して、実行カウンタのた
めの領域が必要なく、メモリを節約できる。
ンパイル時間を短縮するために、コンパイルする範囲を
制限し、処理の途中であっても、バイトコードの特定の
命令を検出したら、そこまでをコンパイルして処理を中
断する命令を生成し、残りはコンパイルしないように処
理を制限する。
イルしていたので、全く実行しない部分もコンパイルし
ていた。これに対して請求項4では、必ず実行する部分
だけをコンパイルするので、コンパイルに消費する時間
の無駄がなく高速である。
していたので、全く実行しない部分のネイティブコード
も生成していた。しかし、請求項4では、必ず実行する
部分だけをコンパイルするので、生成するネイティブコ
ードに無駄がなく、メモリの消費が抑えられる。また、
アプリケーションプログラムの応答性を向上させること
ができる。すなわち、コンパイルしている最中はアプリ
ケーションプログラムの実行は停止するので、この停止
している時間が短縮する。
コードキャッシュに空きがなくなった時、コードキャッ
シュの先頭から順にネイティブコードを破棄する。そし
て、第2の破棄手段は、FILO方式で最も昔にコンパ
イルしたコードから順に破棄する。このようにすれば、
ネイティブコードの破棄の方式が簡単なため、実現し易
く、ネイティブコードの断片化が起きない。
チャート(その1)である。
チャート(その2)である。
ル例である。
ル例である。
選択処理フローチャートである。
選択処理フローチャートである。
ルとコードキャッシュの構成例である。
ッシュの置換処理説明図である。
ッシュの置換処理フローチャートである。
キャッシュの置換処理説明図である。
ローチャートである。
ある。
み合わせた時の処理フローチャートである。
Claims (5)
- 【請求項1】仮想計算機のバイトコードをソフトウェア
で解釈・実行する機能を有し、メモリ上に、容量の制限
されたネイティブコードの格納領域としてコードキャッ
シュを持ち、 前記バイトコードを実行する際に、JITコンパイラに
よりバイトコードを仮想計算機が直接実行できるネイテ
ィブコードにコンパイルして前記コードキャッシュに格
納した後、そのネイティブコードを実行するJITコン
パイラを備えた仮想計算機において、 前記バイトコードのアドレスから、コンパイルされてい
るか否かを判断するための情報と、コンパイルされたネ
イティブコードのアドレスを検索する検索テーブルを備
えていることを特徴とするJITコンパイラを備えた仮
想計算機。 - 【請求項2】前記検索テーブル上、又は前記コードキャ
ッシュ上に、命令の実行回数を計数するための実行カウ
ンタを設け、 バイトコードを実行する際に、前記実行カウンタの値を
調べ、予め決めた特定回数より小さい場合はインタプリ
タで実行し、 前記特定回数以上の場合は、JITコンパイラによりバ
イトコードをコンパイルしてから実行する選択処理手段
を備えていることを特徴とする請求項1記載のJITコ
ンパイラを備えた仮想計算機。 - 【請求項3】前記検索テーブルに、1度目の実行時にバ
イトコードのアドレスだけ登録し、ネイティブコードの
アドレスの登録は特別な値、又は数字の0を登録にして
おく検索テーブル情報登録手段と、 1度目はインタプリタで実行し、2度目はJITコンパ
イルによりコンパイルして実行する実行制御手段を備え
ていることを特徴とする請求項1記載のJITコンパイ
ラを備えた仮想計算機。 - 【請求項4】コンパイル時間を短縮するために、コンパ
イルする範囲を制限し、処理の途中であっても、バイト
コードの特定の命令を検出したら、そこまでをコンパイ
ルして処理を中断する命令を生成し、残りはコンパイル
しないように処理を制限する処理制限手段を備えている
ことを特徴とする請求項1記載のJITコンパイラを備
えた仮想計算機。 - 【請求項5】前記コードキャッシュに空きがなくなった
時、コードキャッシュの先頭から順にネイティブコード
を破棄する第1の破棄手段と、 FILO方式で最も昔にコンパイルしたコードから順に
破棄する第2の破棄手段を備えていることを特徴とする
請求項1記載のJITコンパイラを備えた仮想計算機。
Priority Applications (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001341577A JP3808755B2 (ja) | 2001-11-07 | 2001-11-07 | Jitコンパイラを備えた仮想計算機 |
KR10-2004-7006877A KR20040063923A (ko) | 2001-11-07 | 2002-11-07 | Jit 컴파일러를 구비한 가상 계산기, 그 동작 방법 및그 가상 계산기를 구비한 단말 장치 |
EP02775508A EP1445695A4 (en) | 2001-11-07 | 2002-11-07 | VIRTUAL COMPUTER EQUIPPED WITH A JIT COMPILER, CORRESPONDING METHOD OF OPERATION, AND TERMINAL DEVICE COMPRISING THE VIRTUAL COMPUTER |
CNB028267303A CN100354826C (zh) | 2001-11-07 | 2002-11-07 | 配有jit编译器的虚拟计算机及其方法 |
PCT/JP2002/011599 WO2003040918A1 (fr) | 2001-11-07 | 2002-11-07 | Ordinateur virtuel equipe d'un compilateur jit, procede de fonctionnement correspondant, et dispositif terminal comprenant cet ordinateur virtuel |
US10/839,310 US20040210865A1 (en) | 2001-11-07 | 2004-05-06 | Virtual computer comprising JIT compiler, method of the computer, and terminal apparatus comprising the computer |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001341577A JP3808755B2 (ja) | 2001-11-07 | 2001-11-07 | Jitコンパイラを備えた仮想計算機 |
Related Child Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005371745A Division JP2006134351A (ja) | 2005-12-26 | 2005-12-26 | Jitコンパイラを備えた仮想計算機 |
JP2005371746A Division JP2006164294A (ja) | 2005-12-26 | 2005-12-26 | Jitコンパイラを備えた仮想計算機 |
JP2006054249A Division JP2006202317A (ja) | 2006-03-01 | 2006-03-01 | Jitコンパイラを備えた仮想計算機 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003140909A true JP2003140909A (ja) | 2003-05-16 |
JP3808755B2 JP3808755B2 (ja) | 2006-08-16 |
Family
ID=19155584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001341577A Expired - Fee Related JP3808755B2 (ja) | 2001-11-07 | 2001-11-07 | Jitコンパイラを備えた仮想計算機 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20040210865A1 (ja) |
EP (1) | EP1445695A4 (ja) |
JP (1) | JP3808755B2 (ja) |
KR (1) | KR20040063923A (ja) |
CN (1) | CN100354826C (ja) |
WO (1) | WO2003040918A1 (ja) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005202614A (ja) * | 2004-01-15 | 2005-07-28 | Hitachi Ltd | 動的変換方式のエミュレータ向けメモリ管理方法 |
JP2005251208A (ja) * | 2004-03-05 | 2005-09-15 | Sun Microsyst Inc | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 |
JP2006126947A (ja) * | 2004-10-26 | 2006-05-18 | Hitachi Software Eng Co Ltd | 情報処理装置、情報処理方法、およびプログラム |
JP2008299833A (ja) * | 2007-06-04 | 2008-12-11 | Samsung Electronics Co Ltd | 作業遂行速度を向上させる装置および方法 |
JP2010140233A (ja) * | 2008-12-11 | 2010-06-24 | Nec Computertechno Ltd | エミュレーションシステム及びエミュレーション方法 |
JP2013061810A (ja) * | 2011-09-13 | 2013-04-04 | Fujitsu Ltd | 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム |
US8612948B2 (en) | 2010-04-05 | 2013-12-17 | International Business Machines Corporation | Dynamic compiler program, dynamic compiling method and dynamic compiling device |
US8938728B2 (en) | 2010-04-05 | 2015-01-20 | International Business Machines Corporation | Dynamic compiler program, dynamic compiling method and dynamic compiling device |
JP2016018469A (ja) * | 2014-07-10 | 2016-02-01 | 富士通株式会社 | シミュレーション方法、シミュレーションプログラム |
US9336052B2 (en) | 2011-02-01 | 2016-05-10 | Fujitsu Limited | Program executing method |
JP2016515735A (ja) * | 2013-03-29 | 2016-05-30 | インテル・コーポレーション | ランタイムにおけるソフトウェアパイプライン |
JP7467802B2 (ja) | 2019-09-27 | 2024-04-16 | インテル・コーポレーション | Webブラウザ環境内で機械学習モデルを処理するための方法および装置 |
JP7483950B2 (ja) | 2020-06-22 | 2024-05-15 | アップル インコーポレイテッド | バイナリ変換を実行するためのシステム及び方法 |
Families Citing this family (44)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040044988A1 (en) * | 2002-08-29 | 2004-03-04 | Schene Christopher Robin | Generation of compiled code for simulator speed up |
GB0410151D0 (en) * | 2004-05-07 | 2004-06-09 | Zeus Technology Ltd | Load balancing & traffic management |
DE102004056006B3 (de) * | 2004-11-19 | 2006-03-23 | Fujitsu Siemens Computers Gmbh | Verfahren zur Emulation eines für einen Ursprungsprozessor in einem Ursprungscode erstellten Programms auf einem Zielprozessor |
US7707547B2 (en) * | 2005-03-11 | 2010-04-27 | Aptana, Inc. | System and method for creating target byte code |
US7844958B2 (en) * | 2005-03-11 | 2010-11-30 | Aptana, Inc. | System and method for creating target byte code |
DE102005015746A1 (de) * | 2005-04-06 | 2006-10-12 | Man Roland Druckmaschinen Ag | Druckmaschinensimulator |
KR100763199B1 (ko) * | 2006-02-20 | 2007-10-04 | 삼성전자주식회사 | 가상 머신 환경에서의 메소드 호출 방법 및 상기 방법을수행하는 가상 머신이 탑재된 시스템 |
US7784041B2 (en) * | 2006-03-30 | 2010-08-24 | Oracle America, Inc. | Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation |
US7963839B2 (en) * | 2006-09-19 | 2011-06-21 | Mudalla Technology, Inc. | Regulated gaming exchange |
US8341609B2 (en) * | 2007-01-26 | 2012-12-25 | Oracle International Corporation | Code generation in the presence of paged memory |
US8037460B2 (en) * | 2007-01-26 | 2011-10-11 | Oracle International Corporation | Code persistence and dependency management for dynamic compilation in a database management system |
US8413125B2 (en) * | 2007-01-26 | 2013-04-02 | Oracle International Corporation | Asynchronous dynamic compilation based on multi-session profiling to produce shared native code |
KR101407629B1 (ko) * | 2007-06-04 | 2014-06-13 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
US8914774B1 (en) | 2007-11-15 | 2014-12-16 | Appcelerator, Inc. | System and method for tagging code to determine where the code runs |
US8954989B1 (en) | 2007-11-19 | 2015-02-10 | Appcelerator, Inc. | Flexible, event-driven JavaScript server architecture |
US8260845B1 (en) | 2007-11-21 | 2012-09-04 | Appcelerator, Inc. | System and method for auto-generating JavaScript proxies and meta-proxies |
US8719451B1 (en) | 2007-11-23 | 2014-05-06 | Appcelerator, Inc. | System and method for on-the-fly, post-processing document object model manipulation |
US8566807B1 (en) | 2007-11-23 | 2013-10-22 | Appcelerator, Inc. | System and method for accessibility of document object model and JavaScript by other platforms |
US8819539B1 (en) | 2007-12-03 | 2014-08-26 | Appcelerator, Inc. | On-the-fly rewriting of uniform resource locators in a web-page |
US8756579B1 (en) | 2007-12-03 | 2014-06-17 | Appcelerator, Inc. | Client-side and server-side unified validation |
US8806431B1 (en) | 2007-12-03 | 2014-08-12 | Appecelerator, Inc. | Aspect oriented programming |
US8527860B1 (en) | 2007-12-04 | 2013-09-03 | Appcelerator, Inc. | System and method for exposing the dynamic web server-side |
US8938491B1 (en) | 2007-12-04 | 2015-01-20 | Appcelerator, Inc. | System and method for secure binding of client calls and server functions |
US8285813B1 (en) | 2007-12-05 | 2012-10-09 | Appcelerator, Inc. | System and method for emulating different user agents on a server |
US8335982B1 (en) | 2007-12-05 | 2012-12-18 | Appcelerator, Inc. | System and method for binding a document object model through JavaScript callbacks |
US8639743B1 (en) | 2007-12-05 | 2014-01-28 | Appcelerator, Inc. | System and method for on-the-fly rewriting of JavaScript |
US8516459B2 (en) * | 2008-03-25 | 2013-08-20 | Intel Corporation | XSLT-specific XJIT compiler |
US8490077B2 (en) * | 2008-05-15 | 2013-07-16 | Microsoft Corporation | Runtime versioning and distribution of dynamic web-elements |
US8291079B1 (en) | 2008-06-04 | 2012-10-16 | Appcelerator, Inc. | System and method for developing, deploying, managing and monitoring a web application in a single environment |
US8880678B1 (en) | 2008-06-05 | 2014-11-04 | Appcelerator, Inc. | System and method for managing and monitoring a web application using multiple cloud providers |
GB2475648A (en) | 2008-08-05 | 2011-05-25 | Wms Gaming Inc | Mash-up wagering game creation |
US7596620B1 (en) | 2008-11-04 | 2009-09-29 | Aptana, Inc. | System and method for developing, deploying, managing and monitoring a web application in a single environment |
US9250938B2 (en) * | 2008-10-15 | 2016-02-02 | Microsoft Technology Licensing, Llc | Caching runtime generated code |
KR100930831B1 (ko) * | 2009-03-24 | 2009-12-10 | 주식회사 에이디칩스 | 바이트코드 변환 가속 장치 및 그 방법 |
CN101957770B (zh) * | 2010-10-09 | 2015-09-02 | 中兴通讯股份有限公司 | 一种移动设备上应用程序的启动方法及装置 |
CN103092618A (zh) * | 2013-01-15 | 2013-05-08 | 东南大学 | 基于软件Cache的Dalvik虚拟机JIT加速方法 |
US9003382B2 (en) * | 2013-02-18 | 2015-04-07 | Red Hat, Inc. | Efficient just-in-time compilation |
CN103984531B (zh) * | 2014-05-30 | 2016-09-28 | 龙芯中科技术有限公司 | 超长分支跳转处理方法及装置 |
US9696973B1 (en) * | 2016-02-24 | 2017-07-04 | Semmle Limited | Compilation cache with imports scanner |
US9934051B1 (en) * | 2017-04-17 | 2018-04-03 | Futurewei Technologies, Inc. | Adaptive code generation with a cost model for JIT compiled execution in a database system |
US10783082B2 (en) | 2019-08-30 | 2020-09-22 | Alibaba Group Holding Limited | Deploying a smart contract |
US10802854B2 (en) * | 2019-08-30 | 2020-10-13 | Alibaba Group Holding Limited | Method and apparatus for interpreting bytecode instruction stream |
CN112925523B (zh) * | 2021-03-02 | 2024-06-21 | 京东科技控股股份有限公司 | 对象比较方法、装置、设备及计算机可读介质 |
US11972240B2 (en) * | 2021-12-03 | 2024-04-30 | Samsung Electronics Co., Ltd. | Systems and methods for automapping source code to machine code |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5768593A (en) * | 1996-03-22 | 1998-06-16 | Connectix Corporation | Dynamic cross-compilation system and method |
JPH11272476A (ja) * | 1997-10-06 | 1999-10-08 | Sun Microsyst Inc | バイトコードされたプログラムを動的に最適化するための方法及び装置 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5560013A (en) * | 1994-12-06 | 1996-09-24 | International Business Machines Corporation | Method of using a target processor to execute programs of a source architecture that uses multiple address spaces |
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
JPH09282174A (ja) * | 1996-04-10 | 1997-10-31 | Hitachi Ltd | プログラム実行方法 |
JPH1097431A (ja) * | 1996-07-31 | 1998-04-14 | Fujitsu Ltd | シミュレーション装置及びシミュレーション方法並びにコンピュータ読取可能な記録媒体 |
JP3632344B2 (ja) * | 1997-01-06 | 2005-03-23 | 日産自動車株式会社 | 半導体装置 |
US5933635A (en) * | 1997-10-06 | 1999-08-03 | Sun Microsystems, Inc. | Method and apparatus for dynamically deoptimizing compiled activations |
US6170083B1 (en) * | 1997-11-12 | 2001-01-02 | Intel Corporation | Method for performing dynamic optimization of computer code |
US6760907B2 (en) * | 1998-06-30 | 2004-07-06 | Sun Microsystems, Inc. | Code generation for a bytecode compiler |
US6324687B1 (en) * | 1998-12-03 | 2001-11-27 | International Business Machines Corporation | Method and apparatus to selectively control processing of a method in a java virtual machine |
JP2000215181A (ja) * | 1999-01-21 | 2000-08-04 | Fujitsu Ltd | ネットワ―クコンピュ―タシステム及び代理コンパイルサ―バ装置 |
JP3470948B2 (ja) * | 1999-01-28 | 2003-11-25 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ |
US6295642B1 (en) * | 1999-04-29 | 2001-09-25 | International Business Machines Corporation | Method and apparatus for partial just in time compiling in a data processing system |
GB9921720D0 (en) * | 1999-09-14 | 1999-11-17 | Tao Group Ltd | Loading object-oriented computer programs |
US6880152B1 (en) * | 1999-10-13 | 2005-04-12 | Transmeta Corporation | Method of determining a mode of code generation |
US7290254B2 (en) * | 2003-03-25 | 2007-10-30 | Intel Corporation | Combining compilation and instruction set translation |
US7257657B2 (en) * | 2003-11-06 | 2007-08-14 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses for specific types of instructions |
-
2001
- 2001-11-07 JP JP2001341577A patent/JP3808755B2/ja not_active Expired - Fee Related
-
2002
- 2002-11-07 KR KR10-2004-7006877A patent/KR20040063923A/ko not_active Application Discontinuation
- 2002-11-07 EP EP02775508A patent/EP1445695A4/en not_active Withdrawn
- 2002-11-07 CN CNB028267303A patent/CN100354826C/zh not_active Expired - Fee Related
- 2002-11-07 WO PCT/JP2002/011599 patent/WO2003040918A1/ja active Application Filing
-
2004
- 2004-05-06 US US10/839,310 patent/US20040210865A1/en not_active Abandoned
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5768593A (en) * | 1996-03-22 | 1998-06-16 | Connectix Corporation | Dynamic cross-compilation system and method |
JPH11272476A (ja) * | 1997-10-06 | 1999-10-08 | Sun Microsyst Inc | バイトコードされたプログラムを動的に最適化するための方法及び装置 |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005202614A (ja) * | 2004-01-15 | 2005-07-28 | Hitachi Ltd | 動的変換方式のエミュレータ向けメモリ管理方法 |
JP4701611B2 (ja) * | 2004-01-15 | 2011-06-15 | 株式会社日立製作所 | 動的変換方式のエミュレータ向けメモリ管理方法 |
JP2005251208A (ja) * | 2004-03-05 | 2005-09-15 | Sun Microsyst Inc | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 |
JP2012038359A (ja) * | 2004-03-05 | 2012-02-23 | Oracle America Inc | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 |
JP2006126947A (ja) * | 2004-10-26 | 2006-05-18 | Hitachi Software Eng Co Ltd | 情報処理装置、情報処理方法、およびプログラム |
JP2008299833A (ja) * | 2007-06-04 | 2008-12-11 | Samsung Electronics Co Ltd | 作業遂行速度を向上させる装置および方法 |
US9235397B2 (en) | 2007-06-04 | 2016-01-12 | Samsung Electronics Co., Ltd. | Method and apparatus for increasing task-execution speed |
JP2010140233A (ja) * | 2008-12-11 | 2010-06-24 | Nec Computertechno Ltd | エミュレーションシステム及びエミュレーション方法 |
US8612948B2 (en) | 2010-04-05 | 2013-12-17 | International Business Machines Corporation | Dynamic compiler program, dynamic compiling method and dynamic compiling device |
US8938728B2 (en) | 2010-04-05 | 2015-01-20 | International Business Machines Corporation | Dynamic compiler program, dynamic compiling method and dynamic compiling device |
US9336052B2 (en) | 2011-02-01 | 2016-05-10 | Fujitsu Limited | Program executing method |
JP2013061810A (ja) * | 2011-09-13 | 2013-04-04 | Fujitsu Ltd | 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム |
JP2016515735A (ja) * | 2013-03-29 | 2016-05-30 | インテル・コーポレーション | ランタイムにおけるソフトウェアパイプライン |
JP2016018469A (ja) * | 2014-07-10 | 2016-02-01 | 富士通株式会社 | シミュレーション方法、シミュレーションプログラム |
JP7467802B2 (ja) | 2019-09-27 | 2024-04-16 | インテル・コーポレーション | Webブラウザ環境内で機械学習モデルを処理するための方法および装置 |
JP7483950B2 (ja) | 2020-06-22 | 2024-05-15 | アップル インコーポレイテッド | バイナリ変換を実行するためのシステム及び方法 |
Also Published As
Publication number | Publication date |
---|---|
EP1445695A1 (en) | 2004-08-11 |
KR20040063923A (ko) | 2004-07-14 |
EP1445695A4 (en) | 2005-05-04 |
WO2003040918A1 (fr) | 2003-05-15 |
CN1613058A (zh) | 2005-05-04 |
US20040210865A1 (en) | 2004-10-21 |
CN100354826C (zh) | 2007-12-12 |
JP3808755B2 (ja) | 2006-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3808755B2 (ja) | Jitコンパイラを備えた仮想計算機 | |
US6453411B1 (en) | System and method using a hardware embedded run-time optimizer | |
Gal et al. | HotpathVM: An effective JIT compiler for resource-constrained devices | |
EP0997816B1 (en) | Method and apparatus for selecting ways to compile at runtime | |
US8024554B2 (en) | Modifying an instruction stream using one or more bits to replace an instruction or to replace an instruction and to subsequently execute the replaced instruction | |
US7137123B2 (en) | Inline database for receiver types in object-oriented systems | |
US20040194076A1 (en) | Combining compilation and instruction set translation | |
JP2000040007A (ja) | バイトコ―ド・コンパイラのためのコ―ド生成 | |
KR20040111163A (ko) | 명령의 시맨틱의 동적 변경 | |
US7823140B2 (en) | Java bytecode translation method and Java interpreter performing the same | |
JP2000222220A (ja) | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ | |
EP1589425B1 (en) | Method and apparatus for determining frequency of execution for compiled methods within a virtual machine | |
US6931638B2 (en) | Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine | |
US6553426B2 (en) | Method apparatus for implementing multiple return sites | |
JPWO2009004709A1 (ja) | 間接分岐処理プログラムおよび間接分岐処理方法 | |
US11204767B2 (en) | Context switching locations for compiler-assisted context switching | |
JP2006164294A (ja) | Jitコンパイラを備えた仮想計算機 | |
JP2006202317A (ja) | Jitコンパイラを備えた仮想計算機 | |
Brandner et al. | Embedded JIT compilation with CACAO on YARI | |
JP2006134351A (ja) | Jitコンパイラを備えた仮想計算機 | |
JP2001056764A (ja) | 仮想計算機の実行方法および装置 | |
US8839274B2 (en) | Accelerated class check | |
JP2005063165A (ja) | 仮想計算機の高速エミュレータ | |
Zhang | The predictability of load address | |
Beckmann et al. | Prefetching Java Objects |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040524 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050621 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050822 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051025 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051226 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20060131 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060301 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20060412 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060516 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060518 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090526 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100526 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100526 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110526 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120526 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130526 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140526 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |