JP3470948B2 - 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ - Google Patents
動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータInfo
- Publication number
- JP3470948B2 JP3470948B2 JP01933599A JP1933599A JP3470948B2 JP 3470948 B2 JP3470948 B2 JP 3470948B2 JP 01933599 A JP01933599 A JP 01933599A JP 1933599 A JP1933599 A JP 1933599A JP 3470948 B2 JP3470948 B2 JP 3470948B2
- Authority
- JP
- Japan
- Prior art keywords
- loop
- bytecode
- conditional branch
- branch instruction
- back edge
- 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
Classifications
-
- 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
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)
Description
【0001】
【発明の属する技術分野】本発明は、Java(Sun Micros
ystems Inc. の商標)やSmalltalk 等の中間コードであ
るバイトコードをインタプリタにて実行する場合に動的
にコンパイラを使用する方法に関し、より詳しくは、ル
ープの回数に応じてループを含むメソッドの実行モード
を選択する方法に関する。
ystems Inc. の商標)やSmalltalk 等の中間コードであ
るバイトコードをインタプリタにて実行する場合に動的
にコンパイラを使用する方法に関し、より詳しくは、ル
ープの回数に応じてループを含むメソッドの実行モード
を選択する方法に関する。
【0002】
【従来の技術】従来から、JavaやSmalltalk 等における
仮想マシンのバイトコードインタープリタでは、実行頻
度の高いバイトコードを実行時にコンパイルして処理速
度を上げる最適化がしばしば行われている。この最適化
の一般的な実装では、メソッドごとに呼び出された回数
を数え、その呼び出し回数が一定回数以上の多いものを
コンパイルして実行する。この方法では、呼び出される
回数が多いメソッドだけがコンパイルされるので、実行
されたすべてのメソッドをコンパイルする方法に比べ
て、コンパイルする必要のないものをコンパイルするこ
とに要する時間を節約することができる。
仮想マシンのバイトコードインタープリタでは、実行頻
度の高いバイトコードを実行時にコンパイルして処理速
度を上げる最適化がしばしば行われている。この最適化
の一般的な実装では、メソッドごとに呼び出された回数
を数え、その呼び出し回数が一定回数以上の多いものを
コンパイルして実行する。この方法では、呼び出される
回数が多いメソッドだけがコンパイルされるので、実行
されたすべてのメソッドをコンパイルする方法に比べ
て、コンパイルする必要のないものをコンパイルするこ
とに要する時間を節約することができる。
【0003】
【発明が解決しようとする課題】しかしながら、上述し
た従来の方法では、メソッドの呼び出し回数をコンパイ
ルのトリガーとしているので、メソッド内部に非常に多
くの回数回るループがあっても、一定の呼び出し回数に
達するまではインタープリタで実行されることになり、
実行されたすべてのメソッドをコンパイルする方法に比
べて処理速度の低下を招く問題があった。また、この方
法では、呼び出される回数は少ないが、内部に回数の多
いループを持つメソッドはコンパイルされず、実行時に
動的コンパイルの効果を得られない問題もあった。これ
らの問題を回避するために、最初に実行する前にバイト
コードを解析しループを検出することも考えられるが、
バイトコードの解析にはそのメソッドを1回実行するの
に近いコストがかかるので、コンパイルによる効果をあ
まり期待できないメソッドも多く存在することを考える
と得策ではなかった。
た従来の方法では、メソッドの呼び出し回数をコンパイ
ルのトリガーとしているので、メソッド内部に非常に多
くの回数回るループがあっても、一定の呼び出し回数に
達するまではインタープリタで実行されることになり、
実行されたすべてのメソッドをコンパイルする方法に比
べて処理速度の低下を招く問題があった。また、この方
法では、呼び出される回数は少ないが、内部に回数の多
いループを持つメソッドはコンパイルされず、実行時に
動的コンパイルの効果を得られない問題もあった。これ
らの問題を回避するために、最初に実行する前にバイト
コードを解析しループを検出することも考えられるが、
バイトコードの解析にはそのメソッドを1回実行するの
に近いコストがかかるので、コンパイルによる効果をあ
まり期待できないメソッドも多く存在することを考える
と得策ではなかった。
【0004】本発明の目的は、上述した課題を解消し
て、ループを有するメソッドの検出とそのメソッドをコ
ンパイルした場合の効果の予測を少ないコストで実行時
に行い、その予測に基づいて実行モードを選択すること
で、より効率的なバイトコードの実行を行う方法を提供
することである。
て、ループを有するメソッドの検出とそのメソッドをコ
ンパイルした場合の効果の予測を少ないコストで実行時
に行い、その予測に基づいて実行モードを選択すること
で、より効率的なバイトコードの実行を行う方法を提供
することである。
【0005】また本発明の他の目的は、ループの検出と
同時に条件分岐命令の実行履歴等を記録することで、イ
ンタープリタ及びコンパイラの処理効率化を図る方法を
提供することである。
同時に条件分岐命令の実行履歴等を記録することで、イ
ンタープリタ及びコンパイラの処理効率化を図る方法を
提供することである。
【0006】
【課題を解決するための手段】本発明の第1の態様であ
る動的コンパイル時期決定方法では、まず、インタープ
リタによるバイトコード実行時に、実行する命令が後方
への条件分岐命令である場合、当該条件分岐命令がルー
プのバックエッジであるかを、前記条件分岐命令より前
の所定数の命令からなるバイトコード列と実際のループ
のバックエッジに対応するバイトコード列との状態遷移
を用いたパターンマッチングにより判断する。そしてル
ープのバックエッジと判断された場合には当該ループの
回数を予測し且つ予測したループ回数を記憶装置に格納
する。この予測したループ回数に応じてコンパイルのタ
イミングを決定する。
る動的コンパイル時期決定方法では、まず、インタープ
リタによるバイトコード実行時に、実行する命令が後方
への条件分岐命令である場合、当該条件分岐命令がルー
プのバックエッジであるかを、前記条件分岐命令より前
の所定数の命令からなるバイトコード列と実際のループ
のバックエッジに対応するバイトコード列との状態遷移
を用いたパターンマッチングにより判断する。そしてル
ープのバックエッジと判断された場合には当該ループの
回数を予測し且つ予測したループ回数を記憶装置に格納
する。この予測したループ回数に応じてコンパイルのタ
イミングを決定する。
【0007】本発明の第2の態様であるコード実行モー
ド選択方法では、まず、インタープリタによるバイトコ
ード実行時に、実行する命令が後方への条件分岐命令で
ある場合、当該条件分岐命令がループのバックエッジで
あるかを、前記条件分岐命令より前の所定数の命令から
なるバイトコード列と実際のループのバックエッジに対
応するバイトコード列との状態遷移を用いたパターンマ
ッチングにより判断する。そしてループのバックエッジ
と判断された場合には当該ループの回数を予測し且つ予
測したループ回数を記憶装置に格納する。この予測した
ループ回数に応じてバイトコードの実行モードを選択す
る。
ド選択方法では、まず、インタープリタによるバイトコ
ード実行時に、実行する命令が後方への条件分岐命令で
ある場合、当該条件分岐命令がループのバックエッジで
あるかを、前記条件分岐命令より前の所定数の命令から
なるバイトコード列と実際のループのバックエッジに対
応するバイトコード列との状態遷移を用いたパターンマ
ッチングにより判断する。そしてループのバックエッジ
と判断された場合には当該ループの回数を予測し且つ予
測したループ回数を記憶装置に格納する。この予測した
ループ回数に応じてバイトコードの実行モードを選択す
る。
【0008】好適な実施態様では、実行モードは、ルー
プを含むメソッドを直ちにコンパイルするモードと、イ
ンタープリタがバイトコードを実行するモードとを含
む。さらに好適な実施態様では、ループを含むメソッド
が直ちにコンパイルするモードが、予測したループ回数
に応じて最適化のレベルを変更した所定数のモードを含
む。また、インタープリタがバイトコードを実行するモ
ードにおいて、ループを含むメソッドをコンパイルする
タイミングを、予測したループ回数に応じて設定するよ
う構成することも可能である。
プを含むメソッドを直ちにコンパイルするモードと、イ
ンタープリタがバイトコードを実行するモードとを含
む。さらに好適な実施態様では、ループを含むメソッド
が直ちにコンパイルするモードが、予測したループ回数
に応じて最適化のレベルを変更した所定数のモードを含
む。また、インタープリタがバイトコードを実行するモ
ードにおいて、ループを含むメソッドをコンパイルする
タイミングを、予測したループ回数に応じて設定するよ
う構成することも可能である。
【0009】本発明の第1及び第2の態様における、ル
ープのバックエッジであるかの判断は、条件分岐命令よ
り前の所定数の命令からなるバイトコード列と実際のル
ープのバックエッジに対応するバイトコード列との状態
遷移を用いたパターンマッチングにより行うことを特徴
とする。また、ループ回数は、好適には、条件分岐命令
より前の所定数の命令のオペランドから予測する。さら
に好適には、ループのバックエッジであるか否か判断し
た条件分岐命令のオペコードを、判断済みであること及
び/又は条件分岐が成立したか否かを示すように書き換
える。
ープのバックエッジであるかの判断は、条件分岐命令よ
り前の所定数の命令からなるバイトコード列と実際のル
ープのバックエッジに対応するバイトコード列との状態
遷移を用いたパターンマッチングにより行うことを特徴
とする。また、ループ回数は、好適には、条件分岐命令
より前の所定数の命令のオペランドから予測する。さら
に好適には、ループのバックエッジであるか否か判断し
た条件分岐命令のオペコードを、判断済みであること及
び/又は条件分岐が成立したか否かを示すように書き換
える。
【0010】以上本発明の処理の流れを説明したが、本
発明はこれらの処理を実施する装置や、コンピュータに
これらの処理を実施させるプログラムの形態によっても
実現可能である。このプログラムを、フロッピー・ディ
スクやCD−ROM等の記憶媒体又は他の形態の記憶装
置に格納することは、通常当業者が行う事項である。
発明はこれらの処理を実施する装置や、コンピュータに
これらの処理を実施させるプログラムの形態によっても
実現可能である。このプログラムを、フロッピー・ディ
スクやCD−ROM等の記憶媒体又は他の形態の記憶装
置に格納することは、通常当業者が行う事項である。
【0011】
【発明の実施の形態】本発明の装置構成を図2を用いて
説明する。サーバ・コンピュータ1及びクライアント・
コンピュータ5はネットワーク3を介して接続されてい
る。クライアント・コンピュータ5は、JavaVM
(Virtual Machine)52及びOS(Operating Syste
m)53及びハードウエア(CPU及びメモリを含む)
55を含む。さらに、JavaVM52は、Javaイ
ンタープリタ54及びJava JITコンパイラ56
を含む。なお、クライアント・コンピュータ5は、通常
のコンピュータの他、メモリの大きさが小さかったり、
ハードディスク等の補助記憶装置を含まないような、い
わゆるネットワーク・コンピュータや情報家電の場合も
ある。
説明する。サーバ・コンピュータ1及びクライアント・
コンピュータ5はネットワーク3を介して接続されてい
る。クライアント・コンピュータ5は、JavaVM
(Virtual Machine)52及びOS(Operating Syste
m)53及びハードウエア(CPU及びメモリを含む)
55を含む。さらに、JavaVM52は、Javaイ
ンタープリタ54及びJava JITコンパイラ56
を含む。なお、クライアント・コンピュータ5は、通常
のコンピュータの他、メモリの大きさが小さかったり、
ハードディスク等の補助記憶装置を含まないような、い
わゆるネットワーク・コンピュータや情報家電の場合も
ある。
【0012】サーバ・コンピュータ1では、Javaソ
ースコード10は、Javaコンパイラ12(Java
バイトコードコンパイラ又はjavacと記される場合
がある)によりコンパイルされる。このコンパイルの結
果が、バイトコード14である。このバイトコード14
は、ネットワーク3を介してクライアント・コンピュー
タ5に送信される。バイトコード14は、クライアント
・コンピュータ5内のWWWブラウザ(World Wide Web
Browser)などに設けられたJava仮想マシン(Java
VM) 52にとってネイティブ・コードであり、実際ハ
ードウエア55のCPUにて実行する場合には、Jav
aインタープリタ54や、Java JITコンパイラ
56を用いる。インタープリタ54は、実行時にバイト
コード14をデコードし、命令ごとに用意される処理ル
ーチンを呼び出して実行する。一方、JITコンパイラ
56は、バイトコードを事前にあるいは実行する直前に
コンパイラを用いてマシン・コード58(機械語コード
とも言う)に変換してそれをCPUで実行する。本発明
はJITコンパイラ56及びインタープリタ54に関連
する。
ースコード10は、Javaコンパイラ12(Java
バイトコードコンパイラ又はjavacと記される場合
がある)によりコンパイルされる。このコンパイルの結
果が、バイトコード14である。このバイトコード14
は、ネットワーク3を介してクライアント・コンピュー
タ5に送信される。バイトコード14は、クライアント
・コンピュータ5内のWWWブラウザ(World Wide Web
Browser)などに設けられたJava仮想マシン(Java
VM) 52にとってネイティブ・コードであり、実際ハ
ードウエア55のCPUにて実行する場合には、Jav
aインタープリタ54や、Java JITコンパイラ
56を用いる。インタープリタ54は、実行時にバイト
コード14をデコードし、命令ごとに用意される処理ル
ーチンを呼び出して実行する。一方、JITコンパイラ
56は、バイトコードを事前にあるいは実行する直前に
コンパイラを用いてマシン・コード58(機械語コード
とも言う)に変換してそれをCPUで実行する。本発明
はJITコンパイラ56及びインタープリタ54に関連
する。
【0013】図1は本発明のインタープリタ及びコンパ
イラに関する処理の一例を示すフローチャートである。
図1に従って本発明を説明すると、まず、JavaやS
malltalk等のバイトコードインタープリタにお
けるバイトコードの実行時に後方への条件分岐命令が成
立するかどうか判断する(S1)。そして、後方への条
件分岐命令が成立するたびに、その命令がループのバッ
クエッジかどうか判断する(S2)。次に、判断の結果
ループのバックエッジの場合は、ループ回数を予測する
(S3)。その後、予測した回数に応じてバイトコード
の実行モード、すなわちインタープリタ及びコンパイラ
の動作モードを選択する(S4)。そして、ループの識
別を何度も行なわないために、条件分岐命令のオペコー
ドを書き換える(S5)。最後に、ステップS4で選択
した実行モードに基づいてバイトコードを実行する(S
7)。一方、ステップS1で条件分岐命令が成立しない
場合およびステップS2でループのバックエッジでない
と判断された場合も、ループの識別を何度も行なわない
ために、条件分岐命令のオペコードを書き換えた後(S
6)、そのバイトコードを実行する(S7)。
イラに関する処理の一例を示すフローチャートである。
図1に従って本発明を説明すると、まず、JavaやS
malltalk等のバイトコードインタープリタにお
けるバイトコードの実行時に後方への条件分岐命令が成
立するかどうか判断する(S1)。そして、後方への条
件分岐命令が成立するたびに、その命令がループのバッ
クエッジかどうか判断する(S2)。次に、判断の結果
ループのバックエッジの場合は、ループ回数を予測する
(S3)。その後、予測した回数に応じてバイトコード
の実行モード、すなわちインタープリタ及びコンパイラ
の動作モードを選択する(S4)。そして、ループの識
別を何度も行なわないために、条件分岐命令のオペコー
ドを書き換える(S5)。最後に、ステップS4で選択
した実行モードに基づいてバイトコードを実行する(S
7)。一方、ステップS1で条件分岐命令が成立しない
場合およびステップS2でループのバックエッジでない
と判断された場合も、ループの識別を何度も行なわない
ために、条件分岐命令のオペコードを書き換えた後(S
6)、そのバイトコードを実行する(S7)。
【0014】以下、ループの識別(ステップS1、S
2、S3に対応)と動作モードの変更(ステップS4に
対応)を説明するとともに、好適な実施態様としてバイ
トコードの書き換えについて説明する。
2、S3に対応)と動作モードの変更(ステップS4に
対応)を説明するとともに、好適な実施態様としてバイ
トコードの書き換えについて説明する。
【0015】1.1:ループの識別
バイトコードの内部ループを識別するために以下の処理
を行う。 1.バイトコードを処理中に実際に後方への条件分岐が
成立した時に、直前の数命令と、例えばJavaバイトコー
ドコンパイラが生成するループのバックエッジに対応す
るバイトコード命令列との状態遷移を用いたパターンマ
ッチングを行う。このパターンマッチングは完全である
必要はなく、なるべく処理時間を短くしてループである
可能性が高いかどうかを検証すればよい。例えばJava言
語で、 for(i=0; i<1000; i++) {(ループ内部の処理)} のように書かれたループのバックエッジは以下のような
バイトコード列になる。
を行う。 1.バイトコードを処理中に実際に後方への条件分岐が
成立した時に、直前の数命令と、例えばJavaバイトコー
ドコンパイラが生成するループのバックエッジに対応す
るバイトコード命令列との状態遷移を用いたパターンマ
ッチングを行う。このパターンマッチングは完全である
必要はなく、なるべく処理時間を短くしてループである
可能性が高いかどうかを検証すればよい。例えばJava言
語で、 for(i=0; i<1000; i++) {(ループ内部の処理)} のように書かれたループのバックエッジは以下のような
バイトコード列になる。
【0016】
番地 bytecode
5 (ループの先頭)
... (ループ内部の処理)
17 iinc 0 1 /*変数iを1増加*/
20 iload_0 /*変数iをスタックへ*/
21 sipush 1000 /*1000をスタックへ*/
24 if_icmplt 5 /*(i<1000)なら5番地へ*/
【0017】ソースコード上でのループの記述に応じ
て、このようなバックエッジのバイトコード列は数種類
のパターンになる。それらを条件分岐命令から後ろ向き
にパターンマッチングを行って検出することで、高速
に、ループでありそうかどうかを識別する。ループであ
る可能性が高いと判断したバイトコードが実はループで
なかった場合には、後で述べるように、JIT コンパイラ
からエラーコードが変えるが、この場合にはそのままイ
ンタープリタで実行可能である。
て、このようなバックエッジのバイトコード列は数種類
のパターンになる。それらを条件分岐命令から後ろ向き
にパターンマッチングを行って検出することで、高速
に、ループでありそうかどうかを識別する。ループであ
る可能性が高いと判断したバイトコードが実はループで
なかった場合には、後で述べるように、JIT コンパイラ
からエラーコードが変えるが、この場合にはそのままイ
ンタープリタで実行可能である。
【0018】2.ループである可能性が高い場合には、
そのループが今後回る回数をバイトコードのオペランド
から予測する。これもなるべく短い処理時間で予測すれ
ばよい。上述した例では、iincの第2オペランド(1) と
sipushのオペランド(1000)および現在のiの値からルー
プの回数は999回と予測できる。前方への分岐、分岐
が成立しなかった場合、および、パターンにマッチしな
かった場合は、後述する1.3項のバイトコードの書き
換えが実施される。なお予測されたループ回数はメモリ
に記憶される。
そのループが今後回る回数をバイトコードのオペランド
から予測する。これもなるべく短い処理時間で予測すれ
ばよい。上述した例では、iincの第2オペランド(1) と
sipushのオペランド(1000)および現在のiの値からルー
プの回数は999回と予測できる。前方への分岐、分岐
が成立しなかった場合、および、パターンにマッチしな
かった場合は、後述する1.3項のバイトコードの書き
換えが実施される。なお予測されたループ回数はメモリ
に記憶される。
【0019】1.2:動作モードの変更
1.以上のようにして予測されたループの回数に応じて
今後の動作モードを決定する。例えば、予測したループ
の回数をn、動作モードを変更するしきい値をN1<N
2<N3<N4とした場合、以下のようにして動作モー
ドを変更する。 (1)n≦N1ならば、何もせず、メソッド呼び出しの
回数に応じてコンパイルする。 (2)N1<n≦N2ならば、メソッド呼び出しの回数
を保持している変数を操作して、通常より少ないメソッ
ド呼び出しでコンパイルする。 (3)N2<n≦N3ならば、メソッド呼び出しの回数
を保持している変数を操作して、次回のメソッド呼び出
しでコンパイルする。 (4)N3<n≦N4ならば、直ちにホットスポットコ
ンパイルして、可能ならばループの次のイタレーション
からコンパイルされたコードで実行する。 (5)N4<nならば、直ちにホットスポットコンパイ
ルを最適化レベルを上げて行い、可能ならばループの次
のイタレーションからコンパイルされたコードで実行す
る。 以上のように(1)乃至(4)については、コンパイル
のタイミングを決定又は調整している。(5)では最適
化のレベルを複数設けてもよい。
今後の動作モードを決定する。例えば、予測したループ
の回数をn、動作モードを変更するしきい値をN1<N
2<N3<N4とした場合、以下のようにして動作モー
ドを変更する。 (1)n≦N1ならば、何もせず、メソッド呼び出しの
回数に応じてコンパイルする。 (2)N1<n≦N2ならば、メソッド呼び出しの回数
を保持している変数を操作して、通常より少ないメソッ
ド呼び出しでコンパイルする。 (3)N2<n≦N3ならば、メソッド呼び出しの回数
を保持している変数を操作して、次回のメソッド呼び出
しでコンパイルする。 (4)N3<n≦N4ならば、直ちにホットスポットコ
ンパイルして、可能ならばループの次のイタレーション
からコンパイルされたコードで実行する。 (5)N4<nならば、直ちにホットスポットコンパイ
ルを最適化レベルを上げて行い、可能ならばループの次
のイタレーションからコンパイルされたコードで実行す
る。 以上のように(1)乃至(4)については、コンパイル
のタイミングを決定又は調整している。(5)では最適
化のレベルを複数設けてもよい。
【0020】ここで言う「ホットスポットコンパイル」
とは、通常のコンパイルに加えて、このループの先頭か
らのエントリーポイントを持ったコードを作ることであ
る。JIT コンパイラは、メソッド全体をコンパイルして
メソッドの先頭へのエントリーポイントを作るととも
に、指定されたループの先頭へ割り込むためのコードを
作り、インタープリタにリターンする。このとき、もし
指定された部分が実際にはループでなかった場合には、
JIT コンパイラはインタープリタに対してエラーコード
を返す。インタープリタはJIT コンパイラからのリター
ンコードに応じて、ホットスポットコンパイルが成功し
ていれば、次のイタレーションからはコンパイルされた
コードで実行する。そうでなければ、そのままインター
プリタで実行する。
とは、通常のコンパイルに加えて、このループの先頭か
らのエントリーポイントを持ったコードを作ることであ
る。JIT コンパイラは、メソッド全体をコンパイルして
メソッドの先頭へのエントリーポイントを作るととも
に、指定されたループの先頭へ割り込むためのコードを
作り、インタープリタにリターンする。このとき、もし
指定された部分が実際にはループでなかった場合には、
JIT コンパイラはインタープリタに対してエラーコード
を返す。インタープリタはJIT コンパイラからのリター
ンコードに応じて、ホットスポットコンパイルが成功し
ていれば、次のイタレーションからはコンパイルされた
コードで実行する。そうでなければ、そのままインター
プリタで実行する。
【0021】1.3:バイトコードの書き換え
ループのチェックは二度行う必要はないので、チェック
済みのバイトコード命令を、チェックを行わないような
バイトコード命令に書き換えておく。このときJIT コン
パイラの最適化を助けるために、条件分岐が成立した(t
aken) か成立しなかった(nottaken)かによって、異なる
命令に書き換えることも可能である。上の例では、if_i
cmplt のバイトコードを、使用されていないバイトコー
ドを使って定義した「if_icmplt_taken 」または「if_i
cmplt_nottaken」に書き換える。JIT コンパイラはこの
動的な情報を用いて、最適化したコードを生成すること
ができる。さらに、この条件分岐命令が再度インタープ
リタで実行された場合にも、条件分岐の成立、不成立に
それぞれ最適化した処理ルーチンで処理できる。
済みのバイトコード命令を、チェックを行わないような
バイトコード命令に書き換えておく。このときJIT コン
パイラの最適化を助けるために、条件分岐が成立した(t
aken) か成立しなかった(nottaken)かによって、異なる
命令に書き換えることも可能である。上の例では、if_i
cmplt のバイトコードを、使用されていないバイトコー
ドを使って定義した「if_icmplt_taken 」または「if_i
cmplt_nottaken」に書き換える。JIT コンパイラはこの
動的な情報を用いて、最適化したコードを生成すること
ができる。さらに、この条件分岐命令が再度インタープ
リタで実行された場合にも、条件分岐の成立、不成立に
それぞれ最適化した処理ルーチンで処理できる。
【0022】以下、実際の例について、ここでは本発明
をJavaインタープリタ・JIT コンパイラへ組み込んだ例
について説明する。すなわち、Java言語でループを構成
する方法はいくつかあるが、出現頻度が高いのは、for,
while,do whileである。ここではSun Microsystems社の
JDK(Java Development Kit) に含まれるJavaバイトコー
ドコンパイラ(javac)を例にとって説明する。 2.1:ループの識別とループ回数の予測 Java言語で書くことのできるループ制御構造のうち、少
ないコストでループでありそうかどうか識別可能であ
り、ループの回る回数が予測可能であり且つ一般的によ
く使われるものとして、 という構造で、(ループ変数の増減)が ・i++, i-=2 など、ループ変数を定数分だけ増減して終
わり、 ( 条件 )が ・i<10000, i!=0 などループ変数と定数との比較である
か、 ・i<j,i!=jなどループ変数とループ中で変化しない変数
との比較であるか、 ・i<m,i<this.mなどループ変数とスタティック値やフィ
ールド値との比較である、 ものを対象とする。while 文、do-while文で記述された
ループでも、上の形式で表されるものであれば対象とな
る。
をJavaインタープリタ・JIT コンパイラへ組み込んだ例
について説明する。すなわち、Java言語でループを構成
する方法はいくつかあるが、出現頻度が高いのは、for,
while,do whileである。ここではSun Microsystems社の
JDK(Java Development Kit) に含まれるJavaバイトコー
ドコンパイラ(javac)を例にとって説明する。 2.1:ループの識別とループ回数の予測 Java言語で書くことのできるループ制御構造のうち、少
ないコストでループでありそうかどうか識別可能であ
り、ループの回る回数が予測可能であり且つ一般的によ
く使われるものとして、 という構造で、(ループ変数の増減)が ・i++, i-=2 など、ループ変数を定数分だけ増減して終
わり、 ( 条件 )が ・i<10000, i!=0 などループ変数と定数との比較である
か、 ・i<j,i!=jなどループ変数とループ中で変化しない変数
との比較であるか、 ・i<m,i<this.mなどループ変数とスタティック値やフィ
ールド値との比較である、 ものを対象とする。while 文、do-while文で記述された
ループでも、上の形式で表されるものであれば対象とな
る。
【0023】このようなループのバックエッジは、java
c によって(条件)が0との比較である場合、以下の表
1に示すようなバイトコードにコンパイルされる。ここ
で、太字はオペコード、opr はオペランドの意味であ
る。
c によって(条件)が0との比較である場合、以下の表
1に示すようなバイトコードにコンパイルされる。ここ
で、太字はオペコード、opr はオペランドの意味であ
る。
【0024】
【表1】
【0025】表1に示すバイトコードは、以下の表2に
示すAppendix.Aに示すような状態遷移を用いて識別でき
る。
示すAppendix.Aに示すような状態遷移を用いて識別でき
る。
【0026】
【表2】
【0027】一方、(条件)が0以外との比較である場
合、上述したループのバックエッジは、javac によっ
て、以下の表3に示すようなバイトコードにコンパイル
される。
合、上述したループのバックエッジは、javac によっ
て、以下の表3に示すようなバイトコードにコンパイル
される。
【0028】
【表3】
【0029】表3に示すバイトコードは、if_xx の2バ
イト前か3バイト前に必ずオペコードがあるので、これ
らは以下の表4に示すAppendix.Bに示すような状態遷移
を用いて識別できる。
イト前か3バイト前に必ずオペコードがあるので、これ
らは以下の表4に示すAppendix.Bに示すような状態遷移
を用いて識別できる。
【0030】
【表4】
【0031】このようにしてループである可能性が高い
とわかったら、次にループの回る回数を予測する。例え
ば上述した例においてtype 3の場合には、iincのオペラ
ンドからループ変数の増分を、iload_x のオペランドか
らローカル変数に保持された現在のループ変数の値を、
また、sipushのオペランドからループ変数と比較する値
をとってくれば、簡単に求めることができる。また、ii
nc命令の直前までのパターンにマッチした場合、ループ
回数は予測できないが、ループのバックエッジでありそ
うなことはわかるので、デフォルトの動作として、例え
ば、このメソッドが次回呼び出されたときにコンパイル
されるように、メソッドの呼び出し回数を保持している
変数を操作しておく。
とわかったら、次にループの回る回数を予測する。例え
ば上述した例においてtype 3の場合には、iincのオペラ
ンドからループ変数の増分を、iload_x のオペランドか
らローカル変数に保持された現在のループ変数の値を、
また、sipushのオペランドからループ変数と比較する値
をとってくれば、簡単に求めることができる。また、ii
nc命令の直前までのパターンにマッチした場合、ループ
回数は予測できないが、ループのバックエッジでありそ
うなことはわかるので、デフォルトの動作として、例え
ば、このメソッドが次回呼び出されたときにコンパイル
されるように、メソッドの呼び出し回数を保持している
変数を操作しておく。
【0032】2.2:バックエッジである可能性のない
分岐命令でのオーバーヘッド Pentium (Intel社の商標)の場合で考えると、本
発明適用前のif_icmplt の処理ルーチンは以下の表5に
示すAppendix.Cのようになり、条件成立時で9サイク
ル、条件不成立時で5サイクルかかる。これに対して本
発明適用後のif_icmplt の処理ルーチンは以下の表6に
示すAppendix.Dのようになり、前方分岐時で10サイク
ル、条件不成立時で5サイクルかかる。したがって、本
発明を適用しても従来の場合と比較して、前方分岐時に
1サイクルのオーバーヘッドしかかからないことがわか
る。
分岐命令でのオーバーヘッド Pentium (Intel社の商標)の場合で考えると、本
発明適用前のif_icmplt の処理ルーチンは以下の表5に
示すAppendix.Cのようになり、条件成立時で9サイク
ル、条件不成立時で5サイクルかかる。これに対して本
発明適用後のif_icmplt の処理ルーチンは以下の表6に
示すAppendix.Dのようになり、前方分岐時で10サイク
ル、条件不成立時で5サイクルかかる。したがって、本
発明を適用しても従来の場合と比較して、前方分岐時に
1サイクルのオーバーヘッドしかかからないことがわか
る。
【0033】
【表5】
【0034】
【表6】
【0035】ここで注意されたいのは、if_icmplt_take
n_backward:(後方分岐時の処理)におけるcycle
−7のcall check_backedge(ループのバックエッジか
どうかをチェック)である。この処理は、ループのバッ
クエッジかどうかをチェックするだけでなく、1.2動
作モードの変更の(2)及び(3)における、メソッド
呼び出しの回数を保持している変数を操作する処理も含
まれる。また、cycle−8に示すように予測したル
ープ回数は記憶装置に記憶される。
n_backward:(後方分岐時の処理)におけるcycle
−7のcall check_backedge(ループのバックエッジか
どうかをチェック)である。この処理は、ループのバッ
クエッジかどうかをチェックするだけでなく、1.2動
作モードの変更の(2)及び(3)における、メソッド
呼び出しの回数を保持している変数を操作する処理も含
まれる。また、cycle−8に示すように予測したル
ープ回数は記憶装置に記憶される。
【0036】
【発明の効果】以上の説明から明らかなように、本発明
によれば、ループを持つメソッドの検出とそのメソッド
をコンパイルした場合の効果の予測を実行時に行い、そ
の予測に基づいて実行モードを選択することで、処理速
度を大幅に向上させることができる。また、条件分岐命
令の実行履歴を記録するよう構成した場合は、コンパイ
ラの最適化を助けることもできる。
によれば、ループを持つメソッドの検出とそのメソッド
をコンパイルした場合の効果の予測を実行時に行い、そ
の予測に基づいて実行モードを選択することで、処理速
度を大幅に向上させることができる。また、条件分岐命
令の実行履歴を記録するよう構成した場合は、コンパイ
ラの最適化を助けることもできる。
【図1】本発明の動的コンパイルを行うバイトコードの
選択方法の一例を示すフローチャートである。
選択方法の一例を示すフローチャートである。
【図2】本発明における装置構成の一例を示す図であ
る。
る。
1 サーバ・コンピュータ
3 ネットワーク
5 クライアント・コンピュータ
10 Javaソースコード
12 Javaコンパイラ
14 バイトコード
52 JavaVM
54 Javaインタプリタ
56 Java JITコンパイラ
58 マシンコード
60 ガベージ・コレクタ
53 OS
55 ハードウエア(CPU及びメモリを含む)
─────────────────────────────────────────────────────
フロントページの続き
(72)発明者 小松 秀昭
神奈川県大和市下鶴間1623番地14 日本
アイ・ビー・エム株式会社 東京基礎研
究所内
(72)発明者 道司 博
神奈川県大和市下鶴間1623番地14 日本
アイ・ビー・エム株式会社 東京基礎研
究所内
(56)参考文献 特開 平8−87417(JP,A)
特開 昭63−53646(JP,A)
エリック・アームストロング,「次世
代JVM&動的コンパイラ」,Java
WORLD,日本,株式会社IDGコ
ミュニケーションズ,1998年 7月 1
日,Vol.2,No.7,pp.42−
51
志村浩也・他,「Java JITコ
ンパイラの試作」,情報処理学会研究報
告,日本,社団法人情報処理学会,1996
年10月31日,Vol.96,No.106
(96−ARC−120),pp.37−42
松田慎一,「Java最新事情’98
Spring」,JAVA PRES
S,日本,株式会社技術評論社,1998年
4月20日,Vol.1,pp.2−19
志村浩也・他,「Javaの高速
化」,第39回プログラミング・シンポジ
ウム報告書,日本,1998年 1月,p
p.99−108,JST資料番号:G0897
A
(58)調査した分野(Int.Cl.7,DB名)
G06F 9/45
G06F 9/44
G06F 9/30
JSTファイル(JOIS)
CSDB(日本国特許庁)
INSPEC(WPI/L)
Claims (12)
- 【請求項1】インタープリタによるバイトコード実行時
に、実行する命令が後方への条件分岐命令である場合、
当該条件分岐命令がループのバックエッジであるかを、
前記条件分岐命令より前の所定数の命令からなるバイト
コード列と実際のループのバックエッジに対応するバイ
トコード列との状態遷移を用いたパターンマッチングに
より判断し、ループのバックエッジと判断された場合に
は当該ループの回数を予測し且つ予測したループ回数を
記憶装置に格納し、前記予測したループ回数に応じて当
該ループを含むメソッドをコンパイルするタイミングを
決定する動的コンパイル時期決定方法。 - 【請求項2】インタープリタによるバイトコード実行時
に、実行する命令が後方への条件分岐命令である場合、
当該条件分岐命令がループのバックエッジであるかを、
前記条件分岐命令より前の所定数の命令からなるバイト
コード列と実際のループのバックエッジに対応するバイ
トコード列との状態遷移を用いたパターンマッチングに
より判断し、ループのバックエッジと判断された場合に
は当該ループの回数を予測し且つ予測したループ回数を
記憶装置に格納し、前記予測したループ回数に応じてバ
イトコードの実行モードを選択するバイトコード実行モ
ード選択方法。 - 【請求項3】前記実行モードは、ループを含むメソッド
を直ちにコンパイルするモードと、前記インタープリタ
がバイトコードを実行するモードとを含む請求項2記載
のバイトコード実行モード選択方法。 - 【請求項4】前記ループを含むメソッドが直ちにコンパ
イルするモードが、前記予測したループ回数に応じて最
適化のレベルを変更した所定数のモードを含む請求項3
記載のバイトコード実行モード選択方法。 - 【請求項5】前記インタープリタがバイトコードを実行
するモードにおいて、ループを含むメソッドをコンパイ
ルするタイミングを前記予測したループ回数に応じて設
定する請求項3記載のバイトコード実行モード選択方
法。 - 【請求項6】前記ループ回数は、前記条件分岐命令より
前の所定数の命令のオペランドから予測する請求項2記
載のバイトコード実行モード選択方法。 - 【請求項7】ループのバックエッジであるか否か判断し
た条件分岐命令のオペコードを、判断済みであることを
示すように書き換える請求項2記載のバイトコード実行
モード選択方法。 - 【請求項8】ループのバックエッジであるか否か判断し
た条件分岐命令のオペコードを、条件分岐が成立したか
否かを示すように書き換える請求項2記載のバイトコー
ド実行モード選択方法。 - 【請求項9】インタープリタとコンパイラを有し、 前記インタープリタは、バイトコード実行時に、実行す
る命令が後方への条件分岐命令である場合、当該条件分
岐命令がループのバックエッジであるかを、前記条件分
岐命令より前の所定数の命令からなるバイトコード列と
実際のループのバックエッジに対応するバイトコード列
との状態遷移を用いたパターンマッチングにより判断
し、ループのバックエッジと判断された場合には当該ル
ープの回数を予測し且つ予測したループ回数を記憶装置
に格納し、前記予測したループ回数に応じて前記コンパ
イラによる当該ループを含むメソッドをコンパイルする
タイミングを決定する、コンピュータ。 - 【請求項10】バイトコード実行時に、実行する命令が
後方への条件分岐命令である場合、当該条件分岐命令が
ループのバックエッジであるかを、前記条件分岐命令よ
り前の所定数の命令からなるバイトコード列と実際のル
ープのバックエッジに対応するバイトコード列との状態
遷移を用いたパターンマッチングにより判断する手段
と、ループのバックエッジと判断された場合には当該ル
ープの回数を予測し且つ予測したループ回数を記憶装置
に格納する手段とを有するインタープリタと、 前記予測したループ回数に応じてバイトコードの実行モ
ードを選択する手段と、 を有するコンピュータ。 - 【請求項11】バイトコード実行時に、実行する命令が
後方への条件分岐命令である場合、当該条件分岐命令が
ループのバックエッジであるかを、前記条件分岐命令よ
り前の所定数の命令からなるバイトコード列と実際のル
ープのバックエッジに対応するバイトコード列との状態
遷移を用いたパターンマッチングにより判断し、ループ
のバックエッジと判断された場合には当該ループの回数
を予測し且つ予測したループ回数を記憶装置に格納し、
前記予測したループ回数に応じて当該ループを含むメソ
ッドをコンパイルするタイミングを決定するインタープ
リタを格納した記録媒体。 - 【請求項12】バイトコード実行時に、実行する命令が
後方への条件分岐命令である場合、当該条件分岐命令が
ループのバックエッジであるかを、前記条件分岐命令よ
り前の所定数の命令からなるバイトコード列と実際のル
ープのバックエッジに対応するバイトコード列との状態
遷移を用いたパターンマッチングにより判断する機能
と、ループのバックエッジと判断された場合には当該ル
ープの回数を予測し且つ予測したループ回数を記憶装置
に格納する機能と、前記予測したループ回数に応じてバ
イトコードの実行モードを選択する機能を実現するため
のプログラムを格納した記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP01933599A JP3470948B2 (ja) | 1999-01-28 | 1999-01-28 | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ |
US09/492,438 US6546550B1 (en) | 1999-01-28 | 2000-01-27 | Method to determine dynamic compilation time and to select bytecode execution mode |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP01933599A JP3470948B2 (ja) | 1999-01-28 | 1999-01-28 | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000222220A JP2000222220A (ja) | 2000-08-11 |
JP3470948B2 true JP3470948B2 (ja) | 2003-11-25 |
Family
ID=11996545
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP01933599A Expired - Fee Related JP3470948B2 (ja) | 1999-01-28 | 1999-01-28 | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ |
Country Status (2)
Country | Link |
---|---|
US (1) | US6546550B1 (ja) |
JP (1) | JP3470948B2 (ja) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001056764A (ja) * | 1999-08-18 | 2001-02-27 | Access:Kk | 仮想計算機の実行方法および装置 |
DE19963832A1 (de) * | 1999-12-30 | 2001-07-05 | Ericsson Telefon Ab L M | Programmprofilierung |
US7725885B1 (en) * | 2000-05-09 | 2010-05-25 | Hewlett-Packard Development Company, L.P. | Method and apparatus for trace based adaptive run time compiler |
JP2002073345A (ja) * | 2000-08-25 | 2002-03-12 | Fujitsu Ltd | 情報処理装置及び記録媒体 |
EP1316014A1 (en) * | 2000-08-31 | 2003-06-04 | Koninklijke Philips Electronics N.V. | System for executing virtual machine instructions |
US6968545B1 (en) * | 2000-09-11 | 2005-11-22 | Agilent Technologies, Inc. | Method and apparatus for no-latency conditional branching |
JP3808755B2 (ja) * | 2001-11-07 | 2006-08-16 | 富士通株式会社 | Jitコンパイラを備えた仮想計算機 |
US6996814B2 (en) * | 2001-11-14 | 2006-02-07 | Sun Microsystems, Inc. | Method and apparatus for dynamically compiling byte codes into native code |
GB0220282D0 (en) * | 2002-08-31 | 2002-10-09 | Ibm | Improved just in time compilation of java software methods |
US7421687B1 (en) * | 2003-10-08 | 2008-09-02 | Sun Microsystems, Inc. | Optimizing branch condition expressions in a JIT compiler |
US20050251652A1 (en) * | 2004-04-27 | 2005-11-10 | Eswaramoorthi Nallusamy | Methods and apparatus for processing an extensible firmware interface byte code instruction in a loop |
JP4178278B2 (ja) * | 2004-05-25 | 2008-11-12 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ装置、最適化方法、コンパイラプログラム、及び記録媒体 |
US7421540B2 (en) * | 2005-05-03 | 2008-09-02 | International Business Machines Corporation | Method, apparatus, and program to efficiently calculate cache prefetching patterns for loops |
KR100678912B1 (ko) * | 2005-10-18 | 2007-02-05 | 삼성전자주식회사 | 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템 |
JP5042487B2 (ja) * | 2005-11-22 | 2012-10-03 | 株式会社日立ソリューションズ | コンピュータの動作方法、プログラム、コンピュータ |
JP2008097249A (ja) * | 2006-10-11 | 2008-04-24 | Internatl Business Mach Corp <Ibm> | プログラム中の命令列をより高速な命令に置換する技術 |
JP5016288B2 (ja) * | 2006-10-19 | 2012-09-05 | 株式会社日立製作所 | 最適化処理方法、及びその言語処理系 |
JP2009211190A (ja) * | 2008-02-29 | 2009-09-17 | Hitachi Ltd | 情報処理装置 |
US8516459B2 (en) * | 2008-03-25 | 2013-08-20 | Intel Corporation | XSLT-specific XJIT compiler |
JP2010140233A (ja) * | 2008-12-11 | 2010-06-24 | Nec Computertechno Ltd | エミュレーションシステム及びエミュレーション方法 |
US8875111B2 (en) * | 2009-04-23 | 2014-10-28 | Microsoft Corporation | Intermediate language representation and modification |
KR101700406B1 (ko) * | 2010-11-16 | 2017-01-31 | 삼성전자주식회사 | 재구성 가능 어레이의 실행 모드를 동적으로 결정하기 위한 장치 및 방법 |
JP5630671B2 (ja) * | 2012-09-18 | 2014-11-26 | 横河電機株式会社 | フォールトトレラントシステム |
JP2014063285A (ja) * | 2012-09-20 | 2014-04-10 | International Business Maschines Corporation | ガベージ・コレクションのためのコード変換方法、プログラム及びシステム |
US9489205B1 (en) * | 2015-07-03 | 2016-11-08 | Yong-Kyu Jung | Compiler-assisted look-ahead instruction-fetch and branch-prediction system apparatus and method for microprocessors |
JP6555981B2 (ja) * | 2015-08-24 | 2019-08-07 | キヤノン株式会社 | 情報処理装置及びその制御方法 |
CN107179935B (zh) * | 2016-03-11 | 2021-01-29 | 华为技术有限公司 | 一种指令执行方法及虚拟机 |
US11061653B2 (en) * | 2019-10-30 | 2021-07-13 | International Business Machines Corporation | Dynamic compiling for conditional statements during execution |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4755966A (en) * | 1985-06-28 | 1988-07-05 | Hewlett-Packard Company | Bidirectional branch prediction and optimization |
US5428786A (en) * | 1991-03-07 | 1995-06-27 | Digital Equipment Corporation | Branch resolution via backward symbolic execution |
JP3550748B2 (ja) | 1994-09-20 | 2004-08-04 | 富士通株式会社 | コンパイラ装置 |
US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
US6006324A (en) * | 1995-01-25 | 1999-12-21 | Advanced Micro Devices, Inc. | High performance superscalar alignment unit |
US5887152A (en) * | 1995-04-12 | 1999-03-23 | Advanced Micro Devices, Inc. | Load/store unit with multiple oldest outstanding instruction pointers for completing store and load/store miss instructions |
US5881278A (en) * | 1995-10-30 | 1999-03-09 | Advanced Micro Devices, Inc. | Return address prediction system which adjusts the contents of return stack storage to enable continued prediction after a mispredicted branch |
US5768593A (en) * | 1996-03-22 | 1998-06-16 | Connectix Corporation | Dynamic cross-compilation system and method |
US5970249A (en) * | 1997-10-06 | 1999-10-19 | Sun Microsystems, Inc. | Method and apparatus for performing byte-code optimization during pauses |
US5995754A (en) * | 1997-10-06 | 1999-11-30 | Sun Microsystems, Inc. | Method and apparatus for dynamically optimizing byte-coded programs |
US5966538A (en) * | 1997-10-31 | 1999-10-12 | Hewlett-Packard Company | Method and apparatus for automatically determining which compiler options should be used when compiling a computer program |
US6118940A (en) * | 1997-11-25 | 2000-09-12 | International Business Machines Corp. | Method and apparatus for benchmarking byte code sequences |
US6374349B2 (en) * | 1998-03-19 | 2002-04-16 | Mcfarling Scott | Branch predictor with serially connected predictor stages for improving branch prediction accuracy |
US6401196B1 (en) * | 1998-06-19 | 2002-06-04 | Motorola, Inc. | Data processor system having branch control and method thereof |
KR20010072477A (ko) * | 1998-08-13 | 2001-07-31 | 썬 마이크로시스템즈, 인코포레이티드 | 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치 |
US6341348B1 (en) * | 1998-12-03 | 2002-01-22 | Sun Microsystems, Inc. | Software branch prediction filtering for a microprocessor |
US6336213B1 (en) * | 1998-12-03 | 2002-01-01 | International Business Machines Corporation | Method and apparatus for dynamic selection of which bytecodes should be just in time compiled |
US7111290B1 (en) * | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
-
1999
- 1999-01-28 JP JP01933599A patent/JP3470948B2/ja not_active Expired - Fee Related
-
2000
- 2000-01-27 US US09/492,438 patent/US6546550B1/en not_active Expired - Fee Related
Non-Patent Citations (4)
Title |
---|
エリック・アームストロング,「次世代JVM&動的コンパイラ」,Java WORLD,日本,株式会社IDGコミュニケーションズ,1998年 7月 1日,Vol.2,No.7,pp.42−51 |
志村浩也・他,「Java JITコンパイラの試作」,情報処理学会研究報告,日本,社団法人情報処理学会,1996年10月31日,Vol.96,No.106(96−ARC−120),pp.37−42 |
志村浩也・他,「Javaの高速化」,第39回プログラミング・シンポジウム報告書,日本,1998年 1月,pp.99−108,JST資料番号:G0897A |
松田慎一,「Java最新事情’98 Spring」,JAVA PRESS,日本,株式会社技術評論社,1998年 4月20日,Vol.1,pp.2−19 |
Also Published As
Publication number | Publication date |
---|---|
JP2000222220A (ja) | 2000-08-11 |
US6546550B1 (en) | 2003-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3470948B2 (ja) | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ | |
US6192516B1 (en) | Interpreter generation and implementation utilizing interpreter states and register caching | |
JP3894698B2 (ja) | 資源の消費を最小限にするハイブリッド式ジャストインタイム・コンパイラ | |
US6385660B2 (en) | Site specific message dispatch in object-oriented systems | |
US6163780A (en) | System and apparatus for condensing executable computer software code | |
JP3377419B2 (ja) | 命令列生成方法及び装置、変換方法、及びコンピュータ | |
EP0905617B1 (en) | Method for generating a java bytecode data flow graph | |
US6964042B2 (en) | System and method for iterative code optimization using adaptive size metrics | |
US6634022B1 (en) | Method for platform specific efficiency enhancement of java programs and software product therefor | |
US7137123B2 (en) | Inline database for receiver types in object-oriented systems | |
US20090089767A1 (en) | Method and system for implementing a just-in-time compiler | |
US7124407B1 (en) | Method and apparatus for caching native code in a virtual machine interpreter | |
US20050028148A1 (en) | Method for dynamic recompilation of a program | |
US6931638B2 (en) | Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine | |
JP2000081983A (ja) | ル―プに対するバ―ジョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベ―シック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコ―ドを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法 | |
US7739674B2 (en) | Method and apparatus for selectively optimizing interpreted language code | |
JP2005501334A (ja) | Javaコンピューティング環境におけるJavaマクロインストラクションの生成のためのフレームワーク | |
JP3437932B2 (ja) | 配列レンジ・チェックのためのコード生成方法及び装置、並びにバージョニング方法及び装置 | |
US7823140B2 (en) | Java bytecode translation method and Java interpreter performing the same | |
KR100597414B1 (ko) | 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법 | |
JP2919302B2 (ja) | Cpuシミュレーション方法 | |
JP2003186675A (ja) | Javaコンピューティング環境におけるタイプチェック | |
JP2005284729A (ja) | バイトコードをネイティブコードにコンパイルする仮想マシン | |
US20040015873A1 (en) | Identifying references to objects during bytecode verification | |
JP2001056764A (ja) | 仮想計算機の実行方法および装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |