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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
- G06F9/4491—Optimising 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
ージディスパッチを具体化するシステムと方法が提供さ
れる。 【解決手段】 レシーバタイプ情報が、メッセージをレ
シーバオブジェクトにディスパッチするメソッドのサイ
トで収集される。レシーバタイプ情報が、プログラムの
その後の実行のためにセーブされる。レシーバタイプ情
報をセーブすることによって、レシーバタイプ情報を再
収集する必要がないので、プログラムが、より効率的に
なる。更に、インライニング情報をレシーバタイプ情報
と共にセーブできる。
Description
プログラムの実行スピードを増加させることに関する。
より詳細には、本発明は、オブジェクト指向プログラム
の実行中に収集した情報をその後の実行に利用すること
に関する。
的考え方は、データと、そのデータによって単一ユニッ
ト内で動作するオブジェクトと呼ばれるメソッド(また
は関数)の両者の組合せである。オブジェクトの関数は
通常、そのオブジェクトによってカプセル化されるデー
タにアクセスする唯一のメソッドを提供する。データ
は、メッセージを、そのメッセージで指定されたメソッ
ドを呼び出すようにオブジェクトに指示するオブジェク
トへ送信することによって、アクセスされる。
ジェクト指向言語で最も重要である。その理由は、メッ
セージディスパッチがオブジェクト指向プログラムの非
常に頻繁なオペレーションであって、ランタイムで実行
されるからであり、従って、ディスパッチはできるだけ
迅速でなければならない。メッセージディスパッチは、
しかしながら、決して些細なオペレーションではない。
ランタイムの前に関数のアドレスを決定できる手続き的
プログラム言語(例えば、Cプログラム言語)と異な
り、オブジェクト指向言語は、実行時にレシーバオブジ
ェクトにディスパッチされたメッセージを扱うメソッド
を決定しなければならず、それは広範な探索を伴なうこ
とになろう。
く理解するために、図1は、各クラスのメソッドを含む
クラス階層構造を示す。クラス階層構造1はそのルート
のところに、2つの仮想関数foo()とbar()とを定
義する親クラスA3を含む。仮想関数は親クラスの中で
定義されて、子クラスの中で再定義されてもよい関数で
ある。クラスB5とクラスC7は親クラスAのデータと
メソッドを受け継ぐ。図示のように、クラスBは仮想関
数fooとbarのいずれか一方を再定義することはな
い。しかしながら、クラスCは仮想関数fooを再定義
する。メソッドfooを呼び出すためにクラスCのオブ
ジェクトがリクエストされると、呼び出されたメソッド
は、親クラスAではなくクラスCによって定義されたメ
ソッドになる。クラスD9とE11もメソッドfooを
再定義する。
は一般に不可能なので、正しいメソッドの探索がメッセ
ージディスパッチの間、ランタイムで行なわれる。メソ
ッドディスパッチを具体化する(実行する)ための多数
の技法が知られている。例えば、図2はインラインキャ
ッシュを示す。メソッド51が最初、次の通りであった
と仮定する: main() { ... x.foo(); ・・・ } 従って、メソッドメインは、オブジェクトxのメソッド
fooを呼び出すためにステートメントx.foo()を
含む。
扱うメソッドが呼び出しできる前に、オブジェクトxが
どのクラスに属するかを決定しなければならないだろ
う。インラインキャッシュでは、最初、システムがオブ
ジェクトxの属するクラスを決定するとき、クラスのメ
ソッドへのダイレクトコールがコンピュータコードに書
き込まれる。
ると仮定すると、コールx.foo()はダイレクトコー
ルA::foo()に変更される。矢印はクラスA53用
のメソッドfooを特定する。オブジェクトxはいつも
クラスAとは限らないので、プロローグ55は、オブジ
ェクトxが正しいクラスである旨確認して、オブジェク
トxのクラスがクラスAに等しいか否かが決定されるこ
とを意味する式 x=A として表される。オブジェク
トのクラスは、そのオブジェクトに格納された値から決
定してもよい。オブジェクトが正しいクラスである場
合、メッセージを扱うメソッドコード57へのジャンプ
が行なわれる。
クラスAでない場合、正しいメソッドを決定するために
メソッドルックアップルーチンが呼び出される。一旦、
正しいメソッドが発見されると、システムは、メッセー
ジディスパッチ(またはコール)サイトをそのメソッド
に対するダイレクトコールで更新する。更に、システム
はプロローグを更新して新しいクラスを指定する。例と
して、最初にシステムがx.foo()に遭遇したとき、
オブジェクトxがクラスAであり、データ構造が図2に
示すように修正されたと仮定する。
ると、x.foo()へのその後のコールは、オブジェク
トxがクラスAの場合、実質的にもっと効率的になる。
しかしながら、オブジェクトxがその後にクラスBにな
る場合、プロローグ55は、メソッドを発見するために
メソッドルックアップルーチンをコールし、それが、オ
ブジェクトxは今やクラスBである旨決定すると仮定し
よう。再び図1を参照すると、クラスBのためのメソッ
ドfooは、クラスAで定義されたものと同一メソッド
fooであることが分かる(すなわち、クラスBは仮想
関数fooを再定義しなかった)。従って、メソッド5
1のメッセージディスパッチはB::foo()に変更さ
れ、プロローグ55の状態はx=Bに変更されるだろ
う。
一クラスのままの場合、インラインキャッシュはメッセ
ージディスパッチを具体化する効率的なメソッドである
可能性がある。しかしながら、オブジェクトが多重クラ
スの場合、システムは継続してメソッドルックアップル
ーチンをコールすると共に、コールサイトとプロローグ
とをパッチング(patching)する。かくして、システムの
効率は、実際には低下する可能性がある。
一つの技法は、図3に示すような多形インラインキャッ
シュ(polymorphic inline cache)の使用である。先と同
様に、メソッド101は、最初はメソッドディスパッチ
x.foo()を含んでいた。多形インラインキャッシュ
では、異なるレシーバタイプに対するメッセージディス
パッチを実行できるスタブ103が生成される。原メッ
セージディスパッチは、多形インラインキャッシュスタ
ブ103へのコールで置き換えられる。新レシーバタイ
プに遭遇する度に、スタブにはステートメントが追加さ
れる。図示のように、これまで3つの異なるレシーバタ
イプに遭遇した。レシーバタイプに遭遇した場合、その
レシーバタイプ用のメッセージを扱うためのメソッドに
対するコールが行なわれる。遭遇しない場合は、メソッ
ドルックアップルーチンがコールされて、メッセージを
扱うための適切なメソッドが決定される。通常、それぞ
れの新レシーバタイプを扱うためにスタブ103には新
ステートメントが追加される。
タイプを扱えるので、インラインキャッシュよりもフレ
キシブルである。しかしながら、多形インラインキャッ
シュの欠点は、より多くのレシーバタイプと遭遇するの
で、スタブが成長し続けてメッセージディスパッチの実
行効率が益々低下する点である。例えば、システムはメ
ッセージを扱う正しいメソッドを発見する前に、複数の
ifステートメントによる地馴らしの必要があるかもし
れない。
のメッセージディスパッチ技法を示す。ハッシングで
は、メソッド151の原メッセージディスパッチx.f
oo()は、ハッシュ関数153へのコールで上書きされ
る。ハッシュ関数は、通常はハッシュテーブル155へ
のインデックスであるハッシュキーを形成するために、
レシーバタイプとメッセージとをハッシュする。ハッシ
ュテーブルは、インデックス157、レシーバタイプ1
59、メッセージ161、およびメソッド163を含
む。一旦、ハッシュ関数がキャッシュテーブル155の
行にハッシュすると、レシーバタイプとメッセージとが
ハッシュテーブルのカラム159と161から検索され
る。コールサイトのレシーバタイプとメッセージが、ハ
ッシュテーブルの行内のレシーバタイプとメッセージに
一致する場合、ハッシュテーブル155のカラム163
で指定されるメソッドが呼び出される。そうでない場
合、正しいメソッドを発見するためにメソッドルックア
ップルーチンがコールされる。次いで通常は新メソッド
がハッシュテーブルに追加される。
もフレキシブルなメッセージディスパッチ技法である
が、他の技法よりも計算集中的で記憶集中的である。我
々が説明したメッセージディスパッチ技法のもうひとつ
の欠点は、いずれの技法もサイト専用(site specific)
ではないという点である。言い換えれば、いずれのメッ
セージディスパッチ技法も、異なるコールサイトデのメ
ッセージディスパッチを異なるメソッドで扱うフレキシ
ビリティを備えていない。
ージディスパッチ技法も、プログラムのその後の実行中
に利用するために収集されるレシーバタイプ情報を考慮
していない。更に、インライニング(inlining)情報がそ
の後のプログラム実行時に利用できれば望ましいだろ
う。従って、収集されたレシーバタイプおよび/または
インライニング情報の、プログラムのその後の実行時で
の利用を可能にする技法に対する要求がある。
集されたレシーバタイプおよび/またはその後のプログ
ラム実行中にインライニング情報を利用するための革新
的技法を提供する。プログラムに、先の実行からの情報
の利用を許すことによって、プログラムは、情報を再び
収集する必要もなく、素早く最適化された状態になれ
る。従って、オブジェクト指向プログラムは、それが安
定した最適化状態に達するまで、実行される度に益々効
率を向上できる。本発明の幾つかの実施形態を以下に説
明する。
向プログラム用のメッセージディスパッチを実行(具体
化)する方法を提供する。レシーバタイプ情報は、メッ
セージをレシーバオブジェクトにディスパッチするメソ
ッドのサイトで収集される。次いで、収集されたレシー
バタイプ情報は、プログラムのその後の実行のためにセ
ーブされる。好ましい実施形態では、レシーバタイプ情
報はメソッドの解釈とコンパイルの両実行中に収集され
る。
ジェクト指向プログラム用のメッセージディスパッチを
実行するメソッドを提供する。解釈の間、レシーバタイ
プ情報は、メッセージをレシーバオブジェクトにディス
パッチするメソッドのサイトで収集される。レシーバタ
イプ情報は異なる各レシーバタイプと、メッセージがサ
イトからディスパッチされる異なる各レシーバタイプに
対するサイトへのレファレンスとを含む。次に、メッセ
ージをレシーバオブジェクトにディスパッチするサイト
を含むメソッドをコンパイルするのが望ましい旨決定さ
れる。メソッドがコンパイルされると、レシーバタイプ
情報は、そのコンパイルされたメソッドのサイトに含ま
れる。また、レシーバタイプ情報がプログラムのその後
の実行のためにセーブされる。一部の実施形態におい
て、レシーバタイプ情報は多形インラインキャッシュに
収集される。
ピュータ読取り可能媒体によって記憶されたデータ構造
を提供する。少なくとも一つのレシーバタイプが入れ子
式レシーバタイプを持つコンピュータ読取り可能媒体に
よって記憶される。入れ子式レシーバタイプは、メソッ
ドのメッセージディスパッチサイトでのディスパッチさ
れたメッセージであったレシーバタイプである。好まし
い実施形態では、データ構造はJavaクラスファイル
の属性セクションにセーブされる。
関して下記の詳細説明を検討することによって直ちに明
らかになるであろう。
メンバー関数、およびメソッドとも呼ばれる)。
指向環境内のオブジェクトに送られたメッセージを扱う
ためのメソッドを決定するプロセス。
−−オブジェクト指向環境内でメッセージを送信された
オブジェクト。
が属するクラス。
ージがオブジェクトにディスパッチされる、プログラム
内のロケーションまたはエリア。 概要 以下の説明では、本発明を、Java(登録商標)仮想
マシン用に設計された好ましい実施形態に関して説明す
る。特に、IBMパーソナルコンピュータ向けの実例に
ついていくつか説明する。しかしながら、本発明はどの
ような特定の言語、コンピュータアーキテクチャ、また
は特定のインプリメンテーションにも限定されない。従
って、以下の実施形態の記述は説明のためであって、限
定のためではない。
ウェアを実行するのに使用できるコンピュータシステム
の例を示す。図5は、ディスプレイ303、スクリーン
305、キャビネット307、キーボード309、およ
びマウス311を含むコンピュータシステム301を示
す。マウス311はグラフィカルユーザーインタフェー
スと会話するための一つ以上のボタンを持つことができ
る。キャビネット307は、本発明を具体化するコンピ
ュータコードを内蔵するソフトフェアプログラム、本発
明に関して使用するデータ等、を格納、検索するために
利用される、CD−ROMドライブ313、システムメ
モリ、およびハードドライブ(図6参照)を収容する。
CD−ROM315は典型的なコンピュータ読取り可能
記憶媒体として示されているが、フロッピーディスク、
テープ、フラッシュメモリ、システムメモリ、およびハ
ードドライブを含め他のコンピュータ読取り可能記憶媒
体を利用してもよい。更に、搬送波(例えば、インター
ネットを含むネットワーク)中に組み込んだデータ信号
が、コンピュータ読取り可能記憶媒体であってもよい。
を実行するために使用されるコンピュータシステム30
1のシステムブロック図を示す。図5と同様、コンピュ
ータシステム301は、モニタ303とキーボード30
9、およびマウス311を含む。コンピュータシステム
301は更に、中央処理装置351、システムメモリ3
53、固定記憶装置355(例えば、ハードドライ
ブ)、交換可能記憶装置357(例えば、CD−ROM
ドライブ)、ディスプレイアダプタ359、サウンドカ
ード361、スピーカ363、およびネットワークイン
タフェース365等のサブシステムを含む。本発明に関
する使用に適した他のコンピュータシステムは、追加ま
たはより少数のサブシステムを含んでもよい。例えば、
別のコンピュータシステムは2台以上のプロセッサ35
1(すなわち、マルチプロセッサシステム)やキャッシ
ュメモリを含むことができる。
スアーキテクチャは、矢印367で表示される。しかし
ながら、これらの矢印はサブシステムをリンクする働き
をするどのような相互接続のスキームも示すこととす
る。例えば、ローカルバスを利用して中央処理装置をシ
ステムメモリとディスプレイアダプタに接続することが
できよう。図6に示すコンピュータシステム301は、
本発明を伴なう使用に適したコンピュータシステムの一
例に過ぎない。異なる構成のサブシステムを持つ他のコ
ンピュータアーキテクチャを利用してもよい。
は、Sun Microsystemsによって開発された。通常、Ja
vaプログラミング言語で書かれたコンピュータプログ
ラムは、バイトコード、すなわちその後にJava仮想
マシンによって実行されるJava仮想マシン命令、に
コンパイルされる。バイトコードは、解釈用のJava
仮想マシンへ入力されるクラスファイルに格納される。
図7は、インタープリタ、つまりJava仮想マシンに
よる実行を通したJavaソースコードの単一ピースの
進行を示す。
で書かれた古典的なHello World プログラムを含む。次
に、ソースコードはソースコードをバイトコードにコン
パイルするバイトコードコンパイラ403に入力され
る。バイトコードは、ソフトウェアでエミュレートされ
たコンピュータによって実行されるので、仮想マシン命
令である。通常、仮想マシン命令は一般的(すなわち、
特定のマイクロプロセッサやコンピュータアーキテクチ
ャ用に設計されていない)だが、そうである必要はな
い。バイトコードコンパイラは、Javaプログラム用
のバイトコードを含むJavaクラスファイル405を
出力する。
マシン407に入力される。Java仮想マシンは、J
avaクラスファイルのバイトコードを解読、実行する
インタープリタである。Java仮想マシンはインター
プリタだが、ソフトウェアのマイクロプロセッサやコン
ピュータアーキテクチャをエミュレートするので(例え
ば、マイクロプロセッサやコンピュータアークテクチャ
がハードウェアには存在しないかもしれない)、一般に
仮想マシンと称される。Java仮想マシンの実行速度
を増すために、より早い実行のためのネイティブマシン
命令にメソッドをコンパイルしてもよい。以下の好まし
い実施形態の説明では、コンパイル(compilation) を使
用して、Java仮想マシン命令の、ネイティブマシン
命令への翻訳に言及する。サイト固有インラインキャッ
シュ本発明は、オブジェクト指向環境におけるメッセー
ジディスパッチを具体化するためのサイト固有インライ
ンキャッシュを提供する。レシーバタイプ情報はコール
サイトで格納されるので、各コールサイトはそのコール
サイトのランタイム特性に従って変更可能となる。これ
によって、メッセージディスパッチをより効率的にする
ばかりでなく、よりフレキシブルにする。
固有のインラインキャッシュ技法を示す。先に「従来の
技術」で述べたように、メソッド451は最初は、ディ
スパッチ用のメッセージx.foo()を含んでいた。最
初、このメッセージがディスパッチされるときは、シス
テムがメソッドバックアップルーチンをコールして、メ
ッセージを扱うための適切なメソッドを決定できる。別
法として、システムはランタイムに先立って静的分析を
行なって、何が正しいメソッドになりそうかを決定でき
る。
一旦、メッセージを扱うべきオブジェクトのクラスが決
定されると、レシーバタイプまたはクラスをセーブする
ための命令がコールサイトで生成される。メッセージデ
ィスパッチは次に、メッセージを扱うべき特定メソッド
へのコールで上書きされる。かくして、メッセージディ
スパッチは、2つの命令、つまりレシーバタイプをセー
ブする命令と、適切なメソッドへのコールになる。
A用のIDを特殊レジスタに格納する移動命令を含む。
このレジスタは単なる識別のための特殊レジスタと呼ば
れる。重要なことは、レジスタを利用する場合、このコ
ールサイトではそのレジスタを別途不使用にしなければ
ならないことである。レジスタの利用は最も効率的な実
行速度を提供するかもしれないが、他の記憶メカニズム
を利用してもよい。例えば、レシーバタイプをシステム
メモリに格納してもよいし、パラメータとしてメッセー
ジハンドリングメソッドに送ってもよい。
A::foo()として示されたメッセージを扱うメソッ
ド453へのコールが行なわれる。プロローグ455
は、特殊レジスタから検索されるオブジェクトxが、セ
ーブされたレシーバタイプか否かをチェックする。図示
の例では、クラスAは格納されたレシーバタイプであ
る。かくして、オブジェクトxがクラスAの場合、
A::foo()のメソッドコード457へのジャンプが
行なわれる。そうでない場合、メソッドルックアップル
ーチンがコールされて、メッセージを扱うべき適切なメ
ソッドを位置付けする。次に、コールサイトが更新され
て、オブジェクトxのレシーバタイプと、メソッドルッ
クアップルーチンによって発見されたメソッドへのコー
ルをセーブできる。
バタイプは予測されたレシーバタイプである。つまり、
システムが予測するレシーバタイプは、メッセージを受
けるための次のオブジェクトのレシーバタイプになる。
予測されたレシーバタイプがオブジェクトのレシーバタ
イプと一致する場合、メッセージディスパッチは、より
効率的になる。更に、各メッセージディスパッチサイト
は、そのコールサイトに特有の格納されたレシーバタイ
プ情報を持つことができるが、別のサイトは、格納され
たレシーバタイプ情報を上書きしない。
ト固有インラインキャッシュ技法の実施形態のフローチ
ャートを示す。ステップ501で、予測されたレシーバ
タイプは、メッセージがレシーバオブジェクトへディス
パッチされるサイトでセーブされる。好ましい実施形態
では、レシーバタイプは、そのレシーバタイプをレジス
タに置くための移動命令を利用することによってセーブ
される。しかしながら、システムメモリやパラメータパ
ッシング(passing) の使用を含めて、当該技術に精通す
る者には周知の、レシーバタイプをセーブする他の方法
を利用してもよい。
バオブジェクトに送られる。このメッセージは、メソッ
ドルックアップルーチンを利用する代わりに、メッセー
ジを扱うメソッドへのダイレクトコール(またはメソッ
ドの呼出し)によって送られる。
を受けると、レシーバオブジェクトはステップ505で
のセーブされた予測(predicted) レシーバタイプである
旨確認される。好ましい実施形態では、この確認はメソ
ッドのプロローグで実行される(図8参照)。レシーバ
オブジェクトがステップ507でのセーブされた予測レ
シーバタイプと同一タイプの場合、メッセージを扱うメ
ソッドがステップ509で実行される。ステップ509
は、メッセージを扱うメソッドコードのスタートへジャ
ンプすることを含む。
測レシーバタイプと同一タイプでない場合、コールサイ
トでの予測レシーバタイプは、ステップ511でレシー
バオブジェクトのレシーバタイプに変更される。メソッ
ドルックアップルーチンがコールされて、ステップ51
3で新メソッドが獲得される。利用されるメソッドルッ
クアップルーチンは、ディスパッチテーブルサーチと仮
想関数テーブルを含めて、当該技術に精通する者には周
知の何れでもよい。メソッドルックアップルーチンは、
メッセージを扱うための適切なメソッドを提供する。コ
ールサイトでのメッセージディスパッチは次に、ステッ
プ515でメソッドルックアップルーチンによって戻さ
れたメソッドに変更される。
スAなので、メソッド451のコールサイトに格納され
る予測レシーバタイプはクラスAであると仮定しよう。
しかしながら、オブジェクトxがその後にクラスBにな
る場合、プロローグ455は移動命令を修正して、クラ
スBを予測レシーバタイプとして特殊レジスタに格納で
きる。更に、メッセージディスパッチが修正されて、メ
ソッドルックアップルーチンによって戻されたメソッド
を呼び出すだろう。その場合、クラスBのレシーバオブ
ジェクトに向けられたこのコールサイトのその後のメッ
セージディスパッチは、より効率的にディスパッチされ
るだろう。
を変更するステップ515の後で実行されるものとして
示されている。メソッドを実行するステップは、実際に
は、ステップ513内で起ることもあるし、他のロケー
ションで起ることもある。従って、図示のフローチャー
トでは、ステップは、本発明の精神から逸脱することな
く、特定のインプリメンテーションによって再整理、追
加、および削除できる。
バタイプをセーブするサイト固有インラインキャッシュ
技法が提供される。コールサイトで予測レシーバタイプ
を格納することによって、メッセージディスパッチを、
より効率的でフレキシブルにできる。例えば、各コール
サイトにおけるオペレーションは互いに隔離できるの
で、ひとつのコールサイトがもうひとつのコールサイト
用の設定を変更することがない。 サイト固有メッセージディスパッチ 本発明は、異なるメッセージディスパッチ技法を各サイ
トで利用可能にする点でフレキシブルなサイト固有メッ
セージディスパッチ技法を提供する。更に、コールサイ
トで利用されるメッセージディスパッチ技法はランタイ
ムの間、時間の経過と共に変更できる。一旦、新しいま
たは異なるメッセージディスパッチ技法が特定サイトで
望ましい旨決定されると、新メッセージディスパッチ技
法がその特定コールサイトでの使用のために設定され
る。かくして、メッセージディスパッチはコールサイト
に関するばかりか、プログラム実行時の異なる時期のコ
ールで利用されるメッセージディスパッチ技法に関して
も、よりフレキシブルになる。
ッチの実施形態の高レベルフローチャートを示す。ステ
ップ511では、第1メッセージディスパッチ技法が特
定メッセージディスパッチサイトで実行される。第1メ
ッセージディスパッチ技法は、当該技術分野で周知の任
意の数のメッセージディスパッチ技法でよい。第1メッ
セージディスパッチ技法は、本発明による技法であるこ
とが望ましい。例えば、第1メッセージ技法は、上記サ
イト固有インラインキャッシュの実施形態でもよい。第
1メッセージディスパッチ技法を、ランタイム前に静的
に決定してもよいし、ランタイム中に動的に決定しても
よい。
セージディスパッチ技法が特定サイトで望ましいか否か
をランタイム中に動的に決定する。任意数の方式を利用
して、第2メッセージディスパッチ技法が望ましい旨決
定してよい。例えば、このコールサイトで遭遇する異な
るレシーバタイプの数がしきい値を超えるときは、異な
るメッセージディスパッチ技法に切り換えることが望ま
しいだろう。更に、メソッドルックアップルーチンがコ
ールされる頻度によって計算が行なわれるので、頻度が
高すぎる場合は、新メッセージディスパッチが正当化さ
れるだろう。
ィスパッチ技法が望ましいと決定されたときは、その第
2メッセージディスパッチ技法がステップ555の特定
サイトで実行される。新メッセージディスパッチ技法へ
の切り換えのためのメカニズムは通常、その新技法自身
に左右される。これまで高レベルフローを説明してきた
ので、第2メッセージディスパッチ技法が望ましいか否
かを動的に決定するステップの実施形態をより詳しく検
討することが有益であろう。
法が望ましいか否かを動的に決定する実施形態を示す。
第1と第2メッセージディスパッチ技法のラベルは、一
つのメッセージディスパッチ技法を特定コールサイトで
別の技法に切り換えできるという包括表示として示され
る。しかしながら、本発明は2つの技法のみに限定され
ることなく、3つ以上の技法にも有利に適用できる。従
って、第1と第2のラベルは、本発明が2つのメッセー
ジディスパッチ技法だけに限定されるとの表示ではな
い。
スパッチを何時変更すべきかの指標を、特定コールサイ
トで遭遇する異なるレシーバタイプの数に依存してい
る。例として、サイト固有インラインキャッシュ技法
は、このコールサイトで5つの異なるレシーバタイプに
遭遇するまで利用できる。この状況で、異なるレシーバ
タイプが利用されるときは、予測レシーバタイプが実際
のレシーバタイプと異なるような5つの例が存在してい
ることを意味する。これは、ほぼ5回、メソッドルック
アップルーチンがコールされると共に、コールサイトで
格納された予測レシーバタイプが変化したことを意味す
るだろう。例として、クラスAとBのレシーバオブジェ
クト間で5回交替するコールサイトは、5つの異なるレ
シーバタイプとしてカウントされるかもしれない。
サイトで利用できるが、これには、カウンタを維持する
ためのメモリとコンピュータコードの使用を伴う。好ま
しい実施形態において、カウンタはメッセージを扱うメ
ソッドに先行する多重非オペレーション(NOP)命令
として具体化される。図12に関して更に詳細に説明す
るように、メソッドの前に具体化されたNOP命令の数
は、遭遇した異なるレシーバタイプの数を示す。
ッドルックアップルーチンがコールされたか、さもなけ
れば、恐らく現行メッセージディスパッチ技法が効率的
に実行されているものと仮定している。ステップ601
で、システムは、メッセージを扱うメソッドに先立つN
OP命令へメッセージをディスパッチする。システム
は、メソッドの前にNOP命令をいくつ実行するかを決
定することによって、異なるレシーバタイプの数をカウ
ントする。通常、このカウント数は、このサイトのため
にメッセージがディスパッチされたアドレスを、何れの
プロローグも含め、実際のメソッドのアドレスから差し
引くことによって決定される。
数と比較される。所定の数は、異なるメッセージディス
パッチ技法への切換えが望まれる前にコールサイトで遭
遇する異なるレシーバタイプの数である。所定数は静的
に定義してもよいし、ランタイム中に動的に算出しても
よい。
も大きい場合、ステップ609で第2メッセージディス
パッチ技法への切換えが行なわれる。カウント数が所定
数より小さいか等しい場合、これは、現状では第2メッ
セージディスパッチ技法への切換えが望ましくないこと
を示す。実例は、NOP命令がどのようにカウンタとし
て利用され得るかを説明する助けとなるだろう。
なるレシーバタイプの数のカウンタとしてNOP命令が
どのように利用されるかを説明する。メソッド651
は、先に記載のサイト固有インラインキャッシュによっ
て示される。メソッド653はメッセージを扱うが、そ
のメソッドの前に、多重NOP命令を持つNOPセクシ
ョン655が先行する。NOP命令は、それらが何もせ
ず、かつメソッドのオペレーティング速度に不当に影響
しないように選択できる。他の実施形態では、NOP命
令の代わりに他の命令を利用してもよい。
57と、メソッド653のメソッドコード659とに先
行する。NOPセクションは、通常、異なるメッセージ
ディスパッチ技法への切換えが始まる前に、コールサイ
トで遭遇する異なるレシーバタイプの数と同数の、所定
数のNOP命令から構成される。メソッドルックアップ
ルーチンがプロローグ657でコールされる度に、移動
命令はオブジェクトxのレシーバタイプでパッチされ
る。更に、その後のメッセージディスパッチ(例えば、
A::foo())は、メソッドルックアップルーチンに
よって発見された新メソッドのNOPセクション655
のNOP命令の一つに変更される。
は、メソッド653の前に第3NOP命令を指し示す。
プロローグ657が、オブジェクトxはクラスAでない
と決定すると、プロローグは、いくつかの既知のメソッ
ドによってランタイム中に獲得可能な、コールサイトの
固有のアドレスとメソッド653の開始との間の差を算
出する。差またはカウント数は、この特定コールサイト
で遭遇した異なるレシーバタイプの数を示す。カウント
数が所定数よりも大きい場合、プロローグ657は、こ
のコールサイトで利用されるメッセージディスパッチ技
法を切り換えることができる。
は具体化が容易で、早く、またカウンタを維持するため
の過大な量のコンピュータコードを必要としない。更
に、NOPセクション655のNOP命令は、相互に影
響を及ぼすことなく、多重の異なるコールサイトによっ
て参照できる。
ト固有インラインキャッシュであるとして示された。第
2メッセージディスパッチ技法は、いずれも多重レシー
バタイプを扱うために設計されているので、多形インラ
インキャッシュ技法でも、ハッシング技法でもよい。も
ちろん、本発明に関して利用されるメッセージディスパ
ッチ技法に対する制限はない。読者の理解を助けるため
に、特定メッセージディスパッチ技法についてここに説
明した。
に特定コールサイトにおける新メッセージディスパッチ
技法の利用を可能にするサイト固有メッセージディスパ
ッチ技法が提供される。望ましくなったときに各コール
サイトにメッセージディスパッチ技法の切換えを許すこ
とによって、メッセージディスパッチを、より効率的で
フレキシブルにできる。更に、各コールサイトでのオペ
レーションは互に隔離できるので、ひとつのコールサイ
トが別のコールサイトに対するセッティングを変更する
ことがない。 インラインデータベース 本発明は、プログラムのその後の実行のためにレシーバ
タイプおよび/またはインライニング情報をセーブする
技法を提供する。レシーバタイプとインライニング情報
がプログラムのランタイム中に収集できるので、プログ
ラムのその後の実行が情報の再収集を必要とすることな
く、その収集情報の利益を実現できるように、収集され
たランタイム情報を格納することができる。これによっ
て、プログラムはランタイム中に最適化状態を獲得する
と共に、プログラムのその後の実行でその最適化状態に
素早く戻ることができる。
て、それをプログラムのその後の実行のために格納する
本発明の実施形態の高レベルフローチャートを示す。ス
テップ701で、システムはプログラムのメソッドのメ
ッセージディスパッチサイトでレシーバタイプ情報を収
集する。レシーバタイプ情報は、ここに記載されるか別
途に当該技術分野で周知の任意のメッセージディスパッ
チ技法によって収集できる。レシーバタイプ情報は、そ
れらが多重のコールサイトのために収集されるように、
コールサイトに固有であることが望ましい。
タイプ情報が収集されると、それは、ステップ703で
プログラムのその後の実行のためにセーブされる。レシ
ーバタイプ情報は、ユーザーの入力の有無にかかわら
ず、プログラムの正規の終了時にセーブしてもよいし、
ランタイム中のある時点でセーブしてもよい。レシーバ
タイプ情報を収集する実施形態をより詳しく説明するこ
とは有益だろう。
実施形態のフローチャートを示す。ステップ751で、
レシーバタイプ情報が、メソッドの解釈の間に収集され
る。通常、メソッドは、そのメソッドをコンパイルすれ
ば有益であると決定されるまで、Java仮想マシンで
解釈される。メソッドが直ちにコンパイルされるシステ
ムでは、フローはその後のステップで開始できる。
バタイプのようなレシーバタイプ情報は解釈時に収集さ
れるので、一つ以上のメッセージディスパッチ技法を利
用できる。ある時点で、このメソッドをステップ753
でコンパイルすべきか否かの疑問があるかもしれない。
例えば、メソッドが所定回数よりも多く解釈された場
合、そのメソッドはコンパイルすべきである旨決定され
るだろう。そうでない場合は、レシーバタイプ情報は、
メソッドの解釈の間に連続して収集されるだろう。
ルされて、収集されたレシーバタイプ情報がそのメソッ
ドにコンパイルされる。こうして、コンパイルされたメ
ソッドは、収集されたタイプ情報の利益を実現するだろ
う。更に、好ましい実施形態では、コンピュータコード
がコンパイルされたメソッドの中で生成され、ステップ
757でタイプ情報の収集が継続される。
ンパイルされたメソッドのワーキングセットも維持す
る。このワーキングセットも収集されたタイプ情報と共
にセーブできるので、プログラムのその後の実行でシス
テムが利用可能な処理能力を持ったときに(例えば、シ
ステムがユーザー入力に伴なう待機中であるとき)、シ
ステムはそのワーキングセットからメソッドをコンパイ
ルできる。
ソッドを或る時点で再コンパイルすることが有益になる
かもしれない。ステップ759では、メソッドを再コン
パイルすべきか否かが決定される。例として、大量の新
レシーバタイプ情報が収集された場合、メソッドの再コ
ンパイルが有益になるだろう。好ましい実施形態で、メ
ソッドは、それをこのメソッドにインライン(inlined)
すべきと決定された場合に(例えば、ヒューリスティッ
ク)再コンパイルされるだろう。インライニングとは、
メソッドをコールする代わりに、メソッドがその呼出し
(calling) メソッドにコンパイルされることを意味す
る。例えば、メソッドをインラインするのが有益である
と決定された場合、そのメソッドは呼出しメソッドにコ
ンパイルされるので、その呼出しメソッドが今度は、イ
ンラインされたメソッドのコールサイトを含む。
決定されないので、従来のオブジェクト指向システムが
メソッドをインラインすることは、不可能でないとして
も、困難である。しかしながら、レシーバタイプ情報を
収集する本発明では、メソッドのインライニングを有利
に実行できる。更に、インラインされるメソッドは、レ
シーバタイプ情報と共にセーブされるので、プログラム
のその後の実行はそのインライニング情報を利用できる
し、必要なら同メソッドをインラインすることもでき
る。メソッドをコンパイルすべきであると決定された場
合、それはステップ755で再コンパイルされる。
レシーバタイプ情報の収集が停止されて、セーブされ
る。ステップ761をフローチャートの末尾に示すが、
図14のフローチャートでは任意の時点で発生できる。
例えば、実行の間、収集されたレシーバタイプ情報は、
自動的またはユーザー入力の直接の結果の何れかで、セ
ーブできる。それにもかかわらず、通常、レシーバタイ
プ情報の収集は、プログラムの正規の終了時に停止す
る。
タイプ情報がメソッドにコンパイルされた。図15は、
メソッドにコンパイルされたレシーバタイプ情報の実施
形態を示す。メソッド801は、コンピュータコードに
コンパイルされた多形インラインキャッシュによって示
される。コンパイルされたコードは通常、ネイティブマ
シン命令であると考えられるが、多形インラインキャッ
シュの一般的な流れは図示のようになるだろう。オブジ
ェクトxがクラスAである場合、メッセージを扱うため
のメソッドにダイレクトコールが行なわれる。同様に、
クラスBとCに対する表示も存在する。オブジェクトx
が、先に見られなかったクラスの場合、メソッドルック
アップルーチンへのコールによってルックアップされる
だろう。この新レシーバタイプ情報は、コンパイルされ
たメソッドによって蓄積されるので、後からの再コンパ
イルは、新レシーバ情報を利用することができる(ステ
ップ759参照)。
ることは、プログラムのその後の実行に対して、先に収
集されたレシーバタイプ情報の利用を可能にする。かく
して、メソッドが最適化されると、そのメソッドは、プ
ログラムのその後の実行で素早く最適化状態に戻ること
ができる。図16は、収集されたレシーバタイプ情報が
どのようにJavaクラスファイルに格納されるかを示
す。
ションを含む。ヘッダーセクション853はマジック数
(0xCAFEBABE)、マイナーバージョン数、お
よびメジャーバージョン数を含む。定数プール855は
定数を含む。アクセス情報セクション857は、このク
ラスへの、そして定数プール内のスーパークラスへのア
クセスフラグとポインタとを含む。更に、インタフェー
スセクション859、フィールドセクション861、お
よびメソッドセクション863が存在する。
ョン865である。入れ子式レシーバタイプは図示の属
性セクションに格納できる。図示のように、レシーバタ
イプに遭遇したコールサイトへのリファレンスが存在す
るかもしれない。リファレンスはメソッド内のオフセッ
トかもしれない。レシーバタイプは、コールサイトがメ
ソッド内で如何に深く位置付けられるかに関して入れ子
状をなす。従って、コールサイトがインラインメソッド
からの場合、これらのコールサイトの入れ子は、より深
くなる。好ましい実施形態では、入れ子式レシーバタイ
プは、レシーバタイプ情報の収集のために利用される多
形インラインキャッシュに似たテキストである。それが
認識しない属性セクション865の一部または全部の属
性を黙って無視するためには、Java仮想マシンイン
プリメンテーションが必要である。従って、収集された
レシーバタイプ情報をこのロケーションに置くことは、
他の仮想マシンインプリメンテーションに悪影響を与え
ない。
情報を含む入れ子式レシーバタイプ情報を示す。数字1
5は、15によって引照されたコールサイト(例えば、
オフセット)でありクラスA、B、Cに遭遇したことを
示す。クラスAについては、このコールサイトで呼び出
されたメソッドがインラインされて、入れ子式エントリ
によって表示される。4は、インラインメソッド内の4
で引照されたコールサイトでありクラスRに遭遇したこ
とを表す。同様に、クラスCについては、インラインメ
ソッド内の4で引照されたコールサイトでありクラスR
とTに遭遇した。従って、レシーバタイプ情報は、先の
プログラムの実行からのインライニング情報を提供する
ことができる。
のためにコールサイトでレシーバタイプ情報を格納する
インラインデータベースが提供される。次回にプログラ
ムが実行されるときは、Java仮想マシンが、先に収
集されたレシーバタイプ情報を利用して、この情報の再
収集に時間をかけることなくプログラムを最適化でき
る。従って、Javaプログラムが最適化状態に達し
て、収集されたレシーバタイプ情報がクラスファイルに
格納されると、プログラムはその後の実行で、より効率
的に動作できる。更に、クラスファイルはマシンから独
立しているので、効率は、いずれのコンピュータシステ
ムやアーキテクチャへも限定されることはない。 結論 上記は本発明の好ましい実施形態の完全な説明だが、使
用可能な代替や変更や同等仕様が存在する。上記の実施
形態に適切な変更を加えることによって、本発明を等し
く適用できることは言うまでもない。例えば、インライ
ンデータベース技法を、多形インラインキャッシュを利
用してレシーバタイプ情報を収集するものとして説明し
た。しかしながら、本発明はいずれのメッセージディス
パッチ技法にも限定されず、本明細書に記載の技法を含
む他のメッセージディスパッチ技法に有利に適用でき
る。従って、上記の説明は、添付の特許請求項の共通点
と限界、ならびに同等仕様の全範囲によって定義される
本発明の範囲を制限するものと見做してはならない。
クラスのクラス階層構造を説明する。
めのインラインキャッシュ技法を説明する。
めの多形インラインキャッシュ技法を説明する。
めのハッシング技法を説明する。
されるコンピュータシステムの例を説明する。
ク図を説明する。
実行されるかを説明する。
めのサイト固有インラインキャッシュ技法の実施形態を
説明する。
めのサイト固有インラインキャッシュ技法の高レベルフ
ローチャートを示す。
施形態の高レベルフローチャートを示す。
トで望ましいか否かを動的に決定するフローチャートを
示す。
ーバタイプの数をカウントする、サイト固有メッセージ
ディスパッチ技法の実施形態を説明する。
タイプ情報をセーブするように利用されるインラインデ
ータベースの高レベルフローチャートを示す。
釈およびコンパイルされた実行中にレシーバタイプ情報
を収集するフローチャートを示す。
ための多形インラインキャッシュ技法を含むようにコン
パイルされた方法を説明する。
セクションに格納されたJavaクラスファイルを説明
する。
イ、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…属性セクション。
Claims (28)
- 【請求項1】 コンピュータシステムにおいて、オブジ
ェクト指向プログラムのためのメッセージディスパッチ
を実行する方法であって、 メッセージをレシーバオブジェクトへディスパッチする
第1メソッドのサイトでレシーバタイプ情報を収集する
工程と、および前記プログラムのその後の実行のために
前記レシーバタイプ情報をセーブする工程とを含む方
法。 - 【請求項2】 前記レシーバタイプ情報は、メッセージ
が前記サイトからディスパッチされた異なる各レシーバ
タイプを含む請求項1に記載の方法。 - 【請求項3】 前記レシーバタイプ情報は、メッセージ
が前記サイトからディスパッチされた異なる各レシーバ
タイプに対するコールサイトへのリファレンスを含む請
求項1に記載の方法。 - 【請求項4】 前記レシーバタイプ情報は、インライン
メソッドのコールサイトで遭遇するレシーバタイプを含
む請求項1に記載の方法。 - 【請求項5】 前記レシーバタイプ情報は、前記プログ
ラムが解釈されている間に収集される請求項1〜4のい
ずれか1項に記載の方法。 - 【請求項6】 メッセージをレシーバオブジェクトへデ
ィスパッチする前記サイトを含む前記第1メソッドを何
時コンパイルするのが望ましいかを決定する工程を更に
含む請求項1〜5のいずれか1項に記載の方法。 - 【請求項7】 前記第1メソッドを何時コンパイルすれ
ば望ましいかを決定する工程は、前記第1メソッドが何
時、所定の回数より多く呼び出されたかを決定する工程
を含む請求項6に記載の方法。 - 【請求項8】 更に、メッセージをレシーバオブジェク
トへディスパッチする前記サイトで前記レシーバタイプ
情報を含むように、前記第1メソッドをコンパイルする
工程を含む請求項1〜7のいずれか1項に記載の方法。 - 【請求項9】 前記コンパイルされた第1メソッドがレ
シーバタイプ情報の収集を継続する請求項8に記載の方
法。 - 【請求項10】 前記レシーバタイプ情報は、多形イン
ラインキャッシュに収集される請求項1および5〜9の
いずれか1項に記載の方法。 - 【請求項11】 前記レシーバタイプ情報は、前記第1
メソッド用のクラスファイルにセーブされる請求項1お
よび5〜9のいずれか1項に記載の方法。 - 【請求項12】 前記レシーバタイプ情報は、前記クラ
スファイルの属性セクションにセーブされる請求項11
に記載の方法。 - 【請求項13】 オブジェクト指向プログラムのための
メッセージディスパッチを実行するコンピュータプログ
ラムプロダクトであって、 メッセージをレシーバオブジェクトへディスパッチする
メソッドのサイトでレシーバタイプ情報を収集するコン
ピュータコードと、 前記プログラムのその後の実行のために前記レシーバタ
イプ情報をセーブするコンピュータコードと、および前
記コンピュータコードを格納するコンピュータ読取り可
能媒体とを含むコンピュータプログラムプロダクト。 - 【請求項14】 オブジェクト指向プログラムのための
メッセージディスパッチを実行するコンピュータシステ
ムであって、 コンピュータコードを実行するプロセッサと、 メッセージをレシーバオブジェクトへディスパッチする
メソッドのサイトでレシーバタイプ情報を収集するコン
ピュータコードと、 前記プログラムのその後の実行のために前記レシーバタ
イプ情報をセーブするコンピュータコードと、および前
記プロセッサが実行すべき前記コンピュータコードを格
納するコンピュータ読取り可能媒体とを備えるコンピュ
ータシステム。 - 【請求項15】 コンピュータシステムにおいて、オブ
ジェクト指向プログラムのためのメッセージディスパッ
チを実行する方法であって、 解釈の間、メッセージをレシーバオブジェクトにディス
パッチする第1メソッドのサイトでレシーバタイプ情報
を収集する工程であり、前記レシーバタイプ情報は異な
る各レシーバタイプと、メッセージが前記サイトからデ
ィスパッチされた異なる各レシーバタイプに対する前記
サイトへのリファレンスとを含む工程と、 メッセージをレシーバオブジェクトへディスパッチする
サイトを含む前記第1メソッドをコンパイルするのが望
ましいと決定する工程と、 メッセージをレシーバオブジェクトへディスパッチする
前記サイトで前記レシーバタイプ情報を含むように前記
第1メソッドをコンパイルする工程と、および、 前記プログラムのその後の実行のために前記レシーバタ
イプ情報をセーブする工程とを含む方法。 - 【請求項16】 前記レシーバタイプ情報は、インライ
ンメソッドのコールサイトで遭遇するレシーバタイプを
含む請求項15に記載の方法。 - 【請求項17】 第1メソッドをコンパイルすれば望ま
しいと決定する工程は、前記メソッドは所定の回数より
多く呼び出されたと決定する工程を含む請求項15また
は16に記載の方法。 - 【請求項18】 前記コンパイルされた第1メソッド
は、レシーバタイプ情報の収集を継続する請求項15に
記載の方法。 - 【請求項19】 前記レシーバタイプ情報は、多形イン
ラインキャッシュのうちのひとつに収集される請求項1
5に記載の方法。 - 【請求項20】 前記レシーバタイプ情報は、前記メソ
ッドのためのJavaクラスファイルにセーブされる請
求項15に記載の方法。 - 【請求項21】 前記レシーバタイプ情報は、前記Ja
vaクラスファイルの属性セクションにセーブされる請
求項20に記載の方法。 - 【請求項22】 オブジェクト指向プログラムのための
メッセージディスパッチを実行するコンピュータプログ
ラムプロダクトであって、 解釈の間、メッセージをレシーバオブジェクトへディス
パッチするメソッドのサイトでレシーバタイプ情報を収
集するコンピュータコードであり、前記レシーバタイプ
情報は異なる各レシーバタイプと、メッセージが前記サ
イトからディスパッチされた異なる各レシーバタイプに
対する前記サイトへのリファレンスとを含む前記コンピ
ュータコードと、 メッセージをレシーバオブジェクトへディスパッチする
前記サイトを含む前記メソッドをコンパイルするのが望
ましいと決定するコンピュータコードと、 メッセージをレシーバオブジェクトへディスパッチする
前記サイトで前記レシーバタイプ情報を含むように前記
メソッドをコンパイルするコンピュータコードと、 前記プログラムのその後の実行のために前記レシーバタ
イプ情報をセーブするコンピュータコードと、および前
記コンピュータコードを格納するコンピュータ読取り可
能媒体とを含むコンピュータプログラムプロダクト。 - 【請求項23】 オブジェクト指向プログラムのための
メッセージディスパッチを実行するコンピュータシステ
ムであって、 コンピュータコードを実行するプロセッサと、 解釈の間、メッセージをレシーバオブジェクトへディス
パッチするメソッドのサイトでレシーバタイプ情報を収
集するコンピュータコードであり、前記レシーバタイプ
情報は異なる各レシーバタイプと、メッセージが前記サ
イトからディスパッチされた異なる各レシーバタイプに
対する前記サイトへのリファレンスとを含む前記コンピ
ュータコードと、 メッセージをレシーバオブジェクトへディスパッチする
前記サイトを含む前記メソッドをコンパイルするのが望
ましいと決定するコンピュータコードと、 メッセージをレシーバオブジェクトへディスパッチする
前記サイトで前記レシーバタイプ情報を含むように前記
メソッドをコンパイルするコンピュータコードと、 前記プログラムのその後の実行のために前記レシーバタ
イプ情報をセーブするコンピュータコードと、および前
記プロセッサが実行すべき前記コンピュータコードを格
納するコンピュータ読取り可能媒体とを含むコンピュー
タシステム。 - 【請求項24】 オブジェクト指向メソッドのための、
コンピュータ読取り可能媒体によって格納されたデータ
構造であって、 前記コンピュータ読取り可能媒体によって格納された少
なくとも一つのレシーバタイプと、および前記メソッド
のメッセージディスパッチサイトでのディスパッチされ
たメッセージであったレシーバタイプである、前記コン
ピュータ読取り可能媒体による入れ子式レシーバタイプ
とを含むデータ構造。 - 【請求項25】 前記入れ子式レシーバタイプは、前記
メソッドのメッセージディスパッチサイトへのリファレ
ンスを含む請求項24に記載のデータ構造。 - 【請求項26】 前記入れ子式レシーバタイプは、イン
ラインメソッドのメッセージディスパッチサイトでのデ
ィスパッチされたメッセージであったレシーバタイプを
含む請求項24に記載のデータ構造。 - 【請求項27】 前記データ構造は、前記メソッドのた
めのJavaクラスファイルにセーブされる請求項24
に記載のデータ構造。 - 【請求項28】 前記データ構造は、Javaクラスフ
ァイルの属性セクションにセーブされる請求項27に記
載のデータ構造。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101827143B1 (ko) * | 2016-08-26 | 2018-02-08 | 강원대학교산학협력단 | 객체의 바이너리 호환성을 유지하는 컴퓨팅 장치 및 방법 |
Families Citing this family (25)
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)
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 |
-
1997
- 1997-10-06 US US08/944,332 patent/US6317796B1/en not_active Expired - Lifetime
-
1998
- 1998-09-24 DE DE69810056T patent/DE69810056T2/de not_active Expired - Lifetime
- 1998-09-24 EP EP98307754A patent/EP0908815B1/en not_active Expired - Lifetime
- 1998-10-05 CN CN98124629A patent/CN1237737A/zh active Pending
- 1998-10-06 JP JP10319737A patent/JP2000003280A/ja active Pending
- 1998-10-07 KR KR1019980042467A patent/KR100555116B1/ko not_active IP Right Cessation
-
2001
- 2001-06-28 US US09/896,075 patent/US7137123B2/en not_active Expired - Fee Related
Cited By (1)
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 |