JP3807860B2 - コンパイル方法および装置、並びにメソッド活動度計算方法および装置 - Google Patents
コンパイル方法および装置、並びにメソッド活動度計算方法および装置 Download PDFInfo
- Publication number
- JP3807860B2 JP3807860B2 JP02203099A JP2203099A JP3807860B2 JP 3807860 B2 JP3807860 B2 JP 3807860B2 JP 02203099 A JP02203099 A JP 02203099A JP 2203099 A JP2203099 A JP 2203099A JP 3807860 B2 JP3807860 B2 JP 3807860B2
- Authority
- JP
- Japan
- Prior art keywords
- activity
- call
- called
- stack
- actually
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
Description
【発明の属する技術分野】
本発明は、コード破棄するメソッドを効果的に選択するためのメソッド活動度計算方法に関係し、特に、Java(Sun Microsystems社の商標)のJIT(Just In Time)コンパイラにおけるメソッド活動度計算方法に関係する。
【0002】
【従来の技術】
現在、Javaは、ネットワークコンピューティングの共通言語としてだけでなく、プラットフォームに依存しない、オブジェクト指向言語のスタンダードな言語として広く使用されている。Javaで書かれたプログラムはバイトコードに変換され、バイトコードはJava仮想マシンで実行される。そのため、一度Javaで書かれたプログラムは、Javaをサポートしているコンピュータならば、CPUを問わずどこでも動く(マルチプラットフォーム)という利点を持つ。
【0003】
しかしこうした利点の反面、バイトコードの仮想マシンによる実行は、機械語のコードを直接実行するのに比べて、実行性能の点で劣る。そのため、JITコンパイラにより、Javaプログラムの動作中に前記バイトコードを機械語コード(以下、JITedコードと呼ぶ)に変換して、バイトコードの代わりにJITedコードを実行するのが一般的である。コンパイルの最小単位は、メソッドと呼ばれるサブルーチンである。実行頻度の高いコードを機械語に変換することにより、Javaバイトコードのマルチプラットフォーム特性を残しつつ、機械語コードの性能を引き出している。
【0004】
メソッドのJITedコードは、プログラムが動作するCPUに適したコードになっているという点で、Cコンパイラなどが生成する最適化コードと同等である。一般に、現在普及しているCPUでは、サブルーチンが呼ばれると、サブルーチンは、自分が使用するローカル変数を格納するための領域(フレームと呼ぶ)をスタック状に形成する。図1は、サブルーチンAがサブルーチンBを、サブルーチンBがサブルーチンCを呼び出したときのスタックの様子である。この図において、スタックは下から上に伸びる。各領域は、サブルーチンのそれぞれのフレームを表わす。各サブルーチンから戻る際、フレームは除去される。Javaでは、スレッドと呼ばれる実行単位毎にCPU資源が割り振られ、1つのスレッドは固有のスタック(スレッドスタックと呼ぶ)を持つ。JITedコードは、スレッドスタック上に上述したようなフレーム(以下、JITedフレームと呼ぶ)を作る。
【0005】
メソッドは、最初ほとんどの場合インタプリタで実行されるが、実行頻度あるいは実行時間においてある水準以上実行されると判断されると、JITコンパイラによりコンパイルされる。JITedコードは一度生成されると、メモリ中に管理される。それらを安全に捨てることができるということJavaシステムが保証する時期は、Javaシステムがガベージコレクション(以下、GC)によってクラスを破棄する(以下、クラスアンロード)ときである。
【0006】
JITedコードを含むJITコンパイラが使用するメモリに制限がある、あるいは制限を設けるとき、クラスアンロードだけでは十分ではない場合がある。例えば、ハードディスクによる仮想記憶を持たない、ネットワークコンピューティング(Network Computing)マシン(以下、NCマシン)のような、シンクライアント(thin client)上で動作するデスクトップ環境では、メモリ制限は現実的な問題である。そのようなデスクトップ環境では、メール、ワープロ、スケジューラ等、複数のJavaアプリケーションが同時に起動され、数千種類のメソッドが呼ばれうるが、かなりの割合のメソッドが各スレッドスタック中に存在しない(アクティブでない)。クラスアンロードは、Javaシステム内に完全に使用される可能性のないクラスおよびそのメソッドしか破棄しないため、そうしたアクティブでないメソッドのJITedコードを破棄しない。そこでJITコンパイラはJITedコード破棄メカニズムを持っている。
【0007】
実行中のスレッドの現在のコンテキスト(プログラムカウンタ(program counter)やスタックポインタ(stack pointer)などCPU資源のコピー)あるいはそのスレッドスタック中に保持されるJITedコードのフレームには、そのスレッドでのアクティブなメソッドが記録されている。アクティブなメソッドのJITedコードが破棄されると、スレッドが実行できない。したがって、破棄するのは、非アクティブなJITedコードである。JITedコード破棄メカニズムにおいて最も簡単な破棄の仕方は、アクティブでないJITedコードをすべて破棄する方法である。しかし、この方法では必要以上にJITedコードを破棄してしまい、無駄である。メソッドの最適化コンパイルには時間がかかるため、「すぐに実行されるメソッドを破棄しない」という方針の下で選択的に破棄すべきである。的確な選択の効果の例として、JITedコード破棄が今行われ、すぐに実行されるメソッドAと、10分後に実行されるメソッドBがあったとする。もしAを破棄すると、今破棄したAのJITedコードのメモリ量と、さらにAのコンパイルに必要なワークのメモリ量とを、直ちに確保しなければならない。一方、Bを破棄すれば、10分間はBのJITedコードのメモリ量は、利用可能メモリとなる。実際には必要なフリーメモリ量分の複数のJITedコードを破棄する。理想的な破棄の方針は、今後使用されないJITedコードを破棄することであるが、このような情報は普通得られない。類推し、しばらく呼ばれそうにない順にJITedコードを破棄するのが現実的である。以下、これをJITedコード破棄方針と呼ぶ。
【0008】
通常考えられるメソッドのプロファイルに、実行頻度(何回呼ばれたか)と実行時間(プログラムカウンタがそのメソッドを指していた時間)がある。実行頻度の収集は、メソッドが呼ばれる毎にそのメソッドのカウンタを増加させて行なう。メソッドがJITコンパイラによるコンパイルされると、それまでインタプリタで測定されていた実行頻度の更新は終了し、したがってインタプリタからはJITedコードに対する実行頻度情報は得られない。JITedコードで実行頻度情報を得るには、各メソッドのJITedコードのプロローグで実行回数を数える必要がある。例えば、x86プラットフォームでは、inc dword ptr [カウンタアドレス]命令を追加する。実行時間の収集は、一定時間毎に割り込み (典型的にはタイマ割り込み、プロセッサによっては実行命令数割り込み)をかけ、プログラムカウンタ(以下、pc)を収集して行なう。
【0009】
JITedコード破棄方針として、これら従来のプロファイルを使用すると問題が生じる。まず、実行頻度について、各メソッドのJITedコード実行の度にメモリを参照してカウントするのは、メモリが枯渇しない状態へのオーバヘッドになり、問題である。さらに、頻度が少ないが直ちに呼ばれるメソッドを誤って破棄してしまう恐れがある。知りたいのは、呼ばれずにメモリを占めているJITedコードであるから、目的に合わない。また実行時間についても、割り込みと収集したpcの管理(すぐにメソッドに対応づけるなら対応づけのコスト、対応づけないならその保存)は、メモリが枯渇しない状態へのオーバヘッドになり問題である。さらに実行頻度収集の場合と同様、実行時間が短いが直ちに呼ばれるメソッドを誤って破棄してしまう恐れがある。
【0010】
【発明が解決しようとする課題】
上述のように、従来のプロファイル手法をJITedコード破棄方針とするのは的外れで、不適切なJITedコード破棄が起きる可能性がある。本発明の目的は、コード破棄するメソッドを効果的に選択するために、メソッドがすぐに実行されやすいことを表わすメソッド活動度を計算する方法を提供することである。本発明はさらに、上記方法を実行する際に使用する情報を記録するコンパイル方法及びコンパイル装置と、コンパイラを格納した記憶媒体も提供する。
【0011】
【課題を解決するための手段】
本発明は上記課題を解決するため、コンパイル時に、メソッド中で生じ得るメソッド呼び出しに関する呼び出しマップを作成し且つ記憶装置に格納し、実際に生じたメソッド呼び出しを記録するコードを生成し且つ記憶装置に格納する。この呼び出しマップは、好適には、メソッド中のあるアドレスに対し、当該アドレス以降に生じ得るメソッド呼び出しを出力するように構成される。但し、メソッドごとにメソッド呼び出しを出力するようにしてもよい。コンパイルが終了し且つ生成されたコードが実行されると、メソッド中で生じ得るメソッド呼び出しに関する呼び出しマップと実際に生じたメソッド呼び出しに関する情報とが各メソッドごとに記録されるようになる。
【0012】
このような状態において、コードを回収する際には、全スレッドを一時停止し、あるメソッドが実行される可能性の高低を表す活動度を計算する。この時、スタックフレームに対応する第1メソッドについての、呼び出しマップと実際に生じたメソッド呼び出しに関する情報とを用いて、第1メソッドから呼ばれる可能性が高い第2メソッドを特定し且つ記憶装置に格納し、第1メソッドに対応するスタックフレームのスタックの最上部からの段数に応じた優先度を第2メソッドの活動度に作用することにより第2メソッドの活動度を更新する。好適には、このような処理を繰り返す。すなわち、第2メソッドについての、呼び出しマップと実際に生じたメソッド呼び出しに関する情報と用いて、第2メソッドから呼ばれる可能性が高い第3メソッドを特定し且つ記憶装置に格納し、第1メソッドに対応するスタックフレームのスタックの最上部からの段数に応じた優先度を第3メソッドの活動度に作用することにより第3メソッドの活動度を更新する。このようにして求められたメソッドの活動度が低いもののコードを破棄するとより効率的なコード破棄が行える。
【0013】
なお、好適には、呼び出しマップは、メソッド中のあるアドレスに対し、当該アドレス以降に生じ得るメソッド呼び出しを出力し、第2メソッドの特定は、第1メソッドの実行再開アドレス以降に生じ得るメソッド呼び出しを用いて行われる。
【0014】
本発明では、非アクティブメソッドについて、現在のコンテキスト、プログラムの構造、実行時情報を利用して、すぐに呼ばれる度合い(活動度)を求める。ここでいう、現在のコンテキストの利用とは、スタック上位(トップに近い)にあるメソッドほど早く実行されそうだと判断できることである。プログラムの構造の利用とは、コントロールフロー上、一時停止しているメソッドから今後呼ばれそうなメソッドを知ることである。実行時情報の利用とは、前記呼ばれそうなメソッドでも(インタプリタを含めた)実行時に一度も呼ばれていなければ、判断対象から除外できるということである。早く呼ばれそうなメソッドの活動度が、その呼ばれる早さに応じて上げられる。
【0015】
このように活動度は、メソッドの再実行時刻が早いほど、その値が大きい。これは、上述したJITedコード破棄方針をよく模倣する点で優れている。先ほどの例でいえば、仮にAがスタック上位、Bがスタック下位からそれぞれ呼ばれるメソッドであれば、本発明のアルゴリズムによってAの活動度はBの活動度より高くなり、Bより先にAを選んで破棄することはなくなる。
【0016】
あるスレッドでJITコンパイラのメモリ要求が満たせなくなったとき、そのメソッドは自分以外のスレッドをすべて一時停止し、アクティブメソッドを見つける。本発明によるメソッド活動度計算方法により、各メソッドの活動度を決定する。その後、このような活動度に基づいて、非アクティブなメソッドの一部あるいは全部のJITedコードを破棄する。一時停止したスレッドをすべて再開し、メモリ要求を再度行なう。これをメモリ要求が満たされるまで行なう。最終的にメモリ要求が満たされない場合、許されるなら、コンパイラの最適化レベルを下げて再度コンパイルに挑戦する。再度のコンパイルが許されない場合、あるいは最低の最適化レベルでもコンパイルできなかった場合は、このメソッドをコンパイルしない。
【0017】
メソッド活動度を計算するための作業コストを低減するために、メソッドの活動度を、これらがさらに呼び出すメソッドの活動度に作用させる動作の回数に上限を設けてもよい。
【0018】
【発明の実施の形態】
本発明は、JITedコード破棄方針を模倣するために、メソッドに活動度と呼ばれる優先順位を与える方法である。JITedコード破棄方針とは、「しばらく呼ばれそうにない順にJITedコードを破棄する」ことである。低い活動度のメソッドほど、しばらく呼ばれないと予想できる。しばらく呼ばれないメソッドのJITedコードを破棄すれば、それらによって使われていたメモリ量のフリーメモリは長い間活用できるはずである。
【0019】
以下、メソッドmの活動度A(m)の計算手順を示す。各メソッドの活動度の初期値を0とする。まず、JITコンパイラによるコンパイルおよび実行時における動作を、図2のフローチャートを参照して説明する。ステップS201で開始し、ステップS202で、メソッドmに関して、JITedコード中のアドレスaddrと、このアドレスからメソッドの実行が再開したときに呼ばれる(あるいは可能性がある)メソッド集合とを対応させるための、アドレス−呼び出しマップMAPA−I(m)を作る。アドレス−呼び出しマップは、addrを含む基本ブロックBB(basic block)と、このBBからコントロールフロー上で到達する前記メソッド呼び出しとを対応づけるものである。このアドレス−呼び出しマップは、あるアドレスaddrが与えられたときに、このaddrから到達する全メソッド呼び出しを返す。この全メソッド呼び出しを呼び出し集合SETA−I(m,addr)と呼ぶ。
【0020】
アドレス−呼び出しマップの計算をするためには、コントロールフローを解析し、基本ブロックBB毎に、BBが到達する可能性のあるメソッド呼び出しのアドレスを集める。それから、BBの先頭アドレスi _addrとリーチされるメソッド呼び出しアドレスi _callの関係データ(例えば、(i _addr, i _call)をソートした表)をコンパイルコードにつける。呼び出し集合は、addrを含むBBに対応するすべてのi _callである。図3は、メソッドEのJITedコードを示す線図である。メソッドEは、BB1ないしBB5から成る。この図において、アドレス115において、メソッドFを呼び出している。したがって、呼び出し集合は、addr=100〜115はFを返し、addr=116〜120は何も返さない。
【0021】
アドレス−呼び出しマップの計算コストを大幅に削減するには、正確でないが、メソッドmのアドレス−呼び出しマップを、mに含まれるすべてのメソッド呼び出しの集合としてもよい。このとき呼び出し集合もmに含まれるすべてのメソッド呼び出しの集合である。
【0022】
JITedコード中にあるメソッド呼び出しのためのcall命令は、最適化のために、なるべくダイレクトコール(direct call )になるように処理される。例えば、あるメソッド呼び出しをコンパイルする際に呼び出し先のメソッドがまだコンパイルされていない場合、コンパイラはダイレクトコール命令を生成できない。このようなメソッド呼び出しが発生すると、バックパッチコードにジャンプして、JITコンパイラによって生成されたターゲットアドレスを次回のメソッド呼び出しから用いることができるように設定する。このような処理は従来から行われてきた。本発明では、メソッド呼び出しを最初に行う場合には、ターゲットアドレスがまだ生成されていない場合でも生成されている場合でも必ず、バックパッチコードにジャンプし、ターゲットアドレスを記録するようにする (S203のコードを用いる)。2回目以降のメソッド呼び出しでは、バックパッチコードにジャンプする必要はない。
【0023】
ステップS203で、メソッド呼び出しのバックパッチコード中に、各呼び出しコードによって実際に呼び出しが起きたことを記録するコードを生成する。この記録を有効呼び出し集合SETEI(m)と呼ぶ。この有効呼び出し集合は、呼び出しアドレスとターゲットアドレスのペア(ei_call,ei _target)の集合である。ei_targetの初期値はNULLである。ei_targetがNULLでない要素が意味のある要素である。
【0024】
ステップS204で、コンパイラは、メソッドをコンパイルする際に、全てのターゲットアドレスについての表(ei_call,ei_target)を作り、コンパイルコードに付ける。例えば、表1のようなものである。
【表1】
この表が有効呼び出し集合となる。コンパイル時の処理は以上である。
【0025】
JITedコードが実行され、S203で生成されたコードが実行されると、呼び出しを行なったメソッドの有効呼び出し集合の対応するエントリ(ei_call,ei_target)のei_targetが更新される。ここで、有効呼び出し集合においてei_targetに実際のターゲットアドレスが入っている呼び出しのみが、実際に呼び出しを行なう有効呼び出しである。ステップS206で処理を終了する。なお、表1は、例えば表2のようになる。
【表2】
【0026】
次に、JITedコードの回収プロセス中(全スレッドは一時停止状態)にメソッドの活動度を決定する。以下、図4のフローチャートを参照して説明する。
【0027】
ステップS401でコンパイル中にメモリの制限に達すると、ステップ402でJITコンパイラは動作中のスレッドを一時停止する。
【0028】
ステップS403で、各スレッドにおいて、JITedコードのフレームをスタック天井から底へ向けて検索する。見つかったJITedコードに対応するメソッドをアクティブメソッドm0と呼ぶ。
【0029】
ステップS404で、アクティブメソッドm0に優先度付けする。最も天井に近いメソッドから底へ向けてi番め(i>=0)のメソッドの優先度をw(i)とする。ここで、w(i)>w(i+1)とする。例えば、w(i)=0.9iとする。
【0030】
ステップS405で、各アクティブメソッドm0に対して、その停止アドレスaddr(まさにそのメソッドで一時停止されたならそのコンテキストのプログラムカウンタの値(pc)、それ以外ならフレームに保存された次のpc)を用いて、アドレス−呼び出しマップMAPA-I (m0 )を引いて、呼び出し集合SETA-I (m0 ,addr)を得る。
【0031】
ステップS406で、さらにメソッドm0の有効呼び出し集合SETEI(m0 )を参照して、ステップS407で、SETA-EI(m0 ,addr)を得る。SETA-EI(m0 ,addr)は、m0 のaddrから実行が再開したときに、m0 から実際に実行される可能性があるメソッド呼び出しと、このメソッド呼び出しによって呼ばれるターゲットメソッドm1 のアドレスの集合である。SETA-EIはメモリに格納される。
【0032】
S408で、SETA-EI(m0 ,addr)に含まれるすべてのターゲットメソッドm1 に対して、m0 の優先度w(i)を活動度A(m1 )に作用(例:加算)させる。これをUpdateA(m1 ,w(i))と書く。
【0033】
同様に、m1 が呼ばれたとき、m1 が呼ぶ可能性の高いターゲットメソッドm2の集合を有効呼び出し集合SETEI(m1 )で与える。そしてさらに、SETEI(m1 )に属するすべてのターゲットメソッドm2 に対しても、UpdateA(m2 、w(i))を行なう。以下同様にして、以降のターゲットメソッドに対して、UpdateA(m,w(i))を、全メソッドに対して行われるまで繰り返す。すなわち、S408の後に全メソッドに対してUpdateA(m,w(i))を行なうまで、または所定数繰り返すまで、S405乃至S408を繰り返す。
【0034】
図5は、ターゲットメソッドへの活動度の割り当てを説明する線図である。このスレッドのスタックの各アクティブメソッドm0には、スタック天井から下向きに順番に、1、0.9、0.81の優先度wが割り当てられている。これらのアクティブメソッドが直接呼び出すメソッドm1の活動度には、m0の優先度wが反映されている。さらに、m1が呼び出すm2の活動度には、m1の活動度 (優先度)が反映されている。但し、2以上のメソッドから活動度が伝播されてくる場合には、図5に示すように、保持している値と比較して、大きな値の方を保持するようにすることも可能である。また、図5の右にメソッドをたどるごとに活動度を低くすることも考えられる。さらに、UpdateA(m,w(i))でなく、UpdateA(mx ,mx-1 )のような更新処理を定義することも可能である。
【0035】
以上で、全メソッドに活動度が割り振られた。JITコンパイラは、メソッド活動度の低いものから順に、JITedコードを破棄し、スレッド実行を再開して、コンパイルを継続する。
【0036】
この作業コストが問題になる場合、各スレッドにおける優先度の更新回数(UpdateA(m,w(i))の実行回数)の上限を設けてもよい。
【0037】
また、シンクロナイズド(synchronized)メソッドでブロックしているスレッドについて、あるいは低い優先度のスレッドについて、9においてスレッド実行が再開してもしばらくはディスパッチされないと考え、活動度の収集を行わなくてもよい。
【0038】
以上本発明の処理の流れを説明したが、本発明はこれらの処理を実施する装置や、コンピュータにこれらの処理を実施させるプログラムの形態によっても実現可能である。このプログラムを、フロッピー・ディスクやCD−ROM等の記憶媒体又は他の形態の記憶装置に格納することは、通常当業者が行う事項である。
【0039】
ここで本発明に関連する装置構成の一例を図6を用いて説明しておく。サーバ・コンピュータ1及びクライアント・コンピュータ5はネットワーク3を介して接続されている。クライアント・コンピュータ5は、JavaVM(Virtual Machine )52及びOS(Operating System)53及びハードウエア(CPU及びメモリを含む)55を含む。さらに、JavaVM52は、Javaインタープリタ54及びJava JITコンパイラ56を含む。JavaVM52は、図示しないガベージコレクタやスタックトレーサをさらに含む。なお、クライアント・コンピュータ5は、通常のコンピュータの他、メモリの大きさが小さかったり、ハードディスク等の補助記憶装置を含まないような、いわゆるネットワーク・コンピュータや情報家電の場合もある。
【0040】
サーバ・コンピュータ1では、Javaソースコード10は、Javaコンパイラ12によりコンパイルされる。このコンパイルの結果が、バイトコード14である。このバイトコード14は、ネットワーク3を介してクライアント・コンピュータ5に送信される。バイトコード14は、クライアント・コンピュータ5内のWWWブラウザ(World Wide Web Browser)などに設けられたJava仮想マシン(Java VM )52にとってネイティブ・コードであり、実際ハードウエア55のCPUにて実行する場合には、Javaインタープリタ54や、JavaJITコンパイラ56を用いる。インタープリタ54は、実行時にバイトコード14をデコードし、命令ごとに用意される処理ルーチンを呼び出して実行する。一方、JITコンパイラ56は、バイトコードを事前にあるいは実行する直前にコンパイラを用いてマシン・コード58に変換してそれをCPUで実行する。
【0041】
【発明の効果】
本発明によれば、コード破棄するメソッドを効果的に選択することができるため、同一メソッドの再コンパイル回数が減少し、コンパイルオーバヘッドを減少させることができる。
【図面の簡単な説明】
【図1】 サブルーチンAがサブルーチンBを、サブルーチンBがサブルーチンCを呼び出したときのスタックを示す線図である。
【図2】 本発明によるメソッド活動度計算方法のJITコンパイルおよび実行時における動作を説明するフローチャートである。
【図3】 メソッドEのJITedコードを示す線図である
【図4】 本発明によるメソッド活動度計算方法のJITedコードの回収プロセス中における動作を説明するフローチャートである。
【図5】 ターゲットメソッドへの活動度の割り当てを説明する線図である。
【図6】 本発明における装置構成の一例を示す図である。
【符号の説明】
1 サーバ・コンピュータ
3 ネットワーク
5 クライアント・コンピュータ
10 Javaソースコード
12 Javaコンパイラ
14 バイトコード
52 JavaVM
54 Javaインタプリタ
56 Java JITコンパイラ
58 マシンコード
60 ガベージ・コレクタ
53 OS
55 ハードウエア(CPU及びメモリを含む)
Claims (5)
- メソッド中で生じ得るメソッド呼び出しに関する呼び出しマップと実際に生じたメソッド呼び出しに関する情報とが各メソッドごとに記録されている場合に、あるメソッドが実行される可能性の高低を表す活動度を計算する方法であって、
スタックの各フレームに対応する各第1メソッドについての、各第1メソッドから呼ばれる可能性があるメソッドを、前記呼び出しマップに基づいて特定し、その中で、実際に呼ばれたことがあるメソッドを前記実際に生じたメソッド呼び出しに関する情報に基づいて抽出し、これを呼ばれる可能性が高い各第2メソッドとして特定し且つ記憶装置に格納し、前記各第1メソッドに対応するスタックフレームのスタックの最上部からの段数に応じた優先度を前記各第2メソッドの活動度に作用することにより前記各第2メソッドの活動度を更新するメソッド活動度計算方法。 - 前記各第2メソッドについて、前記各第2メソッドから呼ばれる可能性があるメソッドを、前記呼び出しマップに基づいて特定し、その中で、実際に呼ばれたことがあるメソッドを「実際に生じたメソッド呼び出しに関する情報」に基づいて抽出し、これを呼ばれる可能性が高い各第3メソッドとして特定し且つ記憶装置に格納し、前記各第1メソッドに対応するスタックフレームのスタックの最上部からの段数に応じた優先度を前記各第3メソッドの活動度に作用することにより前記各第3メソッドの活動度を更新する請求項1記載のメソッド活動度計算方法。
- 前記呼び出しマップが、前記メソッド中のあるアドレスに対し、当該アドレス以降に生じ得るメソッド呼び出しを出力するように構成され、前記各第2メソッドの特定は、前記各第1メソッドの実行再開アドレス以降に生じ得るメソッド呼び出しを用いて行われる請求項1記載のメソッド活動度計算方法。
- メソッド中で生じ得るメソッド呼び出しに関する呼び出しマップと実際に生じたメソッド呼び出しに関する情報とが各メソッドごとに記録されている場合に、あるメソッドが実行される可能性の高低を表す活動度を計算する装置であって、
スタックフレームに対応する各第1メソッドについて、各第1メソッドから呼ばれる可能性があるメソッドを、前記呼び出しマップに基づいて特定し、その中で、実際に呼ばれたことがあるメソッドを前記実際に生じたメソッド呼び出しに関する情報に基づいて抽出し、これを呼ばれる可能性が高い各第2メソッドとして特定し且つ記憶装置に格納する手段と、前記各第1メソッドに対応するスタックフレームのスタックの最上部からの段数に応じた優先度を前記各第2メソッドの活動度に作用することにより前記各第2メソッドの活動度を更新する手段とを有するメソッド活動度計算装置。 - メソッド中で生じ得るメソッド呼び出しに関する呼び出しマップと実際に生じたメソッド呼び出しに関する情報とが各メソッドごとに記録されている場合に、あるメソッドが実行される可能性の高低を表す活動度を計算するためのプログラムを格納した記憶媒体であって、
前記プログラムは、コンピュータに、
スタックフレームに対応する各第1メソッドについて、各第1メソッドから呼ばれる可能性があるメソッドを、前記呼び出しマップに基づいて特定し、その中で、実際に呼ばれたことがあるメソッドを前記実際に生じたメソッド呼び出しに関する情報に基づいて抽出し、これを呼ばれる可能性が高い各第2メソッドとして特定し且つ記憶装置に格納する機能と、前記各第1メソッドに対応するスタックフレームのスタックの最上部からの段数に応じた優先度を前記各第2メソッドの活動度に作用することにより前記各第2メソッドの活動度を更新する機能と
を実現させるためのプログラム
を記録した、記憶媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP02203099A JP3807860B2 (ja) | 1999-01-29 | 1999-01-29 | コンパイル方法および装置、並びにメソッド活動度計算方法および装置 |
US09/493,768 US6671877B1 (en) | 1999-01-29 | 2000-01-28 | Method and device to calculate activity degrees of method programs |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP02203099A JP3807860B2 (ja) | 1999-01-29 | 1999-01-29 | コンパイル方法および装置、並びにメソッド活動度計算方法および装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000222221A JP2000222221A (ja) | 2000-08-11 |
JP3807860B2 true JP3807860B2 (ja) | 2006-08-09 |
Family
ID=12071593
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP02203099A Expired - Fee Related JP3807860B2 (ja) | 1999-01-29 | 1999-01-29 | コンパイル方法および装置、並びにメソッド活動度計算方法および装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6671877B1 (ja) |
JP (1) | JP3807860B2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7350200B2 (en) * | 2001-03-29 | 2008-03-25 | Intel Corporation | Method and system of controlling dynamically compiled native code size |
US7313789B1 (en) * | 2004-02-27 | 2007-12-25 | Sun Microsystems, Inc. | Methods and systems for reducing a program size |
US7568190B2 (en) * | 2005-03-08 | 2009-07-28 | International Business Machines Corporation | Late binding of optimization information for just in time compilation |
JP5010164B2 (ja) | 2006-03-31 | 2012-08-29 | 株式会社日立製作所 | サーバ装置及び仮想計算機の制御プログラム |
US9207921B2 (en) * | 2009-06-22 | 2015-12-08 | Oracle America, Inc. | Fault tolerant compilation with automatic optimization adjustment |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07210424A (ja) | 1994-01-14 | 1995-08-11 | Toshiba Corp | ソフトウェアテスト支援システム |
US5933635A (en) * | 1997-10-06 | 1999-08-03 | Sun Microsystems, Inc. | Method and apparatus for dynamically deoptimizing compiled activations |
US6105033A (en) * | 1997-12-29 | 2000-08-15 | Bull Hn Information Systems Inc. | Method and apparatus for detecting and removing obsolete cache entries for enhancing cache system operation |
JP3199013B2 (ja) | 1998-01-26 | 2001-08-13 | 日本電気株式会社 | 言語処理方法及び言語処理装置並びに言語処理プログラムを記録した記憶媒体 |
US6110226A (en) * | 1998-02-19 | 2000-08-29 | Cygnus Solutions | Java development environment using optimizing ahead-of-time compiler |
EP0943990A3 (en) * | 1998-02-27 | 2004-12-22 | Texas Instruments Incorporated | Method and system of providing dynamic optimization information in a code interpretive runtime environment |
US6226783B1 (en) * | 1998-03-16 | 2001-05-01 | Acuity Imaging, Llc | Object oriented method of structuring a software step program |
US6507946B2 (en) * | 1999-06-11 | 2003-01-14 | International Business Machines Corporation | Process and system for Java virtual method invocation |
-
1999
- 1999-01-29 JP JP02203099A patent/JP3807860B2/ja not_active Expired - Fee Related
-
2000
- 2000-01-28 US US09/493,768 patent/US6671877B1/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US6671877B1 (en) | 2003-12-30 |
JP2000222221A (ja) | 2000-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6317869B1 (en) | Method of run-time tracking of object references in Java programs | |
EP0908818B1 (en) | Method and apparatus for optimizing the execution of software applications | |
US6240547B1 (en) | Method and apparatus for dynamically deoptimizing compiled activations | |
US6857120B1 (en) | Method for characterizing program execution by periodic call stack inspection | |
US6954922B2 (en) | Method apparatus and article of manufacture for time profiling multi-threaded programs | |
US8612948B2 (en) | Dynamic compiler program, dynamic compiling method and dynamic compiling device | |
US9495136B2 (en) | Using aliasing information for dynamic binary optimization | |
US7069279B1 (en) | Timely finalization of system resources | |
JPH11272476A (ja) | バイトコードされたプログラムを動的に最適化するための方法及び装置 | |
US20040255279A1 (en) | Block translation optimizations for program code conversation | |
KR100555116B1 (ko) | 객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스 | |
JPH11237990A (ja) | 混合実行スタックおよび例外処理 | |
US11188364B1 (en) | Compilation strategy for a sharable application snapshot | |
US7406684B2 (en) | Compiler, dynamic compiler, and replay compiler | |
US7100154B2 (en) | Dynamic compiler apparatus and method that stores and uses persistent execution statistics | |
Taura et al. | Fine-grain multithreading with minimal compiler support—a cost effective approach to implementing efficient multithreading languages | |
US8533712B2 (en) | Virtual machine stage detection | |
US20040015925A1 (en) | Method, article of manufacture and apparatus for performing automatic intemodule call linkage optimization | |
US6473777B1 (en) | Method for accelerating java virtual machine bytecode verification, just-in-time compilation and garbage collection by using a dedicated co-processor | |
US6735761B1 (en) | Compile method frame detection method and device code discarding method and computer | |
US7240176B2 (en) | Apparatus and methods for placing a managed heap | |
JP3807860B2 (ja) | コンパイル方法および装置、並びにメソッド活動度計算方法および装置 | |
US20070239851A1 (en) | Process Restart on a Compute Node | |
JPH11338699A (ja) | プログラム処理方法、指定メソッドに関連するフレームの深さを検出する方法、検出方法、及びコンピュータ | |
US8938728B2 (en) | Dynamic compiler program, dynamic compiling method and dynamic compiling device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20051102 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20051207 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20051212 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060411 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060516 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100526 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110526 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110526 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120526 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120526 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130526 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140526 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |