JP2010170585A - ディスパッチテーブル構造のための方法と装置 - Google Patents

ディスパッチテーブル構造のための方法と装置 Download PDF

Info

Publication number
JP2010170585A
JP2010170585A JP2010107436A JP2010107436A JP2010170585A JP 2010170585 A JP2010170585 A JP 2010170585A JP 2010107436 A JP2010107436 A JP 2010107436A JP 2010107436 A JP2010107436 A JP 2010107436A JP 2010170585 A JP2010170585 A JP 2010170585A
Authority
JP
Japan
Prior art keywords
class
accessibility
superclass
entry
dispatch table
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2010107436A
Other languages
English (en)
Other versions
JP4571710B2 (ja
Inventor
Gilad Bracha
ブラカ ギラド
Deepa Viswanathan
ヴィスワナサン ディーパ
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 JP2010170585A publication Critical patent/JP2010170585A/ja
Application granted granted Critical
Publication of JP4571710B2 publication Critical patent/JP4571710B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

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

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)

Abstract

【課題】ディスパッチテーブルを構造化するための装置及びコンピュータプログラムプロダクト。
【解決手段】本発明の一実施の形態では、新規ディスパッチテーブルを割り当てるための判断はクラスのアクセス可能性に左右される。ディスパッチテーブル及びディスパッチテーブル構造プロセスは、Vtableのためのエントリが、アクセス可能性とクラス階層との間の競合を回避するように判定される、と説明されている。特に、ディスパッチテーブル及びディスパッチテーブル構造プロセスは、メソッドのアクセス可能性とパッケージ状態を、適切にオーバーライドしている意味規定とテーブル構築技術の判定において考慮する、と説明されている。ディスパッチテーブルはメソッドのための複数の明確なエントリを有していてもよい。
【選択図】図4

Description

本発明は一般に、コンピュータソフトウェア及びソフトウェア移植性の分野に関する。特に、構造ディスパッチテーブルに関する。
以下の説明を容易にするため、従来のオブジェクト指向のコンピューティング環境の簡単な概略を述べる。オブジェクト指向のコンピューティング環境では、オブジェクトは変数及び関連メソッドのソフトウェアバンドルを参照する。オブジェクトは、その状態(即ちオブジェクトが知っているもの)を変数内に維持しており、その振るまい(即ちオブジェクトが行うことができるもの)をメソッド内に実装している。メッセージは、ソフトウェアオブジェクトが互いに影響し合い、交信する手段である。集合的に、変数とメソッドは、メンバと称してもよい。また、オブジェクト用の変数とメソッドは、インスタンス変数とインスタンスメソッドと称する。
普通、クラス変数とクラスメソッドは、クラスに属するものとして定義されるそれらの変数とメソッドである。クラスは、特定種類のすべてのオブジェクトに共通な変数とメソッドを定義する再使用可能な青写真と説明することもできる。インスタンスは、クラスに属するオブジェクトであって、メモリがクラス内のインスタンス変数に割り当てられるオブジェクトである。
クラスは、クラス階層内、又は継承ツリー内に編成されてもよく、より下の階層にクラスが現れるのであれば、それはより一層特化されたものである。図1は、特定のクラス階層100を表すブロック図である。クラス階層100は、変数104とメソッド106を含むクラスA102を含む。図示した実施例では、クラスAは、メソッドMを含む複数の関連メソッドを有している。クラス階層は更に、クラスAからの継承であるクラスB110と、全てクラスB110からの継承であるクラスC、D及びE(それぞれ112、114及び116)を含む。各サブクラスも、変数104とメソッド106を含む。
スーパークラスは、クラスの直系の祖先と同様にその先祖のクラスのすべてを参照する。「直系の」スーパークラスは、直属の親スーパークラスとクラス階層内の代替先祖スーパークラスを区別する。サブクラスは、スーパークラスによって提供された共有エレメントの基盤から離れて、特化された振るまいを提供する。これを行うために、各サブクラスは、スーパークラスから変数とメソッドを継承する。加えて、サブクラスは、それらがスーパークラスから継承するものに変数とメソッドを加えることができる。例えば、クラスB110は、メソッドM108を含むそのスーパークラス(クラスA102)内で定義されるアクセス可能なメソッドを継承する。クラスBはまた、図示実施の形態において109の、メソッドNを含むそれ自身の新規メソッドを定義してもよい。サブクラスはまた、その継承されたメソッドの一つ以上をオーバーライドし、それらメソッドのために特化した実装を備えることができる点に注意することが重要である。
言語が、クラスに単一のスーパークラスからの継承を許容する場合、それは、単一継承を有すると言われている。それに対し、言語が、クラスに複数のスーパークラスからの継承を許容する場合、それは、多重継承を有すると言われている。図1に示すクラス階層では、各サブクラスがただ一つの直系スーパークラスから継承するので、単一継承がある。
幾つかの言語では、スーパークラスは、継承の実施を介して繰り返し用いられてもよい。一般に、サブクラスは、サブクラスが明示的にメソッドをオーバーライドしない限り、サブクラスにアクセス可能なスーパークラスからのメソッドのすべてをそのまま継承する。アクセス可能性は、スーパークラスメンバのアクセス可能性宣言とサブクラスメンバのアクセス可能性宣言の組み合わせによって判定される。
アクセス可能性は、ソースコードの無制限の共有から機密の特定形式まで変動範囲を促進するよう区別される。2つの従来のタイプのアクセス可能性レベルは、パブリックとプライベートである。パブリックメンバは、他の何れのクラスによっても見られるか、又はアクセスされ得る。プライベートメンバは、それ自身のクラスによってのみアクセスされ得る。特定の言語は、追加のアクセス可能性の型を用いるであろう。例えば、C++は、プロテクテッドメンバが一般にそのサブクラスによってのみアクセスされ得るプロテクテッドアクセス可能性を用いる。加えて、Javaは、パッケージプライベートメンバが特定パッケージ内のクラスによってのみアクセスされ得るパッケージプライベートアクセス可能性を用いる。パッケージは、パッケージのすべてのエレメントに対するアクセス保護及びネームスペース管理を提供する関連クラスのコレクション及びインターフェースである。クラスは、パッケージへとグループ化されて、クラスの検索と使用を容易にし、名前の競合を回避し、アクセスを制御するようにしてもよい。
一般に、メッセージのアクセス可能性は、メンバ宣言によって特定される。何のアクセス可能性も最初に提供されない場合、デフォルトのアクセス可能性が用いられるであろう。例えば、Javaパッケージの内部では、アクセス可能性が初期に特定されていないメンバのためのデフォルトのアクセス可能性は、プライベートのパッケージになる。
図2は、クラス階層を説明するブロック図であり、ここで、階層内の各クラスは、ローカル的にメソッド「foo」を定義している。特に、クラスA202は、パッケージP1に属し、未特定のアクセス可能性を有するメソッド「A.foo」204を含んでいる。この場合、メソッドA.foo204は、パッケージP1に関してパッケージプライベートアクセス可能性にデフォルト設定される。同様に、クラスB206は、パッケージP2に属し、パブリックなアクセス可能性を有するメソッド「B.foo」208を含む。クラスC210は、パッケージP1に属し、パブリックアクセス可能性を有するメソッド「C.foo」212を含んでいる。メソッド204、208及び212全ては、メソッド「foo」を実装するが、3つの間で異なるのは、それらそれぞれのクラス、パッケージ、ソースコード及びアクセス可能性である。この差はメソッドの振るまいに悪影響を及ぼすかもしれず、例えば、メソッドが、printステートメントのためのソースコードを呼び出して、メソッドのクラスを公表する場合、3つのメソッドは、図示の通り異なった出力を有する。
従来は、すべてのクラス及びインターフェースは、それがローカルに定義するすべてのメソッドを含むメソッドテーブルを有している。加えて、すべてのクラスは、継承メソッドを含むクラスによって呼び出され得るすべての外部アクセス可能なメソッドのためのエントリを有するディスパッチテーブル、即ちVtableを有する。普通プライベートメソッドは、Vtable内に含まれる注記である。従来のVtable構造では、すべての外部アクセス可能なメソッドは、メソッドに対応するコードの1セクションを指す単一のVtableエントリと関連する。従って、すべてのVtableエントリは、それが対応するメソッドにおいて、ローカルであるのか、継承されるのかを、指し返す。
図3は、図2のクラスB206に対応するVtable300の従来のフォーマットを示すブロック図である。Vtable300は、直系のスーパークラス(クラスA202)から継承されるメソッドに対応するすべてのエントリを含むスーパークラス部302と、クラスB206においてローカルに定義されるメソッドに対応するエントリを含むクラス部304とを含む。クラス部304内で見出されるローカル定義のメソッドは、クラスB206にとって新規なものである。例えば、クラスA202からのメソッドに対応するエントリを上書きしなかった新規エントリ306はクラス部304内に加えられ、従って、Vtable300のサイズが増加する。あるいは、対応するスーパークラスのメソッドをオーバーライドするローカル定義のメソッドは、スーパークラス部302内の既存のVtableエントリを上書きする。例えば、B.fooのためのコードを指すVtable300のエントリ308は、Vtable300のスーパークラス部内の対応するエントリを上書きして、ローカル定義メソッドC.fooのためのコードを指す。
Javaプログラミング言語は、単一継承の使用を考慮している。Javaでは、サブクラスは、そのスーパークラスと祖先のアクセス可能なメンバのすべてを継承するよう定義されており、これらメンバのそのまま使用、それらの隠蔽、又はそれらのオーバーライド可能である。サブクラスは、パブリック又はプロテクテッドとして宣言されるそれらのスーパークラスメンバを継承する。加えて、サブクラスは、サブクラスがスーパークラスと同じパッケージ内にある(即ち、それらの両方とも、プライベートのパッケージにデフォルト設定されている)限り、アクセス指定されないで宣言されているスーパークラスのメンバを継承する。従って、Javaは、無制限のソースコードの共有から制御可能なレベルの機密まで、アクセス可能性の変動範囲を柔軟に提供する。継承に対する正反対の体系に基づく従来のVtable構造は、このアクセス可能性の変動範囲を許可しない。
上記を鑑みて、改良されたディスパッチテーブル構造技法が望ましいということは明白となろう。
本発明によれば、方法、装置及びコンピュータプログラムプロダクトが、ディスパッチテーブルを構成するために開示される。本発明の実施の形態では、新規ディスパッチテーブルエントリを割り当てる判定はアクセス可能性に左右される。別の実施の形態では、Vtableは、Vtable内のメソッドが複数のエントリを持って提供される。
本発明は、一実施の形態に従って、単一のスーパークラスから継承するクラス内のメソッドのためのディスパッチテーブルの構築プロセスに関する。プロセスは、スーパークラス用のディスパッチテーブルのコピーを含む。プロセスはまた、クラスにおいて選択されるメソッドがクラスの先祖スーパークラス内にも存在するかどうかの判定を含む。更に、プロセスは、第1のクラスが継承する先祖スーパークラスにおいても選択メソッドが存在するのかが判定される際に、選択されるメソッドの選択されるスーパークラスバージョンがアクセス可能であるかどうかを判定することを含む。プロセスは加えて、選択メソッドの選択スーパークラスバージョンがアクセス可能でないと判定されるときに、第1のクラスにおける選択メソッドのためのディスパッチテーブル内に新規エントリを作成することを含む。プロセスはまた、第1のクラスにおける選択メソッドがアクセス可能である判定されるときに、エントリを上書きすることを含む。メソッドのスーパークラスバージョンが存在しない場合には、メソッドのための新規エントリが作成される。
別の実施の形態では、本発明は、先祖階層内の直系スーパークラスから継承するクラス内のメソッドのためのディスパッチテーブルを構築するプロセスに関する。プロセスは、ディスパッチテーブルをスーパークラスからコピーすることを含む。プロセスはまた、クラスにおける選択メソッド及びアクセス可能性が、先祖階層のスーパークラス内に存在するかどうかを判定することを含む。プロセスは更に、インデックスをディスパッチテーブルのエントリに割り当てることを含む。
更に別の実施の形態では、本発明は、少なくとも一つのスーパークラスから継承するクラス用のディスパッチテーブルに関し、ディスパッチテーブルが、特定メソッドのための複数のエントリを含む。
本発明は、添付図面に関連して行われる以下の説明を参照することによってより良く理解されるであろう、
クラス階層の代表的な形式を説明するブロック図である。 各それぞれのクラスにおいて別々に定義される特定メソッドfooを含むクラス階層を説明するブロック図である。 図2のクラスBに対応するVtableの従来のフォーマットを示す。 本発明の一実施の形態に従う図2のクラスに対応する簡略化されたVtableのセットである。 本発明の他の実施の形態に従う図2のクラスCに対応する簡略化されたVtableである。 本発明の他の実施の形態に従う図4のクラスCから継承するクラスDのための簡略化されたVtableである。 (a)は、Javaソースコードを含むJava(登録商標)プログラムの特定のプラットホーム又はコンピュータ上で実行されるネイティブコードへの変換を示すブロック/プロセス図であり、(b)は、下で説明する図18のコンピュータシステムによってサポートされる仮想マシンの線図である。 本発明の一実施の形態に従うディスパッチテーブル構造プロセスを示す。 図8のステップ804で参照されるようなパブリック/プロテクテッドプロトコルに従って、メソッドMを編成するためのプロセスを説明するブロック図を示す。 エントリ内のメソッドのためのソースコードへ適切なポインタを挿入するためのプロセスを説明するブロック図を示す。 図8のステップ808で参照されるようなパッケージプライベートプロトコルに従って、メソッドMを編成するためのプロセスを説明するブロック図を示す。 図8のステップ810で参照されるようなプライベートプロトコル(810)に従って、メソッドMを編成するためのプロセスを説明するブロック図を示す。 図8のステップ814で参照されるようなミランダメソッドプロトコルに従って、ディスパッチテーブル内にエントリを割り当てるためのプロセスを説明するブロック図を示す。 本発明の好ましい実施の形態に従って、ルックアップ量を低減させる好ましいディスパッチテーブル構造プロセスを説明するブロック図を示す。 図14のステップ1404で参照されるような、ルックアップが先祖階層を通して行われる際に、アクセス可能性インデックスを割り当て、テーブルサイズを増加させるためのプロセスを説明するブロック図を示す。 先祖階層を通したルックアップの後、Vtable内にインデックスを作成するためのプロセスを説明するブロック図を示す。 本発明の一実施の形態に従うVtableを示す。 本発明の実施の形態の実装に適切な代表的なコンピュータシステムのブロック図である。
本発明の特定実施の形態を詳細に参照する。本実施形態の実施例を添付図面に示す。本発明を特定実施の形態に関連して説明する一方で、それが本発明を一実施の形態に制限することを目的としないことは理解されたい。逆に、それは、添付請求項に記載の本発明の精神及び適用範囲に含まれるであろうような、代替、変更及び同等物をカバーすることを目的とする。
ディスパッチテーブル及びディスパッチテーブル構造プロセスは、Vtable用のエントリが、アクセス可能性とクラス階層との間の競合が回避されるように判定される、と説明される。特に、ディスパッチテーブル及びディスパッチテーブル構造プロセスは、メソッドのアクセス可能性を、適切にオーバーライドしている意味規定とテーブル構造とを判定することにおいて考慮する、と説明される。ディスパッチテーブルは、メソッドのための複数の明確なエントリを有していてもよい。メソッドの不適当な処理を回避するために、オーバーライドするエントリを、判定しなければならない。場合によっては、たとえメソッドがスーパークラスメソッドをオーバーライドするとしても、新規のVtableエントリは生成されなければならない。
記載のJava実施の形態では、4つの明確なアクセス可能性の指定が提供されている。これに応じて、スーパークラス階層の少なくとも一部への多重検索は各指定に対して実行されてもよい。すべてのアクセス可能性がスーパークラス内で見つかると、先祖階層への検索は終了する。また、クラスがスーパーインターフェースから継承するであろう際に、クラス階層とアクセス可能性との間で直面する意味的インタラクションは、インターフェース階層内で生じる。
加えて、Vtable内の特定メソッドのための各多重エントリは、クラス内の特定メソッドのための優先度を割り当てられてもよい。普通、メソッドのアクセス可能性と同じアクセス可能性指定を含むエントリは、一次エントリとして割り当てられる。一次エントリは普通、特定メソッドが宣言されるときに呼び出される。加えて、二次及び三次エントリもまた、異なるアクセス可能性指定に対応する特定メソッドのためのVtable内に存在していてもよい。
一般に、新規Vtableエントリを割り当てる判定は、メソッドのアクセス可能性に左右される。それはまた、オーバーライドされるメソッドのアクセス可能性に依存してもよい。例えば、パブリック又はプロテクテッドメソッドは、何れのパブリックかプロテクテッドメソッドがオーバーライドされない場合にのみ新規Vtableエントリを必要とする。そうでなければ、オーバーライドされるパブリック/プロテクテッドメソッドのVtableインデックスが用いられる。同様に、同じパッケージからのパッケージプライベートメソッドが何れもオーバーライドされない場合にのみ、パッケージプライベートメソッドは新規Vtableエントリを必要とする。プライベートエントリは、常に新規Vtableエントリを必要とする。従って、新規で且つオーバーライドされたメソッドのためのVtableエントリの更新プロセスは、すべてが適切に設定されなければならない3つのVtableエントリをメソッドが用いてもよいという点で、ケース依存性である。
本発明の一実施の形態に従うVtable構造のための規則を、それぞれ図2のクラスA202、クラスB206及びクラスC210のための簡略化されたVtable402、404及び406を図示する図4を参照して説明する。普通、各Vtableは、各Vtable内の部分408、410及び412のそれぞれによって表される多くの継承エントリを含む。図2に示すように、この図の目的上、クラスA、B及びCがそれぞれローカルにメソッド「foo」を定義すると仮定する。クラスAはパッケージP1に属し、メソッドA.fooはプライベートのパッケージとして定義される。クラスBはパッケージP2に属し、メソッドB.fooはパブリックである。クラスCは(クラスAと同様に)パッケージP1に属し、メソッドC.fooはパブリックである。
クラスA、B及びCに対応するVtableの構造では、ローカルに定義された「foo」メソッドが新規Vtableエントリを必要とするかどうか、又は、それがVtableのスーパークラス部において一つ以上の対応エントリを上書きすることを必要とするかどうかを判定しなければならない。この判定は、メソッド「foo」のスーパークラスバージョンがクラスに対してアクセス可能かどうかに基づいて、簡単に行われる。アクセス可能であるメソッドのバージョンに対応する何れのVtableエントリも上書きされる。メソッド「foo」に対応するスーパークラスエントリの何れもクラスに対してアクセス可能であるメソッドに対応しない場合、新規Vtableエントリが作成される。
例として、クラスBのためのVtableの構造を熟考する。第1に、そのスーパークラス(この場合では、クラスA)のVtableがコピーされる。クラスBは、ローカルにメソッドB.fooを定義しているので、判定はA.foo用のVtableエントリに上書きするべきであるか又はVtableに新規エントリを行うべきかどうかに関しては行われなければならない。上で指摘したように、クラスA202のメソッド204はパッケージP1に関してプライベートのパッケージであり、従って、クラスB206のメソッド208はアクセスできず、何故なら、クラスBは、(パッケージP1とは対照的に)パッケージP2内にあるためである。従って、クラスB206のメソッド208に対応する新規エントリ414は、クラスB404のためのVtable内に備えられる。従って、クラスBのためのVtableは、ここで、「foo」メソッドに対応する2つのエントリを有する。第1のエントリは、メソッドA.fooに対応するオリジナルエントリ416である。第2のエントリは、B.fooに対応する新規エントリ414である。即ち、B.fooに対応する新規エントリ414はVtable404に加えられる。この編成を用いて、メソッド「foo」がクラスBのインスタンスに呼び出される時、クラスB404のインスタンスのためのVtableは、クラスB206のための適切なメソッド208に対応するB.fooエントリ414を返す。
次に、クラスCのためのVtableの構造を熟考する。前記のように、クラスC210は、その直系のスーパークラス、即ちクラスB206のすべてのメソッドを継承する。従って、クラスCのためのVtableは、前もって判定されたエントリ414及び416を含むその直系のスーパークラス(この場合では、クラスB404)のVtableからのすべてのエントリを含む。図示のサンプルでは、クラスCは、パッケージP1の一部であり(クラスAと同様ではあるが、クラスBと同様ではない)、また、ローカルに「foo」メソッド(本明細書中では、C.fooと称する)を定義する。先に言及したように、クラスCがアクセス可能なメソッド「foo」のいかなる既存のバージョンもオーバーライドされ、アクセスできないメソッド「foo」のいかなる既存のバージョンもオーバーライドされ得ない。この場合では、クラスB206のメソッド208はパブリックであり、クラスC210のメソッド212からアクセスできる。従って、クラスCのためのVtable406では、クラスB206のメソッド208に対応するエントリ420はC.fooを参照するよう上書きされる。加えて、クラスA202のメソッド204はパッケージP1に関してプライベートのパッケージであり、また両クラスA及びCが同じパッケージ(パッケージP1)内部にあるので、クラスC210からアクセス可能である。従って、クラスCのためのVtable406では、クラスA202のメソッド204に対応するエントリ418はC.fooを参照するように上書きされる。従って、C.fooは同じVtableにおいて二度参照される。この編成を用いて、メソッド「foo」がクラスCのインスタンスに呼び出される時、インスタンスのためのVtableはC.fooエントリを返す。
次いで、図5を参照して第2の実施例を説明する。この実施例では、クラスCが(図4の実施例におけるようなパッケージP1よりはむしろ)第3のパッケージであるパッケージP3の一部として定義される点を除いて、図2のクラス階層及びメソッドアクセス可能性はそのまま維持される。このクラスCに対応するVtableの構造では、クラスB210のメソッド208はクラスCがアクセス可能なまま保たれる。従って、メソッドB.fooに対応するVtableエントリは、(前の場合と同様に)C.fooに対応するエントリ504によって上書きされる。しかし、メソッドA.fooはパッケージP1に関してプライベートのパッケージであり、パッケージP3の一部であるクラスCはアクセスできない。従って、エントリ502はクラスCのためのVtable500において上書きされない。
オブジェクト指向型言語内で共通に見出される注目すべき別の規則は、公開度を設定した後でメソッドの公開度を下げることができない、すなわち、アクセス可能性を下げることができないということである。このように、サブクラスはそのスーパークラスが求められる箇所で常に用いることができる。すなわち、継承されたパブリックのメソッドはプライベートメソッドに変換することができない。
図6は、プライベートであって、パッケージP1に属するクラスC210のサブクラス、D、のためのVtable600の構築の実施例を示す図である。クラスDのためのVtable600は、その直系のスーパークラス、即ち図2のクラスC210のすべてのメソッドを継承する。従って、それは、その直系のスーパークラスのすべてのエントリを含み、この場合では、図4のクラスC210のためのVtable406である。クラスDのためのVtable600の構築は、前述したVtableの構築と同様に行われる。クラスCのメソッド212はパブリックであり、クラスDはアクセス可能である。従って、エントリ606は、それがメソッドD.fooを参照するように上書きされる。更に、クラスA202のメソッド204はパッケージP1に関してプライベートのパッケージであり、パッケージP1に属するクラスDのメソッドはアクセス可能である。このメソッドは、エントリ604内に存在して、同様にオーバーライドされる。最終的に、インスタンスD内でローカルに定義されるメソッド「foo」(即ちD.foo)はプライベートであり、新規エントリ608はそのエントリを反映するよう作成される。従って、3個のエントリはこのとき同一メソッド「foo」のためのVtable600内に存在する。改良されたVtable600を作成するためのプロセスを、図8から図13のそれぞれについて以下にある程度詳細に説明する。
クラス及びスーパークラス階層と同様に、独立インターフェース階層もまた存在する。一般に、インターフェースは、おそらく無関係なオブジェクトが互いに相互作用するために用いるメカニズムである。オブジェクト指向型言語においてこれを行うために、インターフェースは1セットのメソッドシグニチャを含んでいる。普通、メソッドシグニチャと関連するコードは存在しない。インターフェースを実装するクラスは、インターフェースにおいて定義されるメソッドのすべてを実装することを承認し、これにより特定の振るまいを承認する。
抽象クラスは一般的な振るまいを定義し、部分的にこれらのメソッドを実装できるが、そのクラスの多くは定義及び実装されない。この不満足の指定によって、単独実装は特化サブクラスのための詳細(即ち、コード)を完全にすることができる。抽象クラスは、コンパイラが認識するその状態を特定する宣言を含んでいてもよい。インターフェースが実装され、クラスが抽象である場合、コンパイラはインターフェースからの未特定メソッドの継承を許容する。しかし、クラスが抽象クラスでない場合、コンパイラは未特定メソッドで満たされていることを示す。クラス又はそのスーパークラスの何れかにおけるそれらの定義において完全ではないスーパーインターフェースから継承されるこれらのメソッドは、「ミランダメソッド」と称される。
これらのミランダメソッドもまた、まるでそれらがクラス内で宣言されたかのように、エントリを必要とする。クラスがスーパーインターフェースから幾分同様に継承できるように、クラス階層とアクセス可能性との間に直面する意味的インタラクションもまた、インターフェース階層内部に生じるであろう。インターフェース階層の場合に注目すべき差は、インターフェースメソッドが一般に常にパブリックであるという点である。しかし、クラスが単一継承階層内の一つのスーパークラスだけを有する一方で、それは、相当システムの複雑さを増す多重スーパーインターフェースを有するであろう。
呼び出された場合、対応コードを持たないメソッドを呼び出すためのエラーメッセージを発行しなければならない抽象メソッドを処理するために、スタブポインタは、メソッドコードに対するポインタの代わりに用いられる。このスタブは、例外を引き起こすコードを指す。スタブポインタは、抽象メソッドが共通であるため適所になければならず、独立したデザイナが抽象クラスに関してコード設計できるようにし、従って、対応サブクラスの間の共通の振るまいを管理する。
特定の実施の形態では、ミランダメソッドはクラスのVtableにおいて定義されるが、いかなるクラスのメソッドテーブルにおいても出現しない。Vtableの構築のために、ミランダメソッドはクラスによって宣言されないので、それらは別々に処理されなければならない。本発明の実施の形態では、別々のVtableエントリはミランダメソッドを備える。
アクセス可能性構造及びソースコードの継承を用いるいかなるソフトウェア言語も、本発明を実装することができる。本発明の特定の実施形態では、ディスパッチテーブル構造におけるJAVAの意味規定により本発明が実装される。
図7(a)は、本発明の一実施の形態に従う、Javaソースコードからネイティブ命令を作成することに関わる入力/出力及び実行ソフトウェア/システムを示すブロック図である。他の実施の形態では、本発明は、他言語用の仮想マシンを用いて、又はJavaクラスファイル以外のクラスファイルを用いて実装できる。線図の左側から開始すると、第1の入力は、カリフォルニア州マウンテンビューのサンマイクロシステムズによって開発されたJava(商標)プログラミング言語で書かれたJavaソースコード701である。Javaソースコード701は、バイトコードコンパイラ703に対する入力である。バイトコードコンパイラ703は本質的に、ソースコード701をバイトコードにコンパイルするプログラムである。バイトコードは、一つ以上のJavaクラスファイル705に含まれている。Javaクラスファイル705は、Java仮想マシン(JVM)を有するいかなるコンピュータ上でも実行可能という点で、ポータブルである。仮想マシンの構成要素を図7(b)で更に詳細に示す。Javaクラスファイル705は、JVM707に対する入力である。JVM707はいかなるコンピュータ上にもあることができ、従って、バイトコードコンパイラ703を有する同一のコンピュータ上にある必要はない。JVM707は、インタプリタ又はコンパイラ等、幾つかの役割のうちの一つで動作できる。それがコンパイラとして動作する場合、それは更に、"just in time"(JIT)コンパイラとして、即ち適応コンパイラとして動作できる。インタプリタの働きをする時、JVM707はJavaクラスファイル705に含まれる各バイトコード命令を解釈する。
図7(b)は、下で説明する図18のコンピュータシステム1800によってサポートされ得るJVM707等の仮想マシン711の線図である。前記のように、コンピュータプログラム、例えばJava(商標)プログラミング言語で書かれたプログラムが、ソースからバイトコードへ変換される場合、ソースコード701は、コンパイル時環境709内部でバイトコードコンパイラ703に提供される。バイトコードコンパイラ703は、ソースコード701をバイトコード705に変換する。一般に、ソースコード701は、ソースコード701がソフトウェア開発者によって作成された後で、バイトコード705に変換される。
バイトコード705は一般に、複製されてダウンロードされるか、そうでなければ、ネットワークを介して、例えば図18のネットワークインターフェース1824を介して配布されるか、又は図18の一次記憶装置1804等の記憶装置に格納することができる。記載の実施の形態では、バイトコード703はプラットホームに依存しない。即ち、バイトコード703は適切な仮想マシン711を実行している実質的にいかなるコンピュータシステム上でも実行されるであろう。バイトコードのコンパイルによって形成されるネイティブ命令はJVMによるその後の使用のために保持されてもよい。このような方法で、変換コストは、多重実行上で清算されて、解釈されたコード上のネイティブコードに対し有利な速度を提供する。例えば、Java(登録商標)環境ではバイトコード705はJVMを実行しているコンピュータシステム上で実行され得る。
バイトコード705は、仮想マシン711を含む実行時環境713に提供される。実行時環境713は一般に、図18のCPU1002等のプロセッサを用いて実行され得る。仮想マシン711は、コンパイラ715、インタプリタ717、及び実行時システム719を含む。バイトコード705は一般に、コンパイラ715又はインタプリタ717の何れかに対して提供され得る。
バイトコード705がコンパイラ715に提供される時、バイトコード705に含まれているメソッドはネイティブ機械命令(図示せず)にコンパイルされる。一方で、バイトコード705がインタプリタ717に提供される時、バイトコード705は一度に一つのバイトコードずつインタプリタ717に読み込まれる。次いで、インタプリタ717は、各バイトコードがインタプリタ717に読み込まれる際に、各バイトコードによって定義される操作を実行する。一般に、インタプリタ717はバイトコード705を処理し、実質的に連続してバイトコード705と関連する操作を実行する。
メソッドがオペレーティングシステム721から呼び出される時、そのメソッドが解釈されたメソッドとして呼び出されるものであると判定されると、実行時システム719はインタプリタ717からメソッドを得ることができる。一方で、メソッドがコンパイルされたメソッドとして呼び出されるものであると判定されると、実行時システム719はコンパイラ715を起動させる。次いで、コンパイラ715はバイトコード705からのネイティブ機械命令を生成し機械語命令を実行する。一般に、機械語命令は仮想マシン711が終了する際に破棄される。仮想マシンの操作、すなわち、より詳しくはJava(商標)仮想マシンの操作は、Tim Lindholm及びFrank Yellin著のThe Java TM VirtualMachine Specification、第2版(ISBN 0-201-43294-3)により詳細に記載されており、本明細書ではそのすべてを引用して組み込む。
図8から図13は、本発明の一実施の形態に従うディスパッチテーブル構造プロセス800を示す。ディスパッチテーブルは直系のスーパークラスSを有するパッケージP内のクラスCのために構築される。ディスパッチテーブル構造プロセス800はまた、Vtableのサイズを計算し、不揮発性メモリの最適サイズに設定した部分にそのVtableを割り当てて書き込む。
ディスパッチテーブル構造プロセス800は、クラスC(図8)内のローカル定義のメソッドのすべてを通して繰り返すことから始める。それに応じて、現行の反復のメソッドはメソッドMと呼ばれる。ディスパッチテーブルを構築するためのアクセス可能性を区別するために、判定されるアクセス可能性の3つのグループは、パブリック/プロテクテッド、プライベート、及びプライベートパッケージである。パブリック及びプロテクテッドは、ディスパッチテーブルの構築におけるそれらの振るまいが実質的に類似しているため、図8の場合では共にグループ化される。
ディスパッチテーブル構造プロセス800は、メソッドMがパブリックかプロテクテッドかの判定(802)から始める。それがパブリックかプロテクテッドであれば、プロセスは、パブリック/プロテクテッドプロトコルに従うメソッドMを編成する手続きを行い(804)、これを図9に関して以下に詳細に記載する。そうでなければ、プロセスは、メソッドMがプライベートパッケージであるかどうかを判定する(806)。それが、プライベートパッケージであれば、プロセスは、パッケージプライベートプロトコルに従うメソッドMを編成する手続きを行い(808)、これを図11に関して以下に詳細に記載する。そうでなければ、メソッドMは、プライベートのアクセス可能性にデフォルト設定され、プライベートプロトコルに従って編成されるが(810)、これについては図12を用いて以下に詳細に記載する。上記の場合の何れでも、メソッドMが適切な方法に従って編成される時、プロセスは次いで、何れか未処理のメソッドが存在するのかを判定し(812)、次のメソッドのために開始まで戻る。すべてのメソッドが処理された後で、追加ステップは、何れかのミランダメソッドの処理が必要であれば取られるが(814)、これについては図13を用いて以下に詳細に記載する。
図9は、パブリック/プロテクテッドプロトコル(804)に従うディスパッチテーブルにおいてメソッドMを編成するためのプロセスを示す。それは、直系のスーパークラスS、又は、スーパークラスSのスーパークラス又はスーパーインターフェースの何れかにおいて宣言されたメソッドMのパブリック又はプロテクテッドバージョンが存在するかどうかを判定することから開始する(902)。言い換えると、プロセスは、メソッドMのバージョンが先祖階層内のどこかに存在するかどうかを判定する。メソッドMのパブリック又はプロテクテッドバージョンが先祖階層内に存在しなければ、新規エントリがディスパッチテーブルに追加される(904)。それに応じて、プロセスは、メソッドMに対する適切なポインタ(1000)を新規に形成されるエントリに挿入し(906)、これを図10に関して以下に詳細に記載する。メソッドMのパブリック又はプロテクテッドバージョンがスーパークラス内に存在すれば、識別されたスーパークラスエントリは、クラスCのディスパッチテーブルのための識別されたスーパークラスエントリに適切なポインタ(1000)を挿入することによってオーバーライドされる(908)。
プロセス804はまた、先祖階層内にメソッドMの(メソッドMが対応するパッケージPに対して)プライベートなアクセス可能なパッケージのバージョンがあるかどうかを判定する(910)。もし存在するならば、識別されたスーパークラスエントリは、アクセス可能なパッケージプライベートメソッドに対する適切なポインタ(1000)を識別されたスーパークラスエントリに挿入することによってオーバーライドされる(912)。
図10は、エントリ内のメソッドのためのソースコードへ適切なポインタを挿入するためのプロセスを説明するブロック図を示す(1000)。メソッドMが抽象メソッドであるかどうかを判定することから開始する(1002)。メソッドが抽象メソッドでなければ、メソッドコードへのポインタは、ディスパッチテーブルの適切なエントリに挿入される(1006)。これに対して、メソッドが抽象メソッドであれば、スタブポインタがディスパッチテーブルの適切なエントリに挿入される(1006)。この時点での標準又はスタブのポインタの挿入は既存のエントリポインタから独立している、即ち、スタブポインタはメソッドコードへのポインタを上書きする能力があるということに注意することが重要である。
図11は、図8に関して上記で検討されたパッケージプライベートプロトコル(808)に従ってメソッドMを編成するためのプロセスを示す。それは、直系のスーパークラスS、又は、スーパークラスSのスーパークラス又はスーパーインターフェースの何れかにおいて宣言されたメソッドMのアクセス可能なパッケージプライベートバージョンが存在するかどうかを判定することから開始する(1102)。適切なパッケージのプライベート状態(この場合ではパッケージP)を有するメソッドMが先祖階層内に存在しなければ、新規エントリはディスパッチテーブルに追加される(1104)。それに応じて、プロセスは、メソッドMのパッケージプライベートバージョンに対する適切なポインタ(1000)を新規に形成されるエントリに挿入する(1106)。メソッドMのパッケージプライベートバージョンが先祖階層内に存在すれば、識別されたスーパークラスエントリは、適切なポインタ(1000)を識別されたスーパークラスエントリに挿入することによってオーバーライドされる(1108)。
プロセス808はまた、直系のスーパークラスS、又は、スーパークラスSのスーパークラス又はスーパーインターフェースの何れかにおけるメソッドMのパブリック又はプロテクテッドバージョンが存在するかどうかを判定する(1110)。もし存在するならば、識別されたスーパークラスエントリは、メソッドMの識別されたパブリック又はプロテクテッドバージョンに対する適切なポインタ(1000)を識別されたスーパークラスエントリに挿入することによってオーバーライドされる(1112)。
図12は、図8に関して上記で検討されたプライベートプロトコル(810)に従ってメソッドMを編成するためのプロセスを示す。それは、プライベートエントリが普通は新規Vtableエントリを必要とするので、新規エントリをディスパッチテーブル(1202)に追加することを開始する。それに応じて、プロセスは、メソッドMのプライベートバージョンに対する適切なポインタを新規に形成されるエントリに挿入する(1204)。この場合には、プライベートメソッドMは抽象され得るので、抽象クラスのチェックは必要でない。
プロセス810はまた、直系のスーパークラスS、又は、スーパークラスSのスーパークラス又はスーパーインターフェースの何れかにおけるメソッドMのパブリック又はプロテクテッドバージョンが存在するかどうかを判定する(1206)。もし存在するならば、識別されたスーパークラスエントリは、適切なポインタ(1000)を識別されたスーパークラスエントリに挿入することによってオーバーライドされる(1208)。
プロセス810はまた、直系のスーパークラスS、又は、スーパークラスSのスーパークラスの何れかにおけるメソッドMのパッケージプライベートバージョンが存在するかどうかを判定する(1210)。もし存在するならば、識別されたスーパークラスエントリは、適切なポインタ(1000)を識別されたスーパークラスエントリに挿入することによってオーバーライドされる(1212)。
クラスC内のすべてのローカル定義メソッドがディスパッチテーブル構造プロセス800において編成された後で、何れのミランダメソッドも処理されなければならない。図13は、図8に関して上記で検討されたミランダメソッドプロトコル(814)に従うディスパッチテーブルにおいてエントリを割り当てるためのプロセスを示す図である。
ミランダメソッドプロトコル(814)は、クラスCの何れか未処理のスーパーインターフェースが存在するかどうかを判定することから開始する(1302)。何れのクラスCの未処理のスーパーインターフェースも存在していなければ、プロセス814は終了する。未処理のスーパーインターフェースが存在する場合、次のインターフェースIが選択される(1304)。このインターフェースIのため、プロセス814はインターフェースIの各メソッドを通して繰り返される。何れのインターフェースIの未処理のメソッドも存在していなければ、プロセスは、何れかのクラスCの未処理のスーパーインターフェースが存在するかの判定まで戻る(1302)。そうでなければ、インターフェースIの次のメソッドが検索され、チェックが実行されて、インターフェースIの同一メソッドの同一バージョンが既にクラスCのためのディスパッチテーブル内に存在しているかを判定する(1310)。インターフェースIの同一メソッドのバージョンがディスパッチテーブル内に存在する場合、プロセスは、インターフェースIの残りのメソッドを通して繰り返すよう続けられる(1306)。クラスCのメソッドの同一バージョンが存在しない場合、新規エントリはクラスCのためのディスパッチテーブルに作成される(1312)。ポインタは、ディスパッチテーブルの新規エントリに挿入され(1314)、プロセスは、インターフェースIの残りのメソッドを通して繰り返すよう続けられる(1306)。
ディスパッチテーブルを構築するため、様々な手続きが実装されてもよい。例えば、従来のディスパッチテーブル構築プロセスは各ステップに対して僅かな変更を行って用いられてもよい。この従来のプロセスでは、ディスパッチテーブル内のスーパークラスのサイズは最初に判定される。この継承されたサイズから、クラスC内の各ローカル定義のメソッドには新規エントリが提供される。新規エントリは累積的に計数され、継承されたスーパークラスディスパッチテーブルのサイズに追加される。最終的に、いかなるミランダメソッドも、ディスパッチテーブルの完全な構造に処理されてもよい。
本発明が多重アクセス可能性指定を許可するように、スーパークラス及びスーパーインターフェース階層の少なくとも一部への別々の検索は各アクセス可能性に対して実行されてもよい。特定のアクセス可能性に対する先祖階層への検索は、それがスーパークラス内に見つかったときに中止するのが好ましい。
加えて、特定メソッドのための各多重エントリには優先度を割り当てられてもよい。普通、メソッドのアクセス可能性と同じアクセス可能性を有するエントリは一次エントリである。この一次優先度に対応するアクセス可能性がメソッド及びパッケージに基づいて変化しても良いように、優先度インデックスは、一次メソッドがパッケージに関係なく設定されることを可能にする。二次及び三次エントリは、他のアクセス可能性に対応する先祖階層内に見出される場合、追加として存在することができ、それに応じて、エントリに割り当てられてもよい。
実際には、メソッドが呼び出される時、一次インデックスだけが用いられる。従って、二次及び三次エントリに対応するインデックスは、ディスパッチテーブル内に割り当てられるたり恒久的に保持される必要はなく、実装によって定まる際に割り当てられるか又は恒久的に保持されてもよい。
単一メソッドに対する複数のエントリの間で相対的な優先度を設定するための正当性は、一次メソッドがリンクされる時、呼び出されたメソッドがエントリの構造において設定されたため、アクセスビリティから呼び出されたメソッドのアクセス可能性状態に関して曖昧性がまったくない。
優先度は、同一アクセス可能性を指定したエントリがクラスのために用いられることを可能にする一方で、他のアクセス可能性指定エントリを保持するためのニーズに左右される。従って、クラスのために呼び出される一次インデックスでなくてもよい新規ローカル定義エントリは、残りの階層に関するクラス内で適切に更新されてもよい。ローカル定義のプライベートメソッドは一般に、常に、そのメソッドのための一次エントリとして指定されてもよいVtable内の新規エントリを必要とする。しかし、スーパークラスから継承される他のアクセス可能なメソッド(即ち、パブリック)は、同一メソッドを持つ2つのエントリの曖昧性を回避するようオーバーライドされ、正しくインデックス付けされてもよい。
上記のプロセスは、明確なアクセス可能性レベルに関するメソッドのための多重エントリを割り当てるために適切である。しかし、ディスパッチテーブル構造プロセス800は、各アクセス可能性のために先祖各自の階層を通しての冗長なルックアップを必要とする。
図14から図16は、本発明の他の実施の形態に従い、ルックアップ量を低減させる代替ディスパッチテーブル構造プロセス1400を示す図である。それはまた同時に、ディスパッチテーブルのサイズを判定し、何のインデックスがVtable内の各メソッドと関連するかを判定する。一旦これが実行されると、プロセスは、Vtableを割り当て、適切なエントリを書き込む。再び、ディスパッチテーブルは、直系のスーパークラスSを有するパッケージP内のクラスCのために構築される。ディスパッチテーブル構造プロセス1400は、Vtableのサイズを判定しながら、クラス及びインターフェース階層の一横断においてメソッドMの各アクセス可能性のためのインデックスを判定するので、先の実施例とは異なる。
ディスパッチテーブル構造プロセス1400(図14)は、第1の近似では、スーパークラスのVtableのサイズであるVtableの初期サイズを推定することから開始する(1402)。ディスパッチテーブル構造プロセス1400はまた、特定のアクセス可能性が先祖階層において見出されたかどうかの判定に用いられる少なくとも一つのインデックスを初期化する。
メソッドMが先祖階層において見出されたどうかの判定に、一つのインデックスが用いられた前の場合とは対照的に、ディスパッチテーブル構造プロセス1400は多重インデックスを用いる。例えば、メソッドに対するパブリックアクセス可能性と特に関連するアクセス可能性インデックスは、先祖階層をスキャンする間、パッケージプライベートアクセス可能性と特に関連するアクセス可能性インデックスから独立して維持されてもよい。加えて、いかなるアクセス可能性インデックスも、特定のメソッドが先祖階層において見出されなかったことを示すデフォルト値(例えば負の数)で開始してもよい。インデックスは次いで、対応するメソッドの位置を示す第2の値(正の数)に変更してもよい。
ルックアップが先祖階層を通して行われる際のアクセス可能性インデックスの割り当て(1404)とテーブルサイズの増加とを、図14に関して上で検討したように図15内に示す。プロセスはクラスC内の各ローカル定義メソッドMのために繰り返される(1502)。すべてのローカル定義メソッドが処理されると、メソッドは好ましいディスパッチテーブル構造プロセス1400へ戻る(1408)。次の未処理メソッドMのため、対応メソッドMを検索する先祖階層上への横断が実行される。これは、直系のスーパークラス5が存在するかどうかを判定することから開始する(1504)。
直系のスーパークラス5が存在する場合、ディスパッチテーブル構造プロセス1400は、アクセス可能性インデックスの状態をチェックして、メソッドMのすべての関連アクセス可能性が見出されたかを判定する。例えば、メソッドのパブリック/プロテクテッド及びパッケージプライベートバージョンに対応するアクセス可能性インデックスのすべてが先祖階層内のメソッドの存在を示すと(1512)、プロセスは検索された情報の割り当て(1506)へ進んでもよい。メソッドのパブリック、プライベート及びパッケージプライベートバージョンに対応するアクセス可能性インデックスのすべてが見つからなければ、好ましいプロセス1400は階層を遡り続ける(1504)。
ディスパッチテーブル構造プロセス1400は次いで、現在のスーパークラスSがメソッドMによってオーバーライドされるメソッドを含むかどうかを判定する(1514−1520)。もし、このようなメソッドが存在するならば、プロセス1400は現在のスーパークラスSで終了し、階層内に他のスーパークラスが存在するかの判定まで戻る(1504)。もしそれがメソッドMによってオーバーライドされたメソッドを含むのであれば、メソッドのアクセス可能性を判定する必要がある。オーバーライドされたメソッドがパブリックかプロテクテッドであれば(1516)、メソッドに対する一次Vtableインデックスはパブリック/プロテクテッドインデックスに割り当てられる(1518)。これに対して、オーバーライドされたメソッドがプライベートであれば(1520)、メソッドに対する一次Vtableインデックスはパッケージプライベートインデックスに割り当てられる(1522)。何れにせよ、プロセス1400は階層を遡り続ける(1504)。
すべてのメソッドMのアクセス可能性のタイプが見出された場合、又は先祖階層を通してのルックアップが終了した場合、情報はVtableに割り当てられる(1506)。先祖階層を通してのルックアップ後のVtable1700内へのインデックスの作成を図16及び図17に示す。Vtable1700のためのインデックスの作成はメソッドMのアクセス可能性に左右される。それに応じて、メソッドMに対するインデックスを割り当てるプロセスは、最初にメソッドMのアクセス可能性を判定する。
本実施の形態では、メソッドMがパブリックかプロテクテッドかは最初に判定される(1602)。メソッドMがパブリックかプロテクテッドである場合、アクセス可能性インデックスはチェックされて、メソッドMのパブリックバージョンが先祖階層内で見出されたのかを判定する(1604)。パブリック又はプロテクテッドメソッドMが先祖階層内で見出されたとすると、メソッドMに割り当てられる一次Vtableインデックスは、スーパークラス内で見出されるパブリック/プロテクテッドアクセス可能性インデックス1702である(1606)。パブリック又はプロテクテッドメソッドMが先祖階層内で見出されなければ、新規エントリ1704はVtable1700内に作成され、メソッドMに対する一次インデックスは新規エントリ1704に割り当てられ(1608)、現在のVtableサイズはVtableポインタ1706用いて増加させられる(1610)。従って、メソッドMが先祖階層内に見出されたかどうかに関係なく、一次VtableインデックスはVtable1700内に割り当てられる。
Vtableポインタ1706は次いで、Vtable1700内の次のエントリ1710を指す。Vtableポインタ1706は、スーパークラスSの継承メソッドに対応する推定サイズ及び位置で開始した。各新規エントリがクラスCのローカル定義メソッドのために追加されるように、Vtableポインタ1706は、Vtable1700のサイズを増加し保持する。
次いで、パッケージプライベートアクセス可能性インデックスが記録された場合、それは二次インデックスに割り当てられなければならない。割り当てられたインデックスは、Vtable1700のスーパークラス部内の適切なエントリを上書きするために後で用いられる。
メソッドMがプライベートパッケージである場合(1616)、アクセス可能性インデックスはチェックされて、メソッドMが先祖階層内で見出されたかを判定する(1618)。パッケージプライベートメソッドMが先祖階層内で見出されたとすると、メソッドMに割り当てられる一次Vtableインデックスは、スーパークラス内で見出されるパッケージプライベートアクセス可能性インデックス1708である(1620)。パッケージプライベートメソッドMが先祖階層内で見出されなければ、新規エントリ1704は依然としてVtable1700内に作成され、メソッドMに対する一次インデックスは新規エントリ1704に割り当てられ(1622)、現在のVtableサイズはVtableポインタ1706を用いて増加させられる。
また、パブリック/プロテクテッドインデックスが記録された場合、それは二次インデックスに割り当てられなければならない。割り当てられたインデックスは、Vtable1700のスーパークラス部内の適切なエントリを上書きするために後で用いられる。
最終的に、好ましいプロセス1400のために、メソッドMがパブリック、プロテクテッド、又はプライベートパッケージでない場合、それはプライベートとしなければならない(1616)。ローカル定義メソッドが常に新規エントリを必要とするように、メソッドMに対する新規エントリ1704はVtable1700内に作成され、メソッドMに対する一次インデックスは新規エントリ1704に割り当てられ(1622)、現在のVtableサイズはVtableポインタ1706用いて増加させられる。
次いで、パブリック/プロテクテッドアクセス可能性インデックスが記録された場合、それは二次インデックスに割り当てられなければならない。割り当てられたインデックスは次いで、Vtable1700のスーパークラス部内の適切なエントリを上書きするために用いられる。同様に、パッケージプライベートインデックスが記録された場合、それは、三次インデックスに割り当てられなければならない。割り当てられたインデックスは次いで、Vtable1700のスーパークラス部内の適切なエントリを上書きするために用いられる。
ローカル定義メソッドのすべてに対するインデックスの割当てが完了し、テーブルのサイズが決定された後(1404)、好ましいプロセス1400は次いで、必要であれば、何れのミランダメソッドも処理する(1406)。Vtable1700は次いで、メモリの適切な部分に割り当てられる(1408)。Vtable1700は、最初にスーパークラスSの内容によって満たされ(1410)、次いで各ローカル定義メソッドによって満たされる(1412)。
各ローカル定義メソッドMのために、好ましいプロセス1400は、ポインタを一次インデックスにおいて対応するメソッドソースコードに割り当てる(1414)。二次インデックスが割り当てられると(1416)、二次インデックスにおけるソースコードに対するポインタが割り当てられる(1418)。同様に、三次インデックスが割り当てられると(1420)、三次インデックスにおけるソースコードに対するポインタが割り当てられる(1422)。
サブクラスがミランダメソッドを実装する時、対応するVtableエントリは更新されなければならない。従って、何れかのミランダメソッドが上書きされたかは別々に判定されなければならない。これは、スーパークラスのVtableを通して検索することによって実行される。より詳細には、Vtableは低部から走査されて、現在のメソッドの名前とディスクリプタと一致するミランダメソッドを探す。ミランダメソッドに対応するエントリ1712はVtable1700内に示される。
エントリを新規ミランダメソッドに割り当てるための手続きは図13と同様である。しかしこの場合には、新規エントリをディスパッチテーブル内に割り当て(1302)、スタブポインタを新規エントリに挿入する(1314)ことの代わりに、新規スタブメソッドは、ローカル定義のミランダメソッドのセットに追加される。一次インデックスはこのメソッドのために割り当てられ、Vtableサイズは増加させられる。
特定の実施の形態では、上記Vtable構築メソッドは、サンマイクロシステムズのホットスポットの内部クラス表現のクラス表現において実装される。この場合には、すべてのクラス及びインターフェースは、それがローカルに定義するすべてのメソッドを含むメソッドテーブルを有している。加えて、すべてのクラスは、(継承メソッドを含む)クラスのインスタンスにおいて呼び出され得るすべてのメソッドのためのエントリを有するディスパッチテーブルを有する。
本発明は、コンピュータシステム内に格納される情報に関わる様々なコンピュータ実装オペレーションを用いてもよい。これらのオペレーションは、それらの必要とする物理量の物理的な操作を含むが、これに限定されるものではない。必ずしもそうではないが、通常、これらの量は、格納され、転送され、組み合わされ、比較され、一方で処理されることが可能な電気又は磁気信号の形をとる。本発明の一部を形成する本明細書中に記載のオペレーションは、有用な機械操作である。実行される操作は、多くの場合、作成、識別、実行、判定、比較、履行、ダウンロード、又は検出等の用語で引用される。時には、便宜的に、主に一般的な用法の理由で、これら電気又は磁気信号を、ビット、数値、エレメント、変数、文字等と称する。しかしながら、これら全ての、及び同様の用語は、適切な物理量と関連するものであり、これらの量に適用される単に便宜上の呼び名であることを留意されたい。
本発明はまた、前記のオペレーションを実行するためのデバイス、システム又は装置に関する。システムは、必要な目的のために特別に構成されてもよく、又は、コンピュータ内に格納されるコンピュータプログラムによって選択的に起動させられるか、又は設定される汎用コンピュータであってもよい。上で示されるプロセスは本質的に、いかなる特定のコンピュータ又は他のコンピューティング装置とも関係しない。特に、様々な汎用コンピュータは、本明細書中の教示に従って書かれるプログラムとともに用いられてもよく、又は、代替として、必要なオペレーションを実行するため、より特化したコンピュータシステムを構成することが、便利であろう。
図18は、本発明の一実施の形態に従う処理の実行に適した汎用コンピュータシステム1800のブロック図である。例えば、JVM707、仮想マシン711、又はバイトコードコンパイラ703は、汎用コンピュータシステム1800上で実行できる。図18は、汎用コンピュータシステムの一実施の形態を示す。他のコンピュータシステムアーキテクチャ及び構成は、本発明の処理の実行に用いることができる。以下に記載する様々なサブシステムで構成されているコンピュータシステム1800は、少なくとも一つのマイクロプロセッササブシステム(また、中央処理装置、即ちCPUと称する)1802を含む。即ち、CPU1802は、シングルチッププロセッサによって、又はマルチプロセッサによって実装され得る。CPU1802は、コンピュータシステム1800のオペレーションを制御する汎用デジタルプロセッサである。メモリから取り出される命令を用いることによって、CPU1802は、入力情報の受信及び操作、及び出力装置上への情報の表示及び出力を制御する。
CPU1802は、第1の一次記憶装置1804、普通はランダムアクセスメモリ(RAM)と双方向に、そして、メモリーバス1808を介して第2の一次記憶領域1806、普通は読み出し専用メモリ(ROM)と単方向に接続される。当該技術においてよく知られるように、一次記憶装置1804は、汎用記憶領域として、及び、スクラッチパッドメモリとして用いることができ、また、入力データ及び処理済データの格納に用いることができる。それはまた、プログラム命令及びデータを、CPU1802上で動作するプロセス用の他のデータ及び命令に加えて格納でき、普通、メモリーバス1808上での双方向の素早いデータ及び命令の転送に用いられる。また、当該技術においてよく知られるように、一次記憶装置1806は普通、CPU1802によって用いられて、その機能を実行する基本動作命令、プログラムコード、データ及びオブジェクトを含む。一次記憶デバイス1804及び1806は、例えば、データアクセスが、双方向又は単方向である必要があるかどうか等によって、以下に記載の、あらゆる適切なコンピュータ可読記憶媒体を含んでいてもよい。CPU1802はまた、頻繁に必要とされるデータをキャッシュメモリ1810内に直接及び非常に素早く取り出し、格納することができる。
リムーバブル大容量記憶装置1812は、コンピュータシステム1800用の追加データ記憶容量を提供し、周辺バス1814を介して双方向又は単方向でCPU1802に接続される。例えば、CD―ROMとして一般に公知されている特定のリムーバブル大容量記憶装置は普通、単方向でデータをCPU1802に渡すのに対して、フロッピー(登録商標)ディスクは、双方向でデータをCPU1802に渡すことができる。記憶装置1812はまた、磁気テープ、フラッシュメモリ、搬送波内に包含される信号、スマートカード、ポータブル大容量記憶装置及び他の記憶装置等のコンピュータ可読媒体を含んでいてもよい。固定大容量記憶装置1816はまた、追加データ記憶容量を提供し、周辺バス1814を介して双方向でCPU1802に接続される。一般に、これらの媒体へのアクセスは、一次記憶装置1804及び1806へのアクセスより遅い。大容量記憶装置1812及び1816は一般に、普通CPU1802によってアクティブに使用されない追加のプログラム命令、データその他を格納する。大容量記憶装置1812及び1816内部で保持される情報は、必要であれば、仮想メモリとしての一次記憶装置1804(例えばRAM)の一部として標準形態で組み込まれてもよいことは認められよう。
記憶サブシステムに対するCPU1802のアクセスを提供することに加え、周辺バス1814は、他のサブシステム及びデバイスにも同様にアクセスを提供するために用いられる。記載の実施の形態では、これらは、表示モニタ1818及びアダプタ1820、プリンタ装置1822、ネットワークインターフェース1824、補助入出力装置インターフェース1826、サウンドカード1828及びスピーカ1830、及び必要に応じて他のサブシステムを含んでいる。
ネットワークインターフェース1824は、CPU1802が他のコンピュータ、コンピュータネットワーク、又は参照されるようなネットワーク接続を用いる遠距離通信ネットワークに接続されることを許容する。ネットワークインターフェース1824を介して、CPU1802が、例えば、他のネットワーク内のコンピュータからのオブジェクト、プログラム命令、又はバイトコード命令の情報を受信するかもしれず、又は、上記メソッドのステップの実行の間に他のネットワーク内のコンピュータに情報を出力するかもしれないことは、考慮される。多くの場合CPU上で実行される連続命令として表される情報は、例えば、搬送波内に包含されるコンピュータデータ信号の形で、他のネットワークから受信され、出力されてもよい。インターフェースカード又は同様のデバイス、及びCPU1802によって実装される適切なソフトウェアは、コンピュータシステム1800を外部ネットワークに接続し、標準プロトコルに従ってデータを転送するために使用される。即ち、本発明のメソッドの実施の形態は、単にCPU1802上だけで実行してもよく、又は、処理の一部を共有する遠隔CPUと連動する、インターネット、イントラネットネットワーク、又はローカルエリアネットワーク等のネットワークにわたって実行されてもよい。追加の大容量記憶装置(図示せず)はまた、ネットワークインターフェース1824を介してCPU1802に接続されてもよい。
補助I/O装置インターフェース1826は、CPU1802が、他のデバイスからデータを送信し、より一般的には、受信することができる汎用及びカスタマイズされたインターフェースを意味する。また、CPU1802に接続されるのは、キーボード1836又はポインタデバイス1838からの入力を受信し、キーボード1836又はポインタデバイス1838からの復号化シンボルをCPU1802へ送信するためのローカルバス1834を介するキーボードコントローラ1832である。ポインタデバイスは、マウス、スタイラス、トラックボール又はタブレットであってもよく、グラフィカルユーザーインターフェースとの相互作用に役立つ。
加えて、本発明の実施の形態は更に、様々なコンピュータ実装オペレーションを実行するためのプログラムコードを含むコンピュータ可読媒体を持つコンピュータ記憶装置製品に関する。コンピュータ可読媒体は、その後でコンピュータシステムによって読取り可能なデータを格納することができるすべてのデータ記憶装置である。コンピュータ可読媒体の実施例は、ハードディスク、フロッピーディスク、及び特定用途向け集積回路(ASIC)又はプログラマブルロジックデバイス(PLD)等の特別に構成されたハードウェアデバイスを含む上記すべての媒体を含むが、これに限定されるものではない。コンピュータ可読媒体はまた、コンピュータ可読コードが、配布形態で格納され、実行されるよう、搬送波に包含されるデータ信号として接続したコンピュータシステムのネットワーク上で配布することができる。
上記のハードウェア及びソフトウェアエレメントは、標準の設計と構成のものであることは、当該技術に精通する者によって認められるであろう。本発明の用途に適切な他のコンピュータシステムは、追加の、又はより少ないサブシステムを含んでいてもよい。加えて、メモリーバス1008、周辺バス1814、及びローカルバス1834は、サブシステムの連結に役立つすべての相互接続体系を例証する。例えば、ローカルバスは、CPUを固定大容量記憶装置1816及びディスプレイアダプタ1820に接続するために用いられてもよい。図18において参照されるコンピュータシステムは、本発明の用途に適切なコンピュータシステムのほんの一実施例である。異なるサブシステム構成を有する他のコンピュータアーキテクチャもまた、利用されてもよい。
前記発明は、明確な理解のために幾つか詳細に記載したが、特定の変更及び修正は、添付請求の範囲の適用範囲において実践されるであろうことは、明白である。例えば、発明は、クラスのためのディスパッチテーブルの構築に関して検討されてきたが、ディスパッチテーブルは、インターフェースのために開示された手続きを用いて同様に構築されてもよい。他の実施例では、Vtableに関してそれらを区別するstaticメソッド及びプロセスは、拡張されなかったが、本発明は、それらを区分することも同様に適用可能である。加えて、最適化として、Vtableエントリを最終メソッドに割り当てることは、それがスーパークラス又はスーパーインターフェースにおいてメソッドをオーバーライドする限り、回避され得る。更に、本発明は、4つのアクセス可能性のみを示したが、より多くは、本発明に対し明らかに可能で、適用可能である点に留意されたい。更に、本発明が柔軟に適応可能なディスパッチテーブル構造の競合及びアドレス指定されない解像度の代替形式がある点に留意されたい。従って、本実施例は、例証であり、制限するものでないことを考慮すべきであり、本発明は、本明細書中で与えられる詳細に限定されないが、添付請求の範囲の適用範囲及び同等物の範囲において修正されても良い。

Claims (18)

  1. コンピュータにより実行される、直属の親スーパークラスから継承する第1のクラス内のメソッドのためのディスパッチテーブルの構築方法であって、
    前記コンピュータが、クラス内のメソッドへのポインタを格納するエントリを有する構造体であるディスパッチテーブルを前記直属の親スーパークラスからコピーするステップであって、該メソッドには他のクラスからアクセスできるか否かを示すアクセス可能性の情報が関連付けられている、該ステップと、
    前記コンピュータが、前記第1のクラス内のメソッドがクラス階層内の前記第1のクラスの先祖スーパークラス内にも存在するかどうかを判定するステップと、
    前記メソッドが前記先祖スーパークラス内にも存在することが判定された場合に、前記コンピュータが、前記ディスパッチテーブルに含まれているポインタで示される前記メソッドの前記先祖スーパークラスバージョンに対応する前記アクセス可能性の情報に基づいて、前記第1のクラスから該メソッドの該先祖スーパークラスバージョンへのアクセスが可能かどうかを判定するステップと、
    前記メソッドの前記先祖スーパークラスバージョンへアクセスできないと判定された場合に、前記コンピュータが、前記第1のクラス内の前記メソッドへのポインタを格納する新規エントリを前記ディスパッチテーブル内に作成するステップと、
    前記メソッドの前記先祖スーパークラスバージョンへアクセスできると判定された場合に、前記コンピュータが、前記ディスパッチテーブル内にある、該メソッドの該先祖スーパークラスバージョンへのポインタを格納しているエントリに、前記第1のクラス内のメソッドへのポインタを格納することで、該エントリを上書きするステップと、
    を含むディスパッチテーブルの構築方法。
  2. 前記第1のクラスが少なくとも一つのスーパーインターフェースからメソッドを継承する、
    請求項1に記載の方法。
  3. 前記メソッドがミランダ(miranda)メソッドである、
    請求項2に記載の方法。
  4. 前記ディスパッチテーブルを構築する前記方法がオブジェクト指向型言語によって実装される、
    請求項1〜3のいずれか一項に記載の方法。
  5. 前記オブジェクト指向型言語がJAVA(登録商標)である、
    請求項4に記載の方法。
  6. 前記エントリ又は前記新規エントリの位置がインデックスにより示される、
    請求項1〜5のいずれか一項に記載の方法。
  7. 前記クラスがパッケージに属する、
    請求項1〜6のいずれか一項に記載の方法。
  8. 前記アクセス可能性には、パブリック(public)アクセス可能性、プライベート(private)アクセス可能性、プロテクテッド(protected)アクセス可能性、及びパッケージプライベートアクセス可能性のうちの一つが含まれる、
    請求項1〜7のいずれか一項に記載の方法。
  9. コンピュータにより実行される、先祖階層内の直属の親スーパークラスから継承する第1のクラス内のメソッドのためのディスパッチテーブルの構築方法であって、
    前記コンピュータが、クラス内のメソッドへのポインタを格納するエントリを有する構造体であるディスパッチテーブルを前記直属の親スーパークラスからコピーするステップであって、該メソッドには他のクラスからアクセスできるか否かを示すアクセス可能性の情報が関連付けられており、前記エントリの位置がインデックスにより示される、該ステップと、
    前記コンピュータが、前記第1のクラス内のメソッド、及び該メソッドに対応するアクセス可能性の情報が前記先祖階層のスーパークラス内に存在するかどうかを判定するステップと、
    前記コンピュータが、前記メソッド及び前記アクセス可能性の情報が前記先祖階層のスーパークラス内にも存在することが判定された場合に、該スーパークラスに対応するディスパッチテーブルのインデックスを前記メソッド及び前記アクセス可能性の情報に割り当てることを、メソッドに関連付けられたアクセス可能性毎に行うステップと、
    前記コンピュータが、前記メソッド及び前記アクセス可能性の情報が前記先祖階層のスーパークラス内に存在しないと判定された場合に、前記ディスパッチテーブルのインデックスを作成して該インデックスを前記メソッド及び前記アクセス可能性の情報に割り当てることを、メソッドに関連付けられたアクセス可能性毎に行うステップと、
    前記コンピュータが、前記メソッドへのポインタを格納する前記ディスパッチテーブル内のエントリを前記メソッドが割り当てられたインデックスに割り当てることを、各インデックスについて行うステップと、
    を含むディスパッチテーブルの構築方法。
  10. 前記コンピュータが、前記アクセス可能性に基づいて決定された優先度を、前記メソッド及び前記アクセス可能性に対応するエントリに割り当てるステップを更に含む、
    請求項9に記載の方法。
  11. 前記優先度を前記エントリに割り当てるステップが、前記メソッドと、前記第1のクラスのアクセス可能性に対応するアクセス可能性とに関連付けられた前記エントリに一次優先度を割り当てるステップを含む、
    請求項10に記載の方法。
  12. 前記メソッドのすべての前記アクセス可能性の情報にインデックスが割り当てられた場合に、前記コンピュータが、前記第1のクラス内の前記メソッド及び前記アクセス可能性が前記先祖階層のスーパークラス内にも存在するかどうかの判定を中止するステップを更に含む、
    請求項9〜11のいずれか一項に記載の方法。
  13. 前記アクセス可能性がパブリックアクセス可能性、プライベートアクセス可能性、プロテクテッドアクセス可能性、又はパッケージプライベートアクセス可能性である、
    請求項9〜12のいずれか一項に記載の方法。
  14. 前記第1のクラス内の前記メソッド及び前記アクセス可能性の情報が前記先祖階層のスーパークラス内にも存在するかどうかの判定は、前記メソッド及びアクセス可能性の情報が見出されなかった場合の第1の状態から、前記メソッド及びアクセス可能性の情報が見出された場合の第2の状態へ変化することを示すインデックスを用いて実行される、
    請求項9に記載の方法。
  15. 前記コンピュータが、前記ディスパッチテーブルをメモリに割り当てるために該ディスパッチテーブルのサイズを判定するステップを更に含む、
    請求項9〜14のいずれか一項に記載の方法。
  16. 前記コンピュータが、割り当てられた各エントリに対応する前記ディスパッチテーブルの少なくとも一つのエントリを割り当てるステップを更に含む、
    請求項15に記載の方法。
  17. 前記コンピュータが前記ディスパッチテーブルを前記メモリに書き込むステップを更に含む、
    請求項15又は16に記載の方法。
  18. スーパークラスから継承する第1のクラス内のメソッドのためのディスパッチテーブルの構築方法をコンピュータに実行させるためのプログラムを記録したコンピュータ可読記憶媒体であって、
    前記構築方法が
    クラス内のメソッドへのポインタを格納するエントリを有する構造体であるディスパッチテーブルを前記第1のクラスの直属の親スーパークラスからコピーするステップであって、該メソッドには他のクラスからアクセスできるか否かを示すアクセス可能性の情報が関連付けられている、該ステップと、
    前記第1のクラス内のメソッドがクラス階層内の前記第1のクラスの先祖スーパークラス内にも存在するかどうかを判定するステップと、
    前記メソッドが前記先祖スーパークラス内にも存在することが判定された場合に、前記ディスパッチテーブルに含まれているポインタで示される前記メソッドの前記先祖スーパークラスバージョンに対応する前記アクセス可能性の情報に基づいて、前記第1のクラスから該メソッドの該先祖スーパークラスバージョンへのアクセスが可能かどうかを判定するステップと、
    前記メソッドの前記先祖スーパークラスバージョンへアクセスできないと判定された場合に、前記第1のクラス内の前記メソッドへのポインタを格納する新規エントリを前記ディスパッチテーブル内に作成するステップと、
    前記メソッドの前記先祖スーパークラスバージョンへアクセスできると判定された場合に、前記ディスパッチテーブル内にある、該メソッドの該先祖スーパークラスバージョンへのポインタを格納しているエントリに、前記第1のクラス内のメソッドへのポインタを格納することで、該エントリを上書きするステップと、を含む、
    コンピュータ可読記憶媒体。
JP2010107436A 1999-04-26 2010-05-07 ディスパッチテーブル構造のための方法と装置 Expired - Lifetime JP4571710B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US09/299,946 US6393491B1 (en) 1999-04-26 1999-04-26 Method and apparatus for dispatch table construction

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2000126183A Division JP2000347864A (ja) 1999-04-26 2000-04-26 ディスパッチテーブル構造のための方法と装置

Publications (2)

Publication Number Publication Date
JP2010170585A true JP2010170585A (ja) 2010-08-05
JP4571710B2 JP4571710B2 (ja) 2010-10-27

Family

ID=23156997

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2000126183A Pending JP2000347864A (ja) 1999-04-26 2000-04-26 ディスパッチテーブル構造のための方法と装置
JP2010107436A Expired - Lifetime JP4571710B2 (ja) 1999-04-26 2010-05-07 ディスパッチテーブル構造のための方法と装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2000126183A Pending JP2000347864A (ja) 1999-04-26 2000-04-26 ディスパッチテーブル構造のための方法と装置

Country Status (6)

Country Link
US (2) US6393491B1 (ja)
EP (1) EP1049009A3 (ja)
JP (2) JP2000347864A (ja)
CN (1) CN1183447C (ja)
AU (1) AU773769B2 (ja)
CA (1) CA2306533A1 (ja)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6668285B1 (en) * 1999-05-12 2003-12-23 Koninklijke Philips Electronics N.V. Object oriented processing with dedicated pointer memories
US6725280B1 (en) * 1999-08-13 2004-04-20 Sun Microsystems, Inc. Method and apparatus for constructing dispatch tables which enable transitive method override
DE10030988A1 (de) * 2000-06-30 2002-01-10 Bosch Gmbh Robert Elektronisches System zur Entwicklung von Software und ein Verfahren zum Eingriff auf interne Daten der Software
US6978456B1 (en) 2000-10-31 2005-12-20 Sun Microsystems, Inc. Methods and apparatus for numeric constant value inlining in virtual machines
US6901591B1 (en) * 2000-10-31 2005-05-31 Sun Microsystems, Inc. Frameworks for invoking methods in virtual machines
US6996813B1 (en) 2000-10-31 2006-02-07 Sun Microsystems, Inc. Frameworks for loading and execution of object-based programs
US7020874B2 (en) * 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7096466B2 (en) * 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
US7543288B2 (en) 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
US6996830B1 (en) 2001-05-07 2006-02-07 Microsoft Corporation System determining whether to activate public and private components operating within multiple applications of a component-based computing system
US7305658B1 (en) 2001-05-07 2007-12-04 Microsoft Corporation Method and system for application partitions
US6941550B1 (en) * 2001-07-09 2005-09-06 Microsoft Corporation Interface invoke mechanism
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US7039904B2 (en) 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
US6988261B2 (en) 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
US7010791B2 (en) * 2001-09-20 2006-03-07 Intel Corporation Method for implementing multiple type hierarchies
US7457796B2 (en) * 2004-07-08 2008-11-25 International Business Machines Corporation Method using virtual replicated tables in a cluster database management system
US20070257715A1 (en) * 2005-12-30 2007-11-08 Semerdzhiev Krasimir P System and method for abstract configuration
US8201189B2 (en) 2005-12-30 2012-06-12 Sap Ag System and method for filtering components
US8843918B2 (en) 2005-12-30 2014-09-23 Sap Ag System and method for deployable templates
US8838750B2 (en) * 2005-12-30 2014-09-16 Sap Ag System and method for system information centralization
US9477495B2 (en) * 2006-08-17 2016-10-25 International Business Machines Corporation Conservative class preloading for real time Java execution
US8127284B2 (en) * 2007-10-16 2012-02-28 Microsoft Corporation On-demand loading of types of software code of a program executing on a computing device
US20090249311A1 (en) * 2008-03-31 2009-10-01 International Business Machines Corporation Sharing a native module of compiled code using an abstraction module of interpreted code in a virtual machine environment
US20090319982A1 (en) * 2008-06-24 2009-12-24 Microsoft Corporation Multiple Code Inheritance with Explicit Base Calling
US8793671B2 (en) * 2008-06-28 2014-07-29 Microsoft Corporation Interface optimization in a closed system
US8316350B2 (en) * 2008-11-20 2012-11-20 Sap Aktiengesellschaft Interface versioning
US8578352B1 (en) * 2011-03-31 2013-11-05 Google, Inc. Optimizing object oriented programs using limited customization
US8910127B2 (en) * 2012-09-20 2014-12-09 Identify Software Ltd. (IL) Estimating indirect interface implementation before load time based on directly implemented methods

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08320790A (ja) * 1995-05-25 1996-12-03 Mitsubishi Electric Corp メソッド呼び出し方法及びメソッド追加・削除方法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4525780A (en) * 1981-05-22 1985-06-25 Data General Corporation Data processing system having a memory using object-based information and a protection scheme for determining access rights to such information
US5345587A (en) * 1988-09-14 1994-09-06 Digital Equipment Corporation Extensible entity management system including a dispatching kernel and modules which independently interpret and execute commands
US5515536A (en) 1992-11-13 1996-05-07 Microsoft Corporation Method and system for invoking methods of an object through a dispatching interface
US5546586A (en) * 1993-05-06 1996-08-13 Apple Computer, Inc. Method and apparatus for vectorizing the contents of a read only memory device without modifying underlying source code
US5481713A (en) * 1993-05-06 1996-01-02 Apple Computer, Inc. Method and apparatus for patching code residing on a read only memory device
US5615400A (en) 1993-06-30 1997-03-25 Apple Computer, Inc. System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers
US5600838A (en) * 1994-01-18 1997-02-04 Sybase, Inc. Object oriented dispatch and supercall process and arrangement
JP3019915B2 (ja) * 1995-11-20 2000-03-15 日本電気株式会社 手続き呼出し方法
JPH09282167A (ja) * 1996-04-10 1997-10-31 Internatl Business Mach Corp <Ibm> メソッド起動方法及びメソッド起動制御装置
US5889995A (en) 1996-05-20 1999-03-30 Sun Microsystems, Inc. Using constant selectors for method identification
CA2236064A1 (en) * 1998-04-28 1999-10-28 Ibm Canada Limited - Ibm Canada Limitee Method and system for constructing hybrid virtual function tables
US6256752B1 (en) * 1998-07-24 2001-07-03 International Business Machines Corporation Method and apparatus for dynamic swappable bytecode loop in java virtual machines
US6260187B1 (en) * 1998-08-20 2001-07-10 Wily Technology, Inc. System for modifying object oriented code

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08320790A (ja) * 1995-05-25 1996-12-03 Mitsubishi Electric Corp メソッド呼び出し方法及びメソッド追加・削除方法

Also Published As

Publication number Publication date
US20020107996A1 (en) 2002-08-08
EP1049009A3 (en) 2005-02-09
CA2306533A1 (en) 2000-10-26
AU2891800A (en) 2000-11-02
US6643711B2 (en) 2003-11-04
CN1183447C (zh) 2005-01-05
EP1049009A2 (en) 2000-11-02
AU773769B2 (en) 2004-06-03
JP2000347864A (ja) 2000-12-15
US6393491B1 (en) 2002-05-21
CN1274886A (zh) 2000-11-29
JP4571710B2 (ja) 2010-10-27

Similar Documents

Publication Publication Date Title
JP4571710B2 (ja) ディスパッチテーブル構造のための方法と装置
US7543309B2 (en) Efficient linking and loading for late binding and platform retargeting
US8434099B2 (en) Efficient linking and loading for late binding and platform retargeting
EP3143500B1 (en) Handling value types
US7565665B2 (en) Efficient linking and loading for late binding and platform retargeting
US7143421B2 (en) Highly componentized system architecture with a demand-loading namespace and programming model
US6799173B2 (en) Method and apparatus for sharing code containing references to non-shared objects
US5535390A (en) Method for reusing temporaries and reclaiming shared memory
US5303392A (en) Accessing current symbol definitions in a dynamically configurable operating system
US6093216A (en) Method of run-time tracking of object references in Java programs
US7225438B2 (en) Lazy compilation of template-generated classes in dynamic compilation execution environments
US6446254B1 (en) Packaging memory image files
US6728963B1 (en) Highly componentized system architecture with a loadable interprocess communication manager
US7882198B2 (en) Shared JAVA JAR files
EP1657644A2 (en) System, method and medium for efficiently obtaining the addresses of thread local variables
US8650537B2 (en) Optimizing an object-oriented program by transforming invocations of synthetic accessor methods
US20090133042A1 (en) Efficient linking and loading for late binding and platform retargeting
US7406687B1 (en) Sharing runtime representation of software component methods across component loaders
US8464226B2 (en) System and method for interoperating with foreign objects from a host computing environment
US7159222B1 (en) Highly componentized system architecture with object mutation
Baker et al. The Systems Programming Annex of the proposed Ada 9X standard

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100507

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100713

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100812

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130820

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4571710

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term