JPH11272468A - オブジェクト指向システムにおけるサイト特定メッセージディスパッチ - Google Patents

オブジェクト指向システムにおけるサイト特定メッセージディスパッチ

Info

Publication number
JPH11272468A
JPH11272468A JP10319741A JP31974198A JPH11272468A JP H11272468 A JPH11272468 A JP H11272468A JP 10319741 A JP10319741 A JP 10319741A JP 31974198 A JP31974198 A JP 31974198A JP H11272468 A JPH11272468 A JP H11272468A
Authority
JP
Japan
Prior art keywords
receiver
message
type
predicted
site
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
JP10319741A
Other languages
English (en)
Inventor
Robert Greisemer
グライセマー ロバート
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 JPH11272468A publication Critical patent/JPH11272468A/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
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Abstract

(57)【要約】 【課題】 オブジェクト指向環境におけるサイト固有メ
ッセージディスパッチを実行するためのシステムとメソ
ッドが提供される。 【解決手段】 レシーバタイプ情報は、サイト固有メッ
セージディスパッチを提供するためにメッセージディス
パッチサイトでセーブできる。異なるコールサイトでの
メッセージディスパッチの変更を許すことによって、オ
ブジェクト指向システムを、より効率的でフレキシブル
にできる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、オブジェクト指向
システムにおけるメッセージディスパッチに関する。よ
り詳細には、本発明はJava(登録商標)仮想マシン
のためのサイト固有メッセージディスパッチに関する。
【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が最初、次の通りであったと仮
定する: 従って、メソッドメインは、オブジェクト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に示すような多形インラインキャッ
シュの使用である。先と同様に、メソッド101は、最
初はメソッドディスパッチx.foo()を含んでいた。
多形インラインキャッシュでは、異なるレシーバタイプ
に対するメッセージディスパッチを実行できるスタブ1
03が生成される。原メッセージディスパッチは、多形
インラインキャッシュスタブ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】従って、スピードとコンピュータコードサ
イズに関して共に効率的なサイト固有メッセージディス
パッチに対する要求がある。更に、フレキシブルで、オ
ブジェクト指向プログラムの実行に応じて順応できるサ
イト固有のメッセージディスパッチに対する要求があ
る。
【0016】
【課題を解決するための手段】本発明の実施形態は、ス
ピードとコンピュータサイズに関して効率的な革新的サ
イト固有(specific)メッセージディスパッチ技法を提
供する。サイト固有メッセージディスパッチ技法を提供
することによって、メッセージディスパッチを各メッセ
ージディスパッチサイトに対して最適化できる。従っ
て、すべてのコールサイトに対して効率的な一つのメッ
セージディスパッチ技法を発見しようと努める代わり
に、技法を調節して、特定サイトに、より良く適合させ
ることができる。本発明のいくつかの実施形態を以下に
説明する。
【0017】一実施形態で、本発明は、オブジェクト指
向環境におけるメッセージディスパッチを実行(具体
化)する方法を提供する。予測されたレシーバタイプ
は、メッセージがレシーバオブジェクトへディスパッチ
されるサイトでセーブされる。次に、メッセージはレシ
ーバオブジェクトへ送られる。レシーバオブジェクトが
メッセージを受けると、そのレシーバオブジェクトが、
セーブされた予測レシーバタイプである旨確認される。
通常、予測レシーバタイプは、メッセージディスパッチ
命令に先立つ移動命令によってレジスタにセーブされ
る。
【0018】もうひとつの実施形態で、本発明は、オブ
ジェクト指向環境におけるメッセージディスパッチを実
行する方法を提供する。予測レシーバタイプは、メッセ
ージがレシーバオブジェクトへディスパッチされるサイ
トでセーブされる。次に、メッセージはレシーバオブジ
ェクトへ送られる。レシーバオブジェクトがメッセージ
を受けると、そのレシーバオブジェクトが、セーブされ
た予測レシーバタイプである旨確認される。レシーバオ
ブジェクトが、セーブされた予測レシーバタイプでない
場合、予測レシーバタイプはレシーバオブジェクトのタ
イプに変更され、メソッドルックアップルーチンがコー
ルされて新メソッドが獲得され、サイトが変更されて新
メソッドが呼び出される。
【0019】もうひとつの実施形態で、本発明は、オブ
ジェクト指向プログラムのためのメッセージディスパッ
チを実行する方法を提供する。第1メッセージディスパ
ッチ技法が特定サイトで実行されて、メッセージをレシ
ーバオブジェクトにディスパッチする。プログラム実行
中に動的に、第2メッセージディスパッチ技法がその特
定サイトで望ましいか否か決定される。第2メッセージ
ディスパッチ技法が望ましい場合、その第2メッセージ
ディスパッチ技法がその特定サイトで実行されて、メッ
セージをレシーバオブジェクトへディスパッチする。好
ましい実施形態では、特定サイトがメッセージを、所定
数より多い異なるレシーバオブジェクトタイプへディス
パッチした場合、第2メッセージディスパッチ技法は望
ましいと決定される。
【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によって開発された。通常、Jav
aプログラミング言語で書かれたコンピュータプログラ
ムは、バイトコード、すなわちその後に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】上述のように、望ましいと見做されるとき
に特定コールサイトにおける新メッセージディスパッチ
技法の利用を可能にするサイト固有メッセージディスパ
ッチ技法が提供される。望ましくなったときに各コール
サイトにメッセージディスパッチ技法の切換えを許すこ
とによって、メッセージディスパッチを、より効率的で
フレキシブルにできる。更に、各コールサイトでのオペ
レーションは互に隔離できるので、ひとつのコールサイ
トが別のコールサイトに対するセッティングを変更する
ことがない。 結論 上記は本発明の好ましい実施形態の完全な説明だが、使
用可能な代案や修正案や同等仕様が存在する。上述の実
施形態に適切な修正を加えることによって、本発明を等
しく適用できることは言うまでもない。例えば、サイト
固有メッセージディスパッチ技法は、発明の精神から逸
脱することなく、オブジェクト指向言語に有利に適用で
きる。従って、上記の説明は、添付の特許請求項の共通
点と限界、ならびに同等仕様の全範囲によって定義され
る本発明の範囲を制限するものと見做してはならない。
【図面の簡単な説明】
【図1】オブジェクト指向環境における仮想関数を含む
クラスのクラス階層構造を説明する。
【図2】オブジェクト指向メッセージディスパッチのた
めのインラインキャッシュ技法を説明する。
【図3】オブジェクト指向メッセージディスパッチのた
めの多形インラインキャッシュ技法を説明する。
【図4】オブジェクト指向メッセージディスパッチのた
めのハッシング技法を説明する。
【図5】本発明の実施形態におけるソフトウェアの実行
に利用されるコンピュータシステムの例を説明する。
【図6】図5のコンピュータシステムのシステムブロッ
ク図を説明する。
【図7】Javaソースコードプログラムがどのように
実行されるかを説明する。
【図8】オブジェクト指向メッセージディスパッチのた
めのサイト固有インラインキャッシュ技法の実施形態を
説明する。
【図9】オブジェクト指向メッセージディスパッチのた
めのサイト固有インラインキャッシュ技法の高レベルフ
ローチャートを示す。
【図10】サイト固有メッセージディスパッチ技法の実
施形態の高レベルフローチャートを示す。
【図11】別のメッセージディスパッチ技法が特定サイ
トで望ましいか否かを動的に決定するフローチャートを
示す。
【図12】NOP命令を利用して、遭遇した異なるレシ
ーバタイプの数をカウントする、サイト固有メッセージ
ディスパッチ技法の実施形態を説明する。
【符号の説明】
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,653
…メソッド、455,657…プロローグ、457…メ
ソッドコード、501,503,505,507,50
9,511,513,515,553,555,60
1,605,607,609…ステップ、655…NO
Pセクション。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ウールズ ホルツル アメリカ合衆国, カリフォルニア州, ゴリータ, ダヴェンポート ロード 7220, ナンバー105

Claims (29)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータシステムにおいて、オブジ
    ェクト指向環境のメッセージディスパッチを実行する方
    法であって、 メッセージがレシーバオブジェクトへディスパッチされ
    るサイトで、予測レシーバタイプをセーブする工程と、 前記メッセージを前記レシーバオブジェクトへ送る工程
    と、および前記レシーバオブジェクトが前記メッセージ
    を受け取ると、前記レシーバオブジェクトが前記セーブ
    された予測レシーバタイプであると確認する工程とを含
    む方法。
  2. 【請求項2】 予測レシーバタイプをセーブする工程
    は、前記予測レシーバタイプをレジスタに格納する工程
    を含む請求項1に記載の方法。
  3. 【請求項3】 メッセージは、ディスパッチされるサイ
    トに先立つ移動命令を利用して、前記予測レシーバタイ
    プを前記レジスタに格納する請求項2に記載の方法。
  4. 【請求項4】 予測レシーバタイプをセーブする工程
    は、前記予測レシーバタイプをメモリロケーションに格
    納する工程を含む請求項1に記載の方法。
  5. 【請求項5】 予測レシーバタイプをセーブする工程
    は、前記予測レシーバタイプを前記メッセージのパラメ
    ータとして前記レシーバオブジェクトへ渡す工程を含む
    請求項1に記載の方法。
  6. 【請求項6】 更に、前記レシーバオブジェクトは、前
    記セーブされた予測レシーバタイプでない場合、前記予
    測レシーバタイプを前記レシーバオブジェクトのタイプ
    に変更する工程を含む請求項1〜5のいずれか1項に記
    載の方法。
  7. 【請求項7】 更に、メソッドルックアップルーチンを
    コールして前記メソッドルックアップルーチンから新メ
    ソッドを獲得する工程を含む請求項1〜6のいずれか1
    項に記載の方法。
  8. 【請求項8】 更に、前記サイトを変更して新メソッド
    を呼び出す工程を含む請求項7に記載の方法。
  9. 【請求項9】 前記レシーバオブジェクトを確認する工
    程は、前記レシーバオブジェクトのレシーバタイプを獲
    得する工程と、および、前記レシーバオブジェクトの前
    記レシーバタイプを、前記セーブされた予測レシーバタ
    イプと比較する工程とを含む請求項1〜8のいずれか1
    項に記載の方法。
  10. 【請求項10】 更に、前記レシーバタイプは、前記セ
    ーブされた予測レシーバタイプに等しくない場合、前記
    予測レシーバタイプを前記レシーバオブジェクトの前記
    レシーバタイプに変更する工程を含む請求項9に記載の
    方法。
  11. 【請求項11】 更に、前記レシーバオブジェクトの前
    記レシーバタイプは、前記セーブされた予測レシーバタ
    イプに等しくない場合、メソッドルックアップルーチン
    をコールする工程を含む請求項9または10に記載の方
    法。
  12. 【請求項12】 更に、前記メソッドルックアップルー
    チンから新メソッドを獲得する工程を含む請求項11に
    記載の方法。
  13. 【請求項13】 更に、前記サイトを変更して新メソッ
    ドを呼び出す工程を含む請求項12に記載の方法。
  14. 【請求項14】 オブジェクト指向環境のメッセージデ
    ィスパッチを実行するコンピュータプログラムプロダク
    トであって、 メッセージがレシーバオブジェクトへディスパッチされ
    るサイトで、予測レシーバタイプをセーブするコンピュ
    ータコードと、 前記メッセージを前記レシーバオブジェクトへ送るコン
    ピュータコードと、 前記レシーバオブジェクトが前記メッセージを受信する
    と、前記レシーバオブジェクトが前記セーブされた予測
    レシーバタイプであると確認するコンピュータコード
    と、および前記コンピュータコードを格納するコンピュ
    ータ読取り可能媒体とを備えるコンピュータプログラム
    プロダクト。
  15. 【請求項15】前記コンピュータ読取り可能媒体は、C
    D−ROM、フロッピーディスク、テープ、フラッシュ
    メモリ、システムメモリ、ハードドライブ、および搬送
    波に組み込まれたデータ信号から成る群から選択される
    請求項14に記載のコンピュータプログラムプロダク
    ト。
  16. 【請求項16】 オブジェクト指向環境のメッセージデ
    ィスパッチを実行するコンピュータシステムであって、 コンピュータコードを実行するプロセッサと、 メッセージがレシーバオブジェクトへディスパッチされ
    るサイトで、予測レシーバタイプをセーブするコンピュ
    ータコードと、 前記メッセージを前記レシーバオブジェクトへ送るコン
    ピュータコードと、 前記レシーバオブジェクトが前記メッセージを受けた
    ら、前記レシーバオブジェクトが前記セーブされた予測
    レシーバタイプであると確認するコンピュータコード
    と、および、 前記プロセッサが実行すべき前記コンピュータコードを
    格納するコンピュータ読取り可能媒体とを備えるコンピ
    ュータシステム。
  17. 【請求項17】 コンピュータシステムにおいて、オブ
    ジェクト指向環境のメッセージディスパッチを実行する
    方法であって、 メッセージがレシーバオブジェクトへディスパッチされ
    るサイトで、予測レシーバタイプをセーブする工程と、 前記メッセージを前記レシーバオブジェクトへ送る工程
    と、 前記レシーバオブジェクトが前記メッセージを受ける
    と、前記レシーバオブジェクトが前記セーブされた予測
    レシーバタイプであると確認する工程と、 前記レシーバオブジェクトが前記セーブされた予測レシ
    ーバタイプでない場合、前記予測レシーバタイプを前記
    レシーバオブジェクトのタイプへ変更する工程と、 前記レシーバオブジェクトが前記セーブされた予測レシ
    ーバタイプでない場合、メソッドルックアップルーチン
    をコールして新メソッドを獲得する工程と、および前記
    サイトを変更して新メソッドを呼び出す工程とを含む方
    法。
  18. 【請求項18】 予測レシーバタイプをセーブする工程
    は、前記予測レシーバタイプをレジスタに移動する工
    程、前記予測レシーバタイプをレジスタに格納する工
    程、および前記予測レシーバタイプを前記メッセージの
    パラメータとして前記レシーバオブジェクトへ渡す工程
    から成る群から選択された一つの工程を含む請求項17
    に記載の方法。
  19. 【請求項19】 前記レシーバオブジェクトを確認する
    工程は、前記レシーバオブジェクトのレシーバタイプを
    獲得する工程と、および前記レシーバオブジェクトの前
    記レシーバタイプを、前記セーブされた予測レシーバタ
    イプと比較する工程とを含む請求項17または18に記
    載の方法。
  20. 【請求項20】 オブジェクト指向環境のメッセージデ
    ィスパッチを実行するコンピュータプログラムプロダク
    トであって、 メッセージがレシーバオブジェクトへディスパッチされ
    るサイトで、予測レシーバタイプをセーブするコンピュ
    ータコードと、 前記メッセージを前記レシーバオブジェクトへ送るコン
    ピュータコードと、 前記レシーバオブジェクトが前記メッセージを受ける
    と、前記レシーバオブジェクトが前記セーブされた予測
    レシーバタイプであると確認するコンピュータコード
    と、 前記レシーバオブジェクトが前記セーブされた予測レシ
    ーバタイプでない場合、前記予測レシーバタイプを、前
    記レシーバオブジェクトのタイプに変更するコンピュー
    タコードと、 前記レシーバオブジェクトが前記セーブされた予測レシ
    ーバタイプでない場合、メソッドルックアップルーチン
    をコールして新メソッドを獲得するコンピュータコード
    と、 前記サイトを変更して前記新メソッドを呼び出すコンピ
    ュータコードと、および前記コンピュータコードを格納
    するコンピュータ読取り可能媒体とを備えるコンピュー
    タプログラムプロダクト。
  21. 【請求項21】 前記コンピュータ読取り可能媒体は、
    CD−ROM、フロッピーディスク、テープ、フラッシ
    ュメモリ、システムメモリ、ハードドライブ、および搬
    送波に組み込まれたデータ信号から成る群から選択され
    る請求項20に記載のコンピュータプログラムプロダク
    ト。
  22. 【請求項22】 オブジェクト指向環境のメッセージデ
    ィスパッチを実行するコンピュータシステムであって、 コンピュータコードを実行するプロセッサと、 メッセージがレシーバオブジェクトへディスパッチされ
    るサイトで、予測レシーバタイプをセーブするコンピュ
    ータコードと、 前記メッセージを前記レシーバオブジェクトへ送るコン
    ピュータコードと、 前記レシーバオブジェクトが前記メッセージを受信する
    と、前記レシーバオブジェクトが前記セーブされた予測
    レシーバタイプであると確認するコンピュータコード
    と、 前記レシーバオブジェクトが前記セーブされた予測レシ
    ーバタイプでない場合、前記予測レシーバタイプを前記
    レシーバオブジェクトのタイプに変更するコンピュータ
    コードと、 前記レシーバオブジェクトが前記セーブされた予測レシ
    ーバタイプでない場合、メソッドルックアップルーチン
    をコールして新メソッドを獲得するコンピュータコード
    と、 前記サイトを変更して前記新メソッドを呼び出すコンピ
    ュータコードと、および前記プロセッサが実行すべき前
    記コンピュータコードを格納するコンピュータ読取り可
    能媒体とを備えるコンピュータシステム。
  23. 【請求項23】 コンピュータシステムにおいて、オブ
    ジェクト指向プログラムのためのメッセージディスパッ
    チを実行する方法であって、 第1メッセージディスパッチ技法を特定サイトで実行し
    てメッセージをレシーバオブジェクトへディスパッチす
    る工程と、 第2メッセージディスパッチ技法が前記特定サイトで望
    ましいか否か、をプログラム実行中に動的に決定する工
    程と、および前記第2メッセージディスパッチ技法が望
    ましい場合、前記第2メッセージディスパッチ技法を前
    記特定サイトで実行して、メッセージを前記レシーバオ
    ブジェクトへディスパッチする工程とを含む方法。
  24. 【請求項24】 第2メッセージディスパッチ技法は望
    ましいか否か、をプログラム実行中に決定する工程は、
    前記特定サイトがメッセージを第1所定数より多い異な
    るレシーバタイプへディスパッチしたか否か、を決定す
    る工程を含む請求項23に記載の方法。
  25. 【請求項25】 更に、前記第1ディスパッチ技法は、
    メッセージをディスパッチした、異なるレシーバタイプ
    のカウント数を維持する工程を含む請求項24に記載の
    方法。
  26. 【請求項26】 前記第1メッセージディスパッチ技法
    は、プログラム実行の前に静的に決定される請求項23
    〜25のいずれか1項に記載の方法。
  27. 【請求項27】 前記第1メッセージディスパッチ技法
    は、インラインキャッシングである請求項23〜25の
    いずれか1項に記載の方法。
  28. 【請求項28】 前記第2メッセージディスパッチ技法
    は、多形インラインキャッシングとハッシングから選択
    される請求項23〜27のいずれか1項に記載の方法。
  29. 【請求項29】 オブジェクト指向プログラムためのメ
    ッセージディスパッチを実行するコンピュータシステム
    であって、 コンピュータコードを実行するプロセッサと、 第1メッセージディスパッチ技法を特定サイトで実行し
    てメッセージをレシーバオブジェクトへディスパッチす
    るコンピュータコードと、 第2メッセージディスパッチ技法が前記特定サイトで望
    ましいか否か、をプログラム実行中に動的に決定するコ
    ンピュータコードと、 前記第2メッセージディスパッチ技法が望ましい場合、
    前記第2メッセージディスパッチ技法を前記特定サイト
    でその後に実行して、メッセージを前記レシーバオブジ
    ェクトへディスパッチするコンピュータコードと、 前記プロセッサが実行すべき前記コンピュータコードを
    格納するコンピュータ読取り可能媒体と、 を備えるコンピュータシステム。
JP10319741A 1997-10-06 1998-10-06 オブジェクト指向システムにおけるサイト特定メッセージディスパッチ Pending JPH11272468A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/944331 1997-10-06
US08/944,331 US6385660B2 (en) 1997-10-06 1997-10-06 Site specific message dispatch in object-oriented systems

Publications (1)

Publication Number Publication Date
JPH11272468A true JPH11272468A (ja) 1999-10-08

Family

ID=25481206

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10319741A Pending JPH11272468A (ja) 1997-10-06 1998-10-06 オブジェクト指向システムにおけるサイト特定メッセージディスパッチ

Country Status (6)

Country Link
US (1) US6385660B2 (ja)
EP (1) EP0908814B1 (ja)
JP (1) JPH11272468A (ja)
KR (1) KR19990037014A (ja)
CN (1) CN1105968C (ja)
DE (1) DE69805728T2 (ja)

Families Citing this family (44)

* 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
US7966234B1 (en) 1999-05-17 2011-06-21 Jpmorgan Chase Bank. N.A. Structured finance performance analytics system
US7234146B1 (en) * 1999-07-30 2007-06-19 International Business Machines Corporation Object in, object out technique
US7249095B2 (en) 2000-06-07 2007-07-24 The Chase Manhattan Bank, N.A. System and method for executing deposit transactions over the internet
US6779106B1 (en) 2000-09-28 2004-08-17 International Business Machines Corporation Apparatus and method for an enhanced integer divide in an IA64 architecture
US6799262B1 (en) 2000-09-28 2004-09-28 International Business Machines Corporation Apparatus and method for creating instruction groups for explicity parallel architectures
US6883165B1 (en) 2000-09-28 2005-04-19 International Business Machines Corporation Apparatus and method for avoiding deadlocks in a multithreaded environment
US6886094B1 (en) 2000-09-28 2005-04-26 International Business Machines Corporation Apparatus and method for detecting and handling exceptions
US6912647B1 (en) 2000-09-28 2005-06-28 International Business Machines Corportion Apparatus and method for creating instruction bundles in an explicitly parallel architecture
US6779188B1 (en) * 2000-09-28 2004-08-17 International Business Machines Corporation Apparatus and method for improved devirtualization of method calls
US7313541B2 (en) 2000-11-03 2007-12-25 Jpmorgan Chase Bank, N.A. System and method for estimating conduit liquidity requirements in asset backed commercial paper
US7984147B2 (en) * 2000-12-29 2011-07-19 Hewlett-Packard Development Company, L.P. Apparatus and method for identifying a requested level of service for a transaction
US7596526B2 (en) * 2001-04-16 2009-09-29 Jpmorgan Chase Bank, N.A. System and method for managing a series of overnight financing trades
DE10131944A1 (de) * 2001-07-02 2003-01-16 Siemens Ag Verfahren zur Verarbeitung von Daten
US8224723B2 (en) 2002-05-31 2012-07-17 Jpmorgan Chase Bank, N.A. Account opening system, method and computer program product
CN1464401B (zh) * 2002-06-28 2010-05-26 国际商业机器公司 使用影子对象进行核准控制的面向对象系统和方法
US20050044033A1 (en) * 2003-01-10 2005-02-24 Gelson Andrew F. Like-kind exchange method
US20040148247A1 (en) * 2003-01-24 2004-07-29 Lawrence Miller Network-based systems, methods, and software for initiating or executing financial transactions
US7634435B2 (en) * 2003-05-13 2009-12-15 Jp Morgan Chase Bank Diversified fixed income product and method for creating and marketing same
US7770184B2 (en) * 2003-06-06 2010-08-03 Jp Morgan Chase Bank Integrated trading platform architecture
US20050015324A1 (en) * 2003-07-15 2005-01-20 Jacob Mathews Systems and methods for trading financial instruments across different types of trading platforms
US7970688B2 (en) * 2003-07-29 2011-06-28 Jp Morgan Chase Bank Method for pricing a trade
US20050060256A1 (en) * 2003-09-12 2005-03-17 Andrew Peterson Foreign exchange trading interface
US8423447B2 (en) * 2004-03-31 2013-04-16 Jp Morgan Chase Bank System and method for allocating nominal and cash amounts to trades in a netted trade
US20050222937A1 (en) * 2004-03-31 2005-10-06 Coad Edward J Automated customer exchange
US20050251478A1 (en) * 2004-05-04 2005-11-10 Aura Yanavi Investment and method for hedging operational risk associated with business events of another
US7693770B2 (en) 2004-08-06 2010-04-06 Jp Morgan Chase & Co. Method and system for creating and marketing employee stock option mirror image warrants
US20090164384A1 (en) * 2005-02-09 2009-06-25 Hellen Patrick J Investment structure and method for reducing risk associated with withdrawals from an investment
US8688569B1 (en) 2005-03-23 2014-04-01 Jpmorgan Chase Bank, N.A. System and method for post closing and custody services
US20060242654A1 (en) * 2005-04-22 2006-10-26 Lund Kasper V Process and apparatus for sharing inline caches
US20090187512A1 (en) * 2005-05-31 2009-07-23 Jp Morgan Chase Bank Asset-backed investment instrument and related methods
US7822682B2 (en) 2005-06-08 2010-10-26 Jpmorgan Chase Bank, N.A. System and method for enhancing supply chain transactions
US20110035306A1 (en) * 2005-06-20 2011-02-10 Jpmorgan Chase Bank, N.A. System and method for buying and selling securities
US7567928B1 (en) 2005-09-12 2009-07-28 Jpmorgan Chase Bank, N.A. Total fair value swap
US7818238B1 (en) 2005-10-11 2010-10-19 Jpmorgan Chase Bank, N.A. Upside forward with early funding provision
US8280794B1 (en) 2006-02-03 2012-10-02 Jpmorgan Chase Bank, National Association Price earnings derivative financial product
US8291395B2 (en) * 2006-03-31 2012-10-16 Apple Inc. Fast function call dispatching
US7620578B1 (en) 2006-05-01 2009-11-17 Jpmorgan Chase Bank, N.A. Volatility derivative financial product
US7647268B1 (en) 2006-05-04 2010-01-12 Jpmorgan Chase Bank, N.A. System and method for implementing a recurrent bidding process
US9811868B1 (en) 2006-08-29 2017-11-07 Jpmorgan Chase Bank, N.A. Systems and methods for integrating a deal process
US7827096B1 (en) 2006-11-03 2010-11-02 Jp Morgan Chase Bank, N.A. Special maturity ASR recalculated timing
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
US8738514B2 (en) 2010-02-18 2014-05-27 Jpmorgan Chase Bank, N.A. System and method for providing borrow coverage services to short sell securities
US8352354B2 (en) 2010-02-23 2013-01-08 Jpmorgan Chase Bank, N.A. System and method for optimizing order execution

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US5404525A (en) 1992-09-30 1995-04-04 International Business Machines Corporation Efficient method router that supports multiple simultaneous object versions
US5442793A (en) 1993-02-26 1995-08-15 Microsoft Corporation Method and system for locating an inherited virtual function member of a derived class
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
US5581697A (en) * 1994-01-28 1996-12-03 Sun Microsystems, Inc. Method and apparatus for run-time error checking using dynamic patching
US5682532A (en) 1994-05-02 1997-10-28 Microsoft Corporation System and method having programmable containers with functionality for managing objects
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
JPH09282167A (ja) * 1996-04-10 1997-10-31 Internatl Business Mach Corp <Ibm> メソッド起動方法及びメソッド起動制御装置
US5960197A (en) * 1996-05-09 1999-09-28 Sun Microsystems, Inc. Compiler dispatch function for object-oriented C
US5884316A (en) 1996-11-19 1999-03-16 Microsoft Corporation Implicit session context system with object state cache
US5907707A (en) 1997-01-14 1999-05-25 International Business Machines Corporation Object model for Java

Also Published As

Publication number Publication date
US20010011306A1 (en) 2001-08-02
DE69805728D1 (de) 2002-07-11
EP0908814B1 (en) 2002-06-05
EP0908814A1 (en) 1999-04-14
DE69805728T2 (de) 2003-01-30
CN1105968C (zh) 2003-04-16
US6385660B2 (en) 2002-05-07
CN1233797A (zh) 1999-11-03
KR19990037014A (ko) 1999-05-25

Similar Documents

Publication Publication Date Title
JPH11272468A (ja) オブジェクト指向システムにおけるサイト特定メッセージディスパッチ
US6317796B1 (en) Inline database for receiver types in object-oriented systems
US6910205B2 (en) Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6651080B1 (en) Techniques for implementing pluggable virtual machines
US6634023B1 (en) Compile method, exception handling method and computer
US6968546B2 (en) Debugging support using dynamic re-compilation
US6192516B1 (en) Interpreter generation and implementation utilizing interpreter states and register caching
US6966057B2 (en) Static compilation of instrumentation code for debugging support
US6470424B1 (en) Pin management of accelerator for interpretive environments
US6453411B1 (en) System and method using a hardware embedded run-time optimizer
JP3470948B2 (ja) 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US20040154008A1 (en) Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
JP2003140909A (ja) Jitコンパイラを備えた仮想計算機
JP2000347871A (ja) スタブ/アダプタ自動生成器
EP1080405A2 (en) Dynamically converting statically bound function calls to dynamically bound function calls without recompilation
CA2376327C (en) Executing native code in place of non-native code
US6871173B1 (en) Method and apparatus for handling masked exceptions in an instruction interpreter
JP2005504376A (ja) 仮想マシンインタープリタ(vmi)加速ハードウェアのためのソフトウェアサポート
JP5129904B2 (ja) 実行時における関数の実行性能を増大させるための方法、計算機システム、実行時における関数の実行性能を増大させるための、コンピュータプログラムを格納するコンピュータ読み取り可能媒体
JPH10240546A (ja) 実行時プログラム翻訳方法
KR20040058228A (ko) 낮은 오버헤드의 예외 체킹
JP2000222221A (ja) コンパイル方法および装置、並びにメソッド活動度計算方法および装置
JP3130421B2 (ja) プログラム解析方法および装置
JP2005063165A (ja) 仮想計算機の高速エミュレータ
JP2001117759A (ja) プラグ可能なバーチャル・マシンをインプリメントする技術

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051005

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

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071218

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20071218

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080122