JP2000222221A - コンパイル方法および装置、並びにメソッド活動度計算方法および装置 - Google Patents

コンパイル方法および装置、並びにメソッド活動度計算方法および装置

Info

Publication number
JP2000222221A
JP2000222221A JP11022030A JP2203099A JP2000222221A JP 2000222221 A JP2000222221 A JP 2000222221A JP 11022030 A JP11022030 A JP 11022030A JP 2203099 A JP2203099 A JP 2203099A JP 2000222221 A JP2000222221 A JP 2000222221A
Authority
JP
Japan
Prior art keywords
call
activity
code
stack
map
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP11022030A
Other languages
English (en)
Other versions
JP3807860B2 (ja
Inventor
Takeshi Ogasawara
武史 小笠原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP02203099A priority Critical patent/JP3807860B2/ja
Priority to US09/493,768 priority patent/US6671877B1/en
Publication of JP2000222221A publication Critical patent/JP2000222221A/ja
Application granted granted Critical
Publication of JP3807860B2 publication Critical patent/JP3807860B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

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)

Abstract

(57)【要約】 【課題】 コード破棄するメソッドを効果的に選択する
ためにメソッド活動度を計算する方法を提供する。 【解決の手段】 コンパイル時に、メソッド中で生じ得
るメソッド呼び出しに関する呼び出しマップを作成し且
つ記憶装置に格納し、実際に生じたメソッド呼び出しを
記録するコードを生成し且つ記憶装置に格納する。この
ような状態において、コードの回収する際には、全スレ
ッドを一時停止し、あるメソッドが実行される可能性の
高低を表す活動度を計算する。この時、スタックフレー
ムに対応する第1メソッドについての、呼び出しマップ
と実際に生じたメソッド呼び出しに関する情報とを用い
て、第1メソッドから呼ばれる可能性が高い第2メソッ
ドを特定し且つ記憶装置に格納し、第1メソッドに対応
するスタックフレームのスタックの最上部からの段数に
応じた優先度を第2メソッドの活動度に作用することに
より第2メソッドの活動度を更新する。好適には、この
ような処理を繰り返す。その後活動度が低いメソッドの
コードを破棄する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コード破棄するメ
ソッドを効果的に選択するためのメソッド活動度計算方
法に関係し、特に、Java(Sun Microsy
stems社の商標)のJIT(Just In Ti
me)コンパイラにおけるメソッド活動度計算方法に関
係する。
【0002】
【従来の技術】現在、Javaは、ネットワークコンピ
ューティングの共通言語としてだけでなく、プラットフ
ォームに依存しない、オブジェクト指向言語のスタンダ
ードな言語として広く使用されている。Javaで書か
れたプログラムはバイトコードに変換され、バイトコー
ドはJava仮想マシンで実行される。そのため、一度
Javaで書かれたプログラムは、Javaをサポート
しているコンピュータならば、CPUを問わずどこでも
動く(マルチプラットフォーム)という利点を持つ。
【0003】しかしこうした利点の反面、バイトコード
の仮想マシンによる実行は、機械語のコードを直接実行
するのに比べて、実行性能の点で劣る。そのため、JI
Tコンパイラにより、Javaプログラムの動作中に前
記バイトコードを機械語コード(以下、JITedコー
ドと呼ぶ)に変換して、バイトコードの代わりにJIT
edコードを実行するのが一般的である。コンパイルの
最小単位は、メソッドと呼ばれるサブルーチンである。
実行頻度の高いコードを機械語に変換することにより、
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コンパイラはJITe
dコード破棄メカニズムを持っている。
【0007】実行中のスレッドの現在のコンテキスト
(プログラムカウンタ(program counte
r)やスタックポインタ(stack pointe
r)などCPU資源のコピー)あるいはそのスレッドス
タック中に保持されるJITedコードのフレームに
は、そのスレッドでのアクティブなメソッドが記録され
ている。アクティブなメソッドのJITedコードが破
棄されると、スレッドが実行できない。したがって、破
棄するのは、非アクティブなJITedコードである。
JITedコード破棄メカニズムにおいて最も簡単な破
棄の仕方は、アクティブでないJITedコードをすべ
て破棄する方法である。しかし、この方法では必要以上
にJITedコードを破棄してしまい、無駄である。メ
ソッドの最適化コンパイルには時間がかかるため、「す
ぐに実行されるメソッドを破棄しない」という方針の下
で選択的に破棄すべきである。的確な選択の効果の例と
して、JITedコード破棄が今行われ、すぐに実行さ
れるメソッドAと、10分後に実行されるメソッドBが
あったとする。もしAを破棄すると、今破棄したAのJ
ITedコードのメモリ量と、さらにAのコンパイルに
必要なワークのメモリ量とを、直ちに確保しなければな
らない。一方、Bを破棄すれば、10分間はBのJIT
edコードのメモリ量は、利用可能メモリとなる。実際
には必要なフリーメモリ量分の複数の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】このように活動度は、メソッドの再実行時
刻が早いほど、その値が大きい。これは、上述したJI
Tedコード破棄方針をよく模倣する点で優れている。
先ほどの例でいえば、仮に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 b
lock)と、このBBからコントロールフロー上で到
達する前記メソッド呼び出しとを対応づけるものであ
る。このアドレス−呼び出しマップは、あるアドレスa
ddrが与えられたときに、このaddrから到達する
全メソッド呼び出しを返す。この全メソッド呼び出しを
呼び出し集合SETA−I(m,addr)と呼ぶ。
【0020】アドレス−呼び出しマップの計算をするた
めには、コントロールフローを解析し、基本ブロックB
B毎に、BBが到達する可能性のあるメソッド呼び出し
のアドレスを集める。それから、BBの先頭アドレスi
_addrとリーチされるメソッド呼び出しアドレスi _ca
llの関係データ(例えば、(i _addr, i _call)をソ
ートした表)をコンパイルコードにつける。呼び出し集
合は、addrを含むBBに対応するすべてのi _call
である。図3は、メソッドEのJITedコードを示す
線図である。メソッドEは、BB1ないしBB5から成
る。この図において、アドレス115において、メソッ
ドFを呼び出している。したがって、呼び出し集合は、
addr=100〜115はFを返し、addr=11
6〜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_ta
rgetが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 )を引いて、呼び出し集合SE
A-I (m0 ,addr)を得る。
【0031】ステップS406で、さらにメソッドm0
の有効呼び出し集合SETEI(m0)を参照して、ステ
ップS407で、SETA-EI(m0 ,addr)を得
る。SETA-EI(m0 ,addr)は、m0 のaddr
から実行が再開したときに、m 0 から実際に実行される
可能性があるメソッド呼び出しと、このメソッド呼び出
しによって呼ばれるターゲットメソッドm1 のアドレス
の集合である。SETA- EIはメモリに格納される。
【0032】S408で、SETA-EI(m0 ,add
r)に含まれるすべてのターゲットメソッド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))を、全メソ
ッドに対して行われるまで繰り返す。すなわち、S40
8の後に全メソッドに対してUpdateA(m,w
(i))を行なうまで、または所定数繰り返すまで、S
405乃至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を含む。さらに、JavaVM5
2は、Javaインタープリタ54及びJava JI
Tコンパイラ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のC
PUにて実行する場合には、Javaインタープリタ5
4や、JavaJITコンパイラ56を用いる。インタ
ープリタ54は、実行時にバイトコード14をデコード
し、命令ごとに用意される処理ルーチンを呼び出して実
行する。一方、JITコンパイラ56は、バイトコード
を事前にあるいは実行する直前にコンパイラを用いてマ
シン・コード58に変換してそれをCPUで実行する。
【0041】
【発明の効果】本発明によれば、コード破棄するメソッ
ドを効果的に選択することができるため、同一メソッド
の再コンパイル回数が減少し、コンパイルオーバヘッド
を減少させることができる。
【図面の簡単な説明】
【図1】 サブルーチンAがサブルーチンBを、サブル
ーチンBがサブルーチンCを呼び出したときのスタック
を示す線図である。
【図2】 本発明によるメソッド活動度計算方法のJI
Tコンパイルおよび実行時における動作を説明するフロ
ーチャートである。
【図3】 メソッドEのJITedコードを示す線図で
ある
【図4】 本発明によるメソッド活動度計算方法のJI
Tedコードの回収プロセス中における動作を説明する
フローチャートである。
【図5】 ターゲットメソッドへの活動度の割り当てを
説明する線図である。
【図6】 本発明における装置構成の一例を示す図であ
る。
【符号の説明】
1 サーバ・コンピュータ 3 ネットワーク 5 クライアント・コンピュータ 10 Javaソースコード 12 Javaコンパイラ 14 バイトコード 52 JavaVM 54 Javaインタプリタ 56 Java JITコンパイラ 58 マシンコード 60 ガベージ・コレクタ 53 OS 55 ハードウエア(CPU及びメモリを含む)
───────────────────────────────────────────────────── フロントページの続き (72)発明者 小笠原 武史 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 Fターム(参考) 5B033 DE07 5B042 MC23 MC28 5B081 CC00

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】 メソッド中で生じ得るメソッド呼び出し
    に関する呼び出しマップを作成し且つ記憶装置に格納
    し、実際に生じたメソッド呼び出しを記録するコードを
    生成し且つ記憶装置に格納するコンパイル方法。
  2. 【請求項2】 前記呼び出しマップが、前記メソッド中
    のあるアドレスに対し、当該あるアドレス以降に生じ得
    るメソッド呼び出しを出力する請求項1記載のコンパイ
    ル方法。
  3. 【請求項3】 メソッド中で生じ得るメソッド呼び出し
    に関する呼び出しマップと実際に生じたメソッド呼び出
    しに関する情報とが各メソッドごとに記録されている場
    合に、あるメソッドが実行される可能性の高低を表す活
    動度を計算する方法であって、 スタックフレームに対応する第1メソッドについての、
    前記呼び出しマップと実際に生じたメソッド呼び出しに
    関する情報とを用いて、前記第1メソッドから呼ばれる
    可能性が高い第2メソッドを特定し且つ記憶装置に格納
    し、前記第1メソッドに対応するスタックフレームのス
    タックの最上部からの段数に応じた優先度を前記第2メ
    ソッドの活動度に作用することにより前記第2メソッド
    の活動度を更新するメソッド活動度計算方法。
  4. 【請求項4】 前記第2メソッドについての、前記呼び
    出しマップと実際に生じたメソッド呼び出しに関する情
    報と用いて、前記第2メソッドから呼ばれる可能性が高
    い第3メソッドを特定し且つ記憶装置に格納し、前記第
    1メソッドに対応するスタックフレームのスタックの最
    上部からの段数に応じた優先度を前記第3メソッドの活
    動度に作用することにより前記第3メソッドの活動度を
    更新する請求項3記載のメソッド活動度計算方法。
  5. 【請求項5】 前記呼び出しマップが、前記メソッド中
    のあるアドレスに対し、当該アドレス以降に生じ得るメ
    ソッド呼び出しを出力するように構成され、前記第2メ
    ソッドの特定は、前記第1メソッドの実行再開アドレス
    以降に生じ得るメソッド呼び出しを用いて行われる請求
    項3記載のメソッド活動度計算方法。
  6. 【請求項6】 メソッド中で生じ得るメソッド呼び出し
    に関する呼び出しマップを作成し且つ記憶装置に格納す
    る手段と、実際に生じたメソッド呼び出しを記録するコ
    ードを生成し且つ記憶装置に格納する手段とを有するコ
    ンパイル装置。
  7. 【請求項7】 メソッド中で生じ得るメソッド呼び出し
    に関する呼び出しマップと実際に生じたメソッド呼び出
    しに関する情報とが各メソッドごとに記録されている場
    合に、あるメソッドが実行される可能性の高低を表す活
    動度を計算する装置であって、 スタックフレームに対応する第1メソッドについての、
    前記呼び出しマップと実際に生じたメソッド呼び出しに
    関する情報とを用いて、前記第1メソッドから呼ばれる
    可能性が高い第2メソッドを特定し且つ記憶装置に格納
    する手段と、前記第1メソッドに対応するスタックフレ
    ームのスタックの最上部からの段数に応じた優先度を前
    記第2メソッドの活動度に作用することにより前記第2
    メソッドの活動度を更新する手段とを有するメソッド活
    動度計算装置。
  8. 【請求項8】 メソッド中で生じ得るメソッド呼び出し
    に関する呼び出しマップを作成し且つ記憶装置に格納す
    るステップと、実際に生じたメソッド呼び出しを記録す
    るコードを生成し且つ記憶装置に格納するステップとを
    コンピュータに実行させるコンパイラを格納した記憶媒
    体。
  9. 【請求項9】 メソッド中で生じ得るメソッド呼び出し
    に関する呼び出しマップと実際に生じたメソッド呼び出
    しに関する情報とが各メソッドごとに記録されている場
    合に、あるメソッドが実行される可能性の高低を表す活
    動度を計算するためのプログラムを格納した記憶媒体で
    あって、前記プログラムは、 スタックフレームに対応する第1メソッドについての、
    前記呼び出しマップと実際に生じたメソッド呼び出しに
    関する情報とを用いて、前記第1メソッドから呼ばれる
    可能性が高い第2メソッドを特定し且つ記憶装置に格納
    する機能と、前記第1メソッドに対応するスタックフレ
    ームのスタックの最上部からの段数に応じた優先度を前
    記第2メソッドの活動度に作用することにより前記第2
    メソッドの活動度を更新する機能とを実現するためのも
    のである、記憶媒体。
JP02203099A 1999-01-29 1999-01-29 コンパイル方法および装置、並びにメソッド活動度計算方法および装置 Expired - Fee Related JP3807860B2 (ja)

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 true JP2000222221A (ja) 2000-08-11
JP3807860B2 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)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007272576A (ja) * 2006-03-31 2007-10-18 Hitachi Ltd サーバ装置及び仮想計算機の制御プログラム

Families Citing this family (4)

* Cited by examiner, † Cited by third party
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
US9207921B2 (en) * 2009-06-22 2015-12-08 Oracle America, Inc. Fault tolerant compilation with automatic optimization adjustment

Family Cites Families (8)

* Cited by examiner, † Cited by third party
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

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007272576A (ja) * 2006-03-31 2007-10-18 Hitachi Ltd サーバ装置及び仮想計算機の制御プログラム
US8104035B2 (en) 2006-03-31 2012-01-24 Hitachi, Ltd. Program for controlling a virtual computer and computer system for virtulization technology

Also Published As

Publication number Publication date
US6671877B1 (en) 2003-12-30
JP3807860B2 (ja) 2006-08-09

Similar Documents

Publication Publication Date Title
JP5139987B2 (ja) 拡張可能メタデータ
US9495136B2 (en) Using aliasing information for dynamic binary optimization
US7406684B2 (en) Compiler, dynamic compiler, and replay compiler
US6093216A (en) Method of run-time tracking of object references in Java programs
US8032899B2 (en) Providing policy-based operating system services in a hypervisor on a computing system
US8166470B2 (en) Method for replacing code in a running object oriented program
US8832672B2 (en) Ensuring register availability for dynamic binary optimization
JP3470948B2 (ja) 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
KR100555116B1 (ko) 객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스
JPH11272476A (ja) バイトコードされたプログラムを動的に最適化するための方法及び装置
US11188364B1 (en) Compilation strategy for a sharable application snapshot
JPH11237990A (ja) 混合実行スタックおよび例外処理
US20100131803A1 (en) Computation of stack usage in embedded computing systems
US7100154B2 (en) Dynamic compiler apparatus and method that stores and uses persistent execution statistics
US8429218B2 (en) Process restart on a compute node
US6735761B1 (en) Compile method frame detection method and device code discarding method and computer
JPH11338699A (ja) プログラム処理方法、指定メソッドに関連するフレームの深さを検出する方法、検出方法、及びコンピュータ
JP3807860B2 (ja) コンパイル方法および装置、並びにメソッド活動度計算方法および装置
JP4088379B2 (ja) コンパイル方法及び装置、並びにスタック・トレース方法及び装置
JP2000222219A (ja) 多次元配列オブジェクトの処理方法及び装置
JP3280322B2 (ja) コンパイル方法、フレーム検出方法及び装置、コード破棄方法、並びにコンピュータ
JP2003067206A (ja) Lparシステムにおいて装置をダイナミックに割り当てるための方法
Noguchi et al. Efficient global pointers with spontaneous process migration
CN106547603B (zh) 减少golang语言系统垃圾回收时间的方法和装置
Whaley System checkpointing using reflection and program analysis

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