JPH11272476A - バイトコードされたプログラムを動的に最適化するための方法及び装置 - Google Patents
バイトコードされたプログラムを動的に最適化するための方法及び装置Info
- Publication number
- JPH11272476A JPH11272476A JP10319742A JP31974298A JPH11272476A JP H11272476 A JPH11272476 A JP H11272476A JP 10319742 A JP10319742 A JP 10319742A JP 31974298 A JP31974298 A JP 31974298A JP H11272476 A JPH11272476 A JP H11272476A
- Authority
- JP
- Japan
- Prior art keywords
- threshold
- computer
- overhead
- compiled
- selected method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
-
- 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
- G06F8/48—Incremental 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
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
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)
- Stored Programmes (AREA)
Abstract
(57)【要約】
【課題】 ランタイム中にソフトウェアアプリケーショ
ン最適化用に、コードの部分を解釈或いはコンパイルす
べきかを動的に決定する方法及び装置を提供する。 【解決手段】 複数の方法として構成されたバイトコー
ドを含むコンピュータプログラムのランタイム処理のた
めのコンピュータ実現方法は、複数の方法から選択され
た第1の方法を呼び出すことを含む。第1の選択方法の
呼出は、第1の選択方法の解釈を伴う。第1の選択方法
の呼出の数を追跡するように構成された呼出トラッカが
更新され、呼出トラッカがいつ、第1の選択方法の呼出
の数はしきい値を超えた旨を表示するか、に関する決定
が行なわれる。第1の選択方法がコンパイルされるの
は、呼出トラッカが第1の選択方法の呼出の数がしきい
値を超えた旨表示している、と決定されたときである。
このしきい値は、コンパイルオーバヘッドと解釈オーバ
ヘッドとを許容レベルに維持するために定期的に調節さ
れる。
ン最適化用に、コードの部分を解釈或いはコンパイルす
べきかを動的に決定する方法及び装置を提供する。 【解決手段】 複数の方法として構成されたバイトコー
ドを含むコンピュータプログラムのランタイム処理のた
めのコンピュータ実現方法は、複数の方法から選択され
た第1の方法を呼び出すことを含む。第1の選択方法の
呼出は、第1の選択方法の解釈を伴う。第1の選択方法
の呼出の数を追跡するように構成された呼出トラッカが
更新され、呼出トラッカがいつ、第1の選択方法の呼出
の数はしきい値を超えた旨を表示するか、に関する決定
が行なわれる。第1の選択方法がコンパイルされるの
は、呼出トラッカが第1の選択方法の呼出の数がしきい
値を超えた旨表示している、と決定されたときである。
このしきい値は、コンパイルオーバヘッドと解釈オーバ
ヘッドとを許容レベルに維持するために定期的に調節さ
れる。
Description
【0001】
【発明の背景】1. 発明の分野 本発明は一般的に、ソフトウェアアプリケーションの実
行を最適化するための方法及び装置に関する。より詳細
には、本発明は、ランタイム中にソフトウェアアプリケ
ーションを最適化するために、コードの部分を、解釈す
べきか、コンパイルすべきかを動的に決定するための方
法及び装置に関する。 2. 関連技術の説明 コンピュータシステムのネットワーク、例えばローカル
エリアネットワーク、イントラネット、及びインターネ
ット全体にわたってリソースを共有するコンピュータシ
ステムの使用が増加している。従って、特定コンピュー
タシステムは一般に、ソフトウェアアプリケーションが
その特定コンピュータシステムに固有のフォーマットを
取るように要求するという事実によって、ソフトウェア
アプリケーション、つまりコンピュータプログラムは、
異なるコンピュータシステムには異なるフォーマットで
与えられる(deliver)だろう。それとは別に、コンピ
ュータプログラムは、一つの形式のコンピュータプログ
ラムを多くの異なるコンピュータシステムによって利用
できるようにするために、機械独立の形で、すなわちバ
イトコードとしてコンピュータシステムに提供されるだ
ろう。
行を最適化するための方法及び装置に関する。より詳細
には、本発明は、ランタイム中にソフトウェアアプリケ
ーションを最適化するために、コードの部分を、解釈す
べきか、コンパイルすべきかを動的に決定するための方
法及び装置に関する。 2. 関連技術の説明 コンピュータシステムのネットワーク、例えばローカル
エリアネットワーク、イントラネット、及びインターネ
ット全体にわたってリソースを共有するコンピュータシ
ステムの使用が増加している。従って、特定コンピュー
タシステムは一般に、ソフトウェアアプリケーションが
その特定コンピュータシステムに固有のフォーマットを
取るように要求するという事実によって、ソフトウェア
アプリケーション、つまりコンピュータプログラムは、
異なるコンピュータシステムには異なるフォーマットで
与えられる(deliver)だろう。それとは別に、コンピ
ュータプログラムは、一つの形式のコンピュータプログ
ラムを多くの異なるコンピュータシステムによって利用
できるようにするために、機械独立の形で、すなわちバ
イトコードとしてコンピュータシステムに提供されるだ
ろう。
【0002】コンピュータプログラムが機械独立の形で
与えられる(deliver)と、プログラムは直接解釈され
るか、或いは機械独立コード、すなわち「機械コード」
に翻訳されるであろう。直接に解釈されるプログラム
は、機械コードに翻訳されるプログラムよりもコンピュ
ータシステム内で占めるスペースが少ない。しかしなが
ら、直接に解釈されるプログラムは機械コードに翻訳さ
れるプログラムよりも、大抵の場合、実行速度が遅い。
従って、コンピュータプログラムを機械コードに翻訳す
る代わりにコンピュータプログラムを直接に解釈すべき
か否かの決定は、実行速度に対するスペースの相対的な
重要性によることが多い。
与えられる(deliver)と、プログラムは直接解釈され
るか、或いは機械独立コード、すなわち「機械コード」
に翻訳されるであろう。直接に解釈されるプログラム
は、機械コードに翻訳されるプログラムよりもコンピュ
ータシステム内で占めるスペースが少ない。しかしなが
ら、直接に解釈されるプログラムは機械コードに翻訳さ
れるプログラムよりも、大抵の場合、実行速度が遅い。
従って、コンピュータプログラムを機械コードに翻訳す
る代わりにコンピュータプログラムを直接に解釈すべき
か否かの決定は、実行速度に対するスペースの相対的な
重要性によることが多い。
【0003】上述のように、コンピュータプログラムは
コンピュータシステムにバイトコードとして与えられる
であろう。バイトコードを受信するコンピュータシステ
ムは一般に、ランタイムでバイトコードをコンパイルす
るために使用されるコンパイラを含む。ランタイムでバ
イトコードをコンパイルするには、そのバイトコードを
機械コードに翻訳する必要がある。図1(a)は、バイ
トコードコンパイラを持つコンピュータシステムのブロ
ック線図を示す。コンピュータプログラムとして構成さ
れるバイトコード104は、コンピュータシステム10
5に与えられるか、別途に供給される。バイトコード1
04は一般に様々なソースによって供給できる。バイト
コード104が実行されるときは、バイトコード104
はコンパイラ106を使ってランタイムでコンパイルさ
れる。コンパイラ106によって作成されるコンパイル
ド(compiled)コード108は一般に、システム105に
固有でシステム105内で実行可能な機械依存コードで
ある。すなわち、コンパイラ106はバイトコード10
4をランタイムでコンパイルドコード108に翻訳す
る。
コンピュータシステムにバイトコードとして与えられる
であろう。バイトコードを受信するコンピュータシステ
ムは一般に、ランタイムでバイトコードをコンパイルす
るために使用されるコンパイラを含む。ランタイムでバ
イトコードをコンパイルするには、そのバイトコードを
機械コードに翻訳する必要がある。図1(a)は、バイ
トコードコンパイラを持つコンピュータシステムのブロ
ック線図を示す。コンピュータプログラムとして構成さ
れるバイトコード104は、コンピュータシステム10
5に与えられるか、別途に供給される。バイトコード1
04は一般に様々なソースによって供給できる。バイト
コード104が実行されるときは、バイトコード104
はコンパイラ106を使ってランタイムでコンパイルさ
れる。コンパイラ106によって作成されるコンパイル
ド(compiled)コード108は一般に、システム105に
固有でシステム105内で実行可能な機械依存コードで
ある。すなわち、コンパイラ106はバイトコード10
4をランタイムでコンパイルドコード108に翻訳す
る。
【0004】コンピュータシステムの中には、先にコン
パイルされたコードの部分を、それらの部分が繰り返し
実行されることが判った場合に、より効率的に実行され
る形にリコンパイルできるものがある。言い換えれば、
第2の、より高価なコンパイルプロセスを使って、繰り
返し呼び出される、先にコンパイルされたコードをコン
パイルして、繰り返し呼び出されるコードをより効率的
に実行することが可能である。図1(b)は、2つのコ
ンパイルプロセスを使用するコンピュータシステムのブ
ロック線図を示す。コンピュータシステム115は第1
のコンパイラ116と第2のコンパイラ122とを含
む。バイトコード114が実行のためにコンピュータシ
ステムに供給される。ランタイムで、第1のコンパイラ
116によってバイトコード114が機械依存コンパイ
ルドコード118、すなわち機械コードに翻訳される。
パイルされたコードの部分を、それらの部分が繰り返し
実行されることが判った場合に、より効率的に実行され
る形にリコンパイルできるものがある。言い換えれば、
第2の、より高価なコンパイルプロセスを使って、繰り
返し呼び出される、先にコンパイルされたコードをコン
パイルして、繰り返し呼び出されるコードをより効率的
に実行することが可能である。図1(b)は、2つのコ
ンパイルプロセスを使用するコンピュータシステムのブ
ロック線図を示す。コンピュータシステム115は第1
のコンパイラ116と第2のコンパイラ122とを含
む。バイトコード114が実行のためにコンピュータシ
ステムに供給される。ランタイムで、第1のコンパイラ
116によってバイトコード114が機械依存コンパイ
ルドコード118、すなわち機械コードに翻訳される。
【0005】機械依存コンパイルドコード118が実行
されて、機械依存コンパイルドコード118内に含まれ
る異なる方法が追跡され、最も頻繁に呼び出される方法
を第2のコンパイラ122でいつコンパイルすべきかを
決定する。高度に、又は繰り返し実行されるコンパイル
ドコード120が識別されると、その高度に実行される
コンパイルドコード120は、コンピュータプログラム
の全体的実行速度を増加させるためにリコンパイルされ
る。このように、第2のコンパイラ122は、高度に実
行されるコンパイルドコード120を、リコンパイルさ
れた高度に実行されるコード124に翻訳する。
されて、機械依存コンパイルドコード118内に含まれ
る異なる方法が追跡され、最も頻繁に呼び出される方法
を第2のコンパイラ122でいつコンパイルすべきかを
決定する。高度に、又は繰り返し実行されるコンパイル
ドコード120が識別されると、その高度に実行される
コンパイルドコード120は、コンピュータプログラム
の全体的実行速度を増加させるためにリコンパイルされ
る。このように、第2のコンパイラ122は、高度に実
行されるコンパイルドコード120を、リコンパイルさ
れた高度に実行されるコード124に翻訳する。
【0006】第2のコンパイラ122はしばしば、第1
のコンパイラ116よりも遅いコンパイラだが、第2の
コンパイラ122を使ってコンパイルされるコードは通
常、第1のコンパイラ116を使ってコンパイルされる
コードよりも効率的に実行される。従って、高度に実行
されるコンパイルドコード120をいつリコンパイルす
べきかの決定は一般に、全ランタイムに対する追加のコ
ンパイルオーバヘッド(compilation overhead)とリコン
パイルされた高度に実行されるコード124によって与
えられる効率改善の間のトレードオフを含む。
のコンパイラ116よりも遅いコンパイラだが、第2の
コンパイラ122を使ってコンパイルされるコードは通
常、第1のコンパイラ116を使ってコンパイルされる
コードよりも効率的に実行される。従って、高度に実行
されるコンパイルドコード120をいつリコンパイルす
べきかの決定は一般に、全ランタイムに対する追加のコ
ンパイルオーバヘッド(compilation overhead)とリコン
パイルされた高度に実行されるコード124によって与
えられる効率改善の間のトレードオフを含む。
【0007】効率を増大にするために、先にコンパイル
されたコードのリコンパイルが可能なシステムの一つ
は、先にコンパイルされたコードをリコンパイルすべき
か否かの決定が、方法等のコンパイルドコードの特定部
分が何回コールされたかに基づいて行なわれることを必
要とする。方法が一定の限界値よりも頻繁に呼び出され
た場合は、その方法はリコンパイルされる。一定の限界
値は本質的に一定のしきい値であり、それは、実行の効
率を増加させるために方法がリコンパイルされる前に、
その方法を呼び出すべき回数を反映している。
されたコードのリコンパイルが可能なシステムの一つ
は、先にコンパイルされたコードをリコンパイルすべき
か否かの決定が、方法等のコンパイルドコードの特定部
分が何回コールされたかに基づいて行なわれることを必
要とする。方法が一定の限界値よりも頻繁に呼び出され
た場合は、その方法はリコンパイルされる。一定の限界
値は本質的に一定のしきい値であり、それは、実行の効
率を増加させるために方法がリコンパイルされる前に、
その方法を呼び出すべき回数を反映している。
【0008】コンパイラを使ってランタイムでバイトコ
ードを機械依存コードに翻訳するときは、かなりのコン
パイルオーバヘッドが、しばしばプログラムの全実行に
追加される。従って、機械コードは解釈されたコードよ
りはるかに速く実行するかもしれないが、機械コードを
実行する前にプログラムのすべての部分を機械コードに
コンパイルすることは、実行速度の増加がプログラムの
コンパイルに伴うオーバヘッドを補償しない場合、必ず
しも望ましくないだろう。言い換えれば、プログラムの
コンパイルに費やされる時間の量がプログラムの実行中
に回復されないときは、プログラムは解釈されたコード
として、より迅速に実行するかもしれない。
ードを機械依存コードに翻訳するときは、かなりのコン
パイルオーバヘッドが、しばしばプログラムの全実行に
追加される。従って、機械コードは解釈されたコードよ
りはるかに速く実行するかもしれないが、機械コードを
実行する前にプログラムのすべての部分を機械コードに
コンパイルすることは、実行速度の増加がプログラムの
コンパイルに伴うオーバヘッドを補償しない場合、必ず
しも望ましくないだろう。言い換えれば、プログラムの
コンパイルに費やされる時間の量がプログラムの実行中
に回復されないときは、プログラムは解釈されたコード
として、より迅速に実行するかもしれない。
【0009】上述の既存のシステムでは、コンパイルさ
れたプログラムの中のルーチンのリコンパイルはプログ
ラムをより効率的に実行可能にするために役立つかもし
れないが、ルーチンをいつリコンパイルすべきかを決定
するための一定の限界の使用は、その反対に、非効率
な、例えば非最適の実行をもたらすかもしれない。例と
して、プログラム中の実質上すべてのルーチンがリコン
パイルされるように一定の限界がセットされた場合は、
リコンパイル(re-compilation)によって得られた実行速
度の増加はリコンパイルに伴うコンパイルオーバヘッド
を補償しないかもしれない。
れたプログラムの中のルーチンのリコンパイルはプログ
ラムをより効率的に実行可能にするために役立つかもし
れないが、ルーチンをいつリコンパイルすべきかを決定
するための一定の限界の使用は、その反対に、非効率
な、例えば非最適の実行をもたらすかもしれない。例と
して、プログラム中の実質上すべてのルーチンがリコン
パイルされるように一定の限界がセットされた場合は、
リコンパイル(re-compilation)によって得られた実行速
度の増加はリコンパイルに伴うコンパイルオーバヘッド
を補償しないかもしれない。
【0010】従って、必要なことはバイトコードフォー
マットでプログラムを効率的に実行するための方法であ
る。より具体的には、望ましいことは、コンピュータプ
ログラムの部分を解釈すべ時と、コンピュータプログラ
ムの部分を機械コードに翻訳すべき時を動的に決定する
ことによって、コンピュータプログラムの効率的な実行
を保証するための方法である。
マットでプログラムを効率的に実行するための方法であ
る。より具体的には、望ましいことは、コンピュータプ
ログラムの部分を解釈すべ時と、コンピュータプログラ
ムの部分を機械コードに翻訳すべき時を動的に決定する
ことによって、コンピュータプログラムの効率的な実行
を保証するための方法である。
【0011】
【発明の概要】ランタイム中にソフトウェアアプリケー
ションを最適化するためにバイトコードの部分を解釈す
べきか、コンパイルすべきかを動的に決定するための方
法及び装置が開示される。本発明の一局面によれば、選
ばれた方法が呼び出されると、それが最初に解釈され
る。呼出トラッカ(invocation tracker)が、選ばれた方
法の呼出の数を追跡する。選ばれた方法の呼出の数がし
きい値を超えると、その方法がコンパイルされる。各種
方法その他のコードセグメントの使用を独立に追跡する
ことによって、どの方法をコンパイルすべきか、及びど
の方法を解釈状態で残すべきかに関して、より賢明な決
定を行なうことができる。実施形態の中には、すべての
方法に対して単一のしきい値を使用するものがある。ま
た他の実施形態では、各しきい値が一つ以上の方法に関
連した状態で複数のしきい値が使用される。後者の構成
では、異なる方法に関連するしきい値を変更することが
できる。
ションを最適化するためにバイトコードの部分を解釈す
べきか、コンパイルすべきかを動的に決定するための方
法及び装置が開示される。本発明の一局面によれば、選
ばれた方法が呼び出されると、それが最初に解釈され
る。呼出トラッカ(invocation tracker)が、選ばれた方
法の呼出の数を追跡する。選ばれた方法の呼出の数がし
きい値を超えると、その方法がコンパイルされる。各種
方法その他のコードセグメントの使用を独立に追跡する
ことによって、どの方法をコンパイルすべきか、及びど
の方法を解釈状態で残すべきかに関して、より賢明な決
定を行なうことができる。実施形態の中には、すべての
方法に対して単一のしきい値を使用するものがある。ま
た他の実施形態では、各しきい値が一つ以上の方法に関
連した状態で複数のしきい値が使用される。後者の構成
では、異なる方法に関連するしきい値を変更することが
できる。
【0012】本実施形態の別の局面では、特定方法のコ
ンパイルに伴うオーバヘッドが測定される。オーバヘッ
ドは次に、許容オーバヘッドパラメータと比較されて、
そのオーバヘッドが許容範囲内にない場合は、その特定
方法のコンパイルを引き起こすしきい値が調節される。
本発明のこの局面は、方法の初期コンパイル及び/又は
方法のリコンパイルに適用できる。
ンパイルに伴うオーバヘッドが測定される。オーバヘッ
ドは次に、許容オーバヘッドパラメータと比較されて、
そのオーバヘッドが許容範囲内にない場合は、その特定
方法のコンパイルを引き起こすしきい値が調節される。
本発明のこの局面は、方法の初期コンパイル及び/又は
方法のリコンパイルに適用できる。
【0013】本発明の更に別の局面によれば、複数の方
法として構成されたバイトコードを実行するためのコン
ピュータシステムは、各種方法を解釈するのに適したイ
ンタープリタと、選ばれた方法の解釈をカウントする追
跡メカニズムとを含む。追跡メカニズムを用いて、選ば
れた方法がいつコンパイルに適するかが決定される。コ
ンピュータシステムは更に、各種方法をコンパイルする
のに適したコンパイラを含む。一実施形態では、コンピ
ュータシステムは、選ばれた方法がいつコンパイルに適
するかを、追跡メカニズムと協力して決定するしきい調
節メカニズムを含む。別の実施形態では、コンピュータ
システムは更に、選ばれた方法の呼出を、それがコンパ
イルされた後でカウントすると共に、その選ばれた方法
がいつリコンパイルに適するかの決定に使用される別の
追跡メカニズムを含む。
法として構成されたバイトコードを実行するためのコン
ピュータシステムは、各種方法を解釈するのに適したイ
ンタープリタと、選ばれた方法の解釈をカウントする追
跡メカニズムとを含む。追跡メカニズムを用いて、選ば
れた方法がいつコンパイルに適するかが決定される。コ
ンピュータシステムは更に、各種方法をコンパイルする
のに適したコンパイラを含む。一実施形態では、コンピ
ュータシステムは、選ばれた方法がいつコンパイルに適
するかを、追跡メカニズムと協力して決定するしきい調
節メカニズムを含む。別の実施形態では、コンピュータ
システムは更に、選ばれた方法の呼出を、それがコンパ
イルされた後でカウントすると共に、その選ばれた方法
がいつリコンパイルに適するかの決定に使用される別の
追跡メカニズムを含む。
【0014】本発明のこれらとその他の利点は、下記の
詳細説明を一読して各種の図面を検討することによって
明らかになるであろう。
詳細説明を一読して各種の図面を検討することによって
明らかになるであろう。
【0015】本発明は添付の図面に関してなされる下記
説明を参照することによって充分に理解されるであろ
う。
説明を参照することによって充分に理解されるであろ
う。
【0016】
【発明の実施の形態】バイトコード化された(byte-code
d)コンピュータプログラムがコンピュータシステムに提
供されると、そのプログラムは直接に解釈されるか、プ
ログラムは実行のためにランタイムで機械コードに翻訳
することができる。直接に解釈されるプログラムは一般
に、機械コードに翻訳されるプログラムよりも占拠する
コンピュータメモリが少ない。他方、機械コードに翻訳
されるプログラムは通常、直接に解釈されるプログラム
より実行速度が速い。しかしながら、場合によっては、
コンパイラを使って機械コードを生成するときにプログ
ラムの全ランタイムに追加されるコンパイルオーバヘッ
ドは、必ずしもそのプログラムの実行中に回収されな
い。これらの場合、プログラムを直接に解釈する方がよ
り速く、より効率的なことが判明するかもしれない。一
般に、プログラムがより効率的に実行されるのは、それ
が直接に解釈される場合なのか、機械コードに翻訳され
る場合かの決定は難しい。従って、プログラムは可能で
ある最も迅速、又は最も効率的な方法で実行されないこ
とも多い。
d)コンピュータプログラムがコンピュータシステムに提
供されると、そのプログラムは直接に解釈されるか、プ
ログラムは実行のためにランタイムで機械コードに翻訳
することができる。直接に解釈されるプログラムは一般
に、機械コードに翻訳されるプログラムよりも占拠する
コンピュータメモリが少ない。他方、機械コードに翻訳
されるプログラムは通常、直接に解釈されるプログラム
より実行速度が速い。しかしながら、場合によっては、
コンパイラを使って機械コードを生成するときにプログ
ラムの全ランタイムに追加されるコンパイルオーバヘッ
ドは、必ずしもそのプログラムの実行中に回収されな
い。これらの場合、プログラムを直接に解釈する方がよ
り速く、より効率的なことが判明するかもしれない。一
般に、プログラムがより効率的に実行されるのは、それ
が直接に解釈される場合なのか、機械コードに翻訳され
る場合かの決定は難しい。従って、プログラムは可能で
ある最も迅速、又は最も効率的な方法で実行されないこ
とも多い。
【0017】バイトコード化されたコンピュータプログ
ラムの直接的な解釈と機械コードへの翻訳の両者を許す
ことは、純粋に解釈されたプログラムで得られる実行速
度に比べて、コンピュータプログラムの実行速度を増加
させる。解釈されたコードと機械コード、例えばコンパ
イルドコードの混合は、機械コードのみの実行に伴うメ
モリ要件も明らかに減少させる。このように、解釈され
たコードとコンパイルドコードの混合はプログラム実行
の効率を増加させる。
ラムの直接的な解釈と機械コードへの翻訳の両者を許す
ことは、純粋に解釈されたプログラムで得られる実行速
度に比べて、コンピュータプログラムの実行速度を増加
させる。解釈されたコードと機械コード、例えばコンパ
イルドコードの混合は、機械コードのみの実行に伴うメ
モリ要件も明らかに減少させる。このように、解釈され
たコードとコンパイルドコードの混合はプログラム実行
の効率を増加させる。
【0018】バイトコード化されたプログラム内の各方
法をモニタして、方法のコンパイルがプログラムの全実
行に対して有益になるか否かを決定することができる。
一実施形態では、方法のモニタは、方法が、解釈された
方法として呼び出される回数の追跡を伴う。解釈された
方法の呼出しが、その方法が、コンパイルされた場合に
コンパイルコストを回収する可能性があることを示すレ
ベル、つまり、しきい値に達すると、その方法が動的に
コンパイルされる。プログラム中の方法のコンパイルに
伴うコンパイルオーバヘッドが許容レベルに維持される
ことを本質的に保証するために、プログラムのコンパイ
ルオーバヘッドと解釈オーバヘッドの両者がモニタされ
る。コンパイルオーバヘッドが高すぎると見なされると
きは、コンパイルされる方法の数を削減することによっ
てコンパイルオーバヘッドを低くするための調節ができ
る。行なわれる調節は、解釈された方法をいつコンパイ
ルすべきかの決定に用いられるしきい値を上げることを
含む。適合しきい値(adaptive threshold)の修正を許す
ことによって、バイトコード化されたプログラムの実行
を実質的に最適化できる。言い換えれば、解釈されたコ
ードと動的にコンパイルされたコードの混合を調節する
ことによって、より少ない実行時間、ならびにプログラ
ムによって占められるメモリスペースの量とプログラム
の実行速度間のより良いバランスを達成できる。
法をモニタして、方法のコンパイルがプログラムの全実
行に対して有益になるか否かを決定することができる。
一実施形態では、方法のモニタは、方法が、解釈された
方法として呼び出される回数の追跡を伴う。解釈された
方法の呼出しが、その方法が、コンパイルされた場合に
コンパイルコストを回収する可能性があることを示すレ
ベル、つまり、しきい値に達すると、その方法が動的に
コンパイルされる。プログラム中の方法のコンパイルに
伴うコンパイルオーバヘッドが許容レベルに維持される
ことを本質的に保証するために、プログラムのコンパイ
ルオーバヘッドと解釈オーバヘッドの両者がモニタされ
る。コンパイルオーバヘッドが高すぎると見なされると
きは、コンパイルされる方法の数を削減することによっ
てコンパイルオーバヘッドを低くするための調節ができ
る。行なわれる調節は、解釈された方法をいつコンパイ
ルすべきかの決定に用いられるしきい値を上げることを
含む。適合しきい値(adaptive threshold)の修正を許す
ことによって、バイトコード化されたプログラムの実行
を実質的に最適化できる。言い換えれば、解釈されたコ
ードと動的にコンパイルされたコードの混合を調節する
ことによって、より少ない実行時間、ならびにプログラ
ムによって占められるメモリスペースの量とプログラム
の実行速度間のより良いバランスを達成できる。
【0019】図2(a)に関して、バイトコードをいつ
動的にコンパイルすベきかを適合しきい値を用いて決定
するコンピュータシステムを、本発明の実施形態に従っ
て説明する。バイトコード144は、コンピュータシス
テム146への入力としてランタイムで供給される。機
械独立のコンピュータプログラムとして編成されるバイ
トコード144は通常、方法又はルーチンとして構成さ
れる。一実施形態では、バイトコード144は、バーチ
ャルマシン内のコンパイルタイム環境によって同一バー
チャルマシン内のランタイム環境、例えばコンピュータ
システム146へ供給できる。本発明が実現される適当
なバーチャルマシンの一つを、図11に関して以下によ
り詳しく説明する。
動的にコンパイルすベきかを適合しきい値を用いて決定
するコンピュータシステムを、本発明の実施形態に従っ
て説明する。バイトコード144は、コンピュータシス
テム146への入力としてランタイムで供給される。機
械独立のコンピュータプログラムとして編成されるバイ
トコード144は通常、方法又はルーチンとして構成さ
れる。一実施形態では、バイトコード144は、バーチ
ャルマシン内のコンパイルタイム環境によって同一バー
チャルマシン内のランタイム環境、例えばコンピュータ
システム146へ供給できる。本発明が実現される適当
なバーチャルマシンの一つを、図11に関して以下によ
り詳しく説明する。
【0020】バイトコード144がコンピュータシステ
ム146に供給されると、バイトコード144はインタ
ープリタ148で処理することができる。それとは別
に、バイトコード144をコンパイラ150によってコ
ンパイルしてコンパイルドコードを作成することもでき
る。バイトコード144は一般に、インタープリタ14
8とコンパイラ150の両者に実質上直接に入力しても
よいが、記載の実施形態では、バイトコード144は処
理のためにインタープリタ148のみに供給される。バ
イトコード144の処理に関連するステップを、図2
(b)に関して以下に説明する。
ム146に供給されると、バイトコード144はインタ
ープリタ148で処理することができる。それとは別
に、バイトコード144をコンパイラ150によってコ
ンパイルしてコンパイルドコードを作成することもでき
る。バイトコード144は一般に、インタープリタ14
8とコンパイラ150の両者に実質上直接に入力しても
よいが、記載の実施形態では、バイトコード144は処
理のためにインタープリタ148のみに供給される。バ
イトコード144の処理に関連するステップを、図2
(b)に関して以下に説明する。
【0021】方法が呼び出される度に、その方法に関連
するバイトコード144がインタープリタ148を使っ
て解釈される。記載の実施形態では、方法が何回解釈さ
れるかの手段が維持される。任意の適当な手段を使っ
て、方法が何回解釈されるかを追跡することができる。
適当な手段は、それに限定されないが、方法が解釈され
る回数をカウントするために使用されるカウンタであ
る。そのようなカウンタは、方法が解釈される度にカウ
ンタが増分されるように、方法の中に実現できる。
するバイトコード144がインタープリタ148を使っ
て解釈される。記載の実施形態では、方法が何回解釈さ
れるかの手段が維持される。任意の適当な手段を使っ
て、方法が何回解釈されるかを追跡することができる。
適当な手段は、それに限定されないが、方法が解釈され
る回数をカウントするために使用されるカウンタであ
る。そのようなカウンタは、方法が解釈される度にカウ
ンタが増分されるように、方法の中に実現できる。
【0022】方法が解釈される回数がしきい値、すなわ
ち限界値を超えると、コンパイラ150を使ってその方
法をコンパイルできる。頻繁に実行されるコード158
に含まれる方法の繰り返しの解釈は、解釈されたバイト
コード154が一般にコンパイルドコードよりも実行が
遅いか効率が劣るので、非効率かもしれない。頻繁に実
行されるコード158のコンパイルは、方法のコンパイ
ルによって得られる時間の節約がコンパイルプロセスに
伴うコンパイルオーバヘッドを補償する可能性があるの
で、一般に、頻繁実行コード158に組み込まれた方法
のより効率的な実行を可能とするであろう。
ち限界値を超えると、コンパイラ150を使ってその方
法をコンパイルできる。頻繁に実行されるコード158
に含まれる方法の繰り返しの解釈は、解釈されたバイト
コード154が一般にコンパイルドコードよりも実行が
遅いか効率が劣るので、非効率かもしれない。頻繁に実
行されるコード158のコンパイルは、方法のコンパイ
ルによって得られる時間の節約がコンパイルプロセスに
伴うコンパイルオーバヘッドを補償する可能性があるの
で、一般に、頻繁実行コード158に組み込まれた方法
のより効率的な実行を可能とするであろう。
【0023】一般に、大抵のコンピュータプログラムの
実行では、繰り返し実行される方法もあれば、実行頻度
の少ない方法もある。頻繁に実行されるコード158は
一般に、プログラムの実行の重要部分を占める方法を含
むコードのセクションとして識別できる。頻繁実行(fre
quently executed) コード158がコンパイラ150に
よってコンパイルされると、頻繁実行コード162のコ
ンパイルド版が作成される。従って、コンパイルされた
頻繁実行コード162内に含まれる方法が呼び出される
と、そのコンパイルされた方法が呼び出される。一実施
形態では、頻繁実行コード158は、全実行タイムの実
質的に50%以上、例えば全実行時間のほぼ90%の割
合を占める方法のグループを含む。
実行では、繰り返し実行される方法もあれば、実行頻度
の少ない方法もある。頻繁に実行されるコード158は
一般に、プログラムの実行の重要部分を占める方法を含
むコードのセクションとして識別できる。頻繁実行(fre
quently executed) コード158がコンパイラ150に
よってコンパイルされると、頻繁実行コード162のコ
ンパイルド版が作成される。従って、コンパイルされた
頻繁実行コード162内に含まれる方法が呼び出される
と、そのコンパイルされた方法が呼び出される。一実施
形態では、頻繁実行コード158は、全実行タイムの実
質的に50%以上、例えば全実行時間のほぼ90%の割
合を占める方法のグループを含む。
【0024】コンピュータシステムの中には単一レベル
のコンパイルを含むものもあれば、複数レベルのコンパ
イルを含むものもある。多重レベルのコンパイルを含む
コンピュータシステムをアレンジすることによって、コ
ンパイルされた方法を、その方法のリコンパイルが方法
に伴う実行効率を増加させると決定されたときにリコン
パイルできる。例として、コンパイラ150を使って達
成される第1のレベルのコンパイルは、「中間」レベル
のコンパイルに関係させることができる。中間レベルの
コンパイルをアレンジすることによって、バイトコード
を、そのバイトコードを解釈することよりも効率的だ
が、「最終」レベルのコンパイルほど効率的でないかも
しれないコンパイルド形式にコンパイルできる。中間レ
ベルのコンパイルは、コンパイル速度に関して、中間的
にコンパイルされた方法の実行に伴う一部の実行効率を
本質的に犠牲にするかもしれない。それに対して最終レ
ベルのコンパイルは、よい長いコンパイルタイムを伴う
かもしれないが、より効率的な実行となる。
のコンパイルを含むものもあれば、複数レベルのコンパ
イルを含むものもある。多重レベルのコンパイルを含む
コンピュータシステムをアレンジすることによって、コ
ンパイルされた方法を、その方法のリコンパイルが方法
に伴う実行効率を増加させると決定されたときにリコン
パイルできる。例として、コンパイラ150を使って達
成される第1のレベルのコンパイルは、「中間」レベル
のコンパイルに関係させることができる。中間レベルの
コンパイルをアレンジすることによって、バイトコード
を、そのバイトコードを解釈することよりも効率的だ
が、「最終」レベルのコンパイルほど効率的でないかも
しれないコンパイルド形式にコンパイルできる。中間レ
ベルのコンパイルは、コンパイル速度に関して、中間的
にコンパイルされた方法の実行に伴う一部の実行効率を
本質的に犠牲にするかもしれない。それに対して最終レ
ベルのコンパイルは、よい長いコンパイルタイムを伴う
かもしれないが、より効率的な実行となる。
【0025】一実施形態では、追跡メカニズムを使用し
て、最も頻繁に実行される、コンパイルされた頻繁実行
コード162に含まれる方法を識別できる。言い換えれ
ば、コンパイルされた頻繁実行コード162内で、高度
に実行されるコンパイルドコード166を識別できる。
高度に実行されるコンパイルドコード166内の方法が
実行される回数がしきい値を超えると、高度に実行され
るコンパイルドコード166が追加コンパイラ170を
使ってリコンパイルされて、高度に実行されるコード1
74のコンパイルド版が作成される。言うまでもなく、
追加コンパイラ170はコンパイラ150とは異なるコ
ンパイラでよい。その他に、コンパイラ170とコンパ
イラ150は、異なるパラメータで実現された実質的に
同一のコンパイラでもよい。これまで2つのレベルのコ
ンパイルのみを説明したが、システム146は一般に、
任意数のレベルのコンパイルを含むことができる。
て、最も頻繁に実行される、コンパイルされた頻繁実行
コード162に含まれる方法を識別できる。言い換えれ
ば、コンパイルされた頻繁実行コード162内で、高度
に実行されるコンパイルドコード166を識別できる。
高度に実行されるコンパイルドコード166内の方法が
実行される回数がしきい値を超えると、高度に実行され
るコンパイルドコード166が追加コンパイラ170を
使ってリコンパイルされて、高度に実行されるコード1
74のコンパイルド版が作成される。言うまでもなく、
追加コンパイラ170はコンパイラ150とは異なるコ
ンパイラでよい。その他に、コンパイラ170とコンパ
イラ150は、異なるパラメータで実現された実質的に
同一のコンパイラでもよい。これまで2つのレベルのコ
ンパイルのみを説明したが、システム146は一般に、
任意数のレベルのコンパイルを含むことができる。
【0026】図2(b)は、本発明の実施形態による、
バイトコード、(例えば機械独立コンピュータプログラ
ム)の処理に関連するステップを示すプロセス流れ線図
である。プロセス202は、しきい値モニタが起動され
るステップ204で始まる。しきい値モニタは、以下に
説明するように、コンピュータプログラムと同時に実行
して、特定方法を、その方法のコンパイルが考慮される
前に、実行すべき回数を示すしきい値を追跡する。しき
い値モニタの一実施形態を図7に関して以下に説明す
る。
バイトコード、(例えば機械独立コンピュータプログラ
ム)の処理に関連するステップを示すプロセス流れ線図
である。プロセス202は、しきい値モニタが起動され
るステップ204で始まる。しきい値モニタは、以下に
説明するように、コンピュータプログラムと同時に実行
して、特定方法を、その方法のコンパイルが考慮される
前に、実行すべき回数を示すしきい値を追跡する。しき
い値モニタの一実施形態を図7に関して以下に説明す
る。
【0027】ステップ206では、図3に関して以下に
説明するように、バイトコードから成るコンピュータプ
ログラムが実行れる。コンピュータプログラムが実行さ
れた後、バイトコードを処理する方法が完了する。言う
までもなく、記載の実施形態では、しきい値モニタとプ
ログラムは、実質上同時に、すなわち並列プロセスとし
て実行される。言い換えれば、ステップ204とステッ
プ206は本質的に並列に実行される。
説明するように、バイトコードから成るコンピュータプ
ログラムが実行れる。コンピュータプログラムが実行さ
れた後、バイトコードを処理する方法が完了する。言う
までもなく、記載の実施形態では、しきい値モニタとプ
ログラムは、実質上同時に、すなわち並列プロセスとし
て実行される。言い換えれば、ステップ204とステッ
プ206は本質的に並列に実行される。
【0028】次に図3を参照して、プログラムの実行に
関連するステップを本発明の実施形態に従って説明す
る。すなわち、図2(b)のステップ206について説
明する。ステップ308で、しきい値が初期化される。
一実施形態では、しきい値は、特定方法を、その方法の
コンパイルが考慮される前に、実行すべき回数を示す上
限しきい値である。しきい値は一般に、特定システムの
要件、例えばメモリ要件や性能要件によって大幅に変更
できる。例として、しきい値は約1000〜10,00
0の範囲になるように初期化できる。
関連するステップを本発明の実施形態に従って説明す
る。すなわち、図2(b)のステップ206について説
明する。ステップ308で、しきい値が初期化される。
一実施形態では、しきい値は、特定方法を、その方法の
コンパイルが考慮される前に、実行すべき回数を示す上
限しきい値である。しきい値は一般に、特定システムの
要件、例えばメモリ要件や性能要件によって大幅に変更
できる。例として、しきい値は約1000〜10,00
0の範囲になるように初期化できる。
【0029】一実施形態では、プログラム実行に伴うす
べての方法に対して単一のしきい値しか存在しないかも
しれない。すなわち、しきい値はグローバル定数かグロ
ーバル変数かもしれない。しかしながら、他の実施形態
では、言うまでもないことだが、多重しきい値が存在す
る、例えばしきい値は、方法固有の定数か方法固有の変
数かもしれない。
べての方法に対して単一のしきい値しか存在しないかも
しれない。すなわち、しきい値はグローバル定数かグロ
ーバル変数かもしれない。しかしながら、他の実施形態
では、言うまでもないことだが、多重しきい値が存在す
る、例えばしきい値は、方法固有の定数か方法固有の変
数かもしれない。
【0030】しきい値がステップ308で初期化された
後、実行カウンタを持たない方法を含む解釈されたコー
ドがロードされて、ステップ312で、実行カウンタが
その方法に追加される。言い換えれば、方法が割り当て
られて、カウンタがその新しく割り当てられた方法に追
加される。一旦、カウンタが追加されると、ステップ3
16で、新割当て方法の中のカウンタが初期化、例えば
ゼロにセットされる。
後、実行カウンタを持たない方法を含む解釈されたコー
ドがロードされて、ステップ312で、実行カウンタが
その方法に追加される。言い換えれば、方法が割り当て
られて、カウンタがその新しく割り当てられた方法に追
加される。一旦、カウンタが追加されると、ステップ3
16で、新割当て方法の中のカウンタが初期化、例えば
ゼロにセットされる。
【0031】ステップ316から、プログラムの流れは
ステップ320に進み、そこで、ロードされたコードの
方法が、コードの実行が完了するか或いはロードされた
コード内の実質上すべての適切な方法が実行されるま
で、実行される。コードの実行中、制御の流れは、先に
ロードされなかった方法に到達するかもしれないが、そ
の場合、そのコードは、当業者の承知するように、動的
にロードされるだろう。方法Mの実行に関連するステッ
プを、図4に関して以下により詳しく説明する。コード
の実行の過程で、ロードすべき解釈されたコードが更に
存在するか否かに関する決定がステップ324で行なわ
れる。追加の解釈されたコードをロードすべきであると
決定された場合、プロセスの流れは、追加コードがロー
ドされるステップ312へ戻る。それとは別に、ロード
すべき追加の解釈されたコードは存在しないと決定され
た場合、ステップ320でコードの実行が継続する。
ステップ320に進み、そこで、ロードされたコードの
方法が、コードの実行が完了するか或いはロードされた
コード内の実質上すべての適切な方法が実行されるま
で、実行される。コードの実行中、制御の流れは、先に
ロードされなかった方法に到達するかもしれないが、そ
の場合、そのコードは、当業者の承知するように、動的
にロードされるだろう。方法Mの実行に関連するステッ
プを、図4に関して以下により詳しく説明する。コード
の実行の過程で、ロードすべき解釈されたコードが更に
存在するか否かに関する決定がステップ324で行なわ
れる。追加の解釈されたコードをロードすべきであると
決定された場合、プロセスの流れは、追加コードがロー
ドされるステップ312へ戻る。それとは別に、ロード
すべき追加の解釈されたコードは存在しないと決定され
た場合、ステップ320でコードの実行が継続する。
【0032】図4は、本発明の実施形態による方法の実
行に関連するステップ、すなわち図3のステップ320
を説明するプロセス流れ線図である。方法Mの実行はス
テップ404で開始され、そこで方法M用のカウンタ、
すなわち実行カウンタが増分される。カウンタが増分さ
れた後、方法M用カウンタはステップ408でしきい値
と比較される。上述のように、しきい値は、方法Mの可
能なコンパイルが考慮される前に方法Mが何回実行され
るかに関する表示である。
行に関連するステップ、すなわち図3のステップ320
を説明するプロセス流れ線図である。方法Mの実行はス
テップ404で開始され、そこで方法M用のカウンタ、
すなわち実行カウンタが増分される。カウンタが増分さ
れた後、方法M用カウンタはステップ408でしきい値
と比較される。上述のように、しきい値は、方法Mの可
能なコンパイルが考慮される前に方法Mが何回実行され
るかに関する表示である。
【0033】ステップ412では、方法M用カウンタが
しきい値を超えるか否かについての決定が行なわれる。
方法M用カウンタがしきい値を超えない場合は、方法M
をコンパイルする必要がないことを示す。従って、プロ
セスの流れはステップ412からステップ416に移
り、そこで方法Mがインタープリタによって実行され
る。代わりに、ステップ312でM用カウンタがしきい
値を超えると決定された場合は、全プログラムの実行
は、方法Mが解釈ではなく、コンパイルされるとすれ
ば、より効率的になることを示す。このように、方法M
用カウンタがしきい値を超えると決定されたときは、リ
コンパイラがステップ420で実行される。リコンパイ
ラの実行に関連するステップを、図5に関して以下に更
に詳しく説明する。
しきい値を超えるか否かについての決定が行なわれる。
方法M用カウンタがしきい値を超えない場合は、方法M
をコンパイルする必要がないことを示す。従って、プロ
セスの流れはステップ412からステップ416に移
り、そこで方法Mがインタープリタによって実行され
る。代わりに、ステップ312でM用カウンタがしきい
値を超えると決定された場合は、全プログラムの実行
は、方法Mが解釈ではなく、コンパイルされるとすれ
ば、より効率的になることを示す。このように、方法M
用カウンタがしきい値を超えると決定されたときは、リ
コンパイラがステップ420で実行される。リコンパイ
ラの実行に関連するステップを、図5に関して以下に更
に詳しく説明する。
【0034】リコンパイラがステップ420で実行され
た後、プロセスの流れはステップ424に進み、そこで
方法Mがコンパイルされるか否かに関する決定が行なわ
れる。すなわち、ステップ420でのリコンパイラの実
行の結果として方法Mがコンパイルされたか否かに関す
る決定が行なわれる。方法Mがコンパイルされていない
と決定された場合、プロセスの流れはステップ416に
移り、方法Mが解釈を介して実行される。ステップ42
4で、方法Mがコンパイルされていると決定された場
合、そのコンパイルされた方法M用のコードがステップ
428で実行される。
た後、プロセスの流れはステップ424に進み、そこで
方法Mがコンパイルされるか否かに関する決定が行なわ
れる。すなわち、ステップ420でのリコンパイラの実
行の結果として方法Mがコンパイルされたか否かに関す
る決定が行なわれる。方法Mがコンパイルされていない
と決定された場合、プロセスの流れはステップ416に
移り、方法Mが解釈を介して実行される。ステップ42
4で、方法Mがコンパイルされていると決定された場
合、そのコンパイルされた方法M用のコードがステップ
428で実行される。
【0035】上述のように、一実施形態では、リコンパ
イラを使ってコンパイラが所定の方法、例えば方法Mを
どのように処理するかが決定される。このようなリコン
パイラをアレンジすることによって、コンパイルが全プ
ログラムの実行に対して有益であろうと決定された場合
に、コンパイラを実際にコールして方法Mをコンパイル
できる。図5は、本発明の実施形態による、リコンパイ
ラの実行に関連するステップ、すなわち図4のステップ
420を示すプロセス流れ線図である。リコンパイラの
実行はステップ504で始まり、そこで方法Mのダイレ
クトコーラーに対する探索が行なわれる。一般に、コー
ラー、すなわち方法Mをコールした方法の探索は、当業
者の承知するように、コールスタックの検査を伴う。
イラを使ってコンパイラが所定の方法、例えば方法Mを
どのように処理するかが決定される。このようなリコン
パイラをアレンジすることによって、コンパイルが全プ
ログラムの実行に対して有益であろうと決定された場合
に、コンパイラを実際にコールして方法Mをコンパイル
できる。図5は、本発明の実施形態による、リコンパイ
ラの実行に関連するステップ、すなわち図4のステップ
420を示すプロセス流れ線図である。リコンパイラの
実行はステップ504で始まり、そこで方法Mのダイレ
クトコーラーに対する探索が行なわれる。一般に、コー
ラー、すなわち方法Mをコールした方法の探索は、当業
者の承知するように、コールスタックの検査を伴う。
【0036】方法Mのコーラーを探索した後、ステップ
506で、方法M用のコーラーが存在するか否かが決定
される。方法M用のコーラーが存在すると決定された場
合、プロセスの流れはステップ508に進み、そこで全
プログラムに関連するコンパイラは方法Mをコーラーと
インライン(inline)するのか否かに関する決定が行なわ
れる。方法Mをコーラーにインラインすることは、方法
M用の解釈されたコードのコピーの作成と、コード、例
えば方法Mのコーラーからのパラメータや変数のパッセ
ージを含むコード、の不要な部分を除去した後の、コー
ラーへのコピーされたコードの組込みを伴う。コーラー
が繰り返し実行されることによって方法Mが繰り返し実
行される場合、又はコーラーが通常的に方法Mを繰り返
しコールする場合、コーラーへの方法Mのインライン(i
nlining)とコーラーのコンパイル(compiling) とは、全
プログラム実行の効率を増加させるのに役立つかもしれ
ない。しかしながら、コーラーへの方法Mのインライン
は、他の方法が方法Mをコールできるという事実によっ
て方法Mの非インライン版を排除しないので、方法Mは
その他の方法へアクセスできる状態を維持しなければな
らない。このように、プログラムに関連するコードの物
理量は方法Mがインラインされると増加するので、コー
ラーへの方法Mのインラインは全プログラム実行の効率
を必ずしも改善しないだろう。
506で、方法M用のコーラーが存在するか否かが決定
される。方法M用のコーラーが存在すると決定された場
合、プロセスの流れはステップ508に進み、そこで全
プログラムに関連するコンパイラは方法Mをコーラーと
インライン(inline)するのか否かに関する決定が行なわ
れる。方法Mをコーラーにインラインすることは、方法
M用の解釈されたコードのコピーの作成と、コード、例
えば方法Mのコーラーからのパラメータや変数のパッセ
ージを含むコード、の不要な部分を除去した後の、コー
ラーへのコピーされたコードの組込みを伴う。コーラー
が繰り返し実行されることによって方法Mが繰り返し実
行される場合、又はコーラーが通常的に方法Mを繰り返
しコールする場合、コーラーへの方法Mのインライン(i
nlining)とコーラーのコンパイル(compiling) とは、全
プログラム実行の効率を増加させるのに役立つかもしれ
ない。しかしながら、コーラーへの方法Mのインライン
は、他の方法が方法Mをコールできるという事実によっ
て方法Mの非インライン版を排除しないので、方法Mは
その他の方法へアクセスできる状態を維持しなければな
らない。このように、プログラムに関連するコードの物
理量は方法Mがインラインされると増加するので、コー
ラーへの方法Mのインラインは全プログラム実行の効率
を必ずしも改善しないだろう。
【0037】ステップ508で、コンパイラが方法Mを
コーラーとインラインするだろうと決定した場合、記載
の実施形態では、全プログラム実行の効率の改善が、特
別のプログラムコードの追加よりも本質的に勝ることを
示す。その結果、プロセスの流れはステップ508から
ステップ510に移り、そこでコンパイラへのコールが
行なわれて、方法Mをインラインすると共に、方法Mを
その中にインラインした状態で、方法Mのコーラーがコ
ンパイルされる。
コーラーとインラインするだろうと決定した場合、記載
の実施形態では、全プログラム実行の効率の改善が、特
別のプログラムコードの追加よりも本質的に勝ることを
示す。その結果、プロセスの流れはステップ508から
ステップ510に移り、そこでコンパイラへのコールが
行なわれて、方法Mをインラインすると共に、方法Mを
その中にインラインした状態で、方法Mのコーラーがコ
ンパイルされる。
【0038】方法Mを方法Mのコーラーにインラインす
る決定は様々な要因を含む。例として、要因は、それら
に限定されないが、方法Mのサイズ、コーラーのサイ
ズ、方法Mとコーラーとに関連するパラメータの値、及
び方法Mをコールする方法の数を含む。一般に、言うま
でもないことだが、方法Mのインライン(inlining)は、
方法Mのコーラーへの、方法Mのインラインを含むばか
りでなく、コーラーのコーラーへ方法Mのコーラーをイ
ンラインすることも含むだろう。言い換えれば、コーラ
ーは任意数のレベルに対するスタックの中でルックアッ
プされるだろう。
る決定は様々な要因を含む。例として、要因は、それら
に限定されないが、方法Mのサイズ、コーラーのサイ
ズ、方法Mとコーラーとに関連するパラメータの値、及
び方法Mをコールする方法の数を含む。一般に、言うま
でもないことだが、方法Mのインライン(inlining)は、
方法Mのコーラーへの、方法Mのインラインを含むばか
りでなく、コーラーのコーラーへ方法Mのコーラーをイ
ンラインすることも含むだろう。言い換えれば、コーラ
ーは任意数のレベルに対するスタックの中でルックアッ
プされるだろう。
【0039】方法Mがインラインされてコーラーがコン
パイルされた後、コンパイルオーバヘッドがステップ5
12で確認される。一般に、コンパイルオーバヘッドの
確認は、ランタイム中の方法のコンパイルに伴うオーバ
ヘッドのモニタを伴う。コンパイルオーバヘッドは次
に、望ましい最大コンパイルオーバヘッドに対して比較
される。望ましい最大コンパイルオーバヘッドは、一実
施形態では、ランタイム中の方法のコンパイルや、その
他、機械コードへの方法の翻訳に費やされる全システム
オーバヘッド、例えば中央処理装置(CPU)や所用時
間の最大%の尺度かもしれない。従って、コンパイルオ
ーバヘッドを確認することは、ランタイムで方法をコン
パイルするために実際に使用されているシステムオーバ
ヘッドの量の決定を伴う。
パイルされた後、コンパイルオーバヘッドがステップ5
12で確認される。一般に、コンパイルオーバヘッドの
確認は、ランタイム中の方法のコンパイルに伴うオーバ
ヘッドのモニタを伴う。コンパイルオーバヘッドは次
に、望ましい最大コンパイルオーバヘッドに対して比較
される。望ましい最大コンパイルオーバヘッドは、一実
施形態では、ランタイム中の方法のコンパイルや、その
他、機械コードへの方法の翻訳に費やされる全システム
オーバヘッド、例えば中央処理装置(CPU)や所用時
間の最大%の尺度かもしれない。従って、コンパイルオ
ーバヘッドを確認することは、ランタイムで方法をコン
パイルするために実際に使用されているシステムオーバ
ヘッドの量の決定を伴う。
【0040】コンパイルオーバヘッドは望ましい最大コ
ンパイルオーバヘッドを超えるか否かに関する決定が、
ステップ514で行なわれる。コンパイルオーバヘッド
が望ましい最大コンパイルオーバヘッドを超えると決定
された場合は、コンパイルされている方法が多すぎるこ
とを意味し、プロセスの流れはステップ516に移り、
そこでしきい値が増加される。しきい値の増加は、方法
を、その方法のコンパイルが考慮される前に、呼び出す
ベき回数を増加させるので、通常、コンパイルオーバヘ
ッドの削減に有効である。例として、しきい値が100
0に設定され、かつ実質上すべての方法がプログラム実
行の過程で少なくとも1000回、呼び出される場合、
しきい値を10,000へ上げることは、コンパイルさ
れそうな方法が少なくなるので、より低いコンパイルオ
ーバヘッドをもたらすだろう。しきい値の増加に関連す
るステップを図6に関して以下により詳しく説明する。
一旦、しきい値がステップ516で増加されると、コン
パイラを実行するプロセスが完了する。
ンパイルオーバヘッドを超えるか否かに関する決定が、
ステップ514で行なわれる。コンパイルオーバヘッド
が望ましい最大コンパイルオーバヘッドを超えると決定
された場合は、コンパイルされている方法が多すぎるこ
とを意味し、プロセスの流れはステップ516に移り、
そこでしきい値が増加される。しきい値の増加は、方法
を、その方法のコンパイルが考慮される前に、呼び出す
ベき回数を増加させるので、通常、コンパイルオーバヘ
ッドの削減に有効である。例として、しきい値が100
0に設定され、かつ実質上すべての方法がプログラム実
行の過程で少なくとも1000回、呼び出される場合、
しきい値を10,000へ上げることは、コンパイルさ
れそうな方法が少なくなるので、より低いコンパイルオ
ーバヘッドをもたらすだろう。しきい値の増加に関連す
るステップを図6に関して以下により詳しく説明する。
一旦、しきい値がステップ516で増加されると、コン
パイラを実行するプロセスが完了する。
【0041】ステップ514で、コンパイルオーバヘッ
ドが望ましい最大コンパイルオーバヘッドよりも少ない
と決定された場合、しきい値は許容可能と見なされる。
すなわち、方法のコンパイルとそのコンパイルされた方
法の実行に伴うオーバヘッドは許容レベルにある、と見
なされる。このように、リコンパイラの実行が完了す
る。
ドが望ましい最大コンパイルオーバヘッドよりも少ない
と決定された場合、しきい値は許容可能と見なされる。
すなわち、方法のコンパイルとそのコンパイルされた方
法の実行に伴うオーバヘッドは許容レベルにある、と見
なされる。このように、リコンパイラの実行が完了す
る。
【0042】ステップ508に戻って、全プログラムの
実行に関連するコンパイラは方法Mをコーラーとインラ
インしないだろう、と決定された場合、ステップ518
で、そのコンパイラが方法Mをコンパイルするためにコ
ールされる。方法Mのインラインなしの、方法Mの単な
るコンパイルは、一般に全プログラムに関連するコード
の量を削減する。前述のように、方法Mのインライン
は、本質的に方法Mのコピーの作成となる。その結果
は、方法Mが異なる方法によってコールされると、方法
Mは、結局、異なる方法の各々の中でインラインされる
ことになるだろう。従って、方法Mに関連するコードの
コピーは全プログラムにわたって増大して、インライン
されたコードのコンパイルに伴うコンパイルの量が有意
になるだろう。従って、一実施形態では、スペースを節
約すると共にコンパイルの量を削減するために、方法M
が2つ以上の方法によってコールされそうな場合、方法
Mをインラインするのではなく、方法Mを単にコンパイ
ルする。方法Mがステップ518でコンパイルされた
後、プロセスの流れはステップ512に移り、そこでコ
ンパイルオーバヘッドが確認される。方法Mが2つ以上
の方法によってコールされる可能性があるか否かの決定
は、当業者の承知するように、コールチェーンの調査を
伴う。
実行に関連するコンパイラは方法Mをコーラーとインラ
インしないだろう、と決定された場合、ステップ518
で、そのコンパイラが方法Mをコンパイルするためにコ
ールされる。方法Mのインラインなしの、方法Mの単な
るコンパイルは、一般に全プログラムに関連するコード
の量を削減する。前述のように、方法Mのインライン
は、本質的に方法Mのコピーの作成となる。その結果
は、方法Mが異なる方法によってコールされると、方法
Mは、結局、異なる方法の各々の中でインラインされる
ことになるだろう。従って、方法Mに関連するコードの
コピーは全プログラムにわたって増大して、インライン
されたコードのコンパイルに伴うコンパイルの量が有意
になるだろう。従って、一実施形態では、スペースを節
約すると共にコンパイルの量を削減するために、方法M
が2つ以上の方法によってコールされそうな場合、方法
Mをインラインするのではなく、方法Mを単にコンパイ
ルする。方法Mがステップ518でコンパイルされた
後、プロセスの流れはステップ512に移り、そこでコ
ンパイルオーバヘッドが確認される。方法Mが2つ以上
の方法によってコールされる可能性があるか否かの決定
は、当業者の承知するように、コールチェーンの調査を
伴う。
【0043】方法M用のコーラーが存在するか否かを決
定するステップであるステップ506へ戻って、方法M
用のコーラーが存在しないか、或いはコーラーの探索中
に発見されなかったと決定された場合、プロセスの流れ
はステップ518に進み、そこで方法Mがコンパイルさ
れる。コーラーが発見されないときは、方法Mは、別の
方法によるのではなく、ランタイムシステムによってコ
ールされたことを示す。
定するステップであるステップ506へ戻って、方法M
用のコーラーが存在しないか、或いはコーラーの探索中
に発見されなかったと決定された場合、プロセスの流れ
はステップ518に進み、そこで方法Mがコンパイルさ
れる。コーラーが発見されないときは、方法Mは、別の
方法によるのではなく、ランタイムシステムによってコ
ールされたことを示す。
【0044】上述のように、プログラムの全実行に伴う
コンパイルオーバヘッドが希望最大オーバヘッドよりも
大きい場合は、しきい値を増加させることができる。こ
のような適合しきい値の使用は一般に、しきい値を、必
要に応じて特定アプリケーションに対して修正すること
を可能にする。多くの方法又は関数が一定の数の呼出し
を超えるアプリケーションでは、対応するしきい値が低
すぎる場合、結果は、効率、例えば時間とスペースに関
して望ましくないほど高いコンパイルオーバヘッドにな
るかもしれない。従って、より高いしきい値を設定する
ことが、より望ましい、すなわち、より低いコンパイル
オーバヘッドをもたらすだろう。
コンパイルオーバヘッドが希望最大オーバヘッドよりも
大きい場合は、しきい値を増加させることができる。こ
のような適合しきい値の使用は一般に、しきい値を、必
要に応じて特定アプリケーションに対して修正すること
を可能にする。多くの方法又は関数が一定の数の呼出し
を超えるアプリケーションでは、対応するしきい値が低
すぎる場合、結果は、効率、例えば時間とスペースに関
して望ましくないほど高いコンパイルオーバヘッドにな
るかもしれない。従って、より高いしきい値を設定する
ことが、より望ましい、すなわち、より低いコンパイル
オーバヘッドをもたらすだろう。
【0045】プログラム実行の過程でしきい値を増すこ
とは、密に連続する方法のコンパイルの防止にもなるだ
ろう。例として、比較的多数の異なる方法が実質上同時
に特定しきい値を超える場合、全プログラムの実行中に
休止が起るかもしれない。プログラム実行中の休止は望
ましくない場合が多いので、最初の数方法をコンパイル
した後でしきい値を増加させると、密に連続するコンパ
イルのシーケンスを防ぎ、それによって明白なコンパイ
ルの休止を実質的に除去する。
とは、密に連続する方法のコンパイルの防止にもなるだ
ろう。例として、比較的多数の異なる方法が実質上同時
に特定しきい値を超える場合、全プログラムの実行中に
休止が起るかもしれない。プログラム実行中の休止は望
ましくない場合が多いので、最初の数方法をコンパイル
した後でしきい値を増加させると、密に連続するコンパ
イルのシーケンスを防ぎ、それによって明白なコンパイ
ルの休止を実質的に除去する。
【0046】次に図6を参照して、しきい値の増加に関
連するステップを、本発明の実施形態に従って説明す
る。言い換えれば、図5のステップ516について説明
する。言うまでもなく、しきい値がグローバル値である
実施形態では、しきい値を増すことはグローバル値の増
加を伴う。そうではなく、しきい値が方法固有の値の場
合は、しきい値を増すことは特定方法や方法のグループ
に対するしきい値のみの増加を伴う。
連するステップを、本発明の実施形態に従って説明す
る。言い換えれば、図5のステップ516について説明
する。言うまでもなく、しきい値がグローバル値である
実施形態では、しきい値を増すことはグローバル値の増
加を伴う。そうではなく、しきい値が方法固有の値の場
合は、しきい値を増すことは特定方法や方法のグループ
に対するしきい値のみの増加を伴う。
【0047】しきい値を増加させるプロセスはステップ
602で始まり、そこでしきい値がしきい限界(thresho
ld limit) 、すなわち上部しきい限界にあるか否かに関
する決定が行なわれる。しきい限界は、全プログラムの
要件に依存するが、一般に、許容可能と見なされるしき
い値に対する最高値である。
602で始まり、そこでしきい値がしきい限界(thresho
ld limit) 、すなわち上部しきい限界にあるか否かに関
する決定が行なわれる。しきい限界は、全プログラムの
要件に依存するが、一般に、許容可能と見なされるしき
い値に対する最高値である。
【0048】しきい値がしきい限界にあるとステップ6
02で決定された場合、記載の実施形態では、しきい値
を増加させることはできない。このように、しきい値を
増加させるプロセスは完了したと見なされる。例とし
て、既存システムでは、約1000回の呼出し、ないし
約50,000回の呼出しのオーダーのしきい限界が適
当であろう。そうではなく、ステップ602でしきい値
はしきい限界にないと決定された場合。しきい値がカレ
ントタイム(current time)期間中に先に上方に調節され
ていたか否かについての決定が行なわれる。一実施形態
では、しきい値がカレントタイム期間中に先に調節され
たか否かの決定は、関連インターバル変更フラグが調節
は最近行なわれたことを示しているか否かの決定を含
む。インターバル変更フラグのセットとクリアのための
代表的メカニズムを以下に説明する。
02で決定された場合、記載の実施形態では、しきい値
を増加させることはできない。このように、しきい値を
増加させるプロセスは完了したと見なされる。例とし
て、既存システムでは、約1000回の呼出し、ないし
約50,000回の呼出しのオーダーのしきい限界が適
当であろう。そうではなく、ステップ602でしきい値
はしきい限界にないと決定された場合。しきい値がカレ
ントタイム(current time)期間中に先に上方に調節され
ていたか否かについての決定が行なわれる。一実施形態
では、しきい値がカレントタイム期間中に先に調節され
たか否かの決定は、関連インターバル変更フラグが調節
は最近行なわれたことを示しているか否かの決定を含
む。インターバル変更フラグのセットとクリアのための
代表的メカニズムを以下に説明する。
【0049】しきい値はカレントタイム期間中、例えば
最近の過去にすでに上方に調節されたとステップ604
で決定された場合、しきい値がそれ以上大きくされるこ
とはない。最近に調節されたときは、しきい値をそれ以
上増加させないことによって、しきい値を過度の調節か
ら守ることができる。しきい値をそれ以上増加させない
とステップ604で決定された場合、しきい値を増加さ
せるプロセスは完了したと見なされる。
最近の過去にすでに上方に調節されたとステップ604
で決定された場合、しきい値がそれ以上大きくされるこ
とはない。最近に調節されたときは、しきい値をそれ以
上増加させないことによって、しきい値を過度の調節か
ら守ることができる。しきい値をそれ以上増加させない
とステップ604で決定された場合、しきい値を増加さ
せるプロセスは完了したと見なされる。
【0050】ステップ604で、しきい値はカレントタ
イム期間中に上方に調節されなかったと決定されたとき
は、プロセスの流れは606に移り、そこでしきい値に
しきい値係数が乗算される。しきい値係数は一般に、総
合コンピュータプログラムの要件によって大幅に変更で
きる。例として、約1.2ないし約2のオーダーのしき
い値係数が現行システムに対して良好に働くようだ。し
きい値にしきい値係数が掛けられてしきい値を増加させ
た後、インターバル変更フラグがステップ608でセッ
トされる。インターバル変更フラグを使って、しきい値
がカレントタイム期間中に上方に調節されたことを表示
できる。しきい値を増加させるプロセスは、インターバ
ル変更フラグがセットされた後に完了する。
イム期間中に上方に調節されなかったと決定されたとき
は、プロセスの流れは606に移り、そこでしきい値に
しきい値係数が乗算される。しきい値係数は一般に、総
合コンピュータプログラムの要件によって大幅に変更で
きる。例として、約1.2ないし約2のオーダーのしき
い値係数が現行システムに対して良好に働くようだ。し
きい値にしきい値係数が掛けられてしきい値を増加させ
た後、インターバル変更フラグがステップ608でセッ
トされる。インターバル変更フラグを使って、しきい値
がカレントタイム期間中に上方に調節されたことを表示
できる。しきい値を増加させるプロセスは、インターバ
ル変更フラグがセットされた後に完了する。
【0051】記載の実施形態では、図2(b)に関して
上述したように、プログラムの実行の開始はしきい値モ
ニタの実行の開始と並列で起る。すなわち、プログラム
が実行している間、しきい値モニタも実行している。図
7は、本発明の実施形態による、しきい値モニタの実行
の開始に関連するステップ、すなわち図2(b)のステ
ップ204を示すプロセス流れ線図である。しきい値モ
ニタの実行はステップ702で始まり、そこでタイマ信
号が、しきい値モニタによってオペレーティングシステ
ムから受信される。タイマ信号は本質的に、プログラム
の実行を周期的に中断するクロック「チック」である。
当業者の承知するように、しきい値モニタの実行は、タ
イマ信号が受信されるまで、中断、すなわち、しきい値
は「休眠(asleep)」できる。
上述したように、プログラムの実行の開始はしきい値モ
ニタの実行の開始と並列で起る。すなわち、プログラム
が実行している間、しきい値モニタも実行している。図
7は、本発明の実施形態による、しきい値モニタの実行
の開始に関連するステップ、すなわち図2(b)のステ
ップ204を示すプロセス流れ線図である。しきい値モ
ニタの実行はステップ702で始まり、そこでタイマ信
号が、しきい値モニタによってオペレーティングシステ
ムから受信される。タイマ信号は本質的に、プログラム
の実行を周期的に中断するクロック「チック」である。
当業者の承知するように、しきい値モニタの実行は、タ
イマ信号が受信されるまで、中断、すなわち、しきい値
は「休眠(asleep)」できる。
【0052】一旦、タイマ信号が受信されると、スライ
ディング(sliding)平均が、コンパイルオーバヘッドと
解釈オーバヘッドの両者に対してステップ704で更新
される。言い換えれば、所定期間、例えば最近の過去に
費やされた時間の量と解釈に費やされた時間の量は、そ
の期間のいくつかの時間間隔にわたって平均された期間
の%として表すことができる。
ディング(sliding)平均が、コンパイルオーバヘッドと
解釈オーバヘッドの両者に対してステップ704で更新
される。言い換えれば、所定期間、例えば最近の過去に
費やされた時間の量と解釈に費やされた時間の量は、そ
の期間のいくつかの時間間隔にわたって平均された期間
の%として表すことができる。
【0053】インターバル変更フラグは、スライディン
グ平均が更新された後、ステップ706でリセットされ
る。インターバル変更フラグのリセットは一般に、しき
い値が所定期間中に調節されていないことを示すための
インターバル変更フラグのセッティングを伴う。インタ
ーバル変更フラグがリセットされた後、ステップ708
で、コンパイルオーバヘッドが最大希望コンパイルオー
バヘッドを超えるか否かに関する決定が行なわれる。コ
ンパイルオーバヘッドは、最小希望コンパイルオーバヘ
ッドと最大希望コンパイルオーバヘッドの間の範囲に入
るように維持することが望ましい。最小希望コンパイル
オーバヘッドと最大希望コンパイルオーバヘッドの値は
大幅に変更できるが、約5%ないし約25%の範囲の最
小値と、約20%ないし約65%の範囲の最大値が一部
のシステムで良好に働くことが判明している。ある特定
実施形態では、最小希望コンパイルオーバヘッドは所定
期間の約10%にすることができる一方、最大希望コン
パイルオーバヘッドは所定期間の約50にできる。
グ平均が更新された後、ステップ706でリセットされ
る。インターバル変更フラグのリセットは一般に、しき
い値が所定期間中に調節されていないことを示すための
インターバル変更フラグのセッティングを伴う。インタ
ーバル変更フラグがリセットされた後、ステップ708
で、コンパイルオーバヘッドが最大希望コンパイルオー
バヘッドを超えるか否かに関する決定が行なわれる。コ
ンパイルオーバヘッドは、最小希望コンパイルオーバヘ
ッドと最大希望コンパイルオーバヘッドの間の範囲に入
るように維持することが望ましい。最小希望コンパイル
オーバヘッドと最大希望コンパイルオーバヘッドの値は
大幅に変更できるが、約5%ないし約25%の範囲の最
小値と、約20%ないし約65%の範囲の最大値が一部
のシステムで良好に働くことが判明している。ある特定
実施形態では、最小希望コンパイルオーバヘッドは所定
期間の約10%にすることができる一方、最大希望コン
パイルオーバヘッドは所定期間の約50にできる。
【0054】ステップ708で、コンパイルオーバヘッ
ドが最大希望コンパイルオーバヘッドよりも大きいと決
定された場合、プロセスの流れはステップ716に進
み、そこでしきい値、例えばグローバルしきい値を増加
させる。しきい値を増すために使用される一つの適当な
方法は図に関して先に説明した。一旦、しきい値が増加
すると、プロセスの流れはステップ702に戻り、そこ
でプロセスは、オペレーティングシステムから受信され
る新しいタイマ信号を待つ。
ドが最大希望コンパイルオーバヘッドよりも大きいと決
定された場合、プロセスの流れはステップ716に進
み、そこでしきい値、例えばグローバルしきい値を増加
させる。しきい値を増すために使用される一つの適当な
方法は図に関して先に説明した。一旦、しきい値が増加
すると、プロセスの流れはステップ702に戻り、そこ
でプロセスは、オペレーティングシステムから受信され
る新しいタイマ信号を待つ。
【0055】ステップ708で、コンパイルオーバヘッ
ドが最大希望コンパイルオーバヘッドより小さいと決定
された場合、ステップ710で、コンパイルオーバヘッ
ドが最小希望コンパイルオーバヘッドより小さいか否か
に関する決定が行なわれる。コンパイルオーバヘッドが
最小希望コンパイルオーバヘッドより小さい場合、しき
い値は高すぎるかもしれない。このように、コンパイル
オーバヘッドが最小希望コンパイルオーバヘッドと最大
希望コンパイルオーバヘッドの間に入るようにするため
に、ステップ712でしきい値を減少させる。しきい値
の減少は、図8に関して以下に更に詳しく説明するが、
しきい値へのより迅速な到達を許すので、方法のコンパ
イルの増加をもたらす。従って、コンパイルオーバヘッ
ドを最小希望コンパイルオーバヘッドの上に増加させる
ことができる。しきい値が減じられた後、プロセスの流
れはステップ702に戻り、そこでしきい値モニタを実
行するプロセスが、タイマ信号を受信するまで本質的に
中断される。
ドが最大希望コンパイルオーバヘッドより小さいと決定
された場合、ステップ710で、コンパイルオーバヘッ
ドが最小希望コンパイルオーバヘッドより小さいか否か
に関する決定が行なわれる。コンパイルオーバヘッドが
最小希望コンパイルオーバヘッドより小さい場合、しき
い値は高すぎるかもしれない。このように、コンパイル
オーバヘッドが最小希望コンパイルオーバヘッドと最大
希望コンパイルオーバヘッドの間に入るようにするため
に、ステップ712でしきい値を減少させる。しきい値
の減少は、図8に関して以下に更に詳しく説明するが、
しきい値へのより迅速な到達を許すので、方法のコンパ
イルの増加をもたらす。従って、コンパイルオーバヘッ
ドを最小希望コンパイルオーバヘッドの上に増加させる
ことができる。しきい値が減じられた後、プロセスの流
れはステップ702に戻り、そこでしきい値モニタを実
行するプロセスが、タイマ信号を受信するまで本質的に
中断される。
【0056】コンパイルオーバヘッドが最大希望解釈オ
ーバヘッドと最小希望解釈オーバヘッドの間にあると決
定されたときは、ステップ714で、解釈オーバヘッド
が最大希望解釈オーバヘッドより大きいか否かに関する
決定が行なわれる。解釈オーバヘッドを計算するための
一つの適当な方法を、図9に関して以下に説明する。
ーバヘッドと最小希望解釈オーバヘッドの間にあると決
定されたときは、ステップ714で、解釈オーバヘッド
が最大希望解釈オーバヘッドより大きいか否かに関する
決定が行なわれる。解釈オーバヘッドを計算するための
一つの適当な方法を、図9に関して以下に説明する。
【0057】最大希望コンパイルオーバヘッドの場合と
同様、最大希望解釈オーバヘッドも大幅に変更できる。
更に、最小希望解釈オーバヘッドも大幅に変更可能であ
る。例として、最大希望解釈オーバヘッドは所定期間の
約20%にすることができる一方、最小希望解釈オーバ
ヘッドは所定期間の約5%にできる。一実施形態では、
希望解釈オーバヘッドは希望コンパイルオーバヘッドと
実質的に同一にできる。
同様、最大希望解釈オーバヘッドも大幅に変更できる。
更に、最小希望解釈オーバヘッドも大幅に変更可能であ
る。例として、最大希望解釈オーバヘッドは所定期間の
約20%にすることができる一方、最小希望解釈オーバ
ヘッドは所定期間の約5%にできる。一実施形態では、
希望解釈オーバヘッドは希望コンパイルオーバヘッドと
実質的に同一にできる。
【0058】解釈オーバヘッドが最大希望解釈オーバヘ
ッドより大きい場合、図8に関して以下に説明するプロ
セスのような任意の適当なプロセスを使って、ステップ
712でしきい値を減少させる。しきい値の減少は一般
に、より多くの方法のコンパイルを可能にするので、解
釈される方法の数を削減する。それとは別に、解釈オー
バヘッドが最大希望解釈オーバヘッドより小さいと決定
された場合、ステップ718で、解釈オーバヘッドが最
小希望解釈オーバヘッドの下に来るか否かが決定され
る。解釈オーバヘッドが最小希望解釈オーバヘッドより
小さいときは、ステップ716でしきい値を減少させ
る。解釈オーバヘッドが最小希望解釈オーバヘッドと最
大希望解釈オーバヘッドによって定義される許容解釈オ
ーバヘッドの範囲内にある場合は、しきい値モニタを実
行するプロセスがステップ702で継続して、そこで新
タイマ信号がオペレーティングシステムから受信され
る。
ッドより大きい場合、図8に関して以下に説明するプロ
セスのような任意の適当なプロセスを使って、ステップ
712でしきい値を減少させる。しきい値の減少は一般
に、より多くの方法のコンパイルを可能にするので、解
釈される方法の数を削減する。それとは別に、解釈オー
バヘッドが最大希望解釈オーバヘッドより小さいと決定
された場合、ステップ718で、解釈オーバヘッドが最
小希望解釈オーバヘッドの下に来るか否かが決定され
る。解釈オーバヘッドが最小希望解釈オーバヘッドより
小さいときは、ステップ716でしきい値を減少させ
る。解釈オーバヘッドが最小希望解釈オーバヘッドと最
大希望解釈オーバヘッドによって定義される許容解釈オ
ーバヘッドの範囲内にある場合は、しきい値モニタを実
行するプロセスがステップ702で継続して、そこで新
タイマ信号がオペレーティングシステムから受信され
る。
【0059】図8に関して、しきい値の減少に関連する
ステップ、すなわち図7のステップ712を本発明の実
施形態に従って説明する。しきい値を減少させるプロセ
スはステップ804で始まり、そこでしきい値が下方し
きい限界にあるか否かに関する決定が行なわれる。下方
しきい限界は一般に、しきい値として適切と見なされる
最低値である。例として、下方しきい限界は大幅に変更
可能だが、約100カウントないし約1000カウント
のオーダーの下方しきい限界が良好に働く。一実施形態
では、下方しきい限界は約500カウント又は呼出しに
することができる。
ステップ、すなわち図7のステップ712を本発明の実
施形態に従って説明する。しきい値を減少させるプロセ
スはステップ804で始まり、そこでしきい値が下方し
きい限界にあるか否かに関する決定が行なわれる。下方
しきい限界は一般に、しきい値として適切と見なされる
最低値である。例として、下方しきい限界は大幅に変更
可能だが、約100カウントないし約1000カウント
のオーダーの下方しきい限界が良好に働く。一実施形態
では、下方しきい限界は約500カウント又は呼出しに
することができる。
【0060】ステップ804で、しきい値が下方しきい
限界にあると決定された場合、しきい値を下げてはなら
ないことを意味し、しきい値を減少させるプロセスは完
了したと見なされる。そうではなく、ステップ804
で、しきい値が下方しきい限界にないと決定された場
合、ステップ808で、しきい値はカレント期間中に先
に下方に調節されていたか否かに関する決定が行なわれ
る。
限界にあると決定された場合、しきい値を下げてはなら
ないことを意味し、しきい値を減少させるプロセスは完
了したと見なされる。そうではなく、ステップ804
で、しきい値が下方しきい限界にないと決定された場
合、ステップ808で、しきい値はカレント期間中に先
に下方に調節されていたか否かに関する決定が行なわれ
る。
【0061】しきい値が最近の過去又はカレントタイム
期間に下方に調節されたと決定される場合は、記載の実
施形態では、しきい値をそれ以上減少させてはならな
い。所定期間に2回以上、しきい値の下方への調節を許
さないことで、しきい値の過剰な調節を避けることがで
きる。しきい値をそれ以上減少させるべきでないと決定
されたときは、しきい値を減少させるプロセスは完了し
たと見なされる。
期間に下方に調節されたと決定される場合は、記載の実
施形態では、しきい値をそれ以上減少させてはならな
い。所定期間に2回以上、しきい値の下方への調節を許
さないことで、しきい値の過剰な調節を避けることがで
きる。しきい値をそれ以上減少させるべきでないと決定
されたときは、しきい値を減少させるプロセスは完了し
たと見なされる。
【0062】しきい値がカレントタイム期間中に下方に
調節されていない場合、プロセスの流れはステップ80
8からステップ812に移り、そこでしきい値はしきい
値係数によって除算される。しきい値係数は一般に、総
合コンピュータプログラムの要件によって大幅に変更で
きる。一実施形態では、しきい値が除算されるしきい値
係数は、しきい値を増加させるときに乗数として用いら
れる、図6に関して上述した同一のしきい値係数であ
る。一旦、しきい値がしきい値係数によって除される
と、インターバル変更フラグがステップ816でセット
される。記載の実施形態では、インターバル変更フラグ
をセットして、しきい値がカレントタイム期間中に下方
に調節されたことを示す。インターバル変更フラグがセ
ットされた後、しきい値を減少させるプロセスは完了す
る。
調節されていない場合、プロセスの流れはステップ80
8からステップ812に移り、そこでしきい値はしきい
値係数によって除算される。しきい値係数は一般に、総
合コンピュータプログラムの要件によって大幅に変更で
きる。一実施形態では、しきい値が除算されるしきい値
係数は、しきい値を増加させるときに乗数として用いら
れる、図6に関して上述した同一のしきい値係数であ
る。一旦、しきい値がしきい値係数によって除される
と、インターバル変更フラグがステップ816でセット
される。記載の実施形態では、インターバル変更フラグ
をセットして、しきい値がカレントタイム期間中に下方
に調節されたことを示す。インターバル変更フラグがセ
ットされた後、しきい値を減少させるプロセスは完了す
る。
【0063】ランタイム中のプログラムに伴うコンパイ
ルオーバヘッドのモニタに加えて、プログラムに伴う解
釈オーバヘッドもモニタされる。解釈オーバヘッドのモ
ニタは本質的に、方法の解釈で費やされた全プログラム
オーバヘッドの量のモニタを含む。図7に関して前述し
たように、解釈オーバヘッドをモニタすることによっ
て、少なくとも部分的に、しきい値を上げるべきか下げ
るべきかが決定される。例えば、解釈オーバヘッドが高
すぎる場合は、より多くの方法をコンパイルすべきこと
を意味し、しきい値を減少させて、より多くの方法をコ
ンパイルさせることができる。
ルオーバヘッドのモニタに加えて、プログラムに伴う解
釈オーバヘッドもモニタされる。解釈オーバヘッドのモ
ニタは本質的に、方法の解釈で費やされた全プログラム
オーバヘッドの量のモニタを含む。図7に関して前述し
たように、解釈オーバヘッドをモニタすることによっ
て、少なくとも部分的に、しきい値を上げるべきか下げ
るべきかが決定される。例えば、解釈オーバヘッドが高
すぎる場合は、より多くの方法をコンパイルすべきこと
を意味し、しきい値を減少させて、より多くの方法をコ
ンパイルさせることができる。
【0064】一般に、任意の適当なプロセスを使って解
釈オーバヘッドを計算できる。解釈オーバヘッドを計算
するための一つの適当なプロセスを、図9に関して以下
に説明する。プロセスはステップ904で始まり、そこ
でタイマ信号がオペレーションシステムから受信され
る。一旦、タイマ信号が受信されると、アプリケーショ
ンプロセスのカレントプログラムカウンタがステップ9
08で取得される。一実施形態では、プログラムカウン
タは、全プログラムの実行が現在、解釈されたコードを
含むか、或いはコンパイルドコードを含むかを識別する
リファレンスである。
釈オーバヘッドを計算できる。解釈オーバヘッドを計算
するための一つの適当なプロセスを、図9に関して以下
に説明する。プロセスはステップ904で始まり、そこ
でタイマ信号がオペレーションシステムから受信され
る。一旦、タイマ信号が受信されると、アプリケーショ
ンプロセスのカレントプログラムカウンタがステップ9
08で取得される。一実施形態では、プログラムカウン
タは、全プログラムの実行が現在、解釈されたコードを
含むか、或いはコンパイルドコードを含むかを識別する
リファレンスである。
【0065】一旦、カレントプログラムカウンタが取得
されると、プログラムカウンタはステップ912でイン
タープリタをリファレンス、例えば指示、するか否かに
関して決定が行なわれる。すなわち、解釈されたコード
が現在、実行されているか否かについて決定が行なわれ
る。プログラムカウンタがインタープリタを指示してい
ないと決定された場合は、プログラムカウンタがコンパ
イラを指示していることを意味し、解釈オーバヘッドの
計算が完了する。ステップ912で、プログラムカウン
タはインタープリタをリファレンスしないと決定された
場合、インタープリタオーバヘッドカウンタがステップ
916で増分される。最後に、ステップ918で、解釈
オーバヘッドカウンタを用いて解釈オーバヘッド用のス
ライディング平均が計算され、解釈オーバヘッドを計算
するプロセスが完了する。
されると、プログラムカウンタはステップ912でイン
タープリタをリファレンス、例えば指示、するか否かに
関して決定が行なわれる。すなわち、解釈されたコード
が現在、実行されているか否かについて決定が行なわれ
る。プログラムカウンタがインタープリタを指示してい
ないと決定された場合は、プログラムカウンタがコンパ
イラを指示していることを意味し、解釈オーバヘッドの
計算が完了する。ステップ912で、プログラムカウン
タはインタープリタをリファレンスしないと決定された
場合、インタープリタオーバヘッドカウンタがステップ
916で増分される。最後に、ステップ918で、解釈
オーバヘッドカウンタを用いて解釈オーバヘッド用のス
ライディング平均が計算され、解釈オーバヘッドを計算
するプロセスが完了する。
【0066】図10は、本発明の実現に適した典型的な
汎用コンピュータシステムを示す。コンピュータシステ
ム1030は、主記憶装置1034(通常、リードオン
リーメモリ、又はROM)と主記憶装置1036(通
常、ランダムアクセスメモリ、又はRAM)とを含むメ
モリデバイスに連結された任意数のプロセッサ1032
(中央処理装置、又はCPUとも称する)を含む。
汎用コンピュータシステムを示す。コンピュータシステ
ム1030は、主記憶装置1034(通常、リードオン
リーメモリ、又はROM)と主記憶装置1036(通
常、ランダムアクセスメモリ、又はRAM)とを含むメ
モリデバイスに連結された任意数のプロセッサ1032
(中央処理装置、又はCPUとも称する)を含む。
【0067】コンピュータシステム1030、又はより
具体的には、CPU1032は、当業者の承知するよう
に、バーチャルマシンを支援するように構成できる。コ
ンピュータシステム1030上で支援されるバーチャル
マシンの一例を、図11に関して以下に説明する。当技
術分野で周知のように、ROMはデータと命令をCPU
1032に一方向的に転送するように働くが、RAMは
通常、データと命令を二方向的に転送するように使用さ
れる。CPU1032は一般に任意数のプロセッサを含
んでもよい。主記憶装置1034、1036は共に、任
意の適切なコンピュータ読取り可能媒体を含んでもよ
い。通常、マスメモリデバイスである二次記憶媒体10
38もCPU1032に二方向的に連結されて、追加の
データ記憶容量を提供する。マスメモリデバイス103
8は、コンピュータコード、データ等を含むプログラム
の格納のために使用されるコンピュータ読取り可能媒体
である。通常、マスメモリデバイス1038は、主記憶
装置1034、1036よりも一般に遅いハードディス
クやテープ等の記憶媒体である。マスメモリデバイス1
038は磁気かペーパーテープ読取り装置、又は何らか
の他の周知のデバイスの形を取ることができる。マスメ
モリデバイス1038内に保持された情報は、適切な場
合は、バーチャルメモリとしてのRAM1036の一部
として、標準的な方式で組込みできることは言うまでも
ない。CD−ROM等の特定の主記憶装置1034も、
データを一方向的にCPU1032に渡すことができ
る。
具体的には、CPU1032は、当業者の承知するよう
に、バーチャルマシンを支援するように構成できる。コ
ンピュータシステム1030上で支援されるバーチャル
マシンの一例を、図11に関して以下に説明する。当技
術分野で周知のように、ROMはデータと命令をCPU
1032に一方向的に転送するように働くが、RAMは
通常、データと命令を二方向的に転送するように使用さ
れる。CPU1032は一般に任意数のプロセッサを含
んでもよい。主記憶装置1034、1036は共に、任
意の適切なコンピュータ読取り可能媒体を含んでもよ
い。通常、マスメモリデバイスである二次記憶媒体10
38もCPU1032に二方向的に連結されて、追加の
データ記憶容量を提供する。マスメモリデバイス103
8は、コンピュータコード、データ等を含むプログラム
の格納のために使用されるコンピュータ読取り可能媒体
である。通常、マスメモリデバイス1038は、主記憶
装置1034、1036よりも一般に遅いハードディス
クやテープ等の記憶媒体である。マスメモリデバイス1
038は磁気かペーパーテープ読取り装置、又は何らか
の他の周知のデバイスの形を取ることができる。マスメ
モリデバイス1038内に保持された情報は、適切な場
合は、バーチャルメモリとしてのRAM1036の一部
として、標準的な方式で組込みできることは言うまでも
ない。CD−ROM等の特定の主記憶装置1034も、
データを一方向的にCPU1032に渡すことができ
る。
【0068】CPU1032はまた、それらに限定され
ないが、ビデオモニタ、トラックボール、マウス、キー
ボード、マイクロホン、接触感知ディスプレイ、トラン
スデューサカードリーダ、磁気又はペーパーテープ読取
り装置、タブレット、スタイラス、音声又は手書き認識
装置、その他の周知の入力装置、例えば、勿論、他のコ
ンピュータといった装置を含む一つ以上の入出力装置1
040に連結される。最後に、CPU1032はオプシ
ョンとして、1012で概略図示するネットワーク接続
を使って、コンピュータ又は遠隔通信ネットワーク、例
えばローカルエリアネットワーク、インターネットネッ
トワーク、又はイントラネットネットワークに連結して
もよい。このようなネットワーク接続を使って、CPU
1032はネットワークから情報を受信したり、上述の
方法手段を実行する過程で情報を出力するであろうこと
が予期される。それらの情報は、CPU1032を使っ
て実行される一連の情報として表されことが多いが、例
えば、搬送波に組み込まれたコンピュータデータ信号の
形でネットワークから受信されたり、ネットワークに出
力することができる。上述のデバイスと材料は、コンピ
ュータハードウェアとソフトウェアの分野の当業者には
周知であろう。
ないが、ビデオモニタ、トラックボール、マウス、キー
ボード、マイクロホン、接触感知ディスプレイ、トラン
スデューサカードリーダ、磁気又はペーパーテープ読取
り装置、タブレット、スタイラス、音声又は手書き認識
装置、その他の周知の入力装置、例えば、勿論、他のコ
ンピュータといった装置を含む一つ以上の入出力装置1
040に連結される。最後に、CPU1032はオプシ
ョンとして、1012で概略図示するネットワーク接続
を使って、コンピュータ又は遠隔通信ネットワーク、例
えばローカルエリアネットワーク、インターネットネッ
トワーク、又はイントラネットネットワークに連結して
もよい。このようなネットワーク接続を使って、CPU
1032はネットワークから情報を受信したり、上述の
方法手段を実行する過程で情報を出力するであろうこと
が予期される。それらの情報は、CPU1032を使っ
て実行される一連の情報として表されことが多いが、例
えば、搬送波に組み込まれたコンピュータデータ信号の
形でネットワークから受信されたり、ネットワークに出
力することができる。上述のデバイスと材料は、コンピ
ュータハードウェアとソフトウェアの分野の当業者には
周知であろう。
【0069】前述のように、バーチャルマシンはコンピ
ュータシステム1030上で実行できる。図11は、図
10のコンピュータシステム1030によって支援され
て本発明の実現に適したバーチャルマシンの図式表示で
ある。コンピュータプログラム、例えばカリフォルニア
州Palo Alto のSun Microsystemsによって開発されたJ
ava(商標)プログラミング言語で書かれたコンピュ
ータプログラムが実行されると、ソースコード1110
がコンパイルタイム環境1105内のコンパイラ112
0に供給される。コンパイラはソースコード1110を
バイトコード1130に翻訳する。一般に、ソースコー
ド1110は、それがソフトウェア開発者によって作成
される時点でバイトコード1130に翻訳される。
ュータシステム1030上で実行できる。図11は、図
10のコンピュータシステム1030によって支援され
て本発明の実現に適したバーチャルマシンの図式表示で
ある。コンピュータプログラム、例えばカリフォルニア
州Palo Alto のSun Microsystemsによって開発されたJ
ava(商標)プログラミング言語で書かれたコンピュ
ータプログラムが実行されると、ソースコード1110
がコンパイルタイム環境1105内のコンパイラ112
0に供給される。コンパイラはソースコード1110を
バイトコード1130に翻訳する。一般に、ソースコー
ド1110は、それがソフトウェア開発者によって作成
される時点でバイトコード1130に翻訳される。
【0070】バイトコード1130は一般に、再生、ダ
ウンロード、或いは別途にネットワーク、例えば図10
のネットワーク1012を介して配信されるか、図10
の主記憶装置1034等の記憶装置に格納される。記載
の実施形態では、バイトコード1130はプラットホー
ム独立形(platform-independent)である。すなわち、バ
イトコード1130は、適切なバーチャルマシン114
0を実行している実質的に任意のコンピュータシステム
で実行できる。例として、Java(商標)環境では、
バイトコード1130はJava(商標)バーチャルマ
シンを実行しているコンピュータシステム上で実行でき
る。
ウンロード、或いは別途にネットワーク、例えば図10
のネットワーク1012を介して配信されるか、図10
の主記憶装置1034等の記憶装置に格納される。記載
の実施形態では、バイトコード1130はプラットホー
ム独立形(platform-independent)である。すなわち、バ
イトコード1130は、適切なバーチャルマシン114
0を実行している実質的に任意のコンピュータシステム
で実行できる。例として、Java(商標)環境では、
バイトコード1130はJava(商標)バーチャルマ
シンを実行しているコンピュータシステム上で実行でき
る。
【0071】バイトコード1130は、バーチャルマシ
ン1140を含むランタイム環境1135に供給され
る。ランタイム環境1135は一般に、図10のCPU
1032等のプロセッサを使って実行できる。バーチャ
ルマシン1140はコンパイラ1142、インタープリ
タ1144、及びランタイムシステム1146を含む。
バイトコード1130は一般にコンパイラ1142かイ
ンタープリタ1144のいずれかに供給される。
ン1140を含むランタイム環境1135に供給され
る。ランタイム環境1135は一般に、図10のCPU
1032等のプロセッサを使って実行できる。バーチャ
ルマシン1140はコンパイラ1142、インタープリ
タ1144、及びランタイムシステム1146を含む。
バイトコード1130は一般にコンパイラ1142かイ
ンタープリタ1144のいずれかに供給される。
【0072】バイトコード1130がコンパイラ114
2に供給されると、バイトコード1130に含まれる方
法は、上述のように、機械命令にコンパイルされる。他
方、バイトコード1130がインタープリタ1144に
供給されると、バイトコード1130は一度に1バイト
ずつインタープリタ1144に読み取られる。インター
プリタ1144は次に、各バイトコードがインタープリ
タ1144に読み取られるに従って、各バイトコードに
よって定義されるオペレーションを実行する。一般に、
インタープリタ1144はバイトコード1130を処理
すると共に、バイトコード1130に関連するオペレー
ションを実質上連続的に実行する。
2に供給されると、バイトコード1130に含まれる方
法は、上述のように、機械命令にコンパイルされる。他
方、バイトコード1130がインタープリタ1144に
供給されると、バイトコード1130は一度に1バイト
ずつインタープリタ1144に読み取られる。インター
プリタ1144は次に、各バイトコードがインタープリ
タ1144に読み取られるに従って、各バイトコードに
よって定義されるオペレーションを実行する。一般に、
インタープリタ1144はバイトコード1130を処理
すると共に、バイトコード1130に関連するオペレー
ションを実質上連続的に実行する。
【0073】方法がオペレーティングシステム1160
からコールされると、その方法を、解釈された方法とし
て呼び出すべきであると決定された場合、ランタイムシ
ステム1146はインタープリタ1144からその方法
を取得できる。他方、その方法、コンパイルされた方法
として呼び出すベきであると決定された場合、ランタイ
ムシステム1146はコンパイラ1146を活性化す
る。コンパイラ1142は次にバイトコード1130か
ら機械命令を生成すると共に、その機械語命令を実行す
る。一般に、機械語命令は、バーチャルマシン1140
が終了すると放棄される。
からコールされると、その方法を、解釈された方法とし
て呼び出すべきであると決定された場合、ランタイムシ
ステム1146はインタープリタ1144からその方法
を取得できる。他方、その方法、コンパイルされた方法
として呼び出すベきであると決定された場合、ランタイ
ムシステム1146はコンパイラ1146を活性化す
る。コンパイラ1142は次にバイトコード1130か
ら機械命令を生成すると共に、その機械語命令を実行す
る。一般に、機械語命令は、バーチャルマシン1140
が終了すると放棄される。
【0074】本発明の実施形態をごく少数だけ説明した
が、本発明は、発明の精神と範囲から逸脱することな
く、他の多くの特定形式で具体化できることは言うまで
もない。例として、リコンパイラの実行に関連するステ
ップを再整理、除去、又は追加できる。更に、一部の実
施形態では、方法をその方法のコーラーへインラインす
るためのオプションを排除できる。一般に、本発明の方
法に関連するステップを、発明の精神と範囲から逸脱す
ることなく再整理、除去、又は追加できる。
が、本発明は、発明の精神と範囲から逸脱することな
く、他の多くの特定形式で具体化できることは言うまで
もない。例として、リコンパイラの実行に関連するステ
ップを再整理、除去、又は追加できる。更に、一部の実
施形態では、方法をその方法のコーラーへインラインす
るためのオプションを排除できる。一般に、本発明の方
法に関連するステップを、発明の精神と範囲から逸脱す
ることなく再整理、除去、又は追加できる。
【0075】コンパイラの実行を、コンパイラが所定方
法をコンパイルするか否かの決定、及び所定方法のコン
パイルに関して説明したが、言うまでもなく、所定方法
のコンパイルは、その所定方法をコンパイルすべき旨の
決定の後で遅延できる。多重方法が実質上同時にコンパ
イルされている場合は、所定方法のコンパイルは、コン
パイルされている方法が少なくなるまで、例えばコンパ
イルオーバヘッドが最小希望コンパイルオーバヘッドの
下に来るまで遅延することができる。所定方法のコンパ
イルの遅延は、コンパイルオーバヘッドが最大希望コン
パイルオーバヘッドを超えないようにするのに役立つだ
ろう。更に、コンパイルの遅延は、プログラムの実行中
の比較的長いコンパイルの休止を防ぐためにも役立つだ
ろう。一実施形態では、プログラム内の方法のコンパイ
ルを、プログラムの全実行で休止が存在するまで遅延で
きる。そのような実施形態では、方法は、プログラムの
全実行の間の休止、又は活動の低い期間にアクセスされ
るキューの中に置くことができる。
法をコンパイルするか否かの決定、及び所定方法のコン
パイルに関して説明したが、言うまでもなく、所定方法
のコンパイルは、その所定方法をコンパイルすべき旨の
決定の後で遅延できる。多重方法が実質上同時にコンパ
イルされている場合は、所定方法のコンパイルは、コン
パイルされている方法が少なくなるまで、例えばコンパ
イルオーバヘッドが最小希望コンパイルオーバヘッドの
下に来るまで遅延することができる。所定方法のコンパ
イルの遅延は、コンパイルオーバヘッドが最大希望コン
パイルオーバヘッドを超えないようにするのに役立つだ
ろう。更に、コンパイルの遅延は、プログラムの実行中
の比較的長いコンパイルの休止を防ぐためにも役立つだ
ろう。一実施形態では、プログラム内の方法のコンパイ
ルを、プログラムの全実行で休止が存在するまで遅延で
きる。そのような実施形態では、方法は、プログラムの
全実行の間の休止、又は活動の低い期間にアクセスされ
るキューの中に置くことができる。
【0076】更に、本発明を、最初に解釈されるすべて
の方法に関して説明したが、言うまでもなく、バイトコ
ードの形のコンピュータプログラムがランタイム環境に
最初に供給されるときは、プログラムに関連する少なく
とも一部の方法を直ちにコンパイルできる。例えば、希
望コンパイルオーバヘッドが、実行の最初からプログラ
ムによって満たされるようにするために、一部の方法は
最初にコンパイルしてもよいが、他の方法は最初、解釈
された後、所定の解釈された方法の呼出しの数がしきい
値を超えた時点で、その所定の解釈された方法がコンパ
イルされる。
の方法に関して説明したが、言うまでもなく、バイトコ
ードの形のコンピュータプログラムがランタイム環境に
最初に供給されるときは、プログラムに関連する少なく
とも一部の方法を直ちにコンパイルできる。例えば、希
望コンパイルオーバヘッドが、実行の最初からプログラ
ムによって満たされるようにするために、一部の方法は
最初にコンパイルしてもよいが、他の方法は最初、解釈
された後、所定の解釈された方法の呼出しの数がしきい
値を超えた時点で、その所定の解釈された方法がコンパ
イルされる。
【0077】図3に関して上述した、解釈された方法内
に置かれたカウンタは、一般に、方法内の任意の場所に
置いてもよいが、方法の実行中のカウンタへのアクセス
は高価になるかもしれない。従って、解釈された方法内
にカウンタを置いたときは、カウンタをより容易にカウ
ンタにアクセスできるように、方法の最初に置くことが
できる。実施形態の中には、方法内に置かれたカウンタ
へのアクセスに伴うコストのために、すべての方法に対
して単一のグローバルカウンタを使用できるものがあ
る。グローバルカウンタがそのしきい値に達したとき
は、あたかも現行方法がその呼出カウンタのしきい値に
達したかのように、現在実行中の方法のリコンパイルを
考慮することができる。
に置かれたカウンタは、一般に、方法内の任意の場所に
置いてもよいが、方法の実行中のカウンタへのアクセス
は高価になるかもしれない。従って、解釈された方法内
にカウンタを置いたときは、カウンタをより容易にカウ
ンタにアクセスできるように、方法の最初に置くことが
できる。実施形態の中には、方法内に置かれたカウンタ
へのアクセスに伴うコストのために、すべての方法に対
して単一のグローバルカウンタを使用できるものがあ
る。グローバルカウンタがそのしきい値に達したとき
は、あたかも現行方法がその呼出カウンタのしきい値に
達したかのように、現在実行中の方法のリコンパイルを
考慮することができる。
【0078】一般に、カウンタは、そのカウンタを含む
方法を呼び出す間の任意の時点で増分できる。例えば、
カウンタは、方法内のループの後方分岐(backward bran
ch)が実行している間に増分できる。ループの後方分
岐、又はループ内の実質上任意の場所におけるカウンタ
の増分は、方法内のロングランニングループ(long runn
ing loop) の検出を容易にする。ロングランニングルー
プは、方法の単一の呼出しの間に繰り返し実行できる。
カウンタをループ内、例えばループの後方分岐内に置く
ことによって、ループの各繰り返しを方法の呼出しとし
てカウントできるので、大量の実行時間を利用す方法の
コンパイルをより容易に考慮できる。言うまでもないこ
とだが、方法の実行中の、方法のカウンタへのアクセス
は費用がかかるので、一部の実施形態では、ループ内の
カウンタが、方法内のカウンタよりも容易にアクセスさ
れる「グローバル」ループカウンタを増分することがで
きる。
方法を呼び出す間の任意の時点で増分できる。例えば、
カウンタは、方法内のループの後方分岐(backward bran
ch)が実行している間に増分できる。ループの後方分
岐、又はループ内の実質上任意の場所におけるカウンタ
の増分は、方法内のロングランニングループ(long runn
ing loop) の検出を容易にする。ロングランニングルー
プは、方法の単一の呼出しの間に繰り返し実行できる。
カウンタをループ内、例えばループの後方分岐内に置く
ことによって、ループの各繰り返しを方法の呼出しとし
てカウントできるので、大量の実行時間を利用す方法の
コンパイルをより容易に考慮できる。言うまでもないこ
とだが、方法の実行中の、方法のカウンタへのアクセス
は費用がかかるので、一部の実施形態では、ループ内の
カウンタが、方法内のカウンタよりも容易にアクセスさ
れる「グローバル」ループカウンタを増分することがで
きる。
【0079】「ループカウンタしきい値」を使用する実
施形態では、ループカウンタしきい値は上述の呼出しき
い値とは異なるかもしれない。ループカウンタしきい値
も、異なるしきい値係数によって増減できる。しかしな
がら、一般に、ループカウンタしきい値は、呼出しきい
値と実質的にタンデムで調節されるだろう。
施形態では、ループカウンタしきい値は上述の呼出しき
い値とは異なるかもしれない。ループカウンタしきい値
も、異なるしきい値係数によって増減できる。しかしな
がら、一般に、ループカウンタしきい値は、呼出しきい
値と実質的にタンデムで調節されるだろう。
【0080】カウンタを、方法内に置かれるものとして
一般的に説明した。しかしながら、当然のことながら、
カウンタを方法内に置く代わりに、カウンタを、方法が
呼び出される度にアクセスできるデータベース又はテー
ブル中に保持することもできる。その場合、データベー
ス、つまり更に具体的にはデータベース内のカウンタ
が、本発明の精神と範囲から逸脱することなく、特定カ
ウンタに対応する方法が呼び出される度に更新されるだ
ろう。
一般的に説明した。しかしながら、当然のことながら、
カウンタを方法内に置く代わりに、カウンタを、方法が
呼び出される度にアクセスできるデータベース又はテー
ブル中に保持することもできる。その場合、データベー
ス、つまり更に具体的にはデータベース内のカウンタ
が、本発明の精神と範囲から逸脱することなく、特定カ
ウンタに対応する方法が呼び出される度に更新されるだ
ろう。
【0081】一般に、本発明によるしきい値は大幅に変
更することができる。例えば、1000のしきい値は一
部の実施形態に関しては充分かもしれないが、実質上す
べての方法が1000回以上実行される実行では、それ
より高いしきい値が適当だろう。同様に、最大と最小の
希望コンパイルオーバヘッドも、最大と最小の希望解釈
オーバヘッドと共に、特定システムの要件によって大幅
に変更できる。
更することができる。例えば、1000のしきい値は一
部の実施形態に関しては充分かもしれないが、実質上す
べての方法が1000回以上実行される実行では、それ
より高いしきい値が適当だろう。同様に、最大と最小の
希望コンパイルオーバヘッドも、最大と最小の希望解釈
オーバヘッドと共に、特定システムの要件によって大幅
に変更できる。
【0082】しきい値の値は、様々な要因に基づいて選
択できる。上記の要因は、それに限定されないが、プロ
グラム実行の%を含む。言い換えれば、しきい値は、全
プログラム実行の所定%、例えば半分以上の割合を占め
る方法がコンパイルされるように選択できる。例とし
て、しきい値は、全プログラム実行の約95%を占める
方法がコンパイルされるように調節できる。
択できる。上記の要因は、それに限定されないが、プロ
グラム実行の%を含む。言い換えれば、しきい値は、全
プログラム実行の所定%、例えば半分以上の割合を占め
る方法がコンパイルされるように選択できる。例とし
て、しきい値は、全プログラム実行の約95%を占める
方法がコンパイルされるように調節できる。
【0083】更に、バイトコード化されたプログラムの
最適化を、単一のコンパイルレベルか2つのコンパイル
レベルを使って説明したが、バイトコード化されたプロ
グラムの実行に伴うコンパイルレベルの数は一般に、発
明の精神と範囲から逸脱することなく、大幅に変更でき
る。一般に、バイトコード化されたプログラムの実行に
伴うコンパイルレベルの数は、それに限定されないが、
プログラムの最適化の希望レベルを含む任意数の異なる
要因に依存するだろう。各コンパイルレベルは独立のし
きい値を持つことができるが、しきい値は実質上すべて
のコンパイルレベルに対して同一でもよい。多重コンパ
イルレベルを含むシステムでは、方法が呼び出される度
に増分されるカウンタを、各コンパイルされた方法の中
に置くことができる。これらのカウンタは、上述の解釈
された方法の中に置かれたものと同様、コンパイルされ
た方法をリコンパイルするのはいつが適切かを決定する
場合に使用できる。
最適化を、単一のコンパイルレベルか2つのコンパイル
レベルを使って説明したが、バイトコード化されたプロ
グラムの実行に伴うコンパイルレベルの数は一般に、発
明の精神と範囲から逸脱することなく、大幅に変更でき
る。一般に、バイトコード化されたプログラムの実行に
伴うコンパイルレベルの数は、それに限定されないが、
プログラムの最適化の希望レベルを含む任意数の異なる
要因に依存するだろう。各コンパイルレベルは独立のし
きい値を持つことができるが、しきい値は実質上すべて
のコンパイルレベルに対して同一でもよい。多重コンパ
イルレベルを含むシステムでは、方法が呼び出される度
に増分されるカウンタを、各コンパイルされた方法の中
に置くことができる。これらのカウンタは、上述の解釈
された方法の中に置かれたものと同様、コンパイルされ
た方法をリコンパイルするのはいつが適切かを決定する
場合に使用できる。
【0084】方法をコンパイルすべきか否かの決定は、
その方法に関連するカウンタのしきい値に基づくものと
して説明したが、方法をコンパイルすべきか否かの決定
は、任意数の異なる要因に基づくことができる。例とし
て、全オペレーティングシステムでのタイム「チック」
を使って、コンパイルから利益を得る時間浪費の方法を
発見できる。すなわち、方法の実行に伴う時間の量を削
減するために、多くのタイムチックの過程にわたって実
行する方法のコンパイルを考慮することができる。
その方法に関連するカウンタのしきい値に基づくものと
して説明したが、方法をコンパイルすべきか否かの決定
は、任意数の異なる要因に基づくことができる。例とし
て、全オペレーティングシステムでのタイム「チック」
を使って、コンパイルから利益を得る時間浪費の方法を
発見できる。すなわち、方法の実行に伴う時間の量を削
減するために、多くのタイムチックの過程にわたって実
行する方法のコンパイルを考慮することができる。
【0085】実行カウンタ、すなわち呼出カウンタは一
般に、方法がアクセスされる度に増分されるカウンタで
ある。言うまでもなく、実施形態の中には、時間の経過
と共に呼出カウンタを減少できるものがある。例えば、
方法がプログラム実行の最初に繰り返し呼び出された
が、比較的長期間にわたって再び呼び出されていない場
合、呼出カウンタを減少させて、後から方法が呼び出さ
れた場合にその方法がコンパイルされる可能性を削減す
ることができる。一旦、方法用の呼出カウンタが減少、
例えば指数的に減少したときは、方法のコンパイルは最
早望ましくないだろう。従って、本例は例示的と見なす
べきであって、制限的なものと見なしてはならず、本発
明は本明細書に記載の詳細に限定すべきではなく、添付
の特許請求項の範囲、ならびに同等仕様の全範囲の中で
修正可能である。
般に、方法がアクセスされる度に増分されるカウンタで
ある。言うまでもなく、実施形態の中には、時間の経過
と共に呼出カウンタを減少できるものがある。例えば、
方法がプログラム実行の最初に繰り返し呼び出された
が、比較的長期間にわたって再び呼び出されていない場
合、呼出カウンタを減少させて、後から方法が呼び出さ
れた場合にその方法がコンパイルされる可能性を削減す
ることができる。一旦、方法用の呼出カウンタが減少、
例えば指数的に減少したときは、方法のコンパイルは最
早望ましくないだろう。従って、本例は例示的と見なす
べきであって、制限的なものと見なしてはならず、本発
明は本明細書に記載の詳細に限定すべきではなく、添付
の特許請求項の範囲、ならびに同等仕様の全範囲の中で
修正可能である。
【図1】(a)は、バイトコードコンパイラを持つコン
ピュータシステムのブロック線図であり、(b)は、2
つのコンパイルプロセスを使用するコンピュータシステ
ムのブロック線図を示す。
ピュータシステムのブロック線図であり、(b)は、2
つのコンパイルプロセスを使用するコンピュータシステ
ムのブロック線図を示す。
【図2】(a)は、本発明の実施形態による、コードを
動的にコンパイルするコンピュータシステムのブロック
線図であり、(b)は、本発明の実施形態による、バイ
トコードの処理に関連するステップを示すプロセス流れ
線図を示す。
動的にコンパイルするコンピュータシステムのブロック
線図であり、(b)は、本発明の実施形態による、バイ
トコードの処理に関連するステップを示すプロセス流れ
線図を示す。
【図3】本発明の実施形態による、プログラムの実行に
関連するステップ、すなわち図2(b)のステップ20
6を示すプロセス流れ線図である。
関連するステップ、すなわち図2(b)のステップ20
6を示すプロセス流れ線図である。
【図4】本発明の実施形態による、方法の実行に関連す
るステップ、すなわち図3bのステップ320を示すプ
ロセス流れ線図である。
るステップ、すなわち図3bのステップ320を示すプ
ロセス流れ線図である。
【図5】本発明の実施形態による、リコンパイラの実行
に関連するステップ、すなわち図4のステップ420を
示すプロセス流れ線図である。
に関連するステップ、すなわち図4のステップ420を
示すプロセス流れ線図である。
【図6】本発明の実施形態による、しきい値の増加に関
連するステップ、例えば図5のステップ516を示すプ
ロセス流れ線図である。
連するステップ、例えば図5のステップ516を示すプ
ロセス流れ線図である。
【図7】本発明の実施形態による、しきい値モニタの実
行に関連するステップ、すなわち図2(b)のステップ
204を示すプロセス流れ線図である。
行に関連するステップ、すなわち図2(b)のステップ
204を示すプロセス流れ線図である。
【図8】本発明の実施形態による、しきい値の減少に関
連するステップ、すなわち図7のステップ712を示す
プロセス流れ線図である。
連するステップ、すなわち図7のステップ712を示す
プロセス流れ線図である。
【図9】本発明の実施形態による、解釈オーバヘッドの
計算に関連するステップを示すプロセス流れ線図であ
る。
計算に関連するステップを示すプロセス流れ線図であ
る。
【図10】本発明の実現に適した汎用コンピュータシス
テムの図式表示である。
テムの図式表示である。
【図11】図10のコンピュータシステムによって支援
されて、本発明の実現に適したバーチャルマシンの図式
表示である。
されて、本発明の実現に適したバーチャルマシンの図式
表示である。
104…バイトコード、105…システム、106…コ
ンパイラ、108…コンパイルコード、114…バイト
コード、115…システム、116…第1コンパイラ、
118…コンパイルコード、120…高度に実行される
コンパイルコード、122…第2コンパイラ、124…
リコンパイルされた高度に実行されるコード、144…
バイトコード、146…システム、148…インタープ
リタ、150…コンパイラ、154…解釈されたコー
ド、158…頻繁に実行されるコード、162…コンパ
イルされた頻繁実行コード、166…高度に実行される
コンパイルコード、170…追加コンパイラ、174…
高度に実行されるコンパイルコード、1012…ネット
ワーク、1032…プロセッサ、1034…主記憶装
置、1036…ROM、1038…ネットワーク、10
40…入出力装置、1105…コンパイルタイム環境、
1110…ソースコード、1120…コンパイラ、11
30…バイトコード、1135…ランタイム環境、11
40…バーチャルマシン、1142…コンパイラ、11
44…インタープリタ、1146…ランタイムシステ
ム、1160…オペレーティングシステム。
ンパイラ、108…コンパイルコード、114…バイト
コード、115…システム、116…第1コンパイラ、
118…コンパイルコード、120…高度に実行される
コンパイルコード、122…第2コンパイラ、124…
リコンパイルされた高度に実行されるコード、144…
バイトコード、146…システム、148…インタープ
リタ、150…コンパイラ、154…解釈されたコー
ド、158…頻繁に実行されるコード、162…コンパ
イルされた頻繁実行コード、166…高度に実行される
コンパイルコード、170…追加コンパイラ、174…
高度に実行されるコンパイルコード、1012…ネット
ワーク、1032…プロセッサ、1034…主記憶装
置、1036…ROM、1038…ネットワーク、10
40…入出力装置、1105…コンパイルタイム環境、
1110…ソースコード、1120…コンパイラ、11
30…バイトコード、1135…ランタイム環境、11
40…バーチャルマシン、1142…コンパイラ、11
44…インタープリタ、1146…ランタイムシステ
ム、1160…オペレーティングシステム。
フロントページの続き (72)発明者 ロバート グライセマー アメリカ合衆国, カリフォルニア州, メンロパーク, オーク レーン 960, ナンバーエフ (72)発明者 デイヴィッド グリズウォールド アメリカ合衆国, カリフォルニア州, ウッドサイド, スカイライン ドライヴ 10
Claims (19)
- 【請求項1】 ランタイム中にコンピュータプログラム
を処理するためのコンピュータ実現方法であって、前記
プログラムがバイトコードを含み、 複数の方法から選択された方法を呼び出すステップであ
って、前記選択された方法の呼出しが前記選択された方
法を解釈することを含むステップと、 前記選択された方法の呼出しを追跡するように構成され
た呼出トラッカを更新するステップと、 前記選択された方法の前記呼出しがしきい値を超えるこ
とをいつ前記呼出トラッカが示すか、を決定するステッ
プと、 前記選択された方法の前記呼出しが前記しきい値を超え
たことを前記呼出トラッカが示している、と決定された
ときに、前記選択された方法をコンパイルするステップ
と、を有するコンピュータ実現方法。 - 【請求項2】 前記選択された方法のコンパイルに伴う
コンパイルオーバヘッドを測定するステップを更に含
む、請求項1に記載のコンピュータ実現方法。 - 【請求項3】 前記コンパイルオーバヘッドがいつ許容
範囲内にあるか、を決定するステップと、 前記コンパイルオーバヘッドが前記許容範囲内にない、
と決定されたときに、前記しきい値を調節するステップ
と、を更に含む請求項2に記載のコンピュータ実現方
法。 - 【請求項4】 前記コンパイルオーバヘッドの測定は前
記コンパイルオーバヘッド用のスライディング平均を計
算するステップを含む、請求項2及び3のいずれか一項
に記載のコンピュータ実現方法。 - 【請求項5】 前記選択された方法の解釈に伴う解釈オ
ーバヘッドを測定するステップを更に含む請求項2〜4
のいずれか一項に記載のコンピュータ実現方法。 - 【請求項6】 前記解釈オーバヘッドがいつ許容範囲内
にあるか、を決定するステップと、前記解釈オーバヘッ
ドが前記許容範囲内にない、と決定されたときに、前記
しきい値を調節するステップと、を更に含む請求項5に
記載のコンピュータ実現方法。 - 【請求項7】 前記しきい値の調節は、前記しきい値を
増加させるステップと前記しきい値を減少させるステッ
プの一つを含む、請求項1〜6のいずれか一項に記載の
コンピュータ実現方法。 - 【請求項8】 前記呼出トラッカの更新は、前記選択さ
れた方法内に置かれたカウンタを増分するステップを含
む、請求項1〜7のいずれか一項に記載のコンピュータ
実現方法。 - 【請求項9】 前記コンパイルされた選択された方法を
呼び出すステップと、 前記コンパイルされた選択された方法の呼出しの数を追
跡するように構成された追跡メカニズムを更新するステ
ップと、 前記コンパイルされた選択された方法の呼出しの前記数
が限界値を超えることをいつ前記追跡メカニズムが示す
か、を決定するステップと、 前記コンパイルされた選択された方法の呼出しの前記数
が限界値を超えることを前記追跡メカニズムが示してい
る、と決定されたときに、前記コンパイルされた選択さ
れた方法をリコンパイルするステップと、を更に含む請
求項1〜8のいずれか一項に記載のコンピュータ実現方
法。 - 【請求項10】 コンピュータプログラムを実行するた
めのコンピュータ実現方法であって、前記コンピュータ
プログラムが複数の方法を含み、該複数の方法が異なる
適正状態にある選択された方法を含み、 前記コンピュータプログラムの実行中に方法を前記複数
の方法から選択するステップであって、前記方法が第1
の適正状態にあるステップと、 前記コンピュータプログラムの実行中に前記方法を前記
第1の適正状態から第2の適正状態に変えるステップで
あって、前記第2の適正状態は前記第1の適正状態より
も、最適化されており、前記第1の適正状態から第2の
適正状態への前記第1の方法の変化は、前記方法を変え
るコストを、前記方法を変える利益と均衡させることを
含むようになっているステップと、を有するコンピュー
タ実現方法。 - 【請求項11】 前記方法を実行するステップを更に含
み、前記第1の適正状態にある前記方法の実行が、前記
第2の適正状態にある前記第1の方法の実行よりも遅
い、請求項10に記載のコンピュータ実現方法。 - 【請求項12】 前記第1の適正状態は、解釈された状
態とコンパイルされた状態から成るグループから選択さ
れた状態である、請求項10及び11のいずれか一項に
記載のコンピュータ実現方法。 - 【請求項13】 前記複数の方法からの前記方法の選択
は、前記コンピュータプログラムの前記実行中に前記第
1の方法の呼出しの数を測定するステップを含む、請求
項10〜12のいずれか一項に記載のコンピュータ実現
方法。 - 【請求項14】 コンピュータプログラムを実行するた
めのコンピュータ実現方法であって、前記コンピュータ
プログラムが複数の方法を含み、 前記複数の方法から選択された第1の方法を呼び出すス
テップと、 前記第1の選択された方法がいつコンパイラによって処
理されるべきか、を決定するステップであって、前記選
択された方法がいつ前記コンパイラによって処理される
べきかの決定は前記第1の選択された方法の前記呼出し
に関連するしきい値に基づくステップと、 前記第1の方法が前記コンパイラによって処理されるべ
きである、と決定されたときに、前記選択された方法を
前記コンパイラによって処理するステップと、 前記第1の方法が前記コンパイラによって処理されるべ
きである、と決定されたときに、前記コンピュータプロ
グラムに伴うオーバヘッドの測定を調節するステップ
と、 前記オーバヘッドの前記測定が前記オーバヘッドは許容
できることを示しているか否か、を決定するステップ
と、 前記オーバヘッドは許容できない、と決定されたとき
に、前記しきい値を調節するステップと、を有するコン
ピュータ実現方法。 - 【請求項15】 バイトコードを実行するためのコンピ
ュータ装置であって、前記バイトコードが複数の方法と
して構成されており、 前記複数の方法から第1の選択された方法を解釈するよ
うに構成されたインタープリタと、 前記第1の選択された方法の解釈をカウントするように
構成された第1の追跡メカニズムであって、前記第1の
選択された方法がいつコンパイルに適するか、を決定す
るように更に構成されたメカニズムと、 前記第1の選択された方法がコンパイルに適する、と決
定されたときに、前記第1の選択された方法をコンパイ
ルするように構成されたコンパイラと、を備えたコンピ
ュータ装置。 - 【請求項16】 前記追跡メカニズムと協力して、前記
第1の選択された方法がいつコンパイルに適するか、を
決定するように構成されたしきい値メカニズムを更に含
み、前記しきい値メカニズムが、前記第1の方法がいつ
コンパイルに適するか、を示すしきい値をセットするよ
うに構成された、請求項15に記載のコンピュータ装
置。 - 【請求項17】 前記第1の選択された方法がコンパイ
ルされるときに前記第1の選択された方法の呼出しをカ
ウントするように構成された第2の追跡メカニズムであ
って、更に、前記第1の選択された方法がいつリコンパ
イルに適するか、を決定するように構成されたメカニズ
ムと、 前記第1の選択された方法がリコンパイルに適すると決
定されたときに前記第1の選択された方法をリコンパイ
ルするように構成されたリコンパイラ、を更に含む請求
項15及び16のいずれか1項に記載のコンピュータ装
置。 - 【請求項18】 コンピュータプログラムを処理するた
めのコンピュータプログラムプロダクトであって、前記
プログラムはバイトコードを含み、前記バイトコードは
複数の方法として構成され、前記コンピュータプログラ
ムプロダクトは、 前記複数の方法から選択された第1の方法を呼び出すコ
ンピュータコードであって、前記第1の選択された方法
の呼出しは前記第1の選択された方法を解釈するステッ
プを含むようになっているコンピュータコードと、 前記第1の選択された方法の呼出しを追跡するように構
成された呼出トラッカを更新するコンピュータコード
と、 前記選択された方法の前記呼出しがしきい値を超えるこ
とをいつ呼出トラッカが示すか、を決定するコンピュー
タコードと、 前記第1の選択された方法の前記呼出しがしきい値を超
えることを前記呼出トラッカが示している、と決定され
たときに、前記選択された方法をコンパイルするコンピ
ュータコードと、を備えたコンピュータプログラムプロ
ダクト。 - 【請求項19】 搬送波に組み込まれたデータ信号であ
る、請求項18によるコンピュータプログラムプロダク
ト。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/944,334 US5995754A (en) | 1997-10-06 | 1997-10-06 | Method and apparatus for dynamically optimizing byte-coded programs |
US08/944334 | 1997-10-06 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH11272476A true JPH11272476A (ja) | 1999-10-08 |
Family
ID=25481212
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP10319742A Withdrawn JPH11272476A (ja) | 1997-10-06 | 1998-10-06 | バイトコードされたプログラムを動的に最適化するための方法及び装置 |
Country Status (5)
Country | Link |
---|---|
US (3) | US5995754A (ja) |
EP (1) | EP0908819A3 (ja) |
JP (1) | JPH11272476A (ja) |
KR (1) | KR19990036881A (ja) |
CN (1) | CN1234551A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002073345A (ja) * | 2000-08-25 | 2002-03-12 | Fujitsu Ltd | 情報処理装置及び記録媒体 |
JP2003140909A (ja) * | 2001-11-07 | 2003-05-16 | Fujitsu Ltd | Jitコンパイラを備えた仮想計算機 |
JP2006524382A (ja) * | 2003-04-22 | 2006-10-26 | トランジティブ リミテッド | インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置 |
US7331041B1 (en) | 1999-10-13 | 2008-02-12 | Transmeta Corporation | Method of changing modes of code generation |
JP2008533578A (ja) * | 2005-03-11 | 2008-08-21 | トランジティブ リミテッド | プログラムコード変換中の実行制御 |
JP2012198657A (ja) * | 2011-03-18 | 2012-10-18 | Fujitsu Ltd | 命令処理方法、命令処理装置、及び命令処理プログラム |
Families Citing this family (105)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6513156B2 (en) * | 1997-06-30 | 2003-01-28 | Sun Microsystems, Inc. | Interpreting functions utilizing a hybrid of virtual and native machine instructions |
US5970249A (en) * | 1997-10-06 | 1999-10-19 | Sun Microsystems, Inc. | Method and apparatus for performing byte-code optimization during pauses |
US6865734B2 (en) * | 1997-10-06 | 2005-03-08 | 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 |
US6317796B1 (en) * | 1997-10-06 | 2001-11-13 | Sun Microsystems, Inc. | Inline database for receiver types in object-oriented systems |
US6349406B1 (en) * | 1997-12-12 | 2002-02-19 | International Business Machines Coporation | Method and system for compensating for instrumentation overhead in trace data by computing average minimum event times |
US6075942A (en) * | 1998-05-04 | 2000-06-13 | Sun Microsystems, Inc. | Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers |
US6289506B1 (en) * | 1998-06-30 | 2001-09-11 | Intel Corporation | Method for optimizing Java performance using precompiled code |
US6760907B2 (en) * | 1998-06-30 | 2004-07-06 | Sun Microsystems, Inc. | Code generation for a bytecode compiler |
JP2000020319A (ja) * | 1998-06-30 | 2000-01-21 | Canon Inc | プログラム実行装置、その制御方法および記憶媒体 |
US6324688B1 (en) * | 1998-07-30 | 2001-11-27 | International Business Machines Corporation | Method and apparatus for optimizing execution of Java programs |
US6205578B1 (en) * | 1998-08-14 | 2001-03-20 | Ati International Srl | Interpreter for stack-based languages |
GB2344907A (en) * | 1998-12-19 | 2000-06-21 | Int Computers Ltd | Instruction translation and execution mechanism |
US6327702B1 (en) * | 1998-12-30 | 2001-12-04 | Microsoft Corporation | Generating a compiled language program for an interpretive runtime environment |
JP3470948B2 (ja) * | 1999-01-28 | 2003-11-25 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US8065504B2 (en) * | 1999-01-28 | 2011-11-22 | Ati International Srl | Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US6446257B1 (en) * | 1999-02-04 | 2002-09-03 | Hewlett-Packard Company | Method and apparatus for pre-allocation of system resources to facilitate garbage collection |
US6507946B2 (en) * | 1999-06-11 | 2003-01-14 | International Business Machines Corporation | Process and system for Java virtual method invocation |
US6718543B2 (en) * | 1999-11-08 | 2004-04-06 | Hewlett-Packard Development Company, L.P. | Method and apparatus for optimization of the performance of an application program in a computer system while preserving the system behavior |
JP3356742B2 (ja) * | 1999-11-17 | 2002-12-16 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム実行方法 |
US6817011B1 (en) * | 1999-12-14 | 2004-11-09 | International Business Machines Corporation | Memory allocation profiling to discover high frequency allocators |
DE19963832A1 (de) * | 1999-12-30 | 2001-07-05 | Ericsson Telefon Ab L M | Programmprofilierung |
SE0002440D0 (sv) | 2000-06-28 | 2000-06-28 | Virtutech Ab | Interpreter |
US6658656B1 (en) * | 2000-10-31 | 2003-12-02 | Hewlett-Packard Development Company, L.P. | Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions |
US6971091B1 (en) | 2000-11-01 | 2005-11-29 | International Business Machines Corporation | System and method for adaptively optimizing program execution by sampling at selected program points |
US7103877B1 (en) | 2000-11-01 | 2006-09-05 | International Business Machines Corporation | System and method for characterizing program behavior by sampling at selected program points |
US6857120B1 (en) | 2000-11-01 | 2005-02-15 | International Business Machines Corporation | Method for characterizing program execution by periodic call stack inspection |
US7076773B2 (en) * | 2001-03-20 | 2006-07-11 | International Business Machines Corporation | Object oriented apparatus and method for allocating objects on an invocation stack in a dynamic compilation environment |
US7058943B2 (en) * | 2001-05-24 | 2006-06-06 | International Business Machines Corporation | Object oriented apparatus and method for allocating objects on an invocation stack in a partial compilation environment |
US6948160B2 (en) * | 2001-05-31 | 2005-09-20 | Sun Microsystems, Inc. | System and method for loop unrolling in a dynamic compiler |
GB0125176D0 (en) * | 2001-10-19 | 2001-12-12 | Koninkl Philips Electronics Nv | A method of compiling bytecode to native code |
US6996814B2 (en) * | 2001-11-14 | 2006-02-07 | Sun Microsystems, Inc. | Method and apparatus for dynamically compiling byte codes into native code |
EP1313012A1 (en) * | 2001-11-15 | 2003-05-21 | Texas Instruments France | Java DSP acceleration by byte-code optimization |
US7020160B1 (en) * | 2001-12-17 | 2006-03-28 | Supergate Technology Usa, Inc. | Interface circuits for modularized data optimization engines and methods therefor |
US8639849B2 (en) * | 2001-12-17 | 2014-01-28 | Sutech Data Solutions Co., Llc | Integrated circuits for high speed adaptive compression and methods therefor |
US7363251B2 (en) * | 2002-04-08 | 2008-04-22 | Stolski Sean M | Dedicated portable computer sales presentation system |
US6973644B2 (en) | 2002-04-12 | 2005-12-06 | The Mathworks, Inc. | Program interpreter |
EP1377034A1 (en) * | 2002-06-27 | 2004-01-02 | Thomson Licensing S.A. | Data processing device and method for interactive television |
US6964042B2 (en) * | 2002-12-17 | 2005-11-08 | Bea Systems, Inc. | System and method for iterative code optimization using adaptive size metrics |
US7536682B2 (en) * | 2003-04-22 | 2009-05-19 | International Business Machines Corporation | Method and apparatus for performing interpreter optimizations during program code conversion |
US7543284B2 (en) | 2003-04-22 | 2009-06-02 | Transitive Limited | Partial dead code elimination optimizations for program code conversion |
JP4713820B2 (ja) * | 2003-05-28 | 2011-06-29 | パナソニック株式会社 | プログラム実行制御装置、プログラム実行制御方法 |
US7373637B2 (en) | 2003-09-30 | 2008-05-13 | International Business Machines Corporation | Method and apparatus for counting instruction and memory location ranges |
US7937691B2 (en) | 2003-09-30 | 2011-05-03 | International Business Machines Corporation | Method and apparatus for counting execution of specific instructions and accesses to specific data locations |
US20050071821A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically select instructions for selective counting |
US7395527B2 (en) * | 2003-09-30 | 2008-07-01 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses |
US7421681B2 (en) * | 2003-10-09 | 2008-09-02 | International Business Machines Corporation | Method and system for autonomic monitoring of semaphore operation in an application |
US8381037B2 (en) * | 2003-10-09 | 2013-02-19 | International Business Machines Corporation | Method and system for autonomic execution path selection in an application |
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 |
US7496908B2 (en) | 2004-01-14 | 2009-02-24 | International Business Machines Corporation | Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information |
US7526757B2 (en) | 2004-01-14 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program |
US7415705B2 (en) * | 2004-01-14 | 2008-08-19 | International Business Machines Corporation | Autonomic method and apparatus for hardware assist for patching code |
US7895382B2 (en) * | 2004-01-14 | 2011-02-22 | International Business Machines Corporation | Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs |
US7290255B2 (en) * | 2004-01-14 | 2007-10-30 | International Business Machines Corporation | Autonomic method and apparatus for local program code reorganization using branch count per instruction hardware |
US7392370B2 (en) * | 2004-01-14 | 2008-06-24 | International Business Machines Corporation | Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics |
US7293164B2 (en) * | 2004-01-14 | 2007-11-06 | International Business Machines Corporation | Autonomic method and apparatus for counting branch instructions to generate branch statistics meant to improve branch predictions |
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 |
US7480899B2 (en) * | 2004-03-22 | 2009-01-20 | International Business Machines Corporation | Method and apparatus for autonomic test case feedback using hardware assistance for code coverage |
US7296130B2 (en) * | 2004-03-22 | 2007-11-13 | International Business Machines Corporation | Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data |
US8135915B2 (en) * | 2004-03-22 | 2012-03-13 | International Business Machines Corporation | Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator |
US7526616B2 (en) * | 2004-03-22 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for prefetching data from a data structure |
US7421684B2 (en) * | 2004-03-22 | 2008-09-02 | International Business Machines Corporation | Method and apparatus for autonomic test case feedback using hardware assistance for data coverage |
US7299319B2 (en) * | 2004-03-22 | 2007-11-20 | International Business Machines Corporation | Method and apparatus for providing hardware assistance for code coverage |
US7568190B2 (en) * | 2005-03-08 | 2009-07-28 | International Business Machines Corporation | Late binding of optimization information for just in time compilation |
CN100442901C (zh) * | 2005-10-25 | 2008-12-10 | 华为技术有限公司 | 在设备管理中监控和升级软件的方法及装置 |
US9830174B2 (en) * | 2005-12-22 | 2017-11-28 | Synopsys, Inc. | Dynamic host code generation from architecture description for fast simulation |
JP5167589B2 (ja) * | 2006-02-13 | 2013-03-21 | 富士通株式会社 | アプリケーションサーバ装置および仮想マシンプログラム |
US7784041B2 (en) * | 2006-03-30 | 2010-08-24 | Oracle America, Inc. | Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation |
US8024720B2 (en) * | 2006-04-17 | 2011-09-20 | International Business Machines Corporation | Speculative inlining of overridden methods without using profiling information |
US8214813B2 (en) * | 2007-01-12 | 2012-07-03 | Microsoft Corporation | Code optimization across interfaces |
KR101407629B1 (ko) * | 2007-06-04 | 2014-06-13 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
US20080320088A1 (en) * | 2007-06-19 | 2008-12-25 | Searete Llc, A Limited Liability Corporation Of The State Of Delaware | Helping valuable message content pass apparent message filtering |
US8682982B2 (en) * | 2007-06-19 | 2014-03-25 | The Invention Science Fund I, Llc | Preliminary destination-dependent evaluation of message content |
US9374242B2 (en) * | 2007-11-08 | 2016-06-21 | Invention Science Fund I, Llc | Using evaluations of tentative message content |
US8984133B2 (en) * | 2007-06-19 | 2015-03-17 | The Invention Science Fund I, Llc | Providing treatment-indicative feedback dependent on putative content treatment |
US8065404B2 (en) * | 2007-08-31 | 2011-11-22 | The Invention Science Fund I, Llc | Layering destination-dependent content handling guidance |
US8082225B2 (en) * | 2007-08-31 | 2011-12-20 | The Invention Science Fund I, Llc | Using destination-dependent criteria to guide data transmission decisions |
US7930389B2 (en) * | 2007-11-20 | 2011-04-19 | The Invention Science Fund I, Llc | Adaptive filtering of annotated messages or the like |
US8141053B2 (en) | 2008-01-04 | 2012-03-20 | International Business Machines Corporation | Call stack sampling using a virtual machine |
KR100943887B1 (ko) | 2008-02-05 | 2010-02-24 | 재단법인서울대학교산학협력재단 | 핫스팟 메소드의 동적 컴파일을 위해 수행 시간을 추정하는방법 |
KR100964581B1 (ko) * | 2008-08-20 | 2010-06-21 | 주식회사 컴퍼니원헌드레드 | 두 단계 레지스터 기반 바이트코드를 이용한 스크립트 언어 실행 시스템 |
US8438558B1 (en) | 2009-03-27 | 2013-05-07 | Google Inc. | System and method of updating programs and data |
US8677329B2 (en) * | 2009-06-03 | 2014-03-18 | Apple Inc. | Methods and apparatuses for a compiler server |
US9117071B2 (en) | 2009-06-03 | 2015-08-25 | Apple Inc. | Methods and apparatuses for secure compilation |
US9207921B2 (en) * | 2009-06-22 | 2015-12-08 | Oracle America, Inc. | Fault tolerant compilation with automatic optimization adjustment |
US8990779B2 (en) * | 2009-08-11 | 2015-03-24 | Sap Se | Response time measurement system and method |
US8887142B2 (en) * | 2010-03-10 | 2014-11-11 | Microsoft Corporation | Loop control flow diversion |
JP5466601B2 (ja) * | 2010-08-31 | 2014-04-09 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コード生成方法、システム及びプログラム |
KR101171656B1 (ko) | 2010-12-16 | 2012-08-07 | 한국과학기술연구원 | 트레이스 단위 적시 컴파일러에서의 효율적인 프로파일링 방법 |
US9141414B2 (en) * | 2010-12-21 | 2015-09-22 | Sap Se | Preferred compilation |
US8756581B2 (en) * | 2011-02-03 | 2014-06-17 | International Business Machines Corporation | Adaptive next-executing-cycle trace selection for trace-driven code optimizers |
US9037548B1 (en) * | 2011-06-30 | 2015-05-19 | Emc Corporation | Dynamically updated data management processing plans generated outside a storage array |
US20130205282A1 (en) * | 2012-02-07 | 2013-08-08 | Microsoft Corporation | Transferring program execution from compiled code to interpreted code |
CN109032609A (zh) * | 2012-03-30 | 2018-12-18 | 英特尔公司 | 用于实现页级自动二进制转换的硬件剖析机制 |
WO2013187864A1 (en) * | 2012-06-11 | 2013-12-19 | Empire Technology Development Llc | Modulating dynamic optimizations of a computer program |
US9098308B2 (en) * | 2012-06-26 | 2015-08-04 | Marvell World Trade Ltd. | Method and apparatus for code performance analysis based on execution trace information |
US9256410B2 (en) * | 2012-08-09 | 2016-02-09 | Apple Inc. | Failure profiling for continued code optimization |
US9569185B2 (en) | 2014-02-07 | 2017-02-14 | Oracle International Corporation | Changing de-optimization guard representation during the compilation process |
CN104572134B (zh) * | 2015-02-10 | 2018-03-06 | 中国农业银行股份有限公司 | 一种优化方法及装置 |
FR3038087B1 (fr) | 2015-06-29 | 2018-08-10 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Procede d'execution d'un programme d'ordinateur comportant une fonction parametree |
FR3038086B1 (fr) | 2015-06-29 | 2018-08-10 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Procede d'execution d'un programme d'ordinateur comportant une fonction parametree |
US9547483B1 (en) * | 2015-11-06 | 2017-01-17 | International Business Machines Corporation | Feedback directed optimized compiling of optimized executable code |
US20240330029A1 (en) * | 2023-03-31 | 2024-10-03 | Microsoft Technology Licensing, Llc. | Tracing just-in-time wasm compiler |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5694603A (en) * | 1982-09-28 | 1997-12-02 | Reiffin; Martin G. | Computer memory product with preemptive multithreading software |
US4658351A (en) * | 1984-10-09 | 1987-04-14 | Wang Laboratories, Inc. | Task control means for a multi-tasking data processing system |
US5586328A (en) * | 1994-10-21 | 1996-12-17 | Microsoft Corporation | Module dependency based incremental compiler and method |
US5590331A (en) * | 1994-12-23 | 1996-12-31 | Sun Microsystems, Inc. | Method and apparatus for generating platform-standard object files containing machine-independent code |
US5933635A (en) * | 1997-10-06 | 1999-08-03 | Sun Microsystems, Inc. | Method and apparatus for dynamically deoptimizing compiled activations |
US5995754A (en) * | 1997-10-06 | 1999-11-30 | Sun Microsystems, Inc. | Method and apparatus for dynamically optimizing byte-coded programs |
US5970249A (en) * | 1997-10-06 | 1999-10-19 | Sun Microsystems, Inc. | Method and apparatus for performing byte-code optimization during pauses |
-
1997
- 1997-10-06 US US08/944,334 patent/US5995754A/en not_active Expired - Lifetime
-
1998
- 1998-09-28 EP EP98307749A patent/EP0908819A3/en not_active Withdrawn
- 1998-10-06 JP JP10319742A patent/JPH11272476A/ja not_active Withdrawn
- 1998-10-06 CN CN98118294A patent/CN1234551A/zh active Pending
- 1998-10-07 KR KR1019980041790A patent/KR19990036881A/ko not_active Application Discontinuation
-
1999
- 1999-08-02 US US09/365,706 patent/US6237141B1/en not_active Expired - Fee Related
-
2001
- 2001-04-18 US US09/837,901 patent/US20040205712A1/en not_active Abandoned
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7331041B1 (en) | 1999-10-13 | 2008-02-12 | Transmeta Corporation | Method of changing modes of code generation |
JP2002073345A (ja) * | 2000-08-25 | 2002-03-12 | Fujitsu Ltd | 情報処理装置及び記録媒体 |
JP2003140909A (ja) * | 2001-11-07 | 2003-05-16 | Fujitsu Ltd | Jitコンパイラを備えた仮想計算機 |
JP2006524382A (ja) * | 2003-04-22 | 2006-10-26 | トランジティブ リミテッド | インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置 |
JP4844971B2 (ja) * | 2003-04-22 | 2011-12-28 | インターナショナル・ビジネス・マシーンズ・コーポレーション | インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置 |
JP2008533578A (ja) * | 2005-03-11 | 2008-08-21 | トランジティブ リミテッド | プログラムコード変換中の実行制御 |
US8615749B2 (en) | 2005-03-11 | 2013-12-24 | International Business Machines Corporation | Execution control during program code conversion |
JP2012198657A (ja) * | 2011-03-18 | 2012-10-18 | Fujitsu Ltd | 命令処理方法、命令処理装置、及び命令処理プログラム |
Also Published As
Publication number | Publication date |
---|---|
US6237141B1 (en) | 2001-05-22 |
CN1234551A (zh) | 1999-11-10 |
EP0908819A2 (en) | 1999-04-14 |
KR19990036881A (ko) | 1999-05-25 |
US5995754A (en) | 1999-11-30 |
US20040205712A1 (en) | 2004-10-14 |
EP0908819A3 (en) | 2000-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH11272476A (ja) | バイトコードされたプログラムを動的に最適化するための方法及び装置 | |
EP0908818B1 (en) | Method and apparatus for optimizing the execution of software applications | |
US11816014B2 (en) | Optimized recompilation using hardware tracing | |
US8286152B2 (en) | Systems, methods, and computer products for just-in-time compilation for virtual machine environments for fast application startup and maximal run-time performance | |
Kistler et al. | Continuous program optimization: A case study | |
Suganuma et al. | Design and evaluation of dynamic optimizations for a Java just-in-time compiler | |
US6530075B1 (en) | JIT/compiler Java language extensions to enable field performance and serviceability | |
US7568190B2 (en) | Late binding of optimization information for just in time compilation | |
US7765527B2 (en) | Per thread buffering for storing profiling data | |
US6865734B2 (en) | Method and apparatus for performing byte-code optimization during pauses | |
US6345384B1 (en) | Optimized program code generator, a method for compiling a source text and a computer-readable medium for a processor capable of operating with a plurality of instruction sets | |
JP2005018760A (ja) | アプリケーションのプロファイリングを容易にするシステムおよび方法 | |
US20040194077A1 (en) | Methods and apparatus to collect profile information | |
US6895580B2 (en) | Expression reduction during compilation through routine cloning | |
US7975263B2 (en) | Method and apparatus for generating run time profiles for program compilation | |
US9027011B1 (en) | Using method-profiling to dynamically tune a virtual machine for responsiveness | |
US8127282B2 (en) | Recompilation of a class with a java static variable | |
US7086044B2 (en) | Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization | |
US20040221281A1 (en) | Compiler apparatus, compiling method, and compiler program | |
US20020133638A1 (en) | Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine | |
WO2012041600A1 (en) | Virtual machine stage detection | |
US6925636B2 (en) | Method and apparatus for refining an alias set of address taken variables | |
US6240500B1 (en) | Method for dynamically placing procedures of a program in a memory | |
Arnold et al. | Architecture and policy for adaptive optimization in virtual machines | |
JP3807860B2 (ja) | コンパイル方法および装置、並びにメソッド活動度計算方法および装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051005 |
|
A524 | Written submission of copy of amendment under section 19 (pct) |
Free format text: JAPANESE INTERMEDIATE CODE: A524 Effective date: 20051219 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060203 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20060308 |