JP2002527811A - オンスタックリプレースメントを伴うことなくバーチャルコールを直接にインライン化する方法 - Google Patents

オンスタックリプレースメントを伴うことなくバーチャルコールを直接にインライン化する方法

Info

Publication number
JP2002527811A
JP2002527811A JP2000576348A JP2000576348A JP2002527811A JP 2002527811 A JP2002527811 A JP 2002527811A JP 2000576348 A JP2000576348 A JP 2000576348A JP 2000576348 A JP2000576348 A JP 2000576348A JP 2002527811 A JP2002527811 A JP 2002527811A
Authority
JP
Japan
Prior art keywords
call
call procedure
procedure
virtual method
object code
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.)
Pending
Application number
JP2000576348A
Other languages
English (en)
Inventor
デトレフス,デイビッド,エル
Original Assignee
サン・マイクロシステムズ・ラボラトリーズ
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 サン・マイクロシステムズ・ラボラトリーズ filed Critical サン・マイクロシステムズ・ラボラトリーズ
Publication of JP2002527811A publication Critical patent/JP2002527811A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • G06F9/4491Optimising based on receiver type

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Processing Or Creating Images (AREA)

Abstract

(57)【要約】コール のレシーハ゛エクスフ゜レッションを調査することによりハ゛ーチャルメソット゛コールの代わりにメソット゛をインライン化するか否かを判定するタ゛イナミックコンハ゜イラ。所与のコールサイトがインライン化のための別の判定基準を満たす場合には、そのレシーハ゛エクスフ゜レッションが適切にコールされた「既存性」を有する場合に該メソット゛がインライン化される。既存性が容易に提供される類のエクスフ゜レッションは、コールフ゜ロシーシ゛ャのホ゛テ゛ィが割り当てを行わないコールフ゜ロシーシ゛ャアーキ゛ュメントである。他の判定基準の一つとして、アーキ゛ュメントの静的タイフ゜が、コーリーメソット゛の定義がオーハ゛ーライト゛されていないクラスである、ということが挙げられ、コンハ゜イラは、依存性テ゛ータ構造を用いて、コーラー及びコーリーの両者に対し、この判定基準が満たされているという仮定に依存する有効性を有するコート゛をコーラーが含むことを記録する。次いでコンハ゜イラは、コーリーメソット゛の別のインフ゜リメンテーションをコンハ゜イルする場合に、該コーリーメソット゛に対する依存性が記録された依存性構造を調査し、かかる構造によりオフ゛シ゛ェクトコート゛の有効性がコーリーメソット゛がオーハ゛ーライト゛されていないことに依存することが示されたコーラーを再コンハ゜イルする。既存のレシーハ゛エクスフ゜レッションに対するインライン化の制約により、コーラーメソット゛のオリシ゛ナルのコンハ゜イル処理の現在実行中のインホ゛ケーションをエラーのおそれなしで続行することが可能となる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】
本発明は、コンピュータプログラムのコンパイル処理に関し、特にバーチャル
メソッドのいわゆるインライン化に関する。
【0002】
【従来の技術及び発明が解決しようとする課題】
図1は、典型的なコンピュータシステム10を示したものである。マイクロプロ
セッサ12は、データ及び該プロセッサ上で処理する命令を、おそらくはキャッシ
ュコントローラ20を介してオンボードキャッシュメモリその他のキャッシュメモ
リ18から受信する。該キャッシュコントローラ20は、かかるデータをシステムリ
ード/ライトメモリ(RAM)22からRAMコントローラ24を介して受信し、又は
システムバス26を介して様々な周辺デバイスから受信する。
【0003】 RAM22のデータ及び命令の内容は、通常はシステムディスク27といった周辺
デバイスから既にロードされている。その他のソースとして、他のコンピュータ
システムから命令及びデータを受信することができる通信インタフェイス28が挙
げられる。
【0004】 マイクロプロセッサが実行する命令は、マシン命令である。かかる命令は、最
終的にはプログラマにより決定されるものであるが、自分の成果が最終的に帰す
ることになる特定のマシン命令に精通しているプログラマは希である。より一般
的には、プログラマは、高級言語「ソースコード」を書き、専用に構成されたコ
ンピュータソフトウェアが該ソースコードからそのマシン命令(即ちオブジェク
トコード)を生成する。
【0005】 図2はそのシーケンスを示したものである。図2のブロック30は、コンパイラ
のオブジェクトコードの指示下でコンピュータが実行するコンパイラプロセスを
示している。そのオブジェクトコードは、典型的には、システムディスク27その
他のマシンにより読み出すことが可能な媒体上に格納され、電気信号を送信する
ことによりシステムメモリ24内にロードされて、コンピュータをコンパイラとし
て機能するよう構成する。しかし、コンパイラのオブジェクトコードの永続的な
格納は、コンパイルを実行するマシンから離れて位置するサーバシステムで行う
ことが可能である。コンピュータシステムがコードの交換を行うためのディジタ
ルデータを伝達する電気信号は、典型的には、情報を伝送する搬送波から形成さ
れる。
【0006】 コンパイラは、ソースコードをオブジェクトコードへと変換し、該オブジェク
トコードをRAM24又はディスク27等のマシンによる読み出しが可能な記憶手段
に格納する。コンピュータは、該オブジェクトコードの命令に従って、一般に入
力から出力を生成するアプリケーション32を実行することになる。コンパイラ30
は、それ自体がアプリケーションであり、この場合には、その入力がソースコー
ドであり、その出力がオブジェクトコードであるが、アプリケーション32を実行
するコンピュータは、コンパイラプロセスを実行するコンピュータとは必ずしも
同じではない。
【0007】 ソースコードは、必ずしも人間のプログラマにより直接書かれたものである必
要はない。統合開発環境では、多数のアプリケーションに関して「手作業」で生
成されるソースコードが殆ど存在しない程度までソースコード書き込みプロセス
が自動化されることが多い。また、用語「コンパイラ」は、以下の議論において
、プログラマが直接書くことが殆どない低レベルコード(Java(商標)仮想マシ
ンに入力されるバイトコード等)への変換まで拡張して広範な意味で使用されて
いる、ということは明らかであろう(Sun, Sun Logo, Sun Microsystems, 及びJ
avaは、Sun Microsystems, Inc.の米国内外での商標又は登録商標である)。更
に、図2は、バッチプロセス(即ち、アプリケーションのオブジェクトコードの
全てがその実行前に生成されるプロセス)を示唆しているように見えるかもしれ
ないが、同じプロセッサがコンパイルとオブジェクトコードの実行との両者を行
うことが可能であり、この場合には、プロセッサは、コンパイラアプリケーショ
ンの実行を該コンパイラの出力オブジェクトコードの実行と同時に(実際には該
オブジェクトコードの実行に依存する形で)行うことが可能である。
【0008】 図1に示す様々な命令及びデータソースは、速度階層を構成するものである。
マイクロプロセッサは、「パイプライン」命令実行により大きな処理速度を達成
し、即ち、幾つかの命令の早期のステージが該命令よりも前の命令の後期のステ
ージと同時に実行される。提供されるパイプラインを結果的に得られる速度に維
持するために、極めて高速のオンボードレジスタが、最も頻繁に使用されること
が期待されるオペランド及びオフセット値を供給する。その他の使用される可能
性のあるデータ及び命令は、オンボードキャッシュ中に保持される。該オンボー
ドキャッシュへのアクセスもまた高速なものである。キャッシュメモリ18までの
信号距離はオンボードキャッシュの場合よりも遠いので、該キャッシュメモリ18
へのアクセスは、非常に高速ではあるがオンボードキャッシュの場合ほど高速で
はない。
【0009】 速度階層の次にくるのがシステムRAM22であり、該RAM22は通常は比較的
大きいものであり、それ故、比較的安価なダイナミックメモリから構成されるの
が普通である。ダイナミックメモリは、それよりも高価なキャッシュに使用され
るスタティックメモリよりも大幅に低速なものとなる傾向がある。しかし、かか
るメモリ内であっても、同じ「ページ」内のロケーションへのアクセスは、異な
るページ上のロケーションへのアクセスと比較して高速となる。その何れよりも
かなり低速であるのがディスクコントローラからのデータの取得であるが、該ソ
ースは通常は、通信リンク28を介したデータのダウンロードほど低速ではない。
【0010】 これらの様々なソース間の速度差は、4桁のオーダーに及び得るものとなり、
このため、コンパイラの設計者は、出力命令が高速リソースを最大限に使用する
と共に低速リソースを可能な限り回避するものとなるようコンパイラを構成する
ように多大な努力をすることになる。この努力は、個々の特定のタスク向けの一
組のプロシージャへとプログラムを分割する一般的なプログラミングテクニック
により複雑化される。
【0011】 この複雑化の殆どは、他の下位レベルのプロシージャをコールして作業を遂行
するプロシージャに起因するものである。即ち、様々な「コーラー(caller:呼
出側)」プロシージャが共通の「コーリー(callee:被呼出側)」プロシージャへ
と制御を移行し、該制御の移行が、該コーリーが存在する場合に該コーリーが該
コーリーをコールしたあらゆるプロシージャへ制御を返すように行われる。プロ
グラマの観点からすれば、この構造は有利なものとなる。これは、該構造により
、コードを書くことが一層モジュール化され、このため一層管理し易くなるから
である。該構造はまた、コードの再利用を提供し、即ち、共通のプロシージャを
使用することになる各サイトに該プロシージャをコピーする必要がなくなる。こ
れは、膨大な場所で改訂版の差し替えを行う必要がないことを意味している。し
かし、かかる構造はまた、オーバーヘッドを付加するものでもあり、即ち、コー
ラーの状態を格納しなければならず、キャッシュミス及びページフォールトが生
じる可能性があり、及びプロセッサパイプラインを数多くフラッシュしなければ
ならなくなる。換言すれば、システムはその速度階層を下げなければならない。
【0012】 このため、コンパイラの最適化は、短いプロシージャ又は頻繁に使用されるプ
ロシージャをインライン化することが多く、即ち、コンパイラは、プロシージャ
のボディ部分を、プロシージャプロログ又はエピログなしで、該プロシージャを
ソースコードがコールすることになる各サイトへとコピーする。換言すれば、コ
ンパイラは、性能向上のための再利用を犠牲にすることになる。しかし、プログ
ラマは、コードを書くことのモジュール化による利益を依然として得る。インラ
イン化は、更なる重要な利益を有するものであり、即ち、インライン化されたプ
ロシージャを特定のコールコンテキストでコンパイルすることにより、コンパイ
ラの最適化に関するより多くの情報が明らかとなり、これによりオプティマイザ
が一層効率の良いマシンコードを生成することが可能となる。
【0013】 より最近のプログラミング言語のうちの或るものは、インライン化プロセスを
複雑化させるものとなる。これを評価するために、オブジェクト指向言語の基本
的な特徴を想起されたい。かかる言語(例えばJavaプログラミング言語及びC++
等)では、コードは、「クラス」のインスタンスである「オブジェクト」に関し
て書かれる。クラスの定義は、該クラスのインスタンスであるあらゆるオブジェ
クトの「メンバ」を列挙するものである。1つのメンバは1つの変数とすること
が可能であり、又は1つのプロシージャ(この場合には一般に「メソッド」と呼
ばれる)とすることが可能である。
【0014】 図3は、Javaプログラミング言語を用いてクラスを定義する方法を示している
。その最初のコードセグメントは、(とりわけ個々の浮動小数点変数メンバh,w
と、(本例では)オブジェクトのメンバ変数に対する演算を行ってその積を表す
浮動小数点値を返すメソッドメンバm1とを含むものとして)クラスAのオブジェ
クトを定義している。クラスAのあらゆるインスタンスは、個々のメンバ変数h,
wを有することになり、名称m1を有するメソッドもまた存在することになる。該
メソッドは、該インスタンスについてコールすることが可能である(但し、以下
で詳述するように、該メソッドは、全てのインスタンスについて同一の演算を行
わない可能性がある)。
【0015】 図4は、m1の使用について示している。クラスメンバが存在するため、そのク
ラスのインスタンスに要求を行うことによってのみメソッドm1をコールすること
ができる。このため、図4の左側のコードフラグメントの最初のステートメント
は、クラスAのオブジェクトに対する参照を含む変数を宣言している。同ステー
トメントはまた、そのクラスのオブジェクトにメモリを割り当て、および該新規
に割り当てられたクラスAオブジェクトへの参照で変数を初期設定する。次の2
つのステートメントが、そのオブジェクトの2つのメンバ変数に値を入力する。
最後のステートメントは、変数a中のオブジェクト参照をプロシージャX.fooへ送
る。
【0016】 このオブジェクト参照をプロシージャfooへ送ることができるのは、右側のコ
ードフラグメントが示しているように、プロシージャfooがタイプAのパラメー
タを有するものとして定義されており、および変数aがそのクラスに属するから
である。該コードが示しているように、fooの定義はメソッドm1をそのパラメー
タoについてコールする。これは、その名称のメソッドがクラスAのメンバであ
るため、合法(又はリーガル)である。このため、変数a中のオブジェクト参照
がプロシージャfooへ送られると、メソッドm1が、変数h,wのオブジェクトの値に
ついて実行される。
【0017】 かかるオブジェクト指向言語の主たる特徴は「継承」である。新規のクラス定
義では、該新規のクラスが別の「親」クラスの「子」であることを宣言すること
ができる。図3のクラスBの定義におけるキーワード「extends」は、そのクラ
スがクラスAに対して子関係にあることを宣言している。これは、クラスBの全
てのオブジェクトが親クラスのオブジェクトでもあると考えられることを意味し
ている(但し、その逆の関係は必ずしも真とはならない)。クラスBのオブジェ
クトがクラスAにも属するため、クラスBの全てのオブジェクトは、メンバ変数
h,wのそれぞれの値を有することになり、及びそれらに要求されるメソッドm1を
有することができる。これは、クラスBの定義がそれらのメンバを明示的に列挙
したものでない場合であっても真となり、すなわち、クラスBはそれらメンバを
クラスAから継承する。このため、コンパイラは、クラスBのオブジェクトを、
そのパラメータがクラスAのオブジェクトへの参照であることをfooのシグネチ
ャが要求する場合であっても、fooへ送ることを許可することになる。
【0018】 これまで説明してきたように、継承機構は、インライン化プロセスを特に複雑
化させるものではない。コンパイラは、クラスAでのメソッドm1の定義の結果と
して得られるオブジェクトコードをfooのオブジェクトコードへ単にコピーする
だけであり、そのインライン化されたコード(以下、インライン化コードと称す
)は、fooがクラスBのオブジェクトへの参照を送る場合であっても使用するこ
とができる。
【0019】 ここで図3のクラスCの定義を参照する。該定義は、承継されたメソッドm1に
「オーバーライドする(override:優先する)」ものである。クラスCは、クラス
Aの子であるため、メンバメソッドm1を必然的に含む。しかし、クラスCは、該
メソッドに、クラスAの他のオブジェクトについての定義とは異なる定義を与え
るものである。このため、fooにクラスCのオブジェクトcが送られる場合には(
クラスCがクラスAの子であるため合法であるように)、オブジェクトoについ
てのメソッドm1のコールは、クラスがA又はBであるオブジェクトがfooに送ら
れる場合に必要となるコードとは異なるコードを必要とする。オーバーライドさ
れることが許可されたメソッドは「バーチャル」と呼ばれ、オーバーライドされ
たバーチャルメソッドは「ポリモーフィック」と呼ばれる。かかるメソッドに対
するコールは「バーチャルコール」と呼ばれ、これは、コールされるメソッドの
ロケーションが実行時に計算されなければならないという事実により区別される
。その結果として、一形態のポリモーフィックメソッドのインライン化は、不正
な結果を生じ得るものとなる。
【0020】 それにもかかわらず、幾つかの事例では積極最適化(aggressive optimizing)
コンパイラはポリモーフィックメソッドをインライン化する。かかるコンパイラ
は、インライン化形態のメソッドが、該メソッドをコールする「レシーバ」オブ
ジェクトの特定のクラスと矛盾しないか判定するテストで、インライン化コード
を「ガード(guarding)」することにより、不正な結果を回避する。矛盾しない場
合には、バーチャルコールが回避される。
【0021】 やはり、コールされたメソッドを直接に(すなわちバーチャルコールに対する
実行を指示することが可能なガードコードを伴うことなく)インライン化するこ
とができればより好ましい。これは、かかるガードは何れも、コストを要すると
共に、一定の最適化の機会をコンパイラから奪うものとなるからである。このた
め、コンパイラの最適化は、インライン化の候補以外の一形態のコーリーメソッ
ドが、インライン化を考慮中であるコーラーサイトで呼び出されることになる可
能性が実際に存在するか否かを判定するために該コードを探索し、該可能性が存
在しない場合にコーリーのインライン化を行うことが可能である。残念なことに
、コンパイラは、コーラーがコンパイルされその結果として得られるコードの実
行が開始された後にコーラーメソッドをオーバーライドするクラスがロードされ
る可能性のあるダイナミックコンパイル環境では、最終的に該判定を行うことが
できない。
【0022】 このため、研究者は、インライン化を試験的に実行し、すなわち、コーリーが
未だオーバーライドされていないという仮定の下でコーラーをコンパイルし、次
いで後にロードされたクラスが前記コーラーをオーバーライドする場合に該コー
ラーを再コンパイルすることを提唱した。これは、再コンパイルの発生時にコー
ラーが実行されていない場合には極めて単純なものとなり、すなわち、古いコン
パイルが新たなコンパイルで置換され、次のコーラーのインボケーションにより
修正されたコードが獲得される。しかし、再コンパイルを必要とする事象の発生
時にコーラーが現在実行中である場合には事情は一層複雑となる。この場合には
、かかるシステムは、1つのメソッドの1つのコンパイル処理に対応する実行状
態を、該メソッドの別のコンパイル処理に関する「等価な」実行状態へと変更す
ることができなければならない。このプロセスは、「オンスタックリプレースメ
ント」と呼ばれるものである。
【0023】 Self言語は、オンスタックリプレースメントを実施するおそらく最初のプログ
ラミングシステムである。該言語では、コンパイラは、1つのメソッドに関する
コンパイルされたコード中に、様々な「反最適化(deoptimization)ポイント」に
関連する構造を生成する。かかる構造には、メソッドの「ソース状態」すなわち
ソースコードの翻訳により規定されるメソッド変数の状態を、関連する反最適化
ポイントにおけるコンパイルされたコードの「マシン状態」から回復させること
を可能にする情報が含まれる。更なる後続のコンパイル処理の結果として、該コ
ンパイル処理が依存する仮定(コーリーがオーバーライドされていないこと等)
が無効になった場合には、該コンパイル処理は、かかる反最適化ポイントで発生
しなければならない。次いでSelfシステムは、ソース状態を回復させ、違反した
仮定なしでメソッドを再コンパイルし、該新たなコンパイル処理の対応するマシ
ン状態をソース状態から計算し、レジスタ値及び該メソッドのスタックフレーム
中のエントリを置換して該新たなマシン状態と整合するようにする。
【0024】 かかるオンスタックリプレースメント能力を提供することが極めて複雑なもの
であることは容易に理解されよう。更に、該能力をサポートするのに必要となる
データ構造は驚異的に大きなものとなる。また、反最適化ポイントの維持は、か
かる反最適化ポイントにより分離されるコードのコードスケジューラによる再順
序付けを妨げるものとなる。
【0025】
【課題を解決するための手段】
本発明は、コーラーのコンパイル処理に如何なる制限をも加えることなく多数
のバーチャルコールサイトを直接にインライン化することを可能にすると共に、
仮定が無効となる変化の検出及び応答に関するタスクを比較的単純に維持するも
のとなる。本発明によれば、コンパイラは、特定のサイトでのみバーチャルコー
ルのインライン化を直接行う。ここで、該サイトとは、コンパイラが、そのコン
パイル時に、コールメソッドのランタイム実行中のレシーバエクスプレッション
が、コーラーの特定の実行が開始する際にクラスがロードされるオブジェクトを
必然的に参照することになるとみなすことができるサイトである。この条件が満
たされる場合には、該コーラーの実行中におけるコーリーをオーバーライドする
コンパイル処理の結果として該コーラーが再コンパイル処理のために割り込まれ
ることになる必要はない。これは、かかる場合にはコーリーメソッドのレシーバ
のインプリメンテーションがオーバーライドを行うものとなることができず、こ
のため、インライン化されたインプリメンテーションが正しいものとならなけれ
ばならないからである。これにより、コーラーのスタックフレーム中のエントリ
を置換する必要が完全になくなる。
【0026】 一実施形態では、かかるサイトは、特定のコールサイトを識別することにより
容易に見出すことができる。該特定のコールサイトとは、レシーバ参照が、コー
ラーが割り当てを行っていないコーラーアーギュメントとなるサイトである。パ
ラメータ値が値により渡される場合には、レシーバ参照は必然的にローカル変数
となり、該変数に対してはコーラーのみが割り当てを行うことができる。このた
め、コーラー自体が該変数に対して割り当てを行わない場合には、該変数が参照
するオブジェクトが予め存在しなければならない。
【0027】
【発明の実施の形態】
以下に示す本発明の説明は添付図面を参照する。
【0028】 本発明の教示を実施することが可能な典型的なダイナミックコンパイル環境で
は、結果的に得られるオブジェクトコードの実行が開始される前にコンパイルの
全てが完了するわけではない。例えば、コンパイルプロセスは、例えばメインの
プロシージャがコールすることができる複数のプロシージャの全てを最初にコン
パイルせずに該メインのプロシージャのみをコンパイルするという意味で「怠惰
な」ものとなる可能性がある。それら複数のプロシージャに対するコールの代わ
りに、例えば、コーリーのプロシージャのソースコードをコンパイルすべきかイ
ンタープリトすべきかを判定するスタブを設けることが可能である。このため、
コーリーのプロシージャは、オブジェクトコードの実行がかかるスタブに達する
までコンパイルされない。
【0029】 ここで、かかる環境で結果的に得られるコンパイル処理について考察する。該
コンパイル処理は、通常の態様で進行し、ソースコードがプロシージャコールを
表すポイントに達するまでソースコード命令がマシンコード命令に変換される。
通常の結果は、単なるプロシージャコールを実施するための、すなわち、コーリ
ーのプロセスのコンテキストをセーブし及びあらゆるアーギュメント及びコント
ロールをコーラーへ渡すためのオブジェクトコードである。しかし、特定の判定
基準を満たすメソッドがインライン化のための良好な候補となる場合には、コン
パイラは、かかる候補を、図5の単純化されたフローチャートに示すような決定
ステップに従って識別する。
【0030】 決定ブロック40は、基本的なインライン化の判定基準、すなわちサイズを表し
ている。コーリーメソッドが長い場合には、それは良好なインライン化の候補で
はない。コンパイラはまた、殆どの場合、ポリモーフィックメソッド(例えば、
静的タイプが子孫である変数でコールされるバーチャルメソッド。この場合、該
変数は該メソッドをオーバーライドし、このため実行されることになるメソッド
の特定の形態は実行時まで知ることができない)を考慮対象から排除することに
なる。かかる排除は、本発明の広範な教示における絶対的な要件ではないが、殆
どのインプリメンテーションの特徴となるものであり、このため、図5はかかる
判定基準を表すブロック44を含んでいる。
【0031】 必要不可欠というわけではないが、ブロック40,44の判定基準は典型的なもの
であり、殆どのインプリメンテーションは、ブロック46に示すように更なる他の
判定基準を課すものとなる。ブロック48は、メソッドのレシーバエクスプレッシ
ョンがいわゆる既存性(pre-existence)判定基準を満たすものであるという要件
をコンパイラが更に課すことを示している。以下で明らかとなるように、該判定
基準の賦課により、バーチャルコールの直接のインライン化がダイナミックコン
パイル環境においてより実際的なものとなる。
【0032】 該判定基準の目的は、幾つかの所与のコールサイトにメソッドインボケーショ
ンo.m2()(変数oはクラスOのオブジェクトへの参照を含むよう宣言される)を含
むコールプロシージャm1を考察することにより理解することができる。ここで、
コーラープロシージャm1のコンパイル時に、クラスOのメソッドm2をオーバーラ
イドするクラスOの子孫がロードされておらず、及びそのサイトが他のしきい値
となる判定基準を満たしているものと仮定する。しかし、ダイナミックコンパイ
ル環境では、この判定基準は後に違反する(すなわち破られる)ことになる。こ
れは、ロード及びコンパイルが結果的に得られるコードの実行と同時に進行する
からである。かかる変化を検出してそれに応じるために、本発明の教示が存在し
ない場合には、複数のステップを実行しなければならなくなる。かかるステップ
は、直接のインライン化の魅力を低下させるものとなる。
【0033】 本発明は、かかる変化を検出してそれに応じるタスクを比較的単純なものに維
持する一方、多大な数のバーチャルコールサイトを直接インライン化することを
可能にするものである。本発明によれば、コンパイラは、特定のサイトでのみ、
バーチャルコールのインライン化を直接行う。ここで、該サイトとは、該コンパ
イラが、そのコンパイル時に、コールメソッドのランタイム実行中のレシーバエ
クスプレッションが、コーラーの特定の実行が開始する際にクラスがロードされ
ているオブジェクトを必然的に参照することになるとみなすことができるサイト
である。この判定基準が満たされる場合には、コールメソッドm1に関するオブジ
ェクトコードは、バーチャルコールo.m2()のインライン化の基礎となる仮定が有
効な状態を維持することを確実にするために特別な手段を必要としなくなる。以
下で説明するように、必要なことは、新たにロードされたクラスの最初のオブジ
ェクトの割り当てを行う前に仮定をチェックする(必要であればコーラープロシ
ージャを再コンパイルする)ことだけである。以下では更に、結果として得られ
る再コンパイルは、違反時に再コンパイルを必要とする仮定の下でコーリーがイ
ンライン化されるコーラーコードの実行に決して割り込まないことを必要とする
ものとなることが示される。
【0034】 第1に、割り当てられたあらゆるオブジェクトは、ロードされるクラスを必然
的に有している、ということに留意されたい。このため、1つのオブジェクトが
1つのメソッドへのエントリで割り当てられるようにすることは、それが判定基
準を満たすこと、すなわち、そのクラスが該メソッドへのエントリでロードされ
たことを示すのに十分なものとなる。この「割り当て済(allocatedness)」判定
基準を満たす多数のサイトは、極めて容易に識別することが可能なものであるこ
とが分かった。図6は、Javaプログラミング言語でのコードフラグメントを用い
たものであり、該識別の実施のための単純な技術を示している。これを本書では
「不変アーギュメント分析(invariant-argument analysis)」と称することとす
る。メソッドコールo.m2()でオブジェクト変数oが参照するレシーバオブジェク
トについて考察する。コーラーメソッドm1を調査することにより、そのボディが
、該コーラーメソッドm1内のオブジェクト変数oに対する割り当てを含まないこ
とが明らかとなる。ここで、1つのプロシージャ内の変数に対する割り当てが存
在しないことは、該プロシージャに入った際に該変数が参照するオブジェクトが
既に割り当てられていなければならないといことのみを意味するものではなく、
すなわち、コールプロシージャによりコールされる異なる実行スレッド又は別の
プロシージャが、新たに割り当てられたオブジェクトへの参照を非ローカル変数
に割り当てることができなければならない。しかし、コーラーメソッドm1がコー
ルされた際に既に値が渡されているレシーバオブジェクト変数oはローカル変数
であり、このため、該変数が参照するオブジェクトは、コーラーメソッド自体が
それに値を割り当てない場合には、必然的にコールプロシージャのエントリより
も前に割り当てられていなければならない。これは、オーバーライドするメソッ
ドがコーラーの実行と同時にコンパイルされるが故にインライン化の基礎となる
仮定が無効になる場合であっても、コーラーの実行は、再コンパイル(及びそれ
に関連するコールスタック上の値の置換)のために割り込まれることが決してな
いことを必要とすることを意味している。
【0035】 このため、コールサイトは、そのレシーバエクスプレッションがコーラーアー
ギュメントであり、該コーラーアーギュメントの値がコーラーへのエントリ時に
渡され、該コーラーがその後に新たな値を割り当てることがない場合に、不変ア
ーギュメント分析を渡す。全てのプロシージャパラメータがJavaプログラミング
言語において値で渡されるため、この判定基準を満たすレシーバを容易に認識す
ることができる。参照によりパラメータを渡すことができる他の幾つかの言語で
は、参照によるパラメータを、不変アーギュメントとみなさず、コーラーがコー
リーへ参照によりレシーバを渡す可能性のある割り当てインスタンスとして認識
するように注意を払わねばならない。
【0036】 図7は、図5のステップ48を一層詳細に示したものであり、代替的な既存性判
定基準もまた存在することが可能であることを示している。ブロック50は、レシ
ーバ変数が不変アーギュメントであるサイトを識別する上述のテストを表してい
る。図5のステップ54に示すように、コーラーがレシーバ変数に決して値を割り
当てない場合には、該テストの結果として直接のインライン化が得られる。しか
し、コーラーがかかる割り当てを行う場合であっても、やはり直接のインライン
化は適当なものであり、したがって、本発明の幾つかの実施例は、図7のブロッ
ク56に示すようなテストを含んでいる。コールo2.m2(),o3.m2()を含む図6のサ
イトは、このテストをパスするサイトの例である。
【0037】 o2.m2()の場合、先行するステートメント「O o2=o」は、コーラがレシーバオ
ブジェクト参照を含む変数o2に値を割り当てることを示しているが、これにより
割り当てられる値は不変アーギュメントの値である。ローカル変数が参照するオ
ブジェクトの既存性は、それに割り当てられた別のかかる変数の値のみから推論
することができる。このため、o2.m2はo.m2と同じインプリメンテーションとな
らなければならない。ローカル変数は、この判定基準を機能的に満たすことが可
能であり、すなわち、o2の値のみが割り当てられたローカル変数もまた該テスト
をパスすることになる、ということに留意されたい。
【0038】 また、コールo3.m2()の場合、先行するステートメント「O o3=o.clone()」は
、レシーバ参照を含む変数o3への割り当てを行う。該値は、変数oの値と同じで
はなく、不変アーギュメントoと同じ動的タイプを必然的に有するオブジェクト
への参照である。したがって、インプリメンテーションo3.m2は、インプリメン
テーションo.m2、ひいてはインライン化されたインプリメンテーションと同じで
なければならない。よって、この場合も、関連するコールサイトは、本発明の既
存性判定基準を満たし、該サイトにおけるコーリーをインライン化することがで
きる。
【0039】 図6のコールo.f.m3()を含むサイトは、不変(immutable)フィールドテストと
称する別の代替的な既存性テストを満たすことが可能なものである。コールサイ
トは、既存のオブジェクトのメンバであって該オブジェクトのクラスのコンスト
ラクタメソッドによってのみ割り当てを行うことができるという意味で「不変」
であるメンバをレシーバエクスプレッションが参照する場合に、このテストをパ
スする。例えば、クラスOが、そのメンバfを、図8に示す態様で定義し、すなわ
ち、クラスコンストラクタ以外のメンバメソッドが値を割り当てることがない「
private」メンバとして定義する。Javaプログラミング言語の「private」キーワ
ードは、そのように宣言が修正されたメンバへのアクセスが同一クラスのメンバ
に制限され、メンバfは、それがメンバとなるオブジェクトすなわち変数oが参照
するオブジェクトの構築時にのみその値が割り当てられる、ということを示すも
のである。メンバo.fに割り当てられるべき値は、オブジェクトoのコンストラク
タへアーギュメントとして渡される。このため、変数fが参照するメンバオブジ
ェクトは、必然的に該コンストラクタのインボケーション前に割り当てられてい
なければならない。しかし、変数oが参照するオブジェクトが既存であり、該オ
ブジェクトの構築前にメンバo.fが参照するオブジェクトが割り当てられている
場合には、該メンバo.fが参照するオブジェクトもまた既存でなければならない
。これと同じことが、メンバfに「private」ではなく「final」が宣言されてい
る場合にも当てはまる。これは、そのキーワードが、そのように修正された変数
の値をそれが最初に割り当てられた後に変更することができないという制限を課
すからである。何れの場合も、レシーバエクスプレッションがo.fであるコール
サイトは既存性判定基準を満たす。
【0040】 上述の何れのインライン化の場合も、インライン化が基礎とする仮定に違反し
た際にインライン化部分を改訂するための如何なる手段をもコールプロシージャ
のオブジェクトコード内に設ける必要はない。その代わり、かかる手段は、図9
を参照して以下で説明するように、仮定の違反を生じさせるコンパイル操作にお
いて好都合にも完全に実施することが可能である。
【0041】 コーラプロシージャm1のコンパイルの結果として生じるオブジェクトコードは
、コンパイル済コードブロック70内に配置され、同ブロック内には、おそらくは
ハウスキーピング情報を含むヘッダ部分72が先行することになる。ダイナミック
コンパイル環境では、コンパイル済コードは、一時的なものとなる可能性があり
、すなわち、その継続的な有効性は、如何なるコードが後にロードされるかに依
存する。特に、プロシージャが、上述の判定基準に従って直接にインライン化さ
れたバーチャルメソッドm2を有している場合には、ブロック70内のオブジェクト
コードの継続的な有効性は、コーリーメソッドm2のインプリメンテーションの数
がコーラープロシージャm1がコンパイルされたときと同じであるか否かに依存す
る。「モノモーフィック」メソッドのみを直接インライン化する図示の実施例で
は、インライン化されたコードの有効性は、かかるインプリメンテーションが1
つしか存在しないという仮定に依存する。
【0042】 該仮定に違反した際に応答する機構を提供するために、コンパイル操作は、典
型的な形式を示す図10の「依存性構造」を生成する。オブジェクトコードブロ
ックの継続的な有効性は、依存構造が提供することができる様々なタイプの仮定
に依存するものとすることが可能であり、このため、該構造の最初のフィールド
は、シングルインプリメンテーションタイプの依存性を指定し、これは、この場
合には、プロシージャm1の有効性が、コーリーメソッドm2がオーバーライドされ
ていないという仮定に依存することを意味する。該構造の次の「ターゲット」フ
ィールドは、1つしかインプリメントされないものと仮定されたコーリーを識別
するものであり、また、該構造の最後は、有効性が該仮定に依存するコールプロ
シージャを識別する「依存」フィールドである。図示の実施例では、それらの識
別は、コーリープロシージャm2に関連する「メソッドブロック」74へのポインタ
、及びコーラープロシージャm1に関連するコンパイル済コードコンテナ70へのポ
インタという形をとる。コンパイラは、1つのメソッドブロックを使用して、関
連するメソッドのインプリメンテーションの全てに共通の様々な情報を格納する
。 一例として、図9は、メソッドm2のメソッドブロック74を、コーリーメソッ
ドのコンパイル済コンテナ、並びにクラスOに関する様々な情報を格納するクラ
スファイル76とは別個のものとして示しているが、静的タイプのメソッドm2のレ
シーバクラスAはメソッドm2をオーバーライドせず、メソッドブロック74の「イ
ンプリメンテーション」フィールド(何個の異なるm2インプリメンテーションが
コンパイルされたかを示すもの)に変化は存在しないことになる。メソッドm2が
1つのインプリメンテーションしか有さないことを該フィールドが示す限り、オ
ブジェクトコードプログラムは、該メソッドの直接のインライン化の利益を享受
し続けることができる。
【0043】 しかし、ここで、コンパイル中のメソッドが、m2をオーバーライドする子孫ク
ラスBのメソッドである場合に何が生じるかについて考察する。結果的に生じる
のは、図11のコンパイル済コードコンテナ96に示すようなメソッドの異なるイ
ンプリメンテーションである。このため、メソッドm2のメソッドブロック74のイ
ンプリメンテーションフィールドが、現在2つの依存性が存在することを示すよ
うに更新され、メソッドm2のメソッドブロックの「ディペンデント(依存)」フ
ィールドが参照する依存性リストに対してシングルインプリメンテーションの依
存性の探索が行われる。
【0044】 該探索は依存性構造84を識別する。該構造は、プロシージャm1のコンパイルが
、メソッドm2が単独でインプリメントされることに基づくものであることを示す
ものである。したがって、プロシージャm1は、図11のブロックでメソッドm2に
関する新たなコンパイル済コードコンテナにバーチャルコールを含めることによ
り示すように、直接のインライン化を伴うことなく再コンパイルされる。メソッ
ドm1のクラス及びあらゆる祖先クラスのバーチャルテーブル中の関連するエント
リといった、メソッドm1に対する全ての参照は、プロシージャm1をコールする任
意のコードが以前のコードコンテナ70(そのコードはもはや有効ではない)では
なく新たなコンパイル済コードコンテナ96へ送られることになるよう更新される
。該新たなコードの有効性は、O.m2がオーバーライドされていないという仮定に
依存しないため、依存性構造84は両方のリストから除去される。これでクラスB
のコンパイルを完成させることが可能となり、該クラスの提示を待っていたあら
ゆるプロシージャはそれを実行することが可能となる。
【0045】 本発明がもたらす単純さを評価するために、クラスBがコンパイルされる際に
1つの実行スレッドが実行中のコーリープロシージャm1の中間にある状況を考察
する。かかる場合には、メソッドm2が1つのインプリメンテーションしか有さな
いという仮定の下でコンパイルされたプロシージャの実行中にメソッドm2の第2
のインプリメンテーションが生じることになる。本発明の判定基準を満たさなか
ったサイトで直接のインライン化が実行された場合には、プロシージャm1は、m2
インプリメンテーションの数をチェックするためのコードでインライン化をガー
ドしなければならず、メソッドm1のスタックフレーム中のエントリが置換されな
ければならないことになる。しかし、かかるオンスタックリプレースメントは、
本発明の判定基準が観察される場合には不要である。これは、直接のインライン
化を伴うコンパイル時にプロシージャm1に入る前にクラスBのインスタンスが割
り当てられていることはなく、該プロシージャm1の実行が開始される際に未だ割
り当てられていなかったオブジェクトについてインライン化を行うサイトでメソ
ッドm2がコールされることがないからである。
【0046】 したがって、本発明は、ダイナミックコンパイル環境でのインライン化を大幅
に単純化し、ひいては当業界での大きな進歩に貢献するものである。
【図面の簡単な説明】
【図1】 ソースプログラムをコンパイルするよう構成することが可能なタイプの典型的
なコンピュータシステムを示すブロック図である。
【図2】 ソースコードからアプリケーションの実行までの過程を示すブロック図である
【図3】 典型的なクラス宣言を示すソースコードリストである。
【図4】 図3で宣言されたクラスのインスタンスであるオブジェクトの使用を示すソー
スコードリストである。
【図5】 バーチャルコールを直接インライン化するか否かを判定するために本発明の実
施形態により用いられる決定プロセスを示すフローチャートである。
【図6】 インライン化の候補となり得る様々なコールサイトを示すソースコードフラグ
メントである。
【図7】 様々なバージョンの本発明の既存性に関する判定基準の賦課を示すフローチャ
ートである。
【図8】 不変メンバを有するクラスのクラス定義を示すコードフラグメントである。
【図9】 複数のコーリー農地の特定のものがオーバーライドされていないという仮定の
下でコンパイルされた呼出プロシージャの再コンパイルを行うときを判定するた
めに本例示の実施形態が採用する様々なデータ構造を示す説明図である。
【図10】 図9に含まれる依存構造を一層詳細に示す説明図である。
【図11】 直接インライン化されたコーリーメソッドをオーバーライドするクラスをロー
ドした結果を示す、図9に類似した説明図である。
───────────────────────────────────────────────────── 【要約の続き】ンハ゜イル 処理の現在実行中のインホ゛ケーションをエラーのおそれなし で続行することが可能となる。

Claims (40)

    【特許請求の範囲】
  1. 【請求項1】 マシンにより読み出すことが可能な命令によって構成されるコンピュータシス
    テムであって、該命令が、 A) ソースコードコールプロシージャを表す電気信号を読み出し、該コールプロ
    シージャが、レシーバエクスプレッションにより参照されるオブジェクトについ
    てバーチャルメソッドをコールすることになる少なくとも1つのコールサイトを
    含み、 B) 前記ソースコードコールプロシージャをオブジェクトコードコールプロシー
    ジャへとコンパイルし、該コンパイルが、 i) 直接のインライン化のためのしきい値判定基準を満たす各コールサイト
    毎に、該コールサイトが、前記コールプロシージャの所与の実行中にレシーバが
    参照するオブジェクトのクラスが該所与の実行が開始するときまでにロードされ
    ることになることを該コールプロシージャのコンパイル中に推論することを可能
    にする少なくとも1つの既存性判定基準を満たすか否かを判定し、 ii) 該既存性判定基準を満たすと判定された各コールサイト毎に、前記ソー
    スコードコールプロシージャのスレッドによりコールされた現在のロードされた
    形式のバーチャルメソッドの各々毎の直接インライン化されたコードを、前記オ
    ブジェクトコードコールプロシージャ内に配置する、 という各ステップからなり、 C) 前記オブジェクトコードコールプロシージャをマシンにより読み出すことが
    可能な記憶媒体に格納する ものである、コンピュータシステム。
  2. 【請求項2】 前記マシンにより読み出すことが可能な命令が、 A) コールサイトが少なくとも1つの前記既存性判定基準を満たす結果として前
    記オブジェクトコードコールプロシージャ内にインライン化された各バーチャル
    メソッドに対し、該バーチャルメソッドのインプリメンテーションの現在の数へ
    の前記オブジェクトコードコールプロシージャの依存性を記録し、 B) 前記オブジェクトコードコールプロシージャがマシンにより読み出すことが
    可能な記憶媒体に格納された後に、新たなソースコード形式のバーチャルメソッ
    ドを表す電気信号を読み出し、 C) 該新たなソースコード形式のバーチャルメソッドを新たなオブジェクトコー
    ド形式へとコンパイルし、 D) 該新たなオブジェクトコード形式のバーチャルメソッドが、インプリメンテ
    ーションの所与の数へのコールプロシージャの依存性が記録されたバーチャルメ
    ソッドをオーバーライドするか否かを判定し、 E) 該新たなオブジェクトコード形式のバーチャルメソッドがかかるバーチャル
    メソッドをオーバーライドする場合に、 i) ソースコードコールプロシージャを置換対象となるオブジェクトコード
    コールプロシージャへと再コンパイルし、 ii) 前記新たなソースコード形式のバーチャルメソッドがコンパイルされた
    後に該コンパイルされたオブジェクトコードを実行することが可能となる前に、
    前記置換対象となるオブジェクトコードコールプロシージャを、マシンにより読
    み出すことが可能な記憶媒体に格納する ようコンピュータシステムを構成するものである、請求項1に記載のコンピュー
    タシステム。
  3. 【請求項3】 1つのコールサイトでの直接インライン化のための1つの前記しきい値判定基
    準が、該コールサイトでコールされた1つ形式のみのバーチャルメソッドがロー
    ドされている、ということである、請求項2に記載のコンピュータシステム。
  4. 【請求項4】 1つの前記既存性判定基準が、レシーバエクスプレッションが、前記コールプ
    ロシージャが値を割り当てない該コールプロシージャのローカル変数である、と
    いうことである、請求項1に記載のコンピュータシステム。
  5. 【請求項5】 1つの前記既存性判定基準が、レシーバエクスプレッションが不変ローカル変
    数であり、該不変ローカル変数が、前記コールプロシージャが別の不変ローカル
    変数の値以外の値を割り当てることのないローカル変数として定義されるもので
    ある、ということである、請求項1に記載のコンピュータシステム。
  6. 【請求項6】 1つのコールサイトについての1つの前記既存性判定基準が、前記レシーバエ
    クスプレッションが、前記コールプロシージャの所与の実行中にレシーバが参照
    するオブジェクトが該所与の実行が開始するときまでに構築されることになるこ
    とを該コールプロシージャのコンパイル中に推論することを可能にする判定基準
    を満たすオブジェクトの不変メンバを参照する、ということである、請求項1に
    記載のコンピュータシステム。
  7. 【請求項7】 1つのコールサイトについての1つの前記既存性判定基準が、前記レシーバエ
    クスプレッションが、別の1つの不変メンバの不変メンバ、又は1つの不変ロー
    カル変数により参照される1つのオブジェクトの不変メンバを参照し、1つの不
    変メンバは、1つのコンストラクタでのみ割り当てを行うことができるものであ
    り、1つの不変ローカル変数は、前記コールプロシージャが別の不変ローカル変
    数の値以外の値を割り当てることのないローカル変数として定義されるものであ
    る、ということである、請求項1に記載のコンピュータシステム。
  8. 【請求項8】 マシンにより読み出すことが可能な命令によって構成されるコンピュータシス
    テムであって、該命令が、 A) ターゲットバーチャルメソッドをコールするソースコードコールプロシージ
    ャを表す電気信号を読み出し、 B) 現在のロードされた形式のターゲットバーチャルメソッドの各々毎に直接イ
    ンライン化されたコードをオブジェクトコードコールプロシージャ内へ配置する
    ことにより、前記ソースコードコールプロシージャを前記オブジェクトコードコ
    ールプロシージャへとコンパイルし、 C) 前記コールプロシージャ及び前記ターゲットバーチャルメソッドに対し、該
    ターゲットバーチャルメソッドのインプリメンテーションの現在の数への前記コ
    ールプロシージャの依存性を記録し、 D) 前記オブジェクトコードコールプロシージャをマシンにより読み出すことが
    可能な記憶媒体に格納し、 E) 新たな形式のバーチャルメソッドを表す電気信号を読み出し、 F) 該新たな形式のバーチャルメソッドが、インプリメンテーションの所与の数
    への前記コールプロシージャの依存性が記録されたバーチャルメソッドをオーバ
    ーライドするか否かを判定し、 G) 前記新たな形式のバーチャルメソッドがかかるバーチャルメソッドをオーバ
    ーライドする場合に、前記ソースコードコールプロシージャを置換対象となるオ
    ブジェクトコードコールプロシージャへと再コンパイルし、 H) 該置換対象となるオブジェクトコードコールプロシージャを、マシンにより
    読み出すことが可能な記憶媒体に格納する ものである、コンピュータシステム。
  9. 【請求項9】 A) ソースコードコールプロシージャを表す電気信号を読み出す読出手段であっ
    て、該コールプロシージャが、レシーバエクスプレッションにより参照されるオ
    ブジェクトについてバーチャルメソッドをコールすることになる少なくとも1つ
    のコールサイトを含むものである、読出手段と、 B) 前記ソースコードコールプロシージャをオブジェクトコードコールプロシー
    ジャへとコンパイルするコンパイル手段であって、該コンパイルが、 i) 直接インライン化のためのしきい値判定基準を満たす各コールサイト毎
    に、該コールサイトが、前記コールプロシージャの所与の実行中にレシーバが参
    照するオブジェクトのクラスが該所与の実行が開始するときまでにロードされる
    ことになることを該コールプロシージャのコンパイル中に推論することを可能に
    する少なくとも1つの既存性判定基準を満たすか否かを判定し、 ii) 該既存性判定基準を満たすと判定された各コールサイト毎に、前記ソー
    スコードコールプロシージャのスレッドによりコールされた現在のロードされた
    形式のバーチャルメソッドの各々毎の直接インライン化されたコードを、前記オ
    ブジェクトコードコールプロシージャ内に配置する ことにより行われる、コンパイル手段と、 C) 前記オブジェクトコードコールプロシージャをマシンにより読み出すことが
    可能な記憶媒体に格納する格納手段と を備えている、コンピュータシステム。
  10. 【請求項10】 A) コールサイトが少なくとも1つの前記既存性判定基準を満たす結果として前
    記オブジェクトコードコールプロシージャ内にインライン化された各バーチャル
    メソッドに対し、該バーチャルメソッドのインプリメンテーションの現在の数へ
    の前記オブジェクトコードコールプロシージャの依存性を記録する手段と、 B) 前記オブジェクトコードコールプロシージャがマシンにより読み出すことが
    可能な記憶媒体に格納された後に、新たなソースコード形式のバーチャルメソッ
    ドを表す電気信号を読み出す手段と、 C) 該新たなソースコード形式のバーチャルメソッドを新たなオブジェクトコー
    ド形式へとコンパイルする手段と、 D) 該新たなオブジェクトコード形式のバーチャルメソッドが、インプリメンテ
    ーションの所与の数へのコールプロシージャの依存性が記録されたバーチャルメ
    ソッドをオーバーライドするか否かを判定する手段と、 E) 該新たなオブジェクトコード形式のバーチャルメソッドがかかるバーチャル
    メソッドをオーバーライドする場合に、 i) ソースコードコールプロシージャを置換対象となるオブジェクトコード
    コールプロシージャへと再コンパイルし、 ii) 前記新たなソースコード形式のバーチャルメソッドがコンパイルされた
    後に該コンパイルされたオブジェクトコードを実行することが可能となる前に、
    前記置換対象となるオブジェクトコードコールプロシージャをマシンにより読み
    出すことが可能な記憶媒体に格納する 手段とを備えている、請求項9に記載のコンピュータシステム。
  11. 【請求項11】 1つのコールサイトでの直接インライン化のための1つの前記しきい値判定基
    準が、該コールサイトでコールされた1つ形式のみのバーチャルメソッドがロー
    ドされている、ということである、請求項10に記載のコンピュータシステム。
  12. 【請求項12】 1つの前記既存性判定基準が、レシーバエクスプレッションが、前記コールプ
    ロシージャが値を割り当てない該コールプロシージャのローカル変数である、と
    いうことである、請求項9に記載のコンピュータシステム。
  13. 【請求項13】 1つの前記既存性判定基準が、レシーバエクスプレッションが不変ローカル変
    数であり、該不変ローカル変数が、前記コールプロシージャが別の不変ローカル
    変数の値以外の値を割り当てることのないローカル変数として定義されるもので
    ある、ということである、請求項9に記載のコンピュータシステム。
  14. 【請求項14】 1つのコールサイトについての1つの前記既存性判定基準が、前記レシーバエ
    クスプレッションが、前記コールプロシージャの所与の実行中にレシーバが参照
    するオブジェクトが該所与の実行が開始するときまでに構築されることになるこ
    とを該コールプロシージャのコンパイル中に推論することを可能にする判定基準
    を満たすオブジェクトの不変メンバを参照する、ということである、請求項9に
    記載のコンピュータシステム。
  15. 【請求項15】 1つのコールサイトについての1つの前記既存性判定基準が、前記レシーバエ
    クスプレッションが、別の1つの不変メンバの不変メンバ、又は1つの不変ロー
    カル変数により参照される1つのオブジェクトの不変メンバを参照し、1つの不
    変メンバは、1つのコンストラクタでのみ割り当てを行うことができるものであ
    り、1つの不変ローカル変数は、前記コールプロシージャが別の不変ローカル変
    数の値以外の値を割り当てることのないローカル変数として定義されるものであ
    る、ということである、請求項9に記載のコンピュータシステム。
  16. 【請求項16】 A) ターゲットバーチャルメソッドをコールするソースコードコールプロシージ
    ャを表す電気信号を読み出す手段と、 B) 現在のロードされた形式のターゲットバーチャルメソッドの各々毎に直接イ
    ンライン化されたコードをオブジェクトコードコールプロシージャ内へ配置する
    ことにより、前記ソースコードコールプロシージャを前記オブジェクトコードコ
    ールプロシージャへとコンパイルする手段と、 C) 前記コールプロシージャ及び前記ターゲットバーチャルメソッドに対し、該
    ターゲットバーチャルメソッドのインプリメンテーションの現在の数への前記コ
    ールプロシージャの依存性を記録する手段と、 D) 前記オブジェクトコードコールプロシージャをマシンにより読み出すことが
    可能な記憶媒体に格納する手段と、 E) 新たな形式のバーチャルメソッドを表す電気信号を読み出す手段と、 F) 該新たな形式のバーチャルメソッドが、インプリメンテーションの所与の数
    への前記コールプロシージャの依存性が記録されたバーチャルメソッドをオーバ
    ーライドするか否かを判定する手段と、 G) 前記新たな形式のバーチャルメソッドがかかるバーチャルメソッドをオーバ
    ーライドする場合に、前記ソースコードコールプロシージャを置換対象となるオ
    ブジェクトコードコールプロシージャへと再コンパイルする手段と、 H) 該置換対象となるオブジェクトコードコールプロシージャを、マシンにより
    読み出すことが可能な記憶媒体に格納する手段と を備えている、コンピュータシステム。
  17. 【請求項17】 A) ソースコードコールプロシージャを表す電気信号を読み出し、該コールプロ
    シージャが、レシーバエクスプレッションにより参照されるオブジェクトについ
    てバーチャルメソッドをコールすることになる少なくとも1つのコールサイトを
    含み、 B) 前記ソースコードコールプロシージャをオブジェクトコードコールプロシー
    ジャへとコンパイルし、該コンパイルが、 i) 直接インライン化のためのしきい値判定基準を満たす各コールサイト毎
    に、該コールサイトが、前記コールプロシージャの所与の実行中にレシーバが参
    照するオブジェクトのクラスが該所与の実行が開始するときまでにロードされる
    ことになることを該コールプロシージャのコンパイル中に推論することを可能に
    する少なくとも1つの既存性判定基準を満たすか否かを判定し、 ii) 該既存性判定基準を満たすと判定された各コールサイト毎に、前記ソー
    スコードコールプロシージャのスレッドによりコールされた現在のロードされた
    形式のバーチャルメソッドの各々毎の直接インライン化されたコードを、前記オ
    ブジェクトコードコールプロシージャ内に配置する、 という各ステップからなり、 C) 前記オブジェクトコードコールプロシージャをマシンにより読み出すことが
    可能な記憶媒体に格納する、 という各ステップを有する、オブジェクトコードの生成方法。
  18. 【請求項18】 A) コールサイトが少なくとも1つの前記既存性判定基準を満たす結果として前
    記オブジェクトコードコールプロシージャ内にインライン化された各バーチャル
    メソッドに対し、該バーチャルメソッドのインプリメンテーションの現在の数へ
    の前記オブジェクトコードコールプロシージャの依存性を記録し、 B) 前記オブジェクトコードコールプロシージャがマシンにより読み出すことが
    可能な記憶媒体に格納された後に、新たなソースコード形式のバーチャルメソッ
    ドを表す電気信号を読み出し、 C) 該新たなソースコード形式のバーチャルメソッドを新たなオブジェクトコー
    ド形式へとコンパイルし、 D) 該新たなオブジェクトコード形式のバーチャルメソッドが、インプリメンテ
    ーションの所与の数へのコールプロシージャの依存性が記録されたバーチャルメ
    ソッドをオーバーライドするか否かを判定し、 E) 該新たなオブジェクトコード形式のバーチャルメソッドがかかるバーチャル
    メソッドをオーバーライドする場合に、 i) ソースコードコールプロシージャを置換対象となるオブジェクトコード
    コールプロシージャへと再コンパイルし、 ii) 前記新たなソースコード形式のバーチャルメソッドがコンパイルされた
    後に該コンパイルされたオブジェクトコードを実行することが可能となる前に、
    前記置換対象となるオブジェクトコードコールプロシージャを、マシンにより読
    み出すことが可能な記憶媒体に格納する、 という各ステップを更に有する、請求項17に記載の方法。
  19. 【請求項19】 1つのコールサイトでの直接インライン化のための1つの前記しきい値判定基
    準が、該コールサイトでコールされた1つ形式のみのバーチャルメソッドがロー
    ドされている、ということである、請求項18に記載の方法。
  20. 【請求項20】 1つの前記既存性判定基準が、レシーバエクスプレッションが、前記コールプ
    ロシージャが値を割り当てない該コールプロシージャのローカル変数である、と
    いうことである、請求項17に記載の方法。
  21. 【請求項21】 1つの前記既存性判定基準が、レシーバエクスプレッションが不変ローカル変
    数であり、該不変ローカル変数が、前記コールプロシージャが別の不変ローカル
    変数の値以外の値を割り当てることのないローカル変数として定義されるもので
    ある、ということである、請求項17に記載の方法。
  22. 【請求項22】 1つのコールサイトについての1つの前記既存性判定基準が、前記レシーバエ
    クスプレッションが、前記コールプロシージャの所与の実行中にレシーバが参照
    するオブジェクトが該所与の実行が開始するときまでに構築されることになるこ
    とを該コールプロシージャのコンパイル中に推論することを可能にする判定基準
    を満たすオブジェクトの不変メンバを参照する、ということである、請求項17
    に記載の方法。
  23. 【請求項23】 1つのコールサイトについての1つの前記既存性判定基準が、前記レシーバエ
    クスプレッションが、別の1つの不変メンバの不変メンバ、又は1つの不変ロー
    カル変数により参照される1つのオブジェクトの不変メンバを参照し、1つの不
    変メンバは、1つのコンストラクタでのみ割り当てを行うことができるものであ
    り、1つの不変ローカル変数は、前記コールプロシージャが別の不変ローカル変
    数の値以外の値を割り当てることのないローカル変数として定義されるものであ
    る、ということである、請求項17に記載の方法。
  24. 【請求項24】 A) ターゲットバーチャルメソッドをコールするソースコードコールプロシージ
    ャを表す電気信号を読み出し、 B) 現在のロードされた形式のターゲットバーチャルメソッドの各々毎に直接イ
    ンライン化されたコードをオブジェクトコードコールプロシージャ内へ配置する
    ことにより、前記ソースコードコールプロシージャを前記オブジェクトコードコ
    ールプロシージャへとコンパイルし、 C) 前記コールプロシージャ及び前記ターゲットバーチャルメソッドに対し、該
    ターゲットバーチャルメソッドのインプリメンテーションの現在の数への前記コ
    ールプロシージャの依存性を記録し、 D) 前記オブジェクトコードコールプロシージャをマシンにより読み出すことが
    可能な記憶媒体に格納し、 E) 新たな形式のバーチャルメソッドを表す電気信号を読み出し、 F) 該新たな形式のバーチャルメソッドが、インプリメンテーションの所与の数
    への前記コールプロシージャの依存性が記録されたバーチャルメソッドをオーバ
    ーライドするか否かを判定し、 G) 前記新たな形式のバーチャルメソッドがかかるバーチャルメソッドをオーバ
    ーライドする場合に、前記ソースコードコールプロシージャを置換対象となるオ
    ブジェクトコードコールプロシージャへと再コンパイルし、 H) 該置換対象となるオブジェクトコードコールプロシージャを、マシンにより
    読み出すことが可能な記憶媒体に格納する、 という各ステップ有する、オブジェクトコードの生成方法。
  25. 【請求項25】 搬送波内で実施されて一連の命令を表すコンピュータデータ信号であって、該
    命令のコンピュータシステムによる実行時に、 A) ソースコードコールプロシージャを表す電気信号を読み出し、該コールプロ
    シージャが、レシーバエクスプレッションにより参照されるオブジェクトについ
    てバーチャルメソッドをコールすることになる少なくとも1つのコールサイトを
    含み、 B) 前記ソースコードコールプロシージャをオブジェクトコードコールプロシー
    ジャへとコンパイルし、該コンパイルが、 i) 直接インライン化のためのしきい値判定基準を満たす各コールサイト毎
    に、該コールサイトが、前記コールプロシージャの所与の実行中にレシーバが参
    照するオブジェクトのクラスが該所与の実行が開始するときまでにロードされる
    ことになることを該コールプロシージャのコンパイル中に推論することを可能に
    する少なくとも1つの既存性判定基準を満たすか否かを判定し、 ii) 該既存性判定基準を満たすと判定された各コールサイト毎に、前記ソー
    スコードコールプロシージャのスレッドによりコールされた現在のロードされた
    形式のバーチャルメソッドの各々毎の直接インライン化されたコードを、前記オ
    ブジェクトコードコールプロシージャ内に配置する ことにより行われ、 C) 前記オブジェクトコードコールプロシージャをマシンにより読み出すことが
    可能な記憶媒体に格納する よう該コンピュータシステムを構成する、コンピュータデータ信号。
  26. 【請求項26】 前記マシンにより読み出すことが可能な命令が、 A) コールサイトが少なくとも1つの前記既存性判定基準を満たす結果として前
    記オブジェクトコードコールプロシージャ内にインライン化された各バーチャル
    メソッドに対し、該バーチャルメソッドのインプリメンテーションの現在の数へ
    の前記オブジェクトコードコールプロシージャの依存性を記録し、 B) 前記オブジェクトコードコールプロシージャがマシンにより読み出すことが
    可能な記憶媒体に格納された後に、新たなソースコード形式のバーチャルメソッ
    ドを表す電気信号を読み出し、 C) 該新たなソースコード形式のバーチャルメソッドを新たなオブジェクトコー
    ド形式へとコンパイルし、 D) 該新たなオブジェクトコード形式のバーチャルメソッドが、インプリメンテ
    ーションの所与の数へのコールプロシージャの依存性が記録されたバーチャルメ
    ソッドをオーバーライドするか否かを判定し、 E) 該新たなオブジェクトコード形式のバーチャルメソッドがかかるバーチャル
    メソッドをオーバーライドする場合に、 i) ソースコードコールプロシージャを置換対象となるオブジェクトコード
    コールプロシージャへと再コンパイルし、 ii) 前記新たなソースコード形式のバーチャルメソッドがコンパイルされた
    後に該コンパイルされたオブジェクトコードを実行することが可能となる前に、
    前記置換対象となるオブジェクトコードコールプロシージャを、マシンにより読
    み出すことが可能な記憶媒体に格納する ようコンピュータシステムを構成する、請求項25に記載のコンピュータデータ
    信号。
  27. 【請求項27】 1つのコールサイトでの直接インライン化のための1つの前記しきい値判定基
    準が、該コールサイトでコールされた1つ形式のみのバーチャルメソッドがロー
    ドされている、ということである、請求項26に記載のコンピュータデータ信号
  28. 【請求項28】 1つの前記既存性判定基準が、レシーバエクスプレッションが、前記コールプ
    ロシージャが値を割り当てない該コールプロシージャのローカル変数である、と
    いうことである、請求項25に記載のコンピュータデータ信号。
  29. 【請求項29】 1つの前記既存性判定基準が、レシーバエクスプレッションが不変ローカル変
    数であり、該不変ローカル変数が、前記コールプロシージャが別の不変ローカル
    変数の値以外の値を割り当てることのないローカル変数として定義されるもので
    ある、ということである、請求項25に記載のコンピュータデータ信号。
  30. 【請求項30】 1つのコールサイトについての1つの前記既存性判定基準が、前記レシーバエ
    クスプレッションが、前記コールプロシージャの所与の実行中にレシーバが参照
    するオブジェクトが該所与の実行が開始するときまでに構築されることになるこ
    とを該コールプロシージャのコンパイル中に推論することを可能にする判定基準
    を満たすオブジェクトの不変メンバを参照する、ということである、請求項25
    に記載のコンピュータデータ信号。
  31. 【請求項31】 1つのコールサイトについての1つの前記既存性判定基準が、前記レシーバエ
    クスプレッションが、別の1つの不変メンバの不変メンバ、又は1つの不変ロー
    カル変数により参照される1つのオブジェクトの不変メンバを参照し、1つの不
    変メンバは、1つのコンストラクタでのみ割り当てを行うことができるものであ
    り、1つの不変ローカル変数は、前記コールプロシージャが別の不変ローカル変
    数の値以外の値を割り当てることのないローカル変数として定義されるものであ
    る、ということである、請求項25に記載のコンピュータデータ信号。
  32. 【請求項32】 搬送波内で実施されて一連の命令を表すコンピュータデータ信号であって、該
    命令のコンピュータシステムによる実行時に、 A) ターゲットバーチャルメソッドをコールするソースコードコールプロシージ
    ャを表す電気信号を読み出し、 B) 現在のロードされた形式のターゲットバーチャルメソッドの各々毎に直接イ
    ンライン化されたコードをオブジェクトコードコールプロシージャ内へ配置する
    ことにより、前記ソースコードコールプロシージャを前記オブジェクトコードコ
    ールプロシージャへとコンパイルし、 C) 前記コールプロシージャ及び前記ターゲットバーチャルメソッドに対し、該
    ターゲットバーチャルメソッドのインプリメンテーションの現在の数への前記コ
    ールプロシージャの依存性を記録し、 D) 前記オブジェクトコードコールプロシージャをマシンにより読み出すことが
    可能な記憶媒体に格納し、 E) 新たな形式のバーチャルメソッドを表す電気信号を読み出し、 F) 該新たな形式のバーチャルメソッドが、インプリメンテーションの所与の数
    への前記コールプロシージャの依存性が記録されたバーチャルメソッドをオーバ
    ーライドするか否かを判定し、 G) 前記新たな形式のバーチャルメソッドがかかるバーチャルメソッドをオーバ
    ーライドする場合に、前記ソースコードコールプロシージャを置換対象となるオ
    ブジェクトコードコールプロシージャへと再コンパイルし、 H) 該置換対象となるオブジェクトコードコールプロシージャを、マシンにより
    読み出すことが可能な記憶媒体に格納する ようにコンピュータシステムを構成する、コンピュータデータ信号。
  33. 【請求項33】 コンピュータシステムにより読み出すことが可能な命令を含む記憶媒体であっ
    て、該命令が、 A) ソースコードコールプロシージャを表す電気信号を読み出し、該コールプロ
    シージャが、レシーバエクスプレッションにより参照されるオブジェクトについ
    てバーチャルメソッドをコールすることになる少なくとも1つのコールサイトを
    含み、 B) 前記ソースコードコールプロシージャをオブジェクトコードコールプロシー
    ジャへとコンパイルし、該コンパイルが、 i) 直接インライン化のためのしきい値判定基準を満たす各コールサイト毎
    に、該コールサイトが、前記コールプロシージャの所与の実行中にレシーバが参
    照するオブジェクトのクラスが該所与の実行が開始するときまでにロードされる
    ことになることを該コールプロシージャのコンパイル中に推論することを可能に
    する少なくとも1つの既存性判定基準を満たすか否かを判定し、 ii) 該既存性判定基準を満たすと判定された各コールサイト毎に、前記ソー
    スコードコールプロシージャのスレッドによりコールされた現在のロードされた
    形式のバーチャルメソッドの各々毎の直接インライン化されたコードを、前記オ
    ブジェクトコードコールプロシージャ内に配置する ことにより行われ、 C) 前記オブジェクトコードコールプロシージャをマシンにより読み出すことが
    可能な記憶媒体に格納する ようコンピュータシステムを構成するものである、記憶媒体。
  34. 【請求項34】 前記マシンにより読み出すことが可能な命令が、 A) コールサイトが少なくとも1つの前記既存性判定基準を満たす結果として前
    記オブジェクトコードコールプロシージャ内にインライン化された各バーチャル
    メソッドに対し、該バーチャルメソッドのインプリメンテーションの現在の数へ
    の前記オブジェクトコードコールプロシージャの依存性を記録し、 B) 前記オブジェクトコードコールプロシージャがマシンにより読み出すことが
    可能な記憶媒体に格納された後に、新たなソースコード形式のバーチャルメソッ
    ドを表す電気信号を読み出し、 C) 該新たなソースコード形式のバーチャルメソッドを新たなオブジェクトコー
    ド形式へとコンパイルし、 D) 該新たなオブジェクトコード形式のバーチャルメソッドが、インプリメンテ
    ーションの所与の数へのコールプロシージャの依存性が記録されたバーチャルメ
    ソッドをオーバーライドするか否かを判定し、 E) 該新たなオブジェクトコード形式のバーチャルメソッドがかかるバーチャル
    メソッドをオーバーライドする場合に、 i) ソースコードコールプロシージャを置換対象となるオブジェクトコード
    コールプロシージャへと再コンパイルし、 ii) 前記新たなソースコード形式のバーチャルメソッドがコンパイルされた
    後に該コンパイルされたオブジェクトコードを実行することが可能となる前に、
    前記置換対象となるオブジェクトコードコールプロシージャを、マシンにより読
    み出すことが可能な記憶媒体に格納する ようコンピュータシステムを構成する、請求項33に記載の記憶媒体。
  35. 【請求項35】 1つのコールサイトでの直接インライン化のための1つの前記しきい値判定基
    準が、該コールサイトでコールされた1つ形式のみのバーチャルメソッドがロー
    ドされている、ということである、請求項34に記載の記憶媒体。
  36. 【請求項36】 1つの前記既存性判定基準が、レシーバエクスプレッションが、前記コールプ
    ロシージャが値を割り当てない該コールプロシージャのローカル変数である、と
    いうことである、請求項33に記載の記憶媒体。
  37. 【請求項37】 1つの前記既存性判定基準が、レシーバエクスプレッションが不変ローカル変
    数であり、該不変ローカル変数が、前記コールプロシージャが別の不変ローカル
    変数の値以外の値を割り当てることのないローカル変数として定義されるもので
    ある、ということである、請求項33に記載の記憶媒体。
  38. 【請求項38】 1つのコールサイトについての1つの前記既存性判定基準が、前記レシーバエ
    クスプレッションが、前記コールプロシージャの所与の実行中にレシーバが参照
    するオブジェクトが該所与の実行が開始するときまでに構築されることになるこ
    とを該コールプロシージャのコンパイル中に推論することを可能にする判定基準
    を満たすオブジェクトの不変メンバを参照する、ということである、請求項33
    に記載の記憶媒体。
  39. 【請求項39】 1つのコールサイトについての1つの前記既存性判定基準が、前記レシーバエ
    クスプレッションが、別の1つの不変メンバの不変メンバ、又は1つの不変ロー
    カル変数により参照される1つのオブジェクトの不変メンバを参照し、1つの不
    変メンバは、1つのコンストラクタでのみ割り当てを行うことができるものであ
    り、1つの不変ローカル変数は、前記コールプロシージャが別の不変ローカル変
    数の値以外の値を割り当てることのないローカル変数として定義されるものであ
    る、ということである、請求項33に記載の記憶媒体。
  40. 【請求項40】 マシンにより読み出すことが可能な命令により構成される記憶媒体であって、
    該命令が、 A) ターゲットバーチャルメソッドをコールするソースコードコールプロシージ
    ャを表す電気信号を読み出し、 B) 現在のロードされた形式のターゲットバーチャルメソッドの各々毎に直接イ
    ンライン化されたコードをオブジェクトコードコールプロシージャ内へ配置する
    ことにより、前記ソースコードコールプロシージャを前記オブジェクトコードコ
    ールプロシージャへとコンパイルし、 C) 前記コールプロシージャ及び前記ターゲットバーチャルメソッドに対し、該
    ターゲットバーチャルメソッドのインプリメンテーションの現在の数への前記コ
    ールプロシージャの依存性を記録し、 D) 前記オブジェクトコードコールプロシージャをマシンにより読み出すことが
    可能な記憶媒体に格納し、 E) 新たな形式のバーチャルメソッドを表す電気信号を読み出し、 F) 該新たな形式のバーチャルメソッドが、インプリメンテーションの所与の数
    への前記コールプロシージャの依存性が記録されたバーチャルメソッドをオーバ
    ーライドするか否かを判定し、 G) 前記新たな形式のバーチャルメソッドがかかるバーチャルメソッドをオーバ
    ーライドする場合に、前記ソースコードコールプロシージャを置換対象となるオ
    ブジェクトコードコールプロシージャへと再コンパイルし、 H) 該置換対象となるオブジェクトコードコールプロシージャを、マシンにより
    読み出すことが可能な記憶媒体に格納する ものである、記憶媒体。
JP2000576348A 1998-10-09 1999-10-07 オンスタックリプレースメントを伴うことなくバーチャルコールを直接にインライン化する方法 Pending JP2002527811A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/169,341 US6223340B1 (en) 1998-10-09 1998-10-09 Method for directly inlining virtual calls without on-stack replacement
US09/169,341 1998-10-09
PCT/US1999/023349 WO2000022509A2 (en) 1998-10-09 1999-10-07 Method for directly inlining virtual calls without on-stack replacement

Publications (1)

Publication Number Publication Date
JP2002527811A true JP2002527811A (ja) 2002-08-27

Family

ID=22615266

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000576348A Pending JP2002527811A (ja) 1998-10-09 1999-10-07 オンスタックリプレースメントを伴うことなくバーチャルコールを直接にインライン化する方法

Country Status (6)

Country Link
US (1) US6223340B1 (ja)
EP (1) EP1145111B1 (ja)
JP (1) JP2002527811A (ja)
AT (1) ATE250239T1 (ja)
DE (1) DE69911468T2 (ja)
WO (1) WO2000022509A2 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5933635A (en) * 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
WO2000045260A1 (fr) * 1999-01-29 2000-08-03 Fujitsu Limited Compilateur, procede de compilation et support de stockage sur lequel est stocke un programme pour la mise en oeuvre dudit procede
US6487714B1 (en) * 1999-05-24 2002-11-26 International Business Machines Corporation Mechanism for dynamic selection of an object's method
US6507946B2 (en) * 1999-06-11 2003-01-14 International Business Machines Corporation Process and system for Java virtual method invocation
US6526572B1 (en) * 2000-02-09 2003-02-25 Hewlett-Packard Company Mechanism for software register renaming and load speculation in an optimizer
US7089403B2 (en) * 2002-06-26 2006-08-08 International Business Machines Corporation System and method for using hardware performance monitors to evaluate and modify the behavior of an application during execution of the application
US7272830B2 (en) * 2003-01-16 2007-09-18 Sun Microsystems, Inc. Ordering program data for loading on a device
US7484095B2 (en) * 2003-01-16 2009-01-27 Sun Microsystems, Inc. System for communicating program data between a first device and a second device
US8121955B2 (en) 2003-01-16 2012-02-21 Oracle America, Inc. Signing program data payload sequence in program loading
US7165246B2 (en) * 2003-01-16 2007-01-16 Sun Microsystems, Inc. Optimized representation of data type information in program verification
US7222331B2 (en) * 2003-01-16 2007-05-22 Sun Microsystems, Inc. Linking of virtual methods
US7281244B2 (en) * 2003-01-16 2007-10-09 Sun Microsystems, Inc. Using a digital fingerprint to commit loaded data in a device
US20040143739A1 (en) * 2003-01-16 2004-07-22 Sun Mircosystems, Inc., A Delaware Corporation Run time code integrity checks
US7386686B2 (en) * 2003-03-28 2008-06-10 Intel Corporation Inlining with stack trace cache-based dynamic profiling
US7340732B2 (en) * 2003-11-26 2008-03-04 Sun Microsystems, Inc. Updating profile frequency for procedure inlining
CA2453776A1 (en) * 2003-12-19 2005-06-19 Ibm Canada Limited-Ibm Canada Limitee Compiler optimization
US7526760B1 (en) * 2004-03-17 2009-04-28 Sun Microsystems, Inc. Methods for implementing virtual method invocation with shared code
US20070250825A1 (en) * 2006-04-21 2007-10-25 Hicks Daniel R Compiling Alternative Source Code Based on a Metafunction
US7913236B2 (en) * 2006-09-29 2011-03-22 Intel Corporation Method and apparatus for performing dynamic optimization for software transactional memory
US8291393B2 (en) * 2007-08-20 2012-10-16 International Business Machines Corporation Just-in-time compiler support for interruptible code
US8370821B2 (en) * 2007-08-21 2013-02-05 International Business Machines Corporation Method for enabling profile-based call site tailor-ing using profile gathering of cloned functions
US8276131B2 (en) * 2007-08-30 2012-09-25 International Business Machines Corporation Method and system for dynamic loop transfer by populating split variables
US20090182689A1 (en) * 2008-01-15 2009-07-16 Microsoft Corporation Rule-based dynamic operation evaluation
US8281296B2 (en) * 2008-08-12 2012-10-02 Oracle America, Inc. Cross-ISA inlining in a system virtual machine
US8621447B1 (en) * 2009-08-25 2013-12-31 Adobe Systems Incorporated Systems and methods for dynamic struct variable creation including inline declaration with dynamic keys
US20130167144A1 (en) * 2009-09-04 2013-06-27 Bernd Mathiske Virtual Machine Persisted Within Itself
US9195486B2 (en) 2010-07-30 2015-11-24 Apple Inc. Observation and analysis based code optimization
US9146759B2 (en) 2010-07-30 2015-09-29 Apple Inc. Assumption-based compilation
US8561045B2 (en) * 2010-07-30 2013-10-15 Apple Inc. Constructing runtime state for inlined code
JP5583514B2 (ja) * 2010-08-11 2014-09-03 インターナショナル・ビジネス・マシーンズ・コーポレーション バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
US10229031B2 (en) 2011-07-15 2019-03-12 Microsoft Technology Licensing, Llc. Debugging inline functions in optimized code

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5339419A (en) * 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
US5481708A (en) 1992-06-05 1996-01-02 Borland International, Inc. System and methods for optimizing object-oriented compilations
JP3178151B2 (ja) 1993-03-19 2001-06-18 富士ゼロックス株式会社 オブジェクト指向言語のメッセージコンパイル装置
US5845331A (en) 1994-09-28 1998-12-01 Massachusetts Institute Of Technology Memory system including guarded pointers
US5835771A (en) * 1995-06-07 1998-11-10 Rogue Wave Software, Inc. Method and apparatus for generating inline code using template metaprograms
US5815719A (en) 1996-05-07 1998-09-29 Sun Microsystems, Inc. Method and apparatus for easy insertion of assembler code for optimization
EP0950947B1 (en) * 1998-03-24 2003-09-10 Sun Microsystems, Inc. Static binding of dynamically dispatched calls in the presence of dynamic linking and loading
US6161217A (en) * 1998-09-14 2000-12-12 Sun Microsystems, Inc. Accurate method for inlining virtual calls

Also Published As

Publication number Publication date
ATE250239T1 (de) 2003-10-15
US6223340B1 (en) 2001-04-24
DE69911468T2 (de) 2004-06-24
WO2000022509A3 (en) 2000-07-13
WO2000022509A2 (en) 2000-04-20
EP1145111B1 (en) 2003-09-17
DE69911468D1 (de) 2003-10-23
EP1145111A2 (en) 2001-10-17

Similar Documents

Publication Publication Date Title
JP2002527811A (ja) オンスタックリプレースメントを伴うことなくバーチャルコールを直接にインライン化する方法
US7058929B2 (en) Direct invocation of methods using class loader
US7725883B1 (en) Program interpreter
US6463582B1 (en) Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
EP1114366B1 (en) Accurate method for inlining virtual calls
US5983021A (en) Dynamically switching statically bound function calls to dynamically bound function calls without recompilation
JP3354425B2 (ja) 実行可能ファイルの実行効率を改善するための方法及びシステム
US9417931B2 (en) Unified metadata for external components
US20020199179A1 (en) Method and apparatus for compiler-generated triggering of auxiliary codes
US20060200809A1 (en) Transforming code to expose glacial constants to a compiler
US7757224B2 (en) Software support for dynamically extensible processors
US7739674B2 (en) Method and apparatus for selectively optimizing interpreted language code
Krylov et al. Ahead-of-time compilation in OMR: overview and first steps
Padlewski et al. Modeling the Invariance of Virtual Pointers in LLVM
Fredriksson et al. Krivine Nets: A semantic foundation for distributed execution

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061010

A072 Dismissal of procedure [no reply to invitation to correct request for examination]

Free format text: JAPANESE INTERMEDIATE CODE: A073

Effective date: 20080226