JP2000003280A - オブジェクト指向システムにおけるレシーバタイプ用のインラインデータベース - Google Patents

オブジェクト指向システムにおけるレシーバタイプ用のインラインデータベース

Info

Publication number
JP2000003280A
JP2000003280A JP10319737A JP31973798A JP2000003280A JP 2000003280 A JP2000003280 A JP 2000003280A JP 10319737 A JP10319737 A JP 10319737A JP 31973798 A JP31973798 A JP 31973798A JP 2000003280 A JP2000003280 A JP 2000003280A
Authority
JP
Japan
Prior art keywords
receiver
receiver type
message
site
type information
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
JP10319737A
Other languages
English (en)
Inventor
Lars Bak
バク ラーズ
Urs Holzle
ホルツル ウールズ
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2000003280A publication Critical patent/JP2000003280A/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)
  • Stored Programmes (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

(57)【要約】 【課題】 オブジェクト指向プログラムのためのメッセ
ージディスパッチを具体化するシステムと方法が提供さ
れる。 【解決手段】 レシーバタイプ情報が、メッセージをレ
シーバオブジェクトにディスパッチするメソッドのサイ
トで収集される。レシーバタイプ情報が、プログラムの
その後の実行のためにセーブされる。レシーバタイプ情
報をセーブすることによって、レシーバタイプ情報を再
収集する必要がないので、プログラムが、より効率的に
なる。更に、インライニング情報をレシーバタイプ情報
と共にセーブできる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、オブジェクト指向
プログラムの実行スピードを増加させることに関する。
より詳細には、本発明は、オブジェクト指向プログラム
の実行中に収集した情報をその後の実行に利用すること
に関する。
【0002】
【従来の技術】オブジェクト指向言語の背後にある基本
的考え方は、データと、そのデータによって単一ユニッ
ト内で動作するオブジェクトと呼ばれるメソッド(また
は関数)の両者の組合せである。オブジェクトの関数は
通常、そのオブジェクトによってカプセル化されるデー
タにアクセスする唯一のメソッドを提供する。データ
は、メッセージを、そのメッセージで指定されたメソッ
ドを呼び出すようにオブジェクトに指示するオブジェク
トへ送信することによって、アクセスされる。
【0003】効率的なメッセージディスパッチは、オブ
ジェクト指向言語で最も重要である。その理由は、メッ
セージディスパッチがオブジェクト指向プログラムの非
常に頻繁なオペレーションであって、ランタイムで実行
されるからであり、従って、ディスパッチはできるだけ
迅速でなければならない。メッセージディスパッチは、
しかしながら、決して些細なオペレーションではない。
ランタイムの前に関数のアドレスを決定できる手続き的
プログラム言語(例えば、Cプログラム言語)と異な
り、オブジェクト指向言語は、実行時にレシーバオブジ
ェクトにディスパッチされたメッセージを扱うメソッド
を決定しなければならず、それは広範な探索を伴なうこ
とになろう。
【0004】メッセージディスパッチの複雑さをより良
く理解するために、図1は、各クラスのメソッドを含む
クラス階層構造を示す。クラス階層構造1はそのルート
のところに、2つの仮想関数foo()とbar()とを定
義する親クラスA3を含む。仮想関数は親クラスの中で
定義されて、子クラスの中で再定義されてもよい関数で
ある。クラスB5とクラスC7は親クラスAのデータと
メソッドを受け継ぐ。図示のように、クラスBは仮想関
数fooとbarのいずれか一方を再定義することはな
い。しかしながら、クラスCは仮想関数fooを再定義
する。メソッドfooを呼び出すためにクラスCのオブ
ジェクトがリクエストされると、呼び出されたメソッド
は、親クラスAではなくクラスCによって定義されたメ
ソッドになる。クラスD9とE11もメソッドfooを
再定義する。
【0005】オブジェクトのクラスを静的に決定するの
は一般に不可能なので、正しいメソッドの探索がメッセ
ージディスパッチの間、ランタイムで行なわれる。メソ
ッドディスパッチを具体化する(実行する)ための多数
の技法が知られている。例えば、図2はインラインキャ
ッシュを示す。メソッド51が最初、次の通りであった
と仮定する: main() { ... x.foo(); ・・・ } 従って、メソッドメインは、オブジェクトxのメソッド
fooを呼び出すためにステートメントx.foo()を
含む。
【0006】ランタイムの間、システムは、メソッドを
扱うメソッドが呼び出しできる前に、オブジェクトxが
どのクラスに属するかを決定しなければならないだろ
う。インラインキャッシュでは、最初、システムがオブ
ジェクトxの属するクラスを決定するとき、クラスのメ
ソッドへのダイレクトコールがコンピュータコードに書
き込まれる。
【0007】オブジェクトxがクラスAのメンバーであ
ると仮定すると、コールx.foo()はダイレクトコー
ルA::foo()に変更される。矢印はクラスA53用
のメソッドfooを特定する。オブジェクトxはいつも
クラスAとは限らないので、プロローグ55は、オブジ
ェクトxが正しいクラスである旨確認して、オブジェク
トxのクラスがクラスAに等しいか否かが決定されるこ
とを意味する式 x=A として表される。オブジェク
トのクラスは、そのオブジェクトに格納された値から決
定してもよい。オブジェクトが正しいクラスである場
合、メッセージを扱うメソッドコード57へのジャンプ
が行なわれる。
【0008】プロローグ55に戻って、オブジェクトが
クラスAでない場合、正しいメソッドを決定するために
メソッドルックアップルーチンが呼び出される。一旦、
正しいメソッドが発見されると、システムは、メッセー
ジディスパッチ(またはコール)サイトをそのメソッド
に対するダイレクトコールで更新する。更に、システム
はプロローグを更新して新しいクラスを指定する。例と
して、最初にシステムがx.foo()に遭遇したとき、
オブジェクトxがクラスAであり、データ構造が図2に
示すように修正されたと仮定する。
【0009】一旦、データ構造が図示のように修正され
ると、x.foo()へのその後のコールは、オブジェク
トxがクラスAの場合、実質的にもっと効率的になる。
しかしながら、オブジェクトxがその後にクラスBにな
る場合、プロローグ55は、メソッドを発見するために
メソッドルックアップルーチンをコールし、それが、オ
ブジェクトxは今やクラスBである旨決定すると仮定し
よう。再び図1を参照すると、クラスBのためのメソッ
ドfooは、クラスAで定義されたものと同一メソッド
fooであることが分かる(すなわち、クラスBは仮想
関数fooを再定義しなかった)。従って、メソッド5
1のメッセージディスパッチはB::foo()に変更さ
れ、プロローグ55の状態はx=Bに変更されるだろ
う。
【0010】コールサイトbarでのオブジェクトが同
一クラスのままの場合、インラインキャッシュはメッセ
ージディスパッチを具体化する効率的なメソッドである
可能性がある。しかしながら、オブジェクトが多重クラ
スの場合、システムは継続してメソッドルックアップル
ーチンをコールすると共に、コールサイトとプロローグ
とをパッチング(patching)する。かくして、システムの
効率は、実際には低下する可能性がある。
【0011】メッセージディスパッチを具体化するもう
一つの技法は、図3に示すような多形インラインキャッ
シュ(polymorphic inline cache)の使用である。先と同
様に、メソッド101は、最初はメソッドディスパッチ
x.foo()を含んでいた。多形インラインキャッシュ
では、異なるレシーバタイプに対するメッセージディス
パッチを実行できるスタブ103が生成される。原メッ
セージディスパッチは、多形インラインキャッシュスタ
ブ103へのコールで置き換えられる。新レシーバタイ
プに遭遇する度に、スタブにはステートメントが追加さ
れる。図示のように、これまで3つの異なるレシーバタ
イプに遭遇した。レシーバタイプに遭遇した場合、その
レシーバタイプ用のメッセージを扱うためのメソッドに
対するコールが行なわれる。遭遇しない場合は、メソッ
ドルックアップルーチンがコールされて、メッセージを
扱うための適切なメソッドが決定される。通常、それぞ
れの新レシーバタイプを扱うためにスタブ103には新
ステートメントが追加される。
【0012】多形インラインキャッシュは多重レシーバ
タイプを扱えるので、インラインキャッシュよりもフレ
キシブルである。しかしながら、多形インラインキャッ
シュの欠点は、より多くのレシーバタイプと遭遇するの
で、スタブが成長し続けてメッセージディスパッチの実
行効率が益々低下する点である。例えば、システムはメ
ッセージを扱う正しいメソッドを発見する前に、複数の
ifステートメントによる地馴らしの必要があるかもし
れない。
【0013】図4はハッシング(hashing) と呼ばれる別
のメッセージディスパッチ技法を示す。ハッシングで
は、メソッド151の原メッセージディスパッチx.f
oo()は、ハッシュ関数153へのコールで上書きされ
る。ハッシュ関数は、通常はハッシュテーブル155へ
のインデックスであるハッシュキーを形成するために、
レシーバタイプとメッセージとをハッシュする。ハッシ
ュテーブルは、インデックス157、レシーバタイプ1
59、メッセージ161、およびメソッド163を含
む。一旦、ハッシュ関数がキャッシュテーブル155の
行にハッシュすると、レシーバタイプとメッセージとが
ハッシュテーブルのカラム159と161から検索され
る。コールサイトのレシーバタイプとメッセージが、ハ
ッシュテーブルの行内のレシーバタイプとメッセージに
一致する場合、ハッシュテーブル155のカラム163
で指定されるメソッドが呼び出される。そうでない場
合、正しいメソッドを発見するためにメソッドルックア
ップルーチンがコールされる。次いで通常は新メソッド
がハッシュテーブルに追加される。
【0014】ハッシングは、我々がこれまで説明した最
もフレキシブルなメッセージディスパッチ技法である
が、他の技法よりも計算集中的で記憶集中的である。我
々が説明したメッセージディスパッチ技法のもうひとつ
の欠点は、いずれの技法もサイト専用(site specific)
ではないという点である。言い換えれば、いずれのメッ
セージディスパッチ技法も、異なるコールサイトデのメ
ッセージディスパッチを異なるメソッドで扱うフレキシ
ビリティを備えていない。
【0015】
【発明が解決しようとする課題】上述のいずれのメッセ
ージディスパッチ技法も、プログラムのその後の実行中
に利用するために収集されるレシーバタイプ情報を考慮
していない。更に、インライニング(inlining)情報がそ
の後のプログラム実行時に利用できれば望ましいだろ
う。従って、収集されたレシーバタイプおよび/または
インライニング情報の、プログラムのその後の実行時で
の利用を可能にする技法に対する要求がある。
【0016】
【課題を解決するための手段】本発明の実施形態は、収
集されたレシーバタイプおよび/またはその後のプログ
ラム実行中にインライニング情報を利用するための革新
的技法を提供する。プログラムに、先の実行からの情報
の利用を許すことによって、プログラムは、情報を再び
収集する必要もなく、素早く最適化された状態になれ
る。従って、オブジェクト指向プログラムは、それが安
定した最適化状態に達するまで、実行される度に益々効
率を向上できる。本発明の幾つかの実施形態を以下に説
明する。
【0017】一実施形態で、本発明は、オブジェクト指
向プログラム用のメッセージディスパッチを実行(具体
化)する方法を提供する。レシーバタイプ情報は、メッ
セージをレシーバオブジェクトにディスパッチするメソ
ッドのサイトで収集される。次いで、収集されたレシー
バタイプ情報は、プログラムのその後の実行のためにセ
ーブされる。好ましい実施形態では、レシーバタイプ情
報はメソッドの解釈とコンパイルの両実行中に収集され
る。
【0018】もうひとつの実施形態で、本発明は、オブ
ジェクト指向プログラム用のメッセージディスパッチを
実行するメソッドを提供する。解釈の間、レシーバタイ
プ情報は、メッセージをレシーバオブジェクトにディス
パッチするメソッドのサイトで収集される。レシーバタ
イプ情報は異なる各レシーバタイプと、メッセージがサ
イトからディスパッチされる異なる各レシーバタイプに
対するサイトへのレファレンスとを含む。次に、メッセ
ージをレシーバオブジェクトにディスパッチするサイト
を含むメソッドをコンパイルするのが望ましい旨決定さ
れる。メソッドがコンパイルされると、レシーバタイプ
情報は、そのコンパイルされたメソッドのサイトに含ま
れる。また、レシーバタイプ情報がプログラムのその後
の実行のためにセーブされる。一部の実施形態におい
て、レシーバタイプ情報は多形インラインキャッシュに
収集される。
【0019】もうひとつの実施形態で、本発明は、コン
ピュータ読取り可能媒体によって記憶されたデータ構造
を提供する。少なくとも一つのレシーバタイプが入れ子
式レシーバタイプを持つコンピュータ読取り可能媒体に
よって記憶される。入れ子式レシーバタイプは、メソッ
ドのメッセージディスパッチサイトでのディスパッチさ
れたメッセージであったレシーバタイプである。好まし
い実施形態では、データ構造はJavaクラスファイル
の属性セクションにセーブされる。
【0020】本発明の他の特徴と利点は、添付の図面に
関して下記の詳細説明を検討することによって直ちに明
らかになるであろう。
【0021】
【発明の実施の形態】定義 関数−−ソフトウェアルーチン(サブルーチン、手順、
メンバー関数、およびメソッドとも呼ばれる)。
【0022】メッセージディスパッチ−−オブジェクト
指向環境内のオブジェクトに送られたメッセージを扱う
ためのメソッドを決定するプロセス。
【0023】レシーバオブジェクト(またはレシーバ)
−−オブジェクト指向環境内でメッセージを送信された
オブジェクト。
【0024】レシーバタイプ−−レシーバオブジェクト
が属するクラス。
【0025】コールサイト(またはサイト)−−メッセ
ージがオブジェクトにディスパッチされる、プログラム
内のロケーションまたはエリア。 概要 以下の説明では、本発明を、Java(登録商標)仮想
マシン用に設計された好ましい実施形態に関して説明す
る。特に、IBMパーソナルコンピュータ向けの実例に
ついていくつか説明する。しかしながら、本発明はどの
ような特定の言語、コンピュータアーキテクチャ、また
は特定のインプリメンテーションにも限定されない。従
って、以下の実施形態の記述は説明のためであって、限
定のためではない。
【0026】図5は、本発明の実施形態におけるソフト
ウェアを実行するのに使用できるコンピュータシステム
の例を示す。図5は、ディスプレイ303、スクリーン
305、キャビネット307、キーボード309、およ
びマウス311を含むコンピュータシステム301を示
す。マウス311はグラフィカルユーザーインタフェー
スと会話するための一つ以上のボタンを持つことができ
る。キャビネット307は、本発明を具体化するコンピ
ュータコードを内蔵するソフトフェアプログラム、本発
明に関して使用するデータ等、を格納、検索するために
利用される、CD−ROMドライブ313、システムメ
モリ、およびハードドライブ(図6参照)を収容する。
CD−ROM315は典型的なコンピュータ読取り可能
記憶媒体として示されているが、フロッピーディスク、
テープ、フラッシュメモリ、システムメモリ、およびハ
ードドライブを含め他のコンピュータ読取り可能記憶媒
体を利用してもよい。更に、搬送波(例えば、インター
ネットを含むネットワーク)中に組み込んだデータ信号
が、コンピュータ読取り可能記憶媒体であってもよい。
【0027】図6は、本発明の実施形態のソフトウェア
を実行するために使用されるコンピュータシステム30
1のシステムブロック図を示す。図5と同様、コンピュ
ータシステム301は、モニタ303とキーボード30
9、およびマウス311を含む。コンピュータシステム
301は更に、中央処理装置351、システムメモリ3
53、固定記憶装置355(例えば、ハードドライ
ブ)、交換可能記憶装置357(例えば、CD−ROM
ドライブ)、ディスプレイアダプタ359、サウンドカ
ード361、スピーカ363、およびネットワークイン
タフェース365等のサブシステムを含む。本発明に関
する使用に適した他のコンピュータシステムは、追加ま
たはより少数のサブシステムを含んでもよい。例えば、
別のコンピュータシステムは2台以上のプロセッサ35
1(すなわち、マルチプロセッサシステム)やキャッシ
ュメモリを含むことができる。
【0028】コンピュータシステム301のシステムバ
スアーキテクチャは、矢印367で表示される。しかし
ながら、これらの矢印はサブシステムをリンクする働き
をするどのような相互接続のスキームも示すこととす
る。例えば、ローカルバスを利用して中央処理装置をシ
ステムメモリとディスプレイアダプタに接続することが
できよう。図6に示すコンピュータシステム301は、
本発明を伴なう使用に適したコンピュータシステムの一
例に過ぎない。異なる構成のサブシステムを持つ他のコ
ンピュータアーキテクチャを利用してもよい。
【0029】Java(登録商標)プログラミング言語
は、Sun Microsystemsによって開発された。通常、Ja
vaプログラミング言語で書かれたコンピュータプログ
ラムは、バイトコード、すなわちその後にJava仮想
マシンによって実行されるJava仮想マシン命令、に
コンパイルされる。バイトコードは、解釈用のJava
仮想マシンへ入力されるクラスファイルに格納される。
図7は、インタープリタ、つまりJava仮想マシンに
よる実行を通したJavaソースコードの単一ピースの
進行を示す。
【0030】Javaソースコード401は、Java
で書かれた古典的なHello World プログラムを含む。次
に、ソースコードはソースコードをバイトコードにコン
パイルするバイトコードコンパイラ403に入力され
る。バイトコードは、ソフトウェアでエミュレートされ
たコンピュータによって実行されるので、仮想マシン命
令である。通常、仮想マシン命令は一般的(すなわち、
特定のマイクロプロセッサやコンピュータアーキテクチ
ャ用に設計されていない)だが、そうである必要はな
い。バイトコードコンパイラは、Javaプログラム用
のバイトコードを含むJavaクラスファイル405を
出力する。
【0031】Javaクラスファイルは、Java仮想
マシン407に入力される。Java仮想マシンは、J
avaクラスファイルのバイトコードを解読、実行する
インタープリタである。Java仮想マシンはインター
プリタだが、ソフトウェアのマイクロプロセッサやコン
ピュータアーキテクチャをエミュレートするので(例え
ば、マイクロプロセッサやコンピュータアークテクチャ
がハードウェアには存在しないかもしれない)、一般に
仮想マシンと称される。Java仮想マシンの実行速度
を増すために、より早い実行のためのネイティブマシン
命令にメソッドをコンパイルしてもよい。以下の好まし
い実施形態の説明では、コンパイル(compilation) を使
用して、Java仮想マシン命令の、ネイティブマシン
命令への翻訳に言及する。サイト固有インラインキャッ
シュ本発明は、オブジェクト指向環境におけるメッセー
ジディスパッチを具体化するためのサイト固有インライ
ンキャッシュを提供する。レシーバタイプ情報はコール
サイトで格納されるので、各コールサイトはそのコール
サイトのランタイム特性に従って変更可能となる。これ
によって、メッセージディスパッチをより効率的にする
ばかりでなく、よりフレキシブルにする。
【0032】図8は、本発明の一実施形態によるサイト
固有のインラインキャッシュ技法を示す。先に「従来の
技術」で述べたように、メソッド451は最初は、ディ
スパッチ用のメッセージx.foo()を含んでいた。最
初、このメッセージがディスパッチされるときは、シス
テムがメソッドバックアップルーチンをコールして、メ
ッセージを扱うための適切なメソッドを決定できる。別
法として、システムはランタイムに先立って静的分析を
行なって、何が正しいメソッドになりそうかを決定でき
る。
【0033】サイト固有のインラインキャッシュでは、
一旦、メッセージを扱うべきオブジェクトのクラスが決
定されると、レシーバタイプまたはクラスをセーブする
ための命令がコールサイトで生成される。メッセージデ
ィスパッチは次に、メッセージを扱うべき特定メソッド
へのコールで上書きされる。かくして、メッセージディ
スパッチは、2つの命令、つまりレシーバタイプをセー
ブする命令と、適切なメソッドへのコールになる。
【0034】図示するように、メソッド451はクラス
A用のIDを特殊レジスタに格納する移動命令を含む。
このレジスタは単なる識別のための特殊レジスタと呼ば
れる。重要なことは、レジスタを利用する場合、このコ
ールサイトではそのレジスタを別途不使用にしなければ
ならないことである。レジスタの利用は最も効率的な実
行速度を提供するかもしれないが、他の記憶メカニズム
を利用してもよい。例えば、レシーバタイプをシステム
メモリに格納してもよいし、パラメータとしてメッセー
ジハンドリングメソッドに送ってもよい。
【0035】一旦、レシーバタイプがセーブされると、
A::foo()として示されたメッセージを扱うメソッ
ド453へのコールが行なわれる。プロローグ455
は、特殊レジスタから検索されるオブジェクトxが、セ
ーブされたレシーバタイプか否かをチェックする。図示
の例では、クラスAは格納されたレシーバタイプであ
る。かくして、オブジェクトxがクラスAの場合、
A::foo()のメソッドコード457へのジャンプが
行なわれる。そうでない場合、メソッドルックアップル
ーチンがコールされて、メッセージを扱うべき適切なメ
ソッドを位置付けする。次に、コールサイトが更新され
て、オブジェクトxのレシーバタイプと、メソッドルッ
クアップルーチンによって発見されたメソッドへのコー
ルをセーブできる。
【0036】従って、コールサイトで格納されたレシー
バタイプは予測されたレシーバタイプである。つまり、
システムが予測するレシーバタイプは、メッセージを受
けるための次のオブジェクトのレシーバタイプになる。
予測されたレシーバタイプがオブジェクトのレシーバタ
イプと一致する場合、メッセージディスパッチは、より
効率的になる。更に、各メッセージディスパッチサイト
は、そのコールサイトに特有の格納されたレシーバタイ
プ情報を持つことができるが、別のサイトは、格納され
たレシーバタイプ情報を上書きしない。
【0037】図9は、メッセージディスパッチ用のサイ
ト固有インラインキャッシュ技法の実施形態のフローチ
ャートを示す。ステップ501で、予測されたレシーバ
タイプは、メッセージがレシーバオブジェクトへディス
パッチされるサイトでセーブされる。好ましい実施形態
では、レシーバタイプは、そのレシーバタイプをレジス
タに置くための移動命令を利用することによってセーブ
される。しかしながら、システムメモリやパラメータパ
ッシング(passing) の使用を含めて、当該技術に精通す
る者には周知の、レシーバタイプをセーブする他の方法
を利用してもよい。
【0038】ステップ503では、メッセージはレシー
バオブジェクトに送られる。このメッセージは、メソッ
ドルックアップルーチンを利用する代わりに、メッセー
ジを扱うメソッドへのダイレクトコール(またはメソッ
ドの呼出し)によって送られる。
【0039】一旦、レシーバオブジェクトがメッセージ
を受けると、レシーバオブジェクトはステップ505で
のセーブされた予測(predicted) レシーバタイプである
旨確認される。好ましい実施形態では、この確認はメソ
ッドのプロローグで実行される(図8参照)。レシーバ
オブジェクトがステップ507でのセーブされた予測レ
シーバタイプと同一タイプの場合、メッセージを扱うメ
ソッドがステップ509で実行される。ステップ509
は、メッセージを扱うメソッドコードのスタートへジャ
ンプすることを含む。
【0040】レシーバオブジェクトが、セーブされた予
測レシーバタイプと同一タイプでない場合、コールサイ
トでの予測レシーバタイプは、ステップ511でレシー
バオブジェクトのレシーバタイプに変更される。メソッ
ドルックアップルーチンがコールされて、ステップ51
3で新メソッドが獲得される。利用されるメソッドルッ
クアップルーチンは、ディスパッチテーブルサーチと仮
想関数テーブルを含めて、当該技術に精通する者には周
知の何れでもよい。メソッドルックアップルーチンは、
メッセージを扱うための適切なメソッドを提供する。コ
ールサイトでのメッセージディスパッチは次に、ステッ
プ515でメソッドルックアップルーチンによって戻さ
れたメソッドに変更される。
【0041】例として、図8で、オブジェクトxがクラ
スAなので、メソッド451のコールサイトに格納され
る予測レシーバタイプはクラスAであると仮定しよう。
しかしながら、オブジェクトxがその後にクラスBにな
る場合、プロローグ455は移動命令を修正して、クラ
スBを予測レシーバタイプとして特殊レジスタに格納で
きる。更に、メッセージディスパッチが修正されて、メ
ソッドルックアップルーチンによって戻されたメソッド
を呼び出すだろう。その場合、クラスBのレシーバオブ
ジェクトに向けられたこのコールサイトのその後のメッ
セージディスパッチは、より効率的にディスパッチされ
るだろう。
【0042】図9では、メソッドが、サイトでメソッド
を変更するステップ515の後で実行されるものとして
示されている。メソッドを実行するステップは、実際に
は、ステップ513内で起ることもあるし、他のロケー
ションで起ることもある。従って、図示のフローチャー
トでは、ステップは、本発明の精神から逸脱することな
く、特定のインプリメンテーションによって再整理、追
加、および削除できる。
【0043】上述のように、コールサイトで予測レシー
バタイプをセーブするサイト固有インラインキャッシュ
技法が提供される。コールサイトで予測レシーバタイプ
を格納することによって、メッセージディスパッチを、
より効率的でフレキシブルにできる。例えば、各コール
サイトにおけるオペレーションは互いに隔離できるの
で、ひとつのコールサイトがもうひとつのコールサイト
用の設定を変更することがない。 サイト固有メッセージディスパッチ 本発明は、異なるメッセージディスパッチ技法を各サイ
トで利用可能にする点でフレキシブルなサイト固有メッ
セージディスパッチ技法を提供する。更に、コールサイ
トで利用されるメッセージディスパッチ技法はランタイ
ムの間、時間の経過と共に変更できる。一旦、新しいま
たは異なるメッセージディスパッチ技法が特定サイトで
望ましい旨決定されると、新メッセージディスパッチ技
法がその特定コールサイトでの使用のために設定され
る。かくして、メッセージディスパッチはコールサイト
に関するばかりか、プログラム実行時の異なる時期のコ
ールで利用されるメッセージディスパッチ技法に関して
も、よりフレキシブルになる。
【0044】図10は、サイト固有メッセージディスパ
ッチの実施形態の高レベルフローチャートを示す。ステ
ップ511では、第1メッセージディスパッチ技法が特
定メッセージディスパッチサイトで実行される。第1メ
ッセージディスパッチ技法は、当該技術分野で周知の任
意の数のメッセージディスパッチ技法でよい。第1メッ
セージディスパッチ技法は、本発明による技法であるこ
とが望ましい。例えば、第1メッセージ技法は、上記サ
イト固有インラインキャッシュの実施形態でもよい。第
1メッセージディスパッチ技法を、ランタイム前に静的
に決定してもよいし、ランタイム中に動的に決定しても
よい。
【0045】ステップ553で、システムは、第2メッ
セージディスパッチ技法が特定サイトで望ましいか否か
をランタイム中に動的に決定する。任意数の方式を利用
して、第2メッセージディスパッチ技法が望ましい旨決
定してよい。例えば、このコールサイトで遭遇する異な
るレシーバタイプの数がしきい値を超えるときは、異な
るメッセージディスパッチ技法に切り換えることが望ま
しいだろう。更に、メソッドルックアップルーチンがコ
ールされる頻度によって計算が行なわれるので、頻度が
高すぎる場合は、新メッセージディスパッチが正当化さ
れるだろう。
【0046】いずれにしても、一旦、第2メッセージデ
ィスパッチ技法が望ましいと決定されたときは、その第
2メッセージディスパッチ技法がステップ555の特定
サイトで実行される。新メッセージディスパッチ技法へ
の切り換えのためのメカニズムは通常、その新技法自身
に左右される。これまで高レベルフローを説明してきた
ので、第2メッセージディスパッチ技法が望ましいか否
かを動的に決定するステップの実施形態をより詳しく検
討することが有益であろう。
【0047】図11は、第2メッセージディスパッチ技
法が望ましいか否かを動的に決定する実施形態を示す。
第1と第2メッセージディスパッチ技法のラベルは、一
つのメッセージディスパッチ技法を特定コールサイトで
別の技法に切り換えできるという包括表示として示され
る。しかしながら、本発明は2つの技法のみに限定され
ることなく、3つ以上の技法にも有利に適用できる。従
って、第1と第2のラベルは、本発明が2つのメッセー
ジディスパッチ技法だけに限定されるとの表示ではな
い。
【0048】図11に示す実施形態は、メッセージディ
スパッチを何時変更すべきかの指標を、特定コールサイ
トで遭遇する異なるレシーバタイプの数に依存してい
る。例として、サイト固有インラインキャッシュ技法
は、このコールサイトで5つの異なるレシーバタイプに
遭遇するまで利用できる。この状況で、異なるレシーバ
タイプが利用されるときは、予測レシーバタイプが実際
のレシーバタイプと異なるような5つの例が存在してい
ることを意味する。これは、ほぼ5回、メソッドルック
アップルーチンがコールされると共に、コールサイトで
格納された予測レシーバタイプが変化したことを意味す
るだろう。例として、クラスAとBのレシーバオブジェ
クト間で5回交替するコールサイトは、5つの異なるレ
シーバタイプとしてカウントされるかもしれない。
【0049】特定レシーバタイプのカウンタを各コール
サイトで利用できるが、これには、カウンタを維持する
ためのメモリとコンピュータコードの使用を伴う。好ま
しい実施形態において、カウンタはメッセージを扱うメ
ソッドに先行する多重非オペレーション(NOP)命令
として具体化される。図12に関して更に詳細に説明す
るように、メソッドの前に具体化されたNOP命令の数
は、遭遇した異なるレシーバタイプの数を示す。
【0050】図11によれば、フローチャートは、メソ
ッドルックアップルーチンがコールされたか、さもなけ
れば、恐らく現行メッセージディスパッチ技法が効率的
に実行されているものと仮定している。ステップ601
で、システムは、メッセージを扱うメソッドに先立つN
OP命令へメッセージをディスパッチする。システム
は、メソッドの前にNOP命令をいくつ実行するかを決
定することによって、異なるレシーバタイプの数をカウ
ントする。通常、このカウント数は、このサイトのため
にメッセージがディスパッチされたアドレスを、何れの
プロローグも含め、実際のメソッドのアドレスから差し
引くことによって決定される。
【0051】ステップ605では、カウント数が所定の
数と比較される。所定の数は、異なるメッセージディス
パッチ技法への切換えが望まれる前にコールサイトで遭
遇する異なるレシーバタイプの数である。所定数は静的
に定義してもよいし、ランタイム中に動的に算出しても
よい。
【0052】カウント数がステップ607で所定数より
も大きい場合、ステップ609で第2メッセージディス
パッチ技法への切換えが行なわれる。カウント数が所定
数より小さいか等しい場合、これは、現状では第2メッ
セージディスパッチ技法への切換えが望ましくないこと
を示す。実例は、NOP命令がどのようにカウンタとし
て利用され得るかを説明する助けとなるだろう。
【0053】図12は、特定コールサイトで遭遇した異
なるレシーバタイプの数のカウンタとしてNOP命令が
どのように利用されるかを説明する。メソッド651
は、先に記載のサイト固有インラインキャッシュによっ
て示される。メソッド653はメッセージを扱うが、そ
のメソッドの前に、多重NOP命令を持つNOPセクシ
ョン655が先行する。NOP命令は、それらが何もせ
ず、かつメソッドのオペレーティング速度に不当に影響
しないように選択できる。他の実施形態では、NOP命
令の代わりに他の命令を利用してもよい。
【0054】NOPセクション655は、プロローグ6
57と、メソッド653のメソッドコード659とに先
行する。NOPセクションは、通常、異なるメッセージ
ディスパッチ技法への切換えが始まる前に、コールサイ
トで遭遇する異なるレシーバタイプの数と同数の、所定
数のNOP命令から構成される。メソッドルックアップ
ルーチンがプロローグ657でコールされる度に、移動
命令はオブジェクトxのレシーバタイプでパッチされ
る。更に、その後のメッセージディスパッチ(例えば、
A::foo())は、メソッドルックアップルーチンに
よって発見された新メソッドのNOPセクション655
のNOP命令の一つに変更される。
【0055】図示のように、メッセージディスパッチ
は、メソッド653の前に第3NOP命令を指し示す。
プロローグ657が、オブジェクトxはクラスAでない
と決定すると、プロローグは、いくつかの既知のメソッ
ドによってランタイム中に獲得可能な、コールサイトの
固有のアドレスとメソッド653の開始との間の差を算
出する。差またはカウント数は、この特定コールサイト
で遭遇した異なるレシーバタイプの数を示す。カウント
数が所定数よりも大きい場合、プロローグ657は、こ
のコールサイトで利用されるメッセージディスパッチ技
法を切り換えることができる。
【0056】メソッドの前にNOP命令を利用すること
は具体化が容易で、早く、またカウンタを維持するため
の過大な量のコンピュータコードを必要としない。更
に、NOPセクション655のNOP命令は、相互に影
響を及ぼすことなく、多重の異なるコールサイトによっ
て参照できる。
【0057】第1メッセージディスパッチ技法は、サイ
ト固有インラインキャッシュであるとして示された。第
2メッセージディスパッチ技法は、いずれも多重レシー
バタイプを扱うために設計されているので、多形インラ
インキャッシュ技法でも、ハッシング技法でもよい。も
ちろん、本発明に関して利用されるメッセージディスパ
ッチ技法に対する制限はない。読者の理解を助けるため
に、特定メッセージディスパッチ技法についてここに説
明した。
【0058】上述のように、望ましいと見做されるとき
に特定コールサイトにおける新メッセージディスパッチ
技法の利用を可能にするサイト固有メッセージディスパ
ッチ技法が提供される。望ましくなったときに各コール
サイトにメッセージディスパッチ技法の切換えを許すこ
とによって、メッセージディスパッチを、より効率的で
フレキシブルにできる。更に、各コールサイトでのオペ
レーションは互に隔離できるので、ひとつのコールサイ
トが別のコールサイトに対するセッティングを変更する
ことがない。 インラインデータベース 本発明は、プログラムのその後の実行のためにレシーバ
タイプおよび/またはインライニング情報をセーブする
技法を提供する。レシーバタイプとインライニング情報
がプログラムのランタイム中に収集できるので、プログ
ラムのその後の実行が情報の再収集を必要とすることな
く、その収集情報の利益を実現できるように、収集され
たランタイム情報を格納することができる。これによっ
て、プログラムはランタイム中に最適化状態を獲得する
と共に、プログラムのその後の実行でその最適化状態に
素早く戻ることができる。
【0059】図13は、レシーバタイプ情報を収集し
て、それをプログラムのその後の実行のために格納する
本発明の実施形態の高レベルフローチャートを示す。ス
テップ701で、システムはプログラムのメソッドのメ
ッセージディスパッチサイトでレシーバタイプ情報を収
集する。レシーバタイプ情報は、ここに記載されるか別
途に当該技術分野で周知の任意のメッセージディスパッ
チ技法によって収集できる。レシーバタイプ情報は、そ
れらが多重のコールサイトのために収集されるように、
コールサイトに固有であることが望ましい。
【0060】一旦、特定コールサイトのためのレシーバ
タイプ情報が収集されると、それは、ステップ703で
プログラムのその後の実行のためにセーブされる。レシ
ーバタイプ情報は、ユーザーの入力の有無にかかわら
ず、プログラムの正規の終了時にセーブしてもよいし、
ランタイム中のある時点でセーブしてもよい。レシーバ
タイプ情報を収集する実施形態をより詳しく説明するこ
とは有益だろう。
【0061】図14は、レシーバタイプ情報を収集する
実施形態のフローチャートを示す。ステップ751で、
レシーバタイプ情報が、メソッドの解釈の間に収集され
る。通常、メソッドは、そのメソッドをコンパイルすれ
ば有益であると決定されるまで、Java仮想マシンで
解釈される。メソッドが直ちにコンパイルされるシステ
ムでは、フローはその後のステップで開始できる。
【0062】特定コールサイトで遭遇した異なるレシー
バタイプのようなレシーバタイプ情報は解釈時に収集さ
れるので、一つ以上のメッセージディスパッチ技法を利
用できる。ある時点で、このメソッドをステップ753
でコンパイルすべきか否かの疑問があるかもしれない。
例えば、メソッドが所定回数よりも多く解釈された場
合、そのメソッドはコンパイルすべきである旨決定され
るだろう。そうでない場合は、レシーバタイプ情報は、
メソッドの解釈の間に連続して収集されるだろう。
【0063】ステップ755では、メソッドがコンパイ
ルされて、収集されたレシーバタイプ情報がそのメソッ
ドにコンパイルされる。こうして、コンパイルされたメ
ソッドは、収集されたタイプ情報の利益を実現するだろ
う。更に、好ましい実施形態では、コンピュータコード
がコンパイルされたメソッドの中で生成され、ステップ
757でタイプ情報の収集が継続される。
【0064】好ましい実施形態において、システムはコ
ンパイルされたメソッドのワーキングセットも維持す
る。このワーキングセットも収集されたタイプ情報と共
にセーブできるので、プログラムのその後の実行でシス
テムが利用可能な処理能力を持ったときに(例えば、シ
ステムがユーザー入力に伴なう待機中であるとき)、シ
ステムはそのワーキングセットからメソッドをコンパイ
ルできる。
【0065】一旦、メソッドがコンパイルされると、メ
ソッドを或る時点で再コンパイルすることが有益になる
かもしれない。ステップ759では、メソッドを再コン
パイルすべきか否かが決定される。例として、大量の新
レシーバタイプ情報が収集された場合、メソッドの再コ
ンパイルが有益になるだろう。好ましい実施形態で、メ
ソッドは、それをこのメソッドにインライン(inlined)
すべきと決定された場合に(例えば、ヒューリスティッ
ク)再コンパイルされるだろう。インライニングとは、
メソッドをコールする代わりに、メソッドがその呼出し
(calling) メソッドにコンパイルされることを意味す
る。例えば、メソッドをインラインするのが有益である
と決定された場合、そのメソッドは呼出しメソッドにコ
ンパイルされるので、その呼出しメソッドが今度は、イ
ンラインされたメソッドのコールサイトを含む。
【0066】レシーバオブジェクトはランタイムまでは
決定されないので、従来のオブジェクト指向システムが
メソッドをインラインすることは、不可能でないとして
も、困難である。しかしながら、レシーバタイプ情報を
収集する本発明では、メソッドのインライニングを有利
に実行できる。更に、インラインされるメソッドは、レ
シーバタイプ情報と共にセーブされるので、プログラム
のその後の実行はそのインライニング情報を利用できる
し、必要なら同メソッドをインラインすることもでき
る。メソッドをコンパイルすべきであると決定された場
合、それはステップ755で再コンパイルされる。
【0067】ステップ761で示すように、ある時点で
レシーバタイプ情報の収集が停止されて、セーブされ
る。ステップ761をフローチャートの末尾に示すが、
図14のフローチャートでは任意の時点で発生できる。
例えば、実行の間、収集されたレシーバタイプ情報は、
自動的またはユーザー入力の直接の結果の何れかで、セ
ーブできる。それにもかかわらず、通常、レシーバタイ
プ情報の収集は、プログラムの正規の終了時に停止す
る。
【0068】ステップ755では、収集されたレシーバ
タイプ情報がメソッドにコンパイルされた。図15は、
メソッドにコンパイルされたレシーバタイプ情報の実施
形態を示す。メソッド801は、コンピュータコードに
コンパイルされた多形インラインキャッシュによって示
される。コンパイルされたコードは通常、ネイティブマ
シン命令であると考えられるが、多形インラインキャッ
シュの一般的な流れは図示のようになるだろう。オブジ
ェクトxがクラスAである場合、メッセージを扱うため
のメソッドにダイレクトコールが行なわれる。同様に、
クラスBとCに対する表示も存在する。オブジェクトx
が、先に見られなかったクラスの場合、メソッドルック
アップルーチンへのコールによってルックアップされる
だろう。この新レシーバタイプ情報は、コンパイルされ
たメソッドによって蓄積されるので、後からの再コンパ
イルは、新レシーバ情報を利用することができる(ステ
ップ759参照)。
【0069】収集されたレシーバタイプ情報をセーブす
ることは、プログラムのその後の実行に対して、先に収
集されたレシーバタイプ情報の利用を可能にする。かく
して、メソッドが最適化されると、そのメソッドは、プ
ログラムのその後の実行で素早く最適化状態に戻ること
ができる。図16は、収集されたレシーバタイプ情報が
どのようにJavaクラスファイルに格納されるかを示
す。
【0070】Javaクラスファイル851は多重セク
ションを含む。ヘッダーセクション853はマジック数
(0xCAFEBABE)、マイナーバージョン数、お
よびメジャーバージョン数を含む。定数プール855は
定数を含む。アクセス情報セクション857は、このク
ラスへの、そして定数プール内のスーパークラスへのア
クセスフラグとポインタとを含む。更に、インタフェー
スセクション859、フィールドセクション861、お
よびメソッドセクション863が存在する。
【0071】クラスファイル851の末尾は属性セクシ
ョン865である。入れ子式レシーバタイプは図示の属
性セクションに格納できる。図示のように、レシーバタ
イプに遭遇したコールサイトへのリファレンスが存在す
るかもしれない。リファレンスはメソッド内のオフセッ
トかもしれない。レシーバタイプは、コールサイトがメ
ソッド内で如何に深く位置付けられるかに関して入れ子
状をなす。従って、コールサイトがインラインメソッド
からの場合、これらのコールサイトの入れ子は、より深
くなる。好ましい実施形態では、入れ子式レシーバタイ
プは、レシーバタイプ情報の収集のために利用される多
形インラインキャッシュに似たテキストである。それが
認識しない属性セクション865の一部または全部の属
性を黙って無視するためには、Java仮想マシンイン
プリメンテーションが必要である。従って、収集された
レシーバタイプ情報をこのロケーションに置くことは、
他の仮想マシンインプリメンテーションに悪影響を与え
ない。
【0072】属性セクション865は、インライニング
情報を含む入れ子式レシーバタイプ情報を示す。数字1
5は、15によって引照されたコールサイト(例えば、
オフセット)でありクラスA、B、Cに遭遇したことを
示す。クラスAについては、このコールサイトで呼び出
されたメソッドがインラインされて、入れ子式エントリ
によって表示される。4は、インラインメソッド内の4
で引照されたコールサイトでありクラスRに遭遇したこ
とを表す。同様に、クラスCについては、インラインメ
ソッド内の4で引照されたコールサイトでありクラスR
とTに遭遇した。従って、レシーバタイプ情報は、先の
プログラムの実行からのインライニング情報を提供する
ことができる。
【0073】上述のように、プログラムのその後の実行
のためにコールサイトでレシーバタイプ情報を格納する
インラインデータベースが提供される。次回にプログラ
ムが実行されるときは、Java仮想マシンが、先に収
集されたレシーバタイプ情報を利用して、この情報の再
収集に時間をかけることなくプログラムを最適化でき
る。従って、Javaプログラムが最適化状態に達し
て、収集されたレシーバタイプ情報がクラスファイルに
格納されると、プログラムはその後の実行で、より効率
的に動作できる。更に、クラスファイルはマシンから独
立しているので、効率は、いずれのコンピュータシステ
ムやアーキテクチャへも限定されることはない。 結論 上記は本発明の好ましい実施形態の完全な説明だが、使
用可能な代替や変更や同等仕様が存在する。上記の実施
形態に適切な変更を加えることによって、本発明を等し
く適用できることは言うまでもない。例えば、インライ
ンデータベース技法を、多形インラインキャッシュを利
用してレシーバタイプ情報を収集するものとして説明し
た。しかしながら、本発明はいずれのメッセージディス
パッチ技法にも限定されず、本明細書に記載の技法を含
む他のメッセージディスパッチ技法に有利に適用でき
る。従って、上記の説明は、添付の特許請求項の共通点
と限界、ならびに同等仕様の全範囲によって定義される
本発明の範囲を制限するものと見做してはならない。
【図面の簡単な説明】
【図1】オブジェクト指向環境における仮想関数を含む
クラスのクラス階層構造を説明する。
【図2】オブジェクト指向メッセージディスパッチのた
めのインラインキャッシュ技法を説明する。
【図3】オブジェクト指向メッセージディスパッチのた
めの多形インラインキャッシュ技法を説明する。
【図4】オブジェクト指向メッセージディスパッチのた
めのハッシング技法を説明する。
【図5】本発明の実施形態のソフトウェアの実行に利用
されるコンピュータシステムの例を説明する。
【図6】図5のコンピュータシステムのシステムブロッ
ク図を説明する。
【図7】Javaソースコードプログラムがどのように
実行されるかを説明する。
【図8】オブジェクト指向メッセージディスパッチのた
めのサイト固有インラインキャッシュ技法の実施形態を
説明する。
【図9】オブジェクト指向メッセージディスパッチのた
めのサイト固有インラインキャッシュ技法の高レベルフ
ローチャートを示す。
【図10】サイト固有メッセージディスパッチ技法の実
施形態の高レベルフローチャートを示す。
【図11】別のメッセージディスパッチ技法が特定サイ
トで望ましいか否かを動的に決定するフローチャートを
示す。
【図12】NOP命令を利用して、遭遇した異なるレシ
ーバタイプの数をカウントする、サイト固有メッセージ
ディスパッチ技法の実施形態を説明する。
【図13】プログラムのその後の実行のためにレシーバ
タイプ情報をセーブするように利用されるインラインデ
ータベースの高レベルフローチャートを示す。
【図14】インラインデータベース用のプログラムの解
釈およびコンパイルされた実行中にレシーバタイプ情報
を収集するフローチャートを示す。
【図15】オブジェクト指向メッセージディスパッチの
ための多形インラインキャッシュ技法を含むようにコン
パイルされた方法を説明する。
【図16】レシーバタイプ情報がクラスファイルの属性
セクションに格納されたJavaクラスファイルを説明
する。
【符号の説明】
301…コンピュータシステム、303…ディスプレ
イ、305…スクリーン、307…キャビネット、30
9…キーボード、311…マウス、313…CD−RO
Mドライブ、315…CD−ROM、351…中央処理
装置、353…システムメモリ、355…固定記憶装
置、357…交換可能記憶装置、359…ディスプレイ
アダプタ、361…サウンドカード、367…矢印、4
01…Javaソースコード、403…バイトコードコ
ンパイラ、405…Javaクラスファイル、407…
Java仮想マシン、451,343,651,65
3,801…メソッド、455,657…プロローグ、
457…メソッドコード、501,503,505,5
07,509,511,513,515,553,55
5,601,605,607,609,753,75
5,757,759,761…ステップ、655…NO
Pセクション、851…Javaクラスファイル、85
3…ヘッダーセクション、855…定数プール、857
…アクセス情報セクション、859…インタフェースセ
クション、861…フィールドセクション、863…メ
ソッドセクション、865…属性セクション。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ウールズ ホルツル アメリカ合衆国, カリフォルニア州, ゴリータ, ダヴェンポート ロード 7220, ナンバー105

Claims (28)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータシステムにおいて、オブジ
    ェクト指向プログラムのためのメッセージディスパッチ
    を実行する方法であって、 メッセージをレシーバオブジェクトへディスパッチする
    第1メソッドのサイトでレシーバタイプ情報を収集する
    工程と、および前記プログラムのその後の実行のために
    前記レシーバタイプ情報をセーブする工程とを含む方
    法。
  2. 【請求項2】 前記レシーバタイプ情報は、メッセージ
    が前記サイトからディスパッチされた異なる各レシーバ
    タイプを含む請求項1に記載の方法。
  3. 【請求項3】 前記レシーバタイプ情報は、メッセージ
    が前記サイトからディスパッチされた異なる各レシーバ
    タイプに対するコールサイトへのリファレンスを含む請
    求項1に記載の方法。
  4. 【請求項4】 前記レシーバタイプ情報は、インライン
    メソッドのコールサイトで遭遇するレシーバタイプを含
    む請求項1に記載の方法。
  5. 【請求項5】 前記レシーバタイプ情報は、前記プログ
    ラムが解釈されている間に収集される請求項1〜4のい
    ずれか1項に記載の方法。
  6. 【請求項6】 メッセージをレシーバオブジェクトへデ
    ィスパッチする前記サイトを含む前記第1メソッドを何
    時コンパイルするのが望ましいかを決定する工程を更に
    含む請求項1〜5のいずれか1項に記載の方法。
  7. 【請求項7】 前記第1メソッドを何時コンパイルすれ
    ば望ましいかを決定する工程は、前記第1メソッドが何
    時、所定の回数より多く呼び出されたかを決定する工程
    を含む請求項6に記載の方法。
  8. 【請求項8】 更に、メッセージをレシーバオブジェク
    トへディスパッチする前記サイトで前記レシーバタイプ
    情報を含むように、前記第1メソッドをコンパイルする
    工程を含む請求項1〜7のいずれか1項に記載の方法。
  9. 【請求項9】 前記コンパイルされた第1メソッドがレ
    シーバタイプ情報の収集を継続する請求項8に記載の方
    法。
  10. 【請求項10】 前記レシーバタイプ情報は、多形イン
    ラインキャッシュに収集される請求項1および5〜9の
    いずれか1項に記載の方法。
  11. 【請求項11】 前記レシーバタイプ情報は、前記第1
    メソッド用のクラスファイルにセーブされる請求項1お
    よび5〜9のいずれか1項に記載の方法。
  12. 【請求項12】 前記レシーバタイプ情報は、前記クラ
    スファイルの属性セクションにセーブされる請求項11
    に記載の方法。
  13. 【請求項13】 オブジェクト指向プログラムのための
    メッセージディスパッチを実行するコンピュータプログ
    ラムプロダクトであって、 メッセージをレシーバオブジェクトへディスパッチする
    メソッドのサイトでレシーバタイプ情報を収集するコン
    ピュータコードと、 前記プログラムのその後の実行のために前記レシーバタ
    イプ情報をセーブするコンピュータコードと、および前
    記コンピュータコードを格納するコンピュータ読取り可
    能媒体とを含むコンピュータプログラムプロダクト。
  14. 【請求項14】 オブジェクト指向プログラムのための
    メッセージディスパッチを実行するコンピュータシステ
    ムであって、 コンピュータコードを実行するプロセッサと、 メッセージをレシーバオブジェクトへディスパッチする
    メソッドのサイトでレシーバタイプ情報を収集するコン
    ピュータコードと、 前記プログラムのその後の実行のために前記レシーバタ
    イプ情報をセーブするコンピュータコードと、および前
    記プロセッサが実行すべき前記コンピュータコードを格
    納するコンピュータ読取り可能媒体とを備えるコンピュ
    ータシステム。
  15. 【請求項15】 コンピュータシステムにおいて、オブ
    ジェクト指向プログラムのためのメッセージディスパッ
    チを実行する方法であって、 解釈の間、メッセージをレシーバオブジェクトにディス
    パッチする第1メソッドのサイトでレシーバタイプ情報
    を収集する工程であり、前記レシーバタイプ情報は異な
    る各レシーバタイプと、メッセージが前記サイトからデ
    ィスパッチされた異なる各レシーバタイプに対する前記
    サイトへのリファレンスとを含む工程と、 メッセージをレシーバオブジェクトへディスパッチする
    サイトを含む前記第1メソッドをコンパイルするのが望
    ましいと決定する工程と、 メッセージをレシーバオブジェクトへディスパッチする
    前記サイトで前記レシーバタイプ情報を含むように前記
    第1メソッドをコンパイルする工程と、および、 前記プログラムのその後の実行のために前記レシーバタ
    イプ情報をセーブする工程とを含む方法。
  16. 【請求項16】 前記レシーバタイプ情報は、インライ
    ンメソッドのコールサイトで遭遇するレシーバタイプを
    含む請求項15に記載の方法。
  17. 【請求項17】 第1メソッドをコンパイルすれば望ま
    しいと決定する工程は、前記メソッドは所定の回数より
    多く呼び出されたと決定する工程を含む請求項15また
    は16に記載の方法。
  18. 【請求項18】 前記コンパイルされた第1メソッド
    は、レシーバタイプ情報の収集を継続する請求項15に
    記載の方法。
  19. 【請求項19】 前記レシーバタイプ情報は、多形イン
    ラインキャッシュのうちのひとつに収集される請求項1
    5に記載の方法。
  20. 【請求項20】 前記レシーバタイプ情報は、前記メソ
    ッドのためのJavaクラスファイルにセーブされる請
    求項15に記載の方法。
  21. 【請求項21】 前記レシーバタイプ情報は、前記Ja
    vaクラスファイルの属性セクションにセーブされる請
    求項20に記載の方法。
  22. 【請求項22】 オブジェクト指向プログラムのための
    メッセージディスパッチを実行するコンピュータプログ
    ラムプロダクトであって、 解釈の間、メッセージをレシーバオブジェクトへディス
    パッチするメソッドのサイトでレシーバタイプ情報を収
    集するコンピュータコードであり、前記レシーバタイプ
    情報は異なる各レシーバタイプと、メッセージが前記サ
    イトからディスパッチされた異なる各レシーバタイプに
    対する前記サイトへのリファレンスとを含む前記コンピ
    ュータコードと、 メッセージをレシーバオブジェクトへディスパッチする
    前記サイトを含む前記メソッドをコンパイルするのが望
    ましいと決定するコンピュータコードと、 メッセージをレシーバオブジェクトへディスパッチする
    前記サイトで前記レシーバタイプ情報を含むように前記
    メソッドをコンパイルするコンピュータコードと、 前記プログラムのその後の実行のために前記レシーバタ
    イプ情報をセーブするコンピュータコードと、および前
    記コンピュータコードを格納するコンピュータ読取り可
    能媒体とを含むコンピュータプログラムプロダクト。
  23. 【請求項23】 オブジェクト指向プログラムのための
    メッセージディスパッチを実行するコンピュータシステ
    ムであって、 コンピュータコードを実行するプロセッサと、 解釈の間、メッセージをレシーバオブジェクトへディス
    パッチするメソッドのサイトでレシーバタイプ情報を収
    集するコンピュータコードであり、前記レシーバタイプ
    情報は異なる各レシーバタイプと、メッセージが前記サ
    イトからディスパッチされた異なる各レシーバタイプに
    対する前記サイトへのリファレンスとを含む前記コンピ
    ュータコードと、 メッセージをレシーバオブジェクトへディスパッチする
    前記サイトを含む前記メソッドをコンパイルするのが望
    ましいと決定するコンピュータコードと、 メッセージをレシーバオブジェクトへディスパッチする
    前記サイトで前記レシーバタイプ情報を含むように前記
    メソッドをコンパイルするコンピュータコードと、 前記プログラムのその後の実行のために前記レシーバタ
    イプ情報をセーブするコンピュータコードと、および前
    記プロセッサが実行すべき前記コンピュータコードを格
    納するコンピュータ読取り可能媒体とを含むコンピュー
    タシステム。
  24. 【請求項24】 オブジェクト指向メソッドのための、
    コンピュータ読取り可能媒体によって格納されたデータ
    構造であって、 前記コンピュータ読取り可能媒体によって格納された少
    なくとも一つのレシーバタイプと、および前記メソッド
    のメッセージディスパッチサイトでのディスパッチされ
    たメッセージであったレシーバタイプである、前記コン
    ピュータ読取り可能媒体による入れ子式レシーバタイプ
    とを含むデータ構造。
  25. 【請求項25】 前記入れ子式レシーバタイプは、前記
    メソッドのメッセージディスパッチサイトへのリファレ
    ンスを含む請求項24に記載のデータ構造。
  26. 【請求項26】 前記入れ子式レシーバタイプは、イン
    ラインメソッドのメッセージディスパッチサイトでのデ
    ィスパッチされたメッセージであったレシーバタイプを
    含む請求項24に記載のデータ構造。
  27. 【請求項27】 前記データ構造は、前記メソッドのた
    めのJavaクラスファイルにセーブされる請求項24
    に記載のデータ構造。
  28. 【請求項28】 前記データ構造は、Javaクラスフ
    ァイルの属性セクションにセーブされる請求項27に記
    載のデータ構造。
JP10319737A 1997-10-06 1998-10-06 オブジェクト指向システムにおけるレシーバタイプ用のインラインデータベース Pending JP2000003280A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/944,332 US6317796B1 (en) 1997-10-06 1997-10-06 Inline database for receiver types in object-oriented systems
US08/944332 1997-10-06

Publications (1)

Publication Number Publication Date
JP2000003280A true JP2000003280A (ja) 2000-01-07

Family

ID=25481207

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10319737A Pending JP2000003280A (ja) 1997-10-06 1998-10-06 オブジェクト指向システムにおけるレシーバタイプ用のインラインデータベース

Country Status (6)

Country Link
US (2) US6317796B1 (ja)
EP (1) EP0908815B1 (ja)
JP (1) JP2000003280A (ja)
KR (1) KR100555116B1 (ja)
CN (1) CN1237737A (ja)
DE (1) DE69810056T2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101827143B1 (ko) * 2016-08-26 2018-02-08 강원대학교산학협력단 객체의 바이너리 호환성을 유지하는 컴퓨팅 장치 및 방법

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
FR2796178B1 (fr) * 1999-07-06 2001-08-03 Schlumberger Systems & Service Procede de realisation de liens dynamiques dans une machine virtuelle
US6754887B1 (en) * 1999-10-22 2004-06-22 International Business Machines Corporation Methods for implementing virtual bases with fixed offsets in object oriented applications
JP2001243182A (ja) * 2000-02-29 2001-09-07 Nec Corp サーバシステム及びWebコンテンツとサーバシステムとの連動方法
US7913286B2 (en) * 2000-10-20 2011-03-22 Ericsson Television, Inc. System and method for describing presentation and behavior information in an ITV application
JP3664478B2 (ja) * 2001-03-29 2005-06-29 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置
DE10131944A1 (de) * 2001-07-02 2003-01-16 Siemens Ag Verfahren zur Verarbeitung von Daten
US7290254B2 (en) * 2003-03-25 2007-10-30 Intel Corporation Combining compilation and instruction set translation
US7386686B2 (en) * 2003-03-28 2008-06-10 Intel Corporation Inlining with stack trace cache-based dynamic profiling
US7478402B2 (en) * 2004-02-12 2009-01-13 Microsoft Corporation Configurable message pipelines
US7526502B2 (en) * 2004-09-10 2009-04-28 Microsoft Corporation Dynamic call site binding
US7530059B2 (en) * 2005-02-18 2009-05-05 International Business Machines Corporation Method for inlining native functions into compiled java code
US7818668B2 (en) * 2005-04-19 2010-10-19 Microsoft Corporation Determining fields for presentable files
US20060242654A1 (en) * 2005-04-22 2006-10-26 Lund Kasper V Process and apparatus for sharing inline caches
CN100342379C (zh) * 2005-05-25 2007-10-10 北京四方继保自动化股份有限公司 一种实现iec61850信息间接接入实时数据库的方法
US8291395B2 (en) * 2006-03-31 2012-10-16 Apple Inc. Fast function call dispatching
US8024720B2 (en) * 2006-04-17 2011-09-20 International Business Machines Corporation Speculative inlining of overridden methods without using profiling information
US8307379B2 (en) 2006-12-21 2012-11-06 International Business Machines Corporation Determining an extension to use to process an input object to a call in a program
US7634499B2 (en) * 2007-01-06 2009-12-15 Objectivity, Inc. Method, system and computer-readable media for repairing data record corruption
US20090182689A1 (en) * 2008-01-15 2009-07-16 Microsoft Corporation Rule-based dynamic operation evaluation
US8291397B2 (en) * 2008-04-02 2012-10-16 International Business Machines Corporation Compiler optimized function variants for use when return codes are ignored
US9748771B2 (en) * 2012-04-12 2017-08-29 International Business Machines Corporation Plug arrangements for alleviating peak loads
US20130332434A1 (en) * 2012-06-11 2013-12-12 Actian Netherlands, B.V. System and method using partial just-in-time complation to resolve memory access pattern problems in hash table probing
US20140047423A1 (en) * 2012-08-09 2014-02-13 Filip J. Pizlo Runtime State Based Code Re-Optimization
US9569185B2 (en) 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process

Family Cites Families (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57153339A (en) * 1981-03-18 1982-09-21 Hitachi Ltd Information processor
US4399507A (en) * 1981-06-30 1983-08-16 Ibm Corporation Instruction address stack in the data memory of an instruction-pipelined processor
JPS5856153A (ja) 1981-09-30 1983-04-02 Fujitsu Ltd サブル−チンリタ−ン方式
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
US5329611A (en) * 1990-05-22 1994-07-12 International Business Machines Corp. Scalable flow virtual learning neurocomputer
US5265206A (en) * 1990-10-23 1993-11-23 International Business Machines Corporation System and method for implementing a messenger and object manager in an object oriented programming environment
US5379426A (en) * 1991-01-25 1995-01-03 Sun Microsystems, Inc. Method and apparatus for object oriented interprocess message switching
US5297284A (en) * 1991-04-09 1994-03-22 Microsoft Corporation Method and system for implementing virtual functions and virtual base classes and setting a this pointer for an object-oriented programming language
US5361350A (en) * 1991-12-12 1994-11-01 International Business Machines Corporation Object oriented method management system and software for managing class method names in a computer system
US5421016A (en) * 1991-12-12 1995-05-30 International Business Machines Corporation System and method for dynamically invoking object methods from an application designed for static method invocation
US5274817A (en) * 1991-12-23 1993-12-28 Caterpillar Inc. Method for executing subroutine calls
DE4211966A1 (de) 1992-04-09 1993-10-14 Philips Patentverwaltung Anordnung zum Abspeichern und Auslesen von Rücksprungdaten
US5404525A (en) * 1992-09-30 1995-04-04 International Business Machines Corporation Efficient method router that supports multiple simultaneous object versions
US5991538A (en) * 1992-12-18 1999-11-23 Inprise Corporation System for generating and using programs in an object-oriented environment with a message dispatch architecture
US5367685A (en) * 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
US5442793A (en) * 1993-02-26 1995-08-15 Microsoft Corporation Method and system for locating an inherited virtual function member of a derived class
JP3499252B2 (ja) * 1993-03-19 2004-02-23 株式会社ルネサステクノロジ コンパイル装置及びデータ処理装置
US5517645A (en) * 1993-11-05 1996-05-14 Microsoft Corporation Method and system for interfacing components via aggregate components formed by aggregating the components each with an instance of a component manager
US5475822A (en) * 1993-11-15 1995-12-12 Motorola, Inc. Data processing system for resuming instruction execution after an interrupt and method therefor
US5742848A (en) * 1993-11-16 1998-04-21 Microsoft Corp. System for passing messages between source object and target object utilizing generic code in source object to invoke any member function of target object by executing the same instructions
US5485617A (en) * 1993-12-13 1996-01-16 Microsoft Corporation Method and system for dynamically generating object connections
US5522071A (en) * 1994-01-18 1996-05-28 Sybase, Inc. Run-time message redirection for invoking object oriented methods based on alternate dispatch variable
US5600838A (en) * 1994-01-18 1997-02-04 Sybase, Inc. Object oriented dispatch and supercall process and arrangement
US5682532A (en) * 1994-05-02 1997-10-28 Microsoft Corporation System and method having programmable containers with functionality for managing objects
US5734903A (en) * 1994-05-13 1998-03-31 Apple Computer, Inc. System and method for object oriented message filtering
US5634046A (en) * 1994-09-30 1997-05-27 Microsoft Corporation General purpose use of a stack pointer register
US5586328A (en) * 1994-10-21 1996-12-17 Microsoft Corporation Module dependency based incremental compiler and method
US5748964A (en) * 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US5590331A (en) 1994-12-23 1996-12-31 Sun Microsystems, Inc. Method and apparatus for generating platform-standard object files containing machine-independent code
AUPN191395A0 (en) * 1995-03-22 1995-04-27 M.I.M. Holdings Limited Atmospheric mineral leaching process
US5606682A (en) * 1995-04-07 1997-02-25 Motorola Inc. Data processor with branch target address cache and subroutine return address cache and method of operation
JP3130446B2 (ja) * 1995-05-10 2001-01-31 松下電器産業株式会社 プログラム変換装置及びプロセッサ
JP2857600B2 (ja) 1995-05-11 1999-02-17 松下電器産業株式会社 プロセッサ及びプログラム翻訳装置
US5774721A (en) * 1995-09-08 1998-06-30 Iq Systems, Inc. Method of communication between processors in a distributed processing system having a host processor and at least one object oriented processor
US5794044A (en) * 1995-12-08 1998-08-11 Sun Microsystems, Inc. System and method for runtime optimization of private variable function calls in a secure interpreter
US5822606A (en) * 1996-01-11 1998-10-13 Morton; Steven G. DSP having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word
US5784553A (en) * 1996-01-16 1998-07-21 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs
KR100513138B1 (ko) * 1996-01-24 2005-09-07 선 마이크로시스템즈 인코퍼레이티드 네트워크 또는 로컬 메모리로부터 수신된 명령 세트를실행하는 프로세서 및 컴퓨터 시스템
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
JPH09282167A (ja) * 1996-04-10 1997-10-31 Internatl Business Mach Corp <Ibm> メソッド起動方法及びメソッド起動制御装置
US5761491A (en) * 1996-04-15 1998-06-02 Motorola Inc. Data processing system and method for storing and restoring a stack pointer
GB2312766A (en) * 1996-05-01 1997-11-05 Ibm Transactional layer for object management system
US5960197A (en) * 1996-05-09 1999-09-28 Sun Microsystems, Inc. Compiler dispatch function for object-oriented C
US5884083A (en) * 1996-09-20 1999-03-16 Royce; Robert Computer system to compile non-incremental computer source code to execute within an incremental type computer system
US6243763B1 (en) * 1996-11-12 2001-06-05 International Business Machines Corporation Method for sending a message to a group and the group broadcasts the message to its members or references within an object-oriented system
US5884316A (en) * 1996-11-19 1999-03-16 Microsoft Corporation Implicit session context system with object state cache
US5937193A (en) * 1996-11-27 1999-08-10 Vlsi Technology, Inc. Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof
CA2194848C (en) * 1997-01-10 2003-12-23 Jonathan Layes Condition handling using script interpreters
US5907707A (en) * 1997-01-14 1999-05-25 International Business Machines Corporation Object model for Java
US6044220A (en) * 1997-02-25 2000-03-28 Motorola, Inc. Method and apparatus for operating a data processor to execute software written using a foreign instruction set
US5905895A (en) * 1997-03-07 1999-05-18 International Business Machines Corporation Method and system for optimizing non-native bytecodes before bytecode interpretation
US5898850A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native mode-sensitive instruction within a computer system
US5953736A (en) * 1997-04-23 1999-09-14 Sun Microsystems, Inc. Write barrier system and method including pointer-specific instruction variant replacement mechanism
US5845298A (en) * 1997-04-23 1998-12-01 Sun Microsystems, Inc. Write barrier system and method for trapping garbage collection page boundary crossing pointer stores
US6021273A (en) * 1997-06-30 2000-02-01 Sun Microsystems, Inc. Interpreter generation and implementation utilizing interpreter states and register caching
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6009517A (en) * 1997-10-06 1999-12-28 Sun Microsystems, Inc. Mixed execution stack and exception handling
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US5933635A (en) 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US6385660B2 (en) * 1997-10-06 2002-05-07 Sun Microsystems, Inc. Site specific message dispatch in object-oriented systems
US6553426B2 (en) * 1997-10-06 2003-04-22 Sun Microsystems, Inc. Method apparatus for implementing multiple return sites
US6170083B1 (en) * 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US6118940A (en) * 1997-11-25 2000-09-12 International Business Machines Corp. Method and apparatus for benchmarking byte code sequences
US6332216B1 (en) * 1999-03-09 2001-12-18 Hewlett-Packard Company Hybrid just-in-time compiler that consumes minimal resource

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101827143B1 (ko) * 2016-08-26 2018-02-08 강원대학교산학협력단 객체의 바이너리 호환성을 유지하는 컴퓨팅 장치 및 방법

Also Published As

Publication number Publication date
US6317796B1 (en) 2001-11-13
CN1237737A (zh) 1999-12-08
DE69810056D1 (de) 2003-01-23
US7137123B2 (en) 2006-11-14
KR100555116B1 (ko) 2007-01-03
DE69810056T2 (de) 2003-04-30
EP0908815B1 (en) 2002-12-11
KR19990037015A (ko) 1999-05-25
US20040244009A1 (en) 2004-12-02
EP0908815A2 (en) 1999-04-14
EP0908815A3 (en) 2000-06-07

Similar Documents

Publication Publication Date Title
US6385660B2 (en) Site specific message dispatch in object-oriented systems
US6317796B1 (en) Inline database for receiver types in object-oriented systems
US6910205B2 (en) Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6968546B2 (en) Debugging support using dynamic re-compilation
US6966057B2 (en) Static compilation of instrumentation code for debugging support
US6192516B1 (en) Interpreter generation and implementation utilizing interpreter states and register caching
US6651080B1 (en) Techniques for implementing pluggable virtual machines
US6704927B1 (en) Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
US5530964A (en) Optimizing assembled code for execution using execution statistics collection, without inserting instructions in the code and reorganizing the code based on the statistics collected
US6381737B1 (en) Automatic adapter/stub generator
US20040205740A1 (en) Method for collection of memory reference information and memory disambiguation
US7028291B2 (en) Debugging method and debugging device
JPH11312097A (ja) メモリリ―ク及び他のランタイム情報を発見するためのオブジェクトヒ―プ解析技術
JP2003140909A (ja) Jitコンパイラを備えた仮想計算機
KR19990078122A (ko) 컴파일을 마친 코드에서 동적 클래스 초기화 검사의 비용을 줄이는 기술
US7100154B2 (en) Dynamic compiler apparatus and method that stores and uses persistent execution statistics
US20080052691A1 (en) Communicating with and recovering state information from a dynamic translator
JP5129904B2 (ja) 実行時における関数の実行性能を増大させるための方法、計算機システム、実行時における関数の実行性能を増大させるための、コンピュータプログラムを格納するコンピュータ読み取り可能媒体
Pierce Cache behavior in the presence of speculative execution: the benefits of misprediction
Haeberlen Using platform-specific optimizations in stub-code generation
JPH0695919A (ja) コンピュータ・システムのエミュレーション方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051005

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070918

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20071218

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20071221

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20080118

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20080123

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080213

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20080213

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080408