JP3808755B2 - Jitコンパイラを備えた仮想計算機 - Google Patents
Jitコンパイラを備えた仮想計算機 Download PDFInfo
- Publication number
- JP3808755B2 JP3808755B2 JP2001341577A JP2001341577A JP3808755B2 JP 3808755 B2 JP3808755 B2 JP 3808755B2 JP 2001341577 A JP2001341577 A JP 2001341577A JP 2001341577 A JP2001341577 A JP 2001341577A JP 3808755 B2 JP3808755 B2 JP 3808755B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- address
- native code
- search table
- compiled
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 claims description 127
- 230000006870 function Effects 0.000 claims description 7
- 238000004891 communication Methods 0.000 description 8
- 230000004043 responsiveness Effects 0.000 description 6
- 238000001514 detection method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000005056 compaction Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
Images
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
-
- 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
- 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
Description
【発明の属する技術分野】
本発明は、携帯電話機や無線通信機能を有する携帯情報端末(PDA)等の携帯型無線通信機器に利用可能なJITコンパイラを備えた仮想計算機に関する。
【0002】
近年、インターネットの普及によりネットワークを介してプログラムを実行するシステムが実用化されている。特に、Java言語は、携帯電話機上で「i−aPPli」としてプログラムを実行させることのできるものとして急速に広まってきている。
【0003】
しかし、Java言語は実行させるプラットホームを選ばない仮想計算機のプログラム(以下「バイトコード」と記す)として配付されるため、携帯型無線通信機器のプロセッサでは直接実行することができず、エミュレーション等の技術により実行を行っている。
【0004】
本発明は、Javaのような仮想計算機のバイトコードを携帯電話機、PDA等に利用し、メモリが少ない携帯型無線通信機器上で高速に動作させることの可能なJITコンパイラを備えた仮想計算機に関する。
【0005】
【従来の技術】
以下、従来例について説明する。
【0006】
(1) :インタプリタの説明
図12は、仮想計算機のコードであるバイトコードを解釈、実行するインタプリタの処理フローチャートである。以下、図12に基づいて、インタプリタの処理を説明する。なお、S1〜S6は各処理ステップを示す。
【0007】
従来、仮想計算機のバイトコードを実行する手段として、ソフトウェアによりバイトコードを逐次解釈、実行するインタプリタ方式が知られていた。しかし、このインタプリタ方式では、バイトコードの命令を1つずつ実行するため、処理速度が遅い。具体的には次の通りである。
【0008】
先ず、バイトコードの命令フェッチを行い(S1)、フェッチした命令をデコードする(S2)。そして、デコードした結果が命令の実行であれば、その命令を実行し(S3、S4)、S1の処理へ移行する。また、デコードした結果が分岐であれば分岐処理を行い(S5)、S1の処理へ移行する。更に、デコードした結果がメソッド呼び出しであれば(S6)、メソッド呼び出しを行い(S6)、S1の処理へ移行する。以降、同様にして、命令毎に処理を行う。
【0009】
(2) :従来一般に使用されているJITコンパイラの説明
図13は、インタプリタとJITコンパイラを組み合わせた時の処理フローチャートである。以下、図13に基づき、インタプリタと、従来一般に使用されているJITコンパイラ(携帯電話機では使用されておらず、パーソナルコンピュータ等で使用されている)を組み合わせた時の処理を説明する。なお、S11〜S20は各処理ステップを示す。また、S11〜S16はインタプリタの処理であり、S17〜S20がJITコンパイラの処理である。
【0010】
前記インタプリタの処理速度が遅いことを解決する方法として、JIT(Just-IN-Compiler) コンパイラを使う手法が一般に使用されていた。このJITコンパイラはバイトコードをネイティブコードにコンパイルする。これにより、アプリケーションは直接そのマシンのプロセッサで実行できるようになり、高速な実行が可能になる。
【0011】
一般に、JITコンパイラは、ダウンロードしたクラス、又は実行を開始したメソッドという単位でコンパイルを行う。すなわち、メソッドのバイトコード全体をコンパイルする。また、コンパイルしたネイティブコードは、メモリ(プログラム上の格納領域)上に格納され、再び実行を行う時は再利用され、1度目の実行時には、コンパイルのオーバヘッドがあるが、2度目からはこのオーバヘッド無しに高速に実行できる。具体的には次のようになる。
【0012】
先ず、バイトコードの命令フェッチを行い(S11)、フェッチした命令をデコードする(S12)。そして、デコードした結果が実行であれば、その命令を実行し(S13、S14)、S11の処理へ移行する。また、デコードした結果が分岐であれば、分岐処理を行い(S15)、S11の処理へ移行する。更に、デコードした結果がメソッド呼び出しであれば、メソッド呼び出しを行い(S16)、コンパイル済みか否かを判断する(S17)。
【0013】
その結果、コンパイル済みでなければ、コンパイルすべきか否かを判断し(S18)、コンパイルすべきでなければ、S11の処理へ移行するが、コンパイルすべきであれば、メソッドで呼び出したコードをJITコンパイラによりコンパイルしてネイティブコードを生成し、ネイティブコードの格納領域に格納し(S19)、ネイティブコードを実行する(S20)。ネイティブコードの実行中、メソッド呼び出しがあれば、S16の処理へ移行し、メソッドの処理が終了すれば、S11へ移行する。また、S17の処理において、コンパイル済みであれば、S20の処理へ移行する。以降、同様にして処理を行う。
【0014】
なお、前記バイトコード(bytecode)とは、Javaで開発したソフトのバイナリ表現形式として米サン・マイクロシステムズが定めたJava仮想マシン(仮想計算機)のマシン・コードのことを言う。また、バイトコードをマシンが直接実行できるネイティブコードへ変換するソフトを「JIT(Just-in-time)コンパイラ」と呼ぶ。
【0015】
また、「メソッド」(Method)とは、オブジェクト指向プログラミングにおいて、オブジェクトの実行する操作の方法を記述したプログラム(サブルーチンと同じ意味)のことを言う。
【0016】
【発明が解決しようとする課題】
前記のような従来のものにおいては、次のような課題があった。
【0017】
すなわち、携帯電話機やPDA等の携帯型無線通信機器では使用できるメモリ容量が限られており、コンパイルしたコードを全てメモリ上に格納することはできない。また、前記携帯型無線通信機器でのソフトウェアの実行は、ゲームなどの対話型のアプリケーションが多く、応答性を高めるためには、コンパイルにあまり時間をかけることはできない。
【0018】
特に、前記携帯型無線通信機器に搭載されたプロセッサでは処理能力が比較的低いため、大きなプログラムをコンパイルすると、実行中のプログラムが一瞬止まって見えることもある。また、一度しか実行されないようなバイトコードの場合、コンパイルする時間のオーバーヘッドのため、インタプリタで実行するよりも遅くなる。
【0019】
本発明は、このような従来の課題を解決し、限られたメモリ容量で処理の高速化を図り、応答性能の向上を図ることを目的とする。
【0020】
【課題を解決するための手段】
本発明は前記の目的を達成するため、次のように構成した。
【0021】
(1) :仮想計算機のバイトコードをソフトウェアで解釈・実行する機能を有し、メモリ上に、容量の制限されたネイティブコードの格納領域としてコードキャッシュを持ち、
前記バイトコードを実行する際に、JITコンパイラによりバイトコードを仮想計算機が直接実行できるネイティブコードにコンパイルして前記コードキャッシュに格納した後、そのネイティブコードを実行するJITコンパイラを備えた仮想計算機において、前記バイトコードのアドレスから、コンパイルされているか否かを判断するための情報と、コンパイルされたネイティブコードのアドレスを検索する検索テーブルを備えると共に、前記検索テーブルに、1度目の実行時に前記検索テーブルのタグにバイトコードのアドレスのみを登録し、ネイティブコードのアドレスの登録は、特別な処理を行う値としてコンパイル又は処理の先頭アドレス、又は数字の0を登録しておく検索テーブル情報登録手段と、前記検索テーブルに、バイトコードが登録されていない場合には、バイトコードのアドレスを登録すると共に、ネイティブコードアドレスには、特別な処理を行う値としてコンパイル又は処理の先頭アドレス、又は数字の0を登録し、前記検索テーブルにバイトコードが登録されているが、ネイティブコードアドレスには、特別な処理を行う値が登録されている場合には、JITコンパイラによるコンパイルを行い、ネイティブコードアドレスの登録を行うと共に、前記検索テーブルにバイトコードおよび特別な処理を行う値でないネイティブコードアドレスが登録されている場合には、該アドレスに登録されたネイティブコードを実行する実行制御手段とを有することを特徴とする。
【0026】
(作用)
(a) :前記(1) では、バイトコードのアドレスから、コンパイルされているか否かを判断するための情報と、コンパイルされたネイティブコードのアドレスを検索する検索テーブルを備えている。
【0027】
従って、前記検索テーブルを検索することでコンパイルされているか否かを判断したり、コンパイルされている場合に、該当するネイティブコードの格納アドレスを検索することが容易になる。その結果、バイトコードをネイティブコードにコンパイルすることで、アプリケーションプログラムの実行時間を速くすることが可能になる。また、従来のJITコンパイラがネイティブコードを生成し格納するために使用するメモリが制限され、少ないメモリでも処理が高速化できる。
【0030】
また、前記 (1) では、 検索テーブル情報登録手段は、検索テーブルに、1度目の実行時にバイトコードのアドレスだけ登録し、ネイティブコードのアドレスの登録は特別な値、又は数字の0を登録しておく。また、実行制御手段は、1度目はインタプリタで実行し、2度目はJITコンパイルによりコンパイルして実行するように制御する。
【0031】
この場合、コンパイル処理は時間を要するため、一度しか実行はないようなバイトコードはコンパイルして実行するよりもインタプリタで実行する方が速い。そこで、前記のように処理を行うことで、アプリケーションプログラムの全体の実行速度を速くすることができる。また、実行カウンタのための領域が必要なく、メモリを節約できる。
【0037】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、以下に説明する仮想計算機は、プログラム上だけで実現される仮想的な計算機であり、前記携帯型無線通信機器内のメモリに格納されたプログラムを、内部のプロセッサ(CPU、又はMPU)が実行することで実現される仮想マシンである。
【0038】
従って、以下に説明するフローチャートで表現された処理は、全て前記プログラム上で実行されるものである。そのため、仮想計算機上のメモリ、コードキャッシュ、検索テーブル等は、全て前記プログラム上で実現されるものである。
【0039】
(1) :例1の詳細な説明
▲1▼:例1の内容
例1は、仮想計算機のバイトコードをソフトウェアで解釈・実行する機能を有し、メモリ上に、容量の制限されたネイティブコードの格納領域としてコードキャッシュを持ち、バイトコードを実行する際に、JITコンパイラによりバイトコードを仮想計算機が直接実行できるネイティブコードにコンパイルしてコードキャッシュに格納した後、そのネイティブコードを実行するJITコンパイラ(以下、単に「コンパイラ」とも記す)を備えた仮想計算機に関するものであり、バイトコードのアドレスから、コンパイルされているか否かを判断するための情報(後述する)と、コンパイルされたネイティブコードのアドレスを検索する検索テーブルを備えている。
【0040】
そして、コンパイルを行う時にネイティブコードの格納領域に空きがなければ、既に格納済みのコンパイルコードを破棄して前記格納領域に空き領域を作り、検索テーブルを更新するものである。
【0041】
▲2▼:フローチャートによる処理(その1)の説明
図1は例1の処理フローチャート(その1)である。以下、図1に基づいて、例1の処理(その1)を説明する。なお、S31〜S40は各処理ステップを示す。この処理では、全てのバイトコードを対象としてコンパイルされているかどうかをチェックする例であり、仮想計算機上の処理である。
【0042】
先ず、全てのバイトコードに対して、検索テーブル上のタグ(tag)情報を利用して(詳細は後述する)コンパイル済みか否かを判断し(S31)、コンパイル済みでなければ、コンパイルすべきか否かを判断し(S32)、コンパイルすべきでないと判断した場合には、バイトコード命令のフェッチを行い(S33)、フェッチされた命令のデコードを行う(S34)。
【0043】
その結果、実行であれば(S35、S36)その命令を実行し、S31の処理へ移行する。また、分岐であれば(S37)分岐処理を行い、S31の処理へ移行する。更に、メソッド呼び出しであれば(S38)、メソッド呼び出しを行い、S31の処理へ移行する。
【0044】
また、前記S32の処理で、コンパイルすべきであると判断した場合には、部分的にコンパイルし、ネイティブコードを生成してネイティブコード格納領域へ格納し(S39)、ネイティブコードを実行し(S40)、S31の処理へ移行する。また、S31の処理で、コンパイル済みであれば、S40の処理へ移行する。前記処理において、S31〜S38はインタプリタの処理であり、S39、S40がJITコンパイラによる処理である。
【0045】
▲3▼:フローチャートによる処理(その2)の説明
図2は例1の処理フローチャート(その2)である。以下、図2に基づいて、例1の処理(その2)を説明する。なお、S41〜S50は各処理ステップを示す。
【0046】
この処理では、分岐、メソッド呼び出しなどの実行制御が途切れる地点で、コンパイルのチェックを行う。一般のJITコンパイラとの違いとしては、コンパイルをメソッド単位で行わず、以下に説明する例5、例6、例7、例8等の条件で、コンパイルを中断することが特徴である。
【0047】
先ず、バイトコード命令のフェッチを行い(S41)、命令デコードを行う(S42)。その結果、実行であれば(S43、S44)、その命令を実行し、S41の処理へ移行する。また、分岐であれば(S45)、分岐処理を行い(S45)、メソッド呼び出しであれば(S46)メソッド呼び出しを行う。
【0048】
そして、分岐又はメソッド呼び出しを行った場合、コンパイル済みか否かを判断し(S47)、コンパイル済みでなければ、コンパイルすべきか否かを判断する(S48)。その結果、コンパイルすべきでないと判断した場合には、S41の処理へ移行する。
【0049】
また、コンパイルすべきであると判断した場合は、途中までコンパイルを行い、ネイティブコードを生成しネイティブコード格納領域へ格納する(S49)。そして、ネイティブコードを実行し(S50)、S47の処理、又はS46の処理へ移行する。
【0050】
▲4▼:検索テーブルの説明
図3は例1の検索テーブル例である。前記のようにコンパイル済みか否かを調べて判断するために、検索テーブルを使用するが、その検索テーブルの1例を図3に示す。図3において、1はコンパレータ、2は検索テーブル、3はコードキャッシュである。
【0051】
この検索テーブル2は、タグ(tag)と、ネイティブコードのアドレス(コードキャッシュ3内のネイティブコード領域のアドレス)との対応情報が登録できるようになっており、ネイティブコードのアドレスからコードキャッシュ3のネイティブコード領域のデータが検索できるようになっている。
【0052】
また、検索テーブル2は、バイトコードアドレス(上位Mビット+下位Nビットとする)の下位Nビットを利用してタグ(tag)を検索することで、ネイティブコードのアドレスが検索できるようになっている。そして、バイトコードアドレスの上位Mビットをコンパレータ1に入力すると共に、検索テーブルのタグ(tag)情報をコンパレータ1に入力し、両者が一致するか否かの比較を自動的に行うようになっている。
【0053】
前記比較の結果、両者が一致(hit)した場合、コンパレータ1から一致出力が出され、この一致出力信号によりコンパイル済みと判断できるようになっている。
【0054】
▲5▼:例1の特徴
前記図3の検索テーブルを検索することでコンパイルされているか否かを判断したり、コンパイルされている場合に、該当するネイティブコードの格納アドレス(コードキャッシュ3内のネイティブコード領域のアドレス)を検索することが容易になる。
【0055】
その結果、バイトコードをネイティブコードにコンパイルすることで、アプリケーションプログラムの実行時間を速くすることが可能になる。また、従来のJITコンパイラがネイティブコードを生成し、格納するために使用するメモリが制限され、少ないメモリ容量でも処理が高速化できる。
【0056】
(2) :例2の詳細な説明
▲1▼:例2の内容
例2は、例1において、検索テーブル2上、又はコードキャッシュ3上に命令の実行回数を計数する実行カウンタを設け、仮想計算機のコードであるバイトコードを実行する際に、実行カウンタの値が、予め決めた特定回数より小さければインタプリタで実行し、前記特定回数より大きく、頻繁に実行されるバイトコードはJITコンパイラによりコンパイルして実行する例である。
【0057】
▲2▼:検索テーブルの説明
図4は例2の検索テーブル例である。図4に示したように、検索テーブル2は、タグ(tag)と、実行カウンタと、ネイティブコードのアドレスを対応させた情報が格納されており、ネイティブコードのアドレスから、コードキャッシュ3のネイティブコード領域のアドレスが検索できるようになっている。
【0058】
また、検索テーブル2は、バイトコードアドレス(上位Mビット+下位Nビットとする)の下位Nビットを利用してタグ(tag)を検索することで、ネイティブコードアドレスが検索できるようになっている。そして、バイトコードアドレスの上位Mビットをコンパレータ1に入力すると共に、検索テーブルのタグ(tag)情報をコンパレータ1に入力し、両者が一致する(hit)か否かの比較を行う。
【0059】
前記比較の結果、両者が一致(hit)した場合、コンパレータ1から一致出力が出され、この一致出力信号によりコンパイル済みと判断する。このような検索テーブルを利用し、バイトコードを実行する際に実行カウンタの値が特定回数より小さければインタプリタ(従来の処理)で実行し、特定回数より大きく頻繁に実行されるバイトコードはコンパイルして実行する。なお、前記実行カウンタは、コードキャッシュ3に設けても良い。
【0060】
▲3▼:フローチャートによる処理の説明
図5は、例2のコンパイル選択処理フローチャートである。以下、図5に基づいて、例2のコンパイルの選択処理を説明する。なお、S61〜S75は各処理ステップを示す。
【0061】
この処理は、インタプリタの処理(S61〜S67)と、JITコンパイラによるコンパイラの処理(S71〜S75)とに分かれている。インタプリタの処理では、コンパイル済みか否かを判断し(S61)、コンパイル済みでなければ、テーブル登録済み(図4の検索テーブル2のtagに登録されているか否か)を判断する(S62)。その結果、テーブル登録済みでなければ、タグ(tag)にアドレス登録を行い(S63)、実行カウンタをクリアする(S64)。次に、命令フェッチを行い(S65)、デコードを行って(S66)、実行する(S67)。そして、S61の処理に移行する。
【0062】
S62の処理でテーブル登録済みであると判断した場合には、検索テーブル2の実行カウンタをUP(+1)し(S71)、予め決めた特定回数より大きいか否かを判断する(S72)。その結果、特定回数より小さければ、S65に移行しインタプリタで実行し、特定回数以上の場合は、S73に移行してJITコンパイラによりバイトコードをコンパイルしてネイティブコードを生成し、コードキャッシュ3に登録する。また、この時、検索テーブル2にも必要な情報(ネイティブコードのアドレス)を登録する(S74)。
【0063】
次に、前記ネイティブコードを実行し(S75)、S61へ移行する。また、S61の処理でコンパイル済みであると判断した場合には、S75へ移行する。
【0064】
▲4▼:例2の特徴
コンパイル処理は時間を要するため、あまり実行されないバイトコードはコンパイルして実行するよりも、インタプリタで実行する方が、全体の処理速度が上がる。
【0065】
(3) :例3の詳細な説明
▲1▼:例3の内容
例3は、例2のような実行カウンタを使用しないでコンパイルの選択を行う例であり、例1の処理において、検索テーブルに1度目の実行時にはバイトコードアドレスだけを登録(検索テーブル2のtagに登録)し、ネイティブコードのアドレスの登録は特別なコンパイルの処理を行う関数(コンパイル又は処理の先頭アドレス)、又は数字の0にしておき、1度目はインタプリタで実行し、2度目はコンパイルして実行する例である。
【0066】
▲2▼:フローチャートによる処理の説明
図6は、例3のコンパイル選択処理フローチャートである。以下、図6に基づいて、例3のコンパイルの選択処理を説明する。なお、S81〜S94は各処理ステップを示す。
【0067】
この処理は、インタプリタの処理(S81〜S86)と、コンパイラの処理(S91〜S94)とに分かれている。インタプリタの処理では、先ず、Aから始まりテーブル登録済み(検索テーブル2に登録されている)か否かを判断し(S81)、登録済みでなければ(1度目)、インタプリタによる処理を行う。この場合、検索テーブル2のタグ(tag)にバイトコードアドレス(バイトコードのアドレスのみ)を登録する(S82)。
【0068】
次に、ネイティブコードアドレスに、エントリBを登録して(S83)、命令フェッチを行い(S84)、デコードを行う(S85)。そして、デコードした命令を実行し(S86)、S81の処理へ移行する。
【0069】
また、S81の処理で、テーブル登録済みであると判断した場合(2度目)は、JITコンパイラによる処理を行う。この場合、ネイティブコードアドレスへジャンプし(S91)、エントリBからJITコンパイラによるコンパイルを行い(S92)、ネイティブコードアドレス登録を行う(S93)。そして、ネイティブコードを実行し(S94)、S81の処理へ移行する。
【0070】
また、前記S91の処理結果により、S94に移行してネイティブコードを実行し(S94)、S81の処理へ移行する。
【0071】
▲3▼:例3の特徴
コンパイル処理は時間を要するため、一度しか実行はないようなバイトコードはコンパイルして実行するよりもインタプリタで実行する方が速い。そこで、前記のように処理を行うことで、アプリケーションプログラムの全体の実行速度を速くすることができる。また、前記例2と比較して、実行カウンタのための領域が必要なく、メモリを節約できる。
【0072】
(4) :例4の詳細な説明
▲1▼:例4の内容
例4は、例1において、検索テーブルはコンパイルされているかどうかだけの情報(タグの情報)を持ち、ネイティブコードのアドレスはバイトコードのアドレスから計算する例である。
【0073】
▲2▼:検索テーブルとコードキャッシュの構成例
図7は例4の検索テーブルとコードキャッシュの構成例である。この検索テーブル2には、タグ(tag)のみ格納されている。この場合、バイトコードアドレスの下位Nビットを利用して検索テーブル2をアクセスすると共に、前記Nビットの下位アドレスを演算器4により整数倍、例えば、8倍(×8)した値によりコードキャッシュ3のネイティブコード領域のアドレスへアクセスできるようになっている。
【0074】
また、検索テーブル2は、バイトコードアドレス(上位Mビット+下位Nビットとする)の下位Nビットを利用してタグ(tag)を検索できるようになっている。そして、バイトコードアドレスの上位Mビットをコンパレータ1に入力すると共に、検索テーブルのタグ(tag)情報をコンパレータ1に入力し、両者が一致するか否かの比較を行う。前記比較の結果、両者が一致した場合、コンパレータ1から一致出力が出されるが、この一致出力信号によりコンパイル済みと判断する。
【0075】
▲3▼:例4の特徴
バイトコードのアドレスに対し、コンパイルされるネイティブコードのメモリ上の位置が一意に決まるため、テーブルからネイティブコードのアドレスを索引する必要がなくなる。また、置換の際には、破棄すべきネイティブコードを探す必要がなく単純に処理できる。
【0076】
(5) :例5の詳細な説明
▲1▼:例5の内容
例5は、例1において、コンパイル時間を短縮(応答性を向上)するために、コンパイルする範囲を制限する。処理の途中であっても、バイトコードの特定の命令(分岐命令、メソッド呼び出しなど)を検出したら、そこまでをコンパイルし、処理を中断する命令(ネイティブコードの分岐命令や割り込み命令)を生成し(ネイティブコードの最終コードの後に、分岐命令や割り込み命令を生成し)、残りはコンパイルしない例である。
【0077】
すなわち、仮想計算機において、コンパイル時間を短縮するために、コンパイルする範囲を制限し、処理の途中であっても、バイトコードの特定の命令を検出したら、そこまでをコンパイルして処理を中断する命令を生成し、残りはコンパイルしないように処理を制限する処理制限手段を備えている。
【0078】
▲2▼:例5の特徴
必ず実行する部分だけがコンパイルされ効率が良い。例えば、“IF条件THEN処理”のようなバイトコードの列をコンパイルするとき、「条件」を処理する部分だけコンパイルを行い、「処理」の部分はコンパイルしない。
【0079】
この場合、従来は、メソッド全体をコンパイルしていたので、全く実行しない部分もコンパイルしていた。これに対して例5では、必ず実行する部分だけをコンパイルするので、コンパイルに消費する時間の無駄がなく高速である。
【0080】
また、従来は、メソッド全体をコンパイルしていたので、全く実行しない部分のネイティブコードも生成していた。しかし、例5では、必ず実行する部分だけをコンパイルするので、生成するネイティブコードに無駄がなく、メモリの消費が抑えられる。また、アプリケーションプログラムの応答性を向上させることができる。すなわち、コンパイルしている最中はアプリケーションプログラムの実行は停止するので、この停止している時間が短縮する。
【0081】
(6) :例6の詳細な説明
▲1▼:例6の内容
例6は、コンパイル時間の短縮を行う例であり、例5において、特定な命令の検出のほかに、バイトコードの量でコンパイルを中断する。例えば、100命令コンパイルしたところでコンパイルを中断する例である。なお、例6は、例4と同様に、例1の処理におけるコンパイルを中断させる条件を提供するものである。
【0082】
▲2▼:例6の特徴
例5と同じように、必ず実行する部分だけをコンパイルするので、生成するネイティブコードに無駄がなく、メモリの消費が抑えられる。また、アプリケーションプログラムの応答性を向上させることができる。すなわち、コンパイルしている最中はアプリケーションプログラムの実行は停止するので、この停止している時間が短縮する。
【0083】
(7) :例7の詳細な説明
▲1▼:例7の内容
例7はコンパイル時間の短縮を行う例であり、例5において、特定な命令の検出のほかに、生成したネイティブコードの量でコンパイルを中断する。例えば、コンパイルが128ワード分だけネイティブコードを生成したら、コンパイルを中断する。なお、例7は、例4と同様に、例1の処理におけるコンパイルを中断させる条件を提供するものである。
【0084】
▲2▼:例7の特徴
例5と同じように、必ず実行する部分だけをコンパイルするので、生成するネイティブコードに無駄がなく、メモリの消費が抑えられる。また、アプリケーションプログラムの応答性を向上させることができる。すなわち、コンパイルしている最中はアプリケーションプログラムの実行は停止するので、この停止している時間が短縮する。
【0085】
(8) :例8の詳細な説明
▲1▼:例8の内容
例8はコンパイル時間の短縮を行う例であり、特定な命令の検出のほかに、時間によってコンパイルを中断する。例えば、コンパイラがコンパイルの処理に100ミリセカンド消費したら、コンパイルを中断する。なお、例8は、例4と同様に、例1の処理におけるコンパイルを中断させる条件を提供するものである。
【0086】
▲2▼:例8の特徴
例5と同じように、必ず実行する部分だけをコンパイルするので、生成するネイティブコードに無駄がなく、メモリの消費が抑えられる。また、アプリケーションプログラムの応答性を向上させることができる。すなわち、コンパイルしている最中はアプリケーションプログラムの実行は停止するので、この停止している時間が短縮する。
【0087】
(9) :例9の詳細な説明
▲1▼:例9の内容
例9は、コードキャッシュの置換を行う例であり、例1において、コードキャッシュに空きがなくなったとき、コードキャッシュの先頭から順にネイティブコードを破棄する。この処理では、FILO(First In Last Out )方式で最も昔にコンパイルしたコードから順に破棄する。
【0088】
▲2▼:コードキャッシュの置換の説明
図8は例9のコードキャッシュの置換処理説明図である。この例では、初期値として、P1:命令生成ポインタはコードキャッシュの先頭、P2:解放ポインタはコードキャッシュの末尾を指しておく。実行が進む(コンパイルが何度も行われる)につれて、コードキャッシュ3は小さなブロックに分けられ、ブロックの先頭にタグ(tag)ポインタ(検索テーブルへのポインタ)と、ネクスト(next)ポインタ(次のブロックを指すポインタ)が格納される。
【0089】
ブロックの残り部分はネイティブコードを格納する命令領域である。ネクスト(next)ポインタはポインタである必要はなく、ブロックの切れ目が判れば良い。
【0090】
▲3▼:フローチャートによる処理の説明
図9は、例9のコードキャッシュ置換処理フローチャートである。以下、図9に基づいて、例9の処理を説明する。なお、S101〜S111は各処理ステップを示す。
【0091】
この処理は、コンパイルの処理の最中にコードキャッシュ3の置換処理を行う例である。先ず、生成する領域のタグ(tag)ポインタに検索テーブル2へのタグ(tag)ポインタを設定する(S101)。設定する領域は図8のP1(命令生成ポインタ)によって指示される。S102、S103、S104、S105がコンパイル処理のメインループであり、バイトコードからネイティブコードを生成する処理である。
【0092】
次に、JITコンパイルのコンパイル処理により、バイトコードからネイティブコードへの変換を行う(S102)。変換後のネイティブコードをコードキャッシュ3に格納する前に、命令生成ポインタと解放ポインタの値を比較(命令生成ポインタ<解放ポインタの条件を満たしているか否かを比較)する(S103)ことで、有効なコードを上書きしてしまわないかチェックする。
【0093】
その結果、命令生成ポインタが解放ポインタより小さければ、全て解放済みの領域なので、コードキャッシュ3にネイティブコードを生成して書き込む(S104)。この時、命令生成ポインタを進める。次に、コンパイル終了条件を満たしたか否かを判断する(S105)。
【0094】
その結果、コンパイル終了条件を満たさなければ、S102の処理へ移行し、コンパイル処理を継続する。また、コンパイル終了条件を満たしたら、生成したネイティブコードを1つのブロックとして構成する。この場合、生成した領域のネクストポインタに、命令生成ポインタの値を設定する(S106)。
【0095】
また、S103の処理で、前記条件を満たしていない場合、すなわち、命令生成ポインタが解放ポインタと等しいか、又は大きい場合、有効なブロックを解放する必要がある。そこで、解放ポインタがコードキャッシュの最後を指している(解放ポインタ<コードキャッシュの末尾の条件を満たしている)か否かをチェックする(S107)。
【0096】
その結果、解放ポインタがコードキャッシュの最後を指している場合は、解放ポインタをコードキャッシュ3の先頭に設定し(S108)、命令生成ポインタをコードキャッシュ3の先頭のブロックの命令領域に設定する(S109)。この処理により、コードキャッシュ3の先頭に戻ってブロックの解放を行う。
【0097】
次に、解放ポインタが示すタグ(tag)ポインタから検索テーブル2のタグ(tag)をクリアする(S110)。そして、前記S110の処理により、検索テーブルのタグ(tag)が無効化され、解放ポインタが示すブロックが実際に解放される。次に、解放ポインタを次のポインタ(nextポインタ)に設定して(S111)、S104の処理へ移行する。この処理で、解放ポインタが次のブロックを指すようになる。
【0098】
▲4▼:特徴
コードキャッシュから検索テーブルへのポインタを持つことによって、キャッシュブロックのサイズを可変長にでき、メモリを有効に活用することが可能になる。このポインタがない場合でも、検索テーブル全体を調べてキャッシュを無効化することができるが、検索テーブル全体を調べるのは処理量が多く、コンパイルに時間を浪費するが、例9の処理により、キャッシュの無効化を高速に行うことができる。
【0099】
(10):例10の詳細な説明
▲1▼:例10の内容
図10は例10のコードキャッシュの置換処理説明図である。例10は、コードキャッシュの置換を行う例であり、コードキャッシュ3に空きがなくなったとき、検索テーブル2の実行カウンタを値の小さいものをスキャンし、実行カウンタの値の小さなものから順に破棄する。実行カウンタはコンパイル直後は適当な大きな値を設定しておき、実行する度に実行したコードに対応するカウンタを増加するようにし、置換が必要となったときに、全体のカウンタを減少するようにする。
【0100】
▲2▼:フローチャートによる処理の説明
図11は例10の処理フローチャートである。以下、図11に基づいて例10の処理を説明する。なお、S121〜S136は各処理ステップを示す。また、S121〜S131の処理は、図5に示した例2のS61〜S75の処理と同じである。
【0101】
インタプリタの処理では、コンパイル済みか否かを判断し(S121)、コンパイル済みでなければ、テーブル登録済み(図4の検索テーブル2のtagに登録されているか否か)を判断する(S122)。その結果、テーブル登録済みでなければ、タグ(tag)にアドレス登録を行い(S123)、実行カウンタをクリアする(S124)。
【0102】
次に、命令フェッチを行い(S125)、デコードを行って(S126)、前記処理と同様にして命令を実行する(S127)。そして、S121の処理に移行する。
【0103】
また、前記S122の処理でテーブル登録済みであると判断した場合には、検索テーブル2の実行カウンタをUP(+1)し(S129)、予め決めた特定回数より大きいか否かを判断する(S130)。その結果、特定回数より小さければ、S125に移行しインタプリタで実行し、特定回数以上の場合は、JITコンパイラによりバイトコードをコンパイルしてネイティブコードを生成し(S131)、生成したネイティブコードをコードキャッシュ3に登録する(S132)。
【0104】
また、この時、検索テーブル2の実行カウンタを設定する。次に、前記S132の処理で登録したネイティブコードを実行し(S133)、S121の処理へ移行する。また、S121の処理で、コンパイル済みであると判断した場合は、検索テーブル2の実行カウンタをUP(+1)して(S128)、S133の処理へ移行する。
【0105】
一方、前記S131の処理において、ネイティブコードを生成した場合、コードキャッシュ3に空きがあるか否かを判断し(S134)、空きがあれば、S131の処理へ戻る。しかし、コードキャッシュ3に空きがなければ、実行カウンタ全体をスキャンし、個々の実行カウンタを減少させる(S135)。そして、実行回数が少ないエントリを破棄して、コードキャッシュ3に空きを作成し(S136)、S131の処理に戻る。
【0106】
▲3▼:例10の特徴
頻繁に実行されるネイティブコードが破棄されにくくなる。しかし、空き領域が断片化し、ネイティブコード上で断片化した箇所への無駄な分岐命令が必要となる。
【0107】
(11):例11の詳細な説明
▲1▼:例11の内容
例11は、コードキャッシュ3のコンパクションの例であり、例10において、コードキャッシュ3の空き領域の断片化が起きる。この時に、ネイティブコードのかたまりを移動(リロケーション)することで、コンパイラが一度に生成するコードを一塊にまとめる。
【0108】
▲2▼:例11の特徴
断片化により分断された命令の間に無駄な分岐命令を挿入する必要がなくなる。実行する命令列がコードキャッシュ上に分断されることがなくなり、一塊となるため、命令キャッシュが効率的に使われ、性能が向上する。
【0109】
(12):例12の詳細な説明
▲1▼:例12の内容
例12は、検索テーブルのヒット率の向上を図る例であり、例5において、コンパイルした全てのバイトコードの命令を検索テーブルに登録せず、コンパイルした命令シーケンスの先頭だけ検索テーブルに登録する。
【0110】
▲2▼:例12の特徴
検索テーブルのエントリ数にも制限があり、コンパイルした全てのバイトコード命令のアドレスを登録すると、検索テーブル2を上書きする機会が増えるため、コンパイル済みにもかかわらず、検索ミスする率が大きくなり、無駄なコンパイルを行う。これを防ぐため、コンパイルした命令シーケンスの先頭だけを登録する。
【0111】
前記の説明に対し、次の構成を付記する。
【0112】
(付記1)
仮想計算機のバイトコードをソフトウェアで解釈・実行する機能を有し、メモリ上に、容量の制限されたネイティブコードの格納領域としてコードキャッシュを持ち、
前記バイトコードを実行する際に、JITコンパイラによりバイトコードを仮想計算機が直接実行できるネイティブコードにコンパイルして前記コードキャッシュに格納した後、そのネイティブコードを実行するJITコンパイラを備えた仮想計算機において、
前記バイトコードのアドレスから、コンパイルされているか否かを判断するための情報と、コンパイルされたネイティブコードのアドレスを検索する検索テーブルを備えていることを特徴とするJITコンパイラを備えた仮想計算機。
【0113】
(付記2)
前記検索テーブル上、又は前記コードキャッシュ上に、命令の実行回数を計数するための実行カウンタを設け、
前記バイトコードを実行する際に、実行カウンタの値を調べ、予め決めた特定回数より小さい場合はインタプリタで実行し、
前記特定回数以上の場合は、JITコンパイラによりバイトコードをコンパイルしてから実行する選択処理手段を備えていることを特徴とする(付記1)記載のJITコンパイラを備えた仮想計算機。
【0114】
(付記3)
前記検索テーブルに、1度目の実行時にバイトコードのアドレスだけ登録し、ネイティブコードのアドレスの登録は特別な値、又は数字の0にしておく検索テーブル情報登録手段と、
1度目はインタプリタで実行し、2度目はJITコンパイルによりコンパイルして実行する実行制御手段を備えていることを特徴とする(付記1)記載のJITコンパイラを備えた仮想計算機。
【0115】
(付記4)
前記検索テーブルは、コンパイルされているかどうかを判断するだけの情報を持ち、ネイティブコードのアドレスは、バイトコードのアドレスから計算して求める演算手段を備えていることを特徴とする(付記1)記載の仮想計算機。
【0116】
(付記5)
コンパイル時間を短縮するために、コンパイルする範囲を制限し、処理の途中であっても、バイトコードの特定の命令を検出したら、そこまでをコンパイルし、処理を中断する命令を生成し、残りはコンパイルしないように処理を制限する処理制限手段を備えていることを特徴とする(付記1)記載のJITコンパイラを備えた仮想計算機。
【0117】
(付記6)
処理制限手段は、特定な命令の検出の他に、バイトコードの量でコンパイルを中断することを特徴とする(付記5)記載の仮想計算機。
【0118】
(付記7)
処理制限手段は、特定な命令の検出の他に、生成したネイティブコードの量でコンパイルを中断することを特徴とする(付記5)記載の仮想計算機。
【0119】
(付記8)
処理制限手段は、特定な命令の検出の他に、時間によってコンパイルを中断することを特徴とする(付記5)記載の仮想計算機。
【0120】
(付記9)
前記コードキャッシュに空きがなくなった時、コードキャッシュの先頭から順にネイティブコードを破棄する第1の破棄手段と、
FILO方式で最も昔にコンパイルしたコードから順に破棄する第2の破棄手段を備えていることを特徴とする(付記1)記載のJITコンパイラを備えた仮想計算機。
【0121】
【発明の効果】
以上説明したように、本発明によれば次のような効果がある。
【0122】
(1) :請求項1では、バイトコードのアドレスから、コンパイルされているか否かを判断するための情報と、コンパイルされたネイティブコードのアドレスを検索する検索テーブルを備えている。
【0123】
従って、前記検索テーブルを検索することでコンパイルされているか否かを判断したり、コンパイルされている場合に、該当するネイティブコードの格納アドレスを検索することが容易になる。その結果、バイトコードをネイティブコードにコンパイルすることで、アプリケーションプログラムの実行時間を速くすることが可能になる。また、従来のJITコンパイラがネイティブコードを生成し、格納するために使用するメモリが制限され、少ないメモリでも処理が高速化できる。
【0126】
また、請求項1では、検索テーブル情報登録手段は、検索テーブルに、1度目の実行時にバイトコードのアドレスだけ登録し、ネイティブコードのアドレスの登録は特別な値、又は数字の0を登録にしておく。また、実行制御手段は、1度目はインタプリタで実行し、2度目はJITコンパイルによりコンパイルして実行するように制御する。
【0127】
この場合、コンパイル処理は時間を要するため、一度しか実行しないようなバイトコードはコンパイルして実行するよりもインタプリタで実行する方が速い。そこで、前記のように処理を行うことで、アプリケーションプログラムの全体の実行速度を速くすることができる。また、実行カウンタのための領域が必要なく、メモリを節約できる。
【図面の簡単な説明】
【図1】本発明の実施の形態における例1の処理フローチャート(その1)である。
【図2】本発明の実施の形態における例1の処理フローチャート(その2)である。
【図3】本発明の実施の形態における例1の検索テーブル例である。
【図4】本発明の実施の形態における例2の検索テーブル例である。
【図5】本発明の実施の形態における例2のコンパイル選択処理フローチャートである。
【図6】本発明の実施の形態における例3のコンパイル選択処理フローチャートである。
【図7】本発明の実施の形態における例4の検索テーブルとコードキャッシュの構成例である。
【図8】本発明の実施の形態における例9のコードキャッシュの置換処理説明図である。
【図9】本発明の実施の形態における例9のコードキャッシュの置換処理フローチャートである。
【図10】本発明の実施の形態における例10のコードキャッシュの置換処理説明図である。
【図11】本発明の実施の形態における例10の処理フローチャートである。
【図12】従来のインタプリタの処理フローチャートである。
【図13】従来のインタプリタとJITコンパイラを組み合わせた時の処理フローチャートである。
【符号の説明】
1 コンパイラ
2 検索テーブル
3 コードキャッシュ
4 演算器
Claims (1)
- 仮想計算機のバイトコードをソフトウェアで解釈・実行する機能を有し、メモリ上に、容量の制限されたネイティブコードの格納領域としてコードキャッシュを持ち、
前記バイトコードを実行する際に、JITコンパイラによりバイトコードを仮想計算機が直接実行できるネイティブコードにコンパイルして前記コードキャッシュに格納した後、そのネイティブコードを実行するJITコンパイラを備えた仮想計算機において、
前記バイトコードのアドレスから、コンパイルされているか否かを判断するための情報と、コンパイルされたネイティブコードのアドレスを検索する検索テーブルを備えると共に、
前記検索テーブルに、1度目の実行時に前記検索テーブルのタグにバイトコードのアドレスのみを登録し、ネイティブコードのアドレスの登録は、特別な処理を行う値としてコンパイル又は処理の先頭アドレス、又は数字の0を登録しておく検索テーブル情報登録手段と、
前記検索テーブルに、バイトコードが登録されていない場合には、バイトコードのアドレスを登録すると共に、ネイティブコードアドレスには、特別な処理を行う値としてコンパイル又は処理の先頭アドレス、又は数字の0を登録し、前記検索テーブルにバイトコードが登録されているが、ネイティブコードアドレスには、特別な処理を行う値が登録されている場合には、JITコンパイラによるコンパイルを行い、ネイティブコードアドレスの登録を行うと共に、前記検索テーブルにバイトコードおよび特別な処理を行う値でないネイティブコードアドレスが登録されている場合には、該アドレスに登録されたネイティブコードを実行する実行制御手段と
を有することを特徴とするJITコンパイラを備えた仮想計算機。
Priority Applications (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001341577A JP3808755B2 (ja) | 2001-11-07 | 2001-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 |
CNB028267303A CN100354826C (zh) | 2001-11-07 | 2002-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 |
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 |
---|---|---|---|
JP2005371746A Division JP2006164294A (ja) | 2005-12-26 | 2005-12-26 | Jitコンパイラを備えた仮想計算機 |
JP2005371745A Division JP2006134351A (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 JP2003140909A (ja) | 2003-05-16 |
JP3808755B2 true 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 (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012105000A1 (ja) * | 2011-02-01 | 2012-08-09 | 富士通株式会社 | プログラム実行方法 |
Families Citing this family (54)
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 |
JP4701611B2 (ja) * | 2004-01-15 | 2011-06-15 | 株式会社日立製作所 | 動的変換方式のエミュレータ向けメモリ管理方法 |
US7412693B2 (en) * | 2004-03-05 | 2008-08-12 | Sun Microsystems, Inc. | Method and apparatus for determining frequency of execution for compiled methods within a virtual machine |
GB0410151D0 (en) * | 2004-05-07 | 2004-06-09 | Zeus Technology Ltd | Load balancing & traffic management |
JP4846226B2 (ja) * | 2004-10-26 | 2011-12-28 | 株式会社日立ソリューションズ | 情報処理装置、情報処理方法、およびプログラム |
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 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
KR101407628B1 (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 |
US8756579B1 (en) | 2007-12-03 | 2014-06-17 | Appcelerator, Inc. | Client-side and server-side unified validation |
US8819539B1 (en) | 2007-12-03 | 2014-08-26 | Appcelerator, Inc. | On-the-fly rewriting of uniform resource locators in a web-page |
US8806431B1 (en) | 2007-12-03 | 2014-08-12 | Appecelerator, Inc. | Aspect oriented programming |
US8938491B1 (en) | 2007-12-04 | 2015-01-20 | Appcelerator, Inc. | System and method for secure binding of client calls and server functions |
US8527860B1 (en) | 2007-12-04 | 2013-09-03 | Appcelerator, Inc. | System and method for exposing the dynamic web server-side |
US8639743B1 (en) | 2007-12-05 | 2014-01-28 | Appcelerator, Inc. | System and method for on-the-fly rewriting of JavaScript |
US8335982B1 (en) | 2007-12-05 | 2012-12-18 | Appcelerator, Inc. | System and method for binding a document object model through JavaScript callbacks |
US8285813B1 (en) | 2007-12-05 | 2012-10-09 | Appcelerator, Inc. | System and method for emulating different user agents on a server |
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 |
US8425290B2 (en) * | 2008-08-05 | 2013-04-23 | 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 |
JP2010140233A (ja) * | 2008-12-11 | 2010-06-24 | Nec Computertechno Ltd | エミュレーションシステム及びエミュレーション方法 |
KR100930831B1 (ko) * | 2009-03-24 | 2009-12-10 | 주식회사 에이디칩스 | 바이트코드 변환 가속 장치 및 그 방법 |
US8938728B2 (en) | 2010-04-05 | 2015-01-20 | International Business Machines Corporation | Dynamic compiler program, dynamic compiling method and dynamic compiling device |
JP5460430B2 (ja) | 2010-04-05 | 2014-04-02 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置 |
CN101957770B (zh) | 2010-10-09 | 2015-09-02 | 中兴通讯股份有限公司 | 一种移动设备上应用程序的启动方法及装置 |
JP2013061810A (ja) * | 2011-09-13 | 2013-04-04 | Fujitsu Ltd | 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム |
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 |
US9239712B2 (en) * | 2013-03-29 | 2016-01-19 | Intel Corporation | Software pipelining at runtime |
CN103984531B (zh) * | 2014-05-30 | 2016-09-28 | 龙芯中科技术有限公司 | 超长分支跳转处理方法及装置 |
JP6287650B2 (ja) * | 2014-07-10 | 2018-03-07 | 富士通株式会社 | シミュレーション方法、シミュレーションプログラム |
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 |
EP4035089A4 (en) | 2019-09-27 | 2023-05-31 | INTEL Corporation | METHOD AND APPARATUS FOR PROCESSING A MACHINE LEARNING MODEL IN A WEB BROWSER ENVIRONMENT |
CN112925523A (zh) * | 2021-03-02 | 2021-06-08 | 京东数字科技控股股份有限公司 | 对象比较方法、装置、设备及计算机可读介质 |
Family Cites Families (18)
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 |
US5768593A (en) * | 1996-03-22 | 1998-06-16 | Connectix Corporation | Dynamic cross-compilation system and method |
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 | 日産自動車株式会社 | 半導体装置 |
US5995754A (en) * | 1997-10-06 | 1999-11-30 | Sun Microsystems, Inc. | Method and apparatus for dynamically optimizing byte-coded programs |
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 WO PCT/JP2002/011599 patent/WO2003040918A1/ja active Application Filing
- 2002-11-07 EP EP02775508A patent/EP1445695A4/en not_active Withdrawn
- 2002-11-07 KR KR10-2004-7006877A patent/KR20040063923A/ko not_active Application Discontinuation
- 2002-11-07 CN CNB028267303A patent/CN100354826C/zh not_active Expired - Fee Related
-
2004
- 2004-05-06 US US10/839,310 patent/US20040210865A1/en not_active Abandoned
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012105000A1 (ja) * | 2011-02-01 | 2012-08-09 | 富士通株式会社 | プログラム実行方法 |
JP5505522B2 (ja) * | 2011-02-01 | 2014-05-28 | 富士通株式会社 | プログラム実行方法 |
Also Published As
Publication number | Publication date |
---|---|
CN100354826C (zh) | 2007-12-12 |
WO2003040918A1 (fr) | 2003-05-15 |
KR20040063923A (ko) | 2004-07-14 |
CN1613058A (zh) | 2005-05-04 |
US20040210865A1 (en) | 2004-10-21 |
JP2003140909A (ja) | 2003-05-16 |
EP1445695A1 (en) | 2004-08-11 |
EP1445695A4 (en) | 2005-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3808755B2 (ja) | Jitコンパイラを備えた仮想計算機 | |
Gal et al. | HotpathVM: An effective JIT compiler for resource-constrained devices | |
US6453411B1 (en) | System and method using a hardware embedded run-time optimizer | |
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 | |
EP0997816B1 (en) | Method and apparatus for selecting ways to compile at runtime | |
JP2000040007A (ja) | バイトコ―ド・コンパイラのためのコ―ド生成 | |
US7290254B2 (en) | Combining compilation and instruction set translation | |
US7823140B2 (en) | Java bytecode translation method and Java interpreter performing the same | |
US20020046298A1 (en) | Interpreting functions utilizing a hybrid of virtual and native machine instructions | |
US7137123B2 (en) | Inline database for receiver types in object-oriented systems | |
KR20040111163A (ko) | 명령의 시맨틱의 동적 변경 | |
JP2003526135A (ja) | コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、およびコンピュータ・システムを動作させる方法 | |
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 | |
Aslam et al. | Optimized java binary and virtual machine for tiny motes | |
JP2006164294A (ja) | Jitコンパイラを備えた仮想計算機 | |
US8806459B2 (en) | Java stack machine execution kernel dynamic instrumentation | |
JP2006202317A (ja) | Jitコンパイラを備えた仮想計算機 | |
JP2006134351A (ja) | Jitコンパイラを備えた仮想計算機 | |
JP2005521117A (ja) | Javaプログラミング環境におけるオブジェクトの表現のための2ティアのクラスタ | |
Brandner et al. | Embedded JIT compilation with CACAO on YARI | |
JP2001056764A (ja) | 仮想計算機の実行方法および装置 | |
JP2005063165A (ja) | 仮想計算機の高速エミュレータ | |
Zhang | The predictability of load address | |
Wagner et al. | Slim vm: optimistic partial program loading for connected embedded java virtual machines |
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 |