JP2002517033A - 静的束縛された機能呼出から動的束縛された機能呼出への再コンパイルを必要としない動的切り換え - Google Patents

静的束縛された機能呼出から動的束縛された機能呼出への再コンパイルを必要としない動的切り換え

Info

Publication number
JP2002517033A
JP2002517033A JP2000551313A JP2000551313A JP2002517033A JP 2002517033 A JP2002517033 A JP 2002517033A JP 2000551313 A JP2000551313 A JP 2000551313A JP 2000551313 A JP2000551313 A JP 2000551313A JP 2002517033 A JP2002517033 A JP 2002517033A
Authority
JP
Japan
Prior art keywords
function
function call
unique
class
call
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
JP2000551313A
Other languages
English (en)
Inventor
スジャン ミトロビック
Original Assignee
サンマイクロシステムズ インコーポレーテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by サンマイクロシステムズ インコーポレーテッド filed Critical サンマイクロシステムズ インコーポレーテッド
Publication of JP2002517033A publication Critical patent/JP2002517033A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation

Abstract

(57)【要約】 【課題】再コンパイルを行うことなしに、機能呼出の静的束縛を動的束縛に切り換える、従来のシステムに比べ性能を向上させたハイブリッド型動的束縛システムを提供すること。 【解決手段】本発明のシステムは、機能が一義的であるときは機能呼出の静的束縛を提供し、実行時において機能が一義的でなくなったときは、その機能呼出のコードを再コンパイルすることなしに動的束縛に切り換えることができる。このシステムは、プレースホルダを静的束縛機能呼出の中に挿入することによりその機能を実行するので、かかる静的束縛機能呼出を動的束縛機能呼出に変換する必要が生じたときは、このプレースホルダに上書きすることにより再コンパイルすることなく変換を行うことができる。

Description

【発明の詳細な説明】
【0001】 (発明の技術分野) 本発明は、概して、データ処理システムに関し、更に詳しくは、再コンパイル
を必要としない、静的束縛された機能呼出から動的束縛された機能呼出への切り
換え技術に関する。
【0002】 (発明の背景技術) プログラマがコンピュータプログラムを開発する際、通常、プログラムのソー
スコードは、同じくそのプログラムに含まれる多くの機能及び変数にアクセスす
る。こういったアクセスは、機能や変数の名前の単なる表示としてソースコード
上に記述されている。しかしながら、機能や変数へのアクセスに先だって、機能
のエントリポイント或いは変数のデータが存在する場所である記憶場所に名前を
束縛しなければならない。束縛には、静的な束縛と動的な束縛との2つの束縛が
ある。「静的束縛」という用語は、コンパイル或いは結合の段階で名前を記憶場
所に束縛することを指し、これに対し、「動的束縛」という用語は、実行時に名
前を記憶場所に束縛することを指す。
【0003】 動的束縛の技術は、オブジェクト指向プログラミング言語において極めて一般
的になってきている。オブジェクト指向プログラミング言語でプログラムを開発
するときは、通常、プログラマは多数のオブジェクトを作成し、その相互作用に
よってプログラムの機能が実行される。「オブジェクト」はデータとその振る舞
いとを含んでおり、データはオブジェクトのデータメンバとして格納され、振る
舞いはオブジェクトの機能メンバ、即ちメソッドにより実行される。動的束縛は
、オブジェクト指向プログラミング言語において一般的になってきたが、これは
動的束縛をもちいることによりプログラマは極めて高い柔軟性を得ることができ
るからである。例えば、動的束縛は、実行時にどのように用いられているかとい
う文脈に応じて1つの機能名が幾つかの異なる機能メンバを示すという多態性を
促進する。オブジェクト指向プログラミング言語において1つの機能名が複数の
機能に対し用いられることは一般的であり、むしろ、この特徴こそが多くのオブ
ジェクト指向プログラミング言語の基本を成すものである。
【0004】 1つの機能名が複数の機能を示すことができるのは、プログラムに含まれる各
オブジェクトがクラス定義に基づいているからである(即ち、オブジェクトはク
ラスのインスタンスであるからである)。また、通常、クラスは結合されてクラ
ス階層を構成し、このクラス階層において1つのクラス(導出クラス)は他のク
ラス(基底クラス)のデータメンバと機能メンバとを継承する。この場合、導出
クラスは、基底クラスが提供する機能メンバの実装を用いるか、或いは、かかる
機能メンバをオーバーライドするかのいずれかをを選択することができる。機能
メンバをオーバーライドするときは、導出クラスはその機能メンバの独自の実装
を定義するが、これは同一の機能名を使って行われる。導出クラスが基底クラス
の機能メンバをオーバーライドした後は、「導出クラス」型のオブジェクトが機
能メンバを呼出すと、導出クラスが提供する機能メンバの実装が呼出される。こ
れとは逆に、「基底クラス」型のオブジェクトが機能メンバを呼出すと、基底ク
ラスが提供する機能メンバの実装が呼出される。
【0005】 動的束縛はプログラミングにおける柔軟性を提供するものの、効率的に行わな
いと機能メンバの呼出毎に動的束縛に関わるオーバーヘッドをもたらすことにな
ってしまうので、実行時の性能に多大な影響を与えかねない。従って、非効率的
な動的束縛を用いることは、プログラム全体の性能が大きく低下することに繋が
る。
【0006】 動的束縛を行うための従来の技術としてはインラインキャッシングとして知ら
れる技術が相当に効率的である。インラインキャッシングにおいては、各機能メ
ンバは、検証エントリポイントと非検証エントリポイントの2つのエントリポイ
ントを有する。検証エントリポイントは、プログラマが作成したコードである、
機能メンバの実際のコードへのアクセスを提供する。一方、非検証エントリポイ
ントはシステムにより提供される検証コードであって、呼出側が呼び出そうと意
図する機能メンバが、同一の名前をつけられた異なる実装を有する異なる機能メ
ンバではなく、正しくこの機能メンバであることを検証するために用いられる。
インラインキャッシング技術においては、呼出オブジェクトによる機能呼出(例
えば「foo」)は、以下に示すインテル80486疑似コードで示す2つの命令
を含んでいる。
【0007】 コード表1 move eax, class call unverified_entry_point class.foo
【0008】 上記のコード表において、「クラス(class)」は、このコードによって「foo
」機能を最後に呼出したオブジェクトのクラスの識別子である。換言すれば、異
なる型のオブジェクトが上記のコードを使って機能メンバを呼出した可能性があ
り、「クラス(class)」はこの様な呼出を一番最後に行ったオブジェクトのク
ラスを識別する。移動(move)命令は、「クラス(class)」識別子をコンピュ
ータのeaxレジスタ内に移動させ、呼出(call)命令は、識別されたクラスのfoo
機能メンバの非検証エントリポイントにアクセスする。この呼出命令は、呼出オ
ブジェクトのクラスがeaxレジスタに含まれるクラスと同一であり、処理時間を
短縮できることを期待して行われる命令であるが詳しくは後述する。
【0009】 更に詳細にインラインキャッシングの技術について説明するために、従来のイ
ンラインキャッシング技術において実行されるステップを示した図1のフローチ
ャートについて考察する。このフローチャートは、サーバ機能という機能メンバ
を呼出すための機能呼出を実行する際に、呼出オブジェクトが実行するステップ
を示す。機能呼出を実行するときは、呼出オブジェクトは上述のコード表1に含
まれるような命令を実行する。呼出オブジェクトが実行する第1のステップは、
呼出オブジェクトが移動命令を実行し、その機能呼出を使ってサーバ機能を呼出
した最後のオブジェクトのクラスをeaxレジスタ内に移動する(ステップ102
)。この命令については既に述べた。次に、呼出オブジェクトはサーバ機能の非
検証エントリポイントを呼出す(ステップ104)。この命令についても既に述
べた。この命令を実行するとき、サーバ機能の非検証エントリポイントが関連付
けられ、非検証エントリポイントに位置する検証コードがステップ106、11
0、112、114及び116に示した通り実行される。この検証コードは、サ
ーバ機能が果たして呼出オブジェクトが呼出すべき正しい機能メンバであるか否
かを判定する。正しくない場合には、検証コードは、正しい機能メンバを判定し
機能呼出のコード(コード表1に含まれるコード)を修正するので以降の機能呼
出においては正しい機能メンバが呼出されることになる。その後、検証コードは
その正しい機能メンバを呼出す。
【0010】 サーバ機能の検証コードにより実行される最初のステップは、適切なクラスが
eaxレジスタに存在するか否かを判定するステップである(ステップ106)。e
axレジスタ内のクラスは、最後にその機能呼出使って機能メンバを呼び出したオ
ブジェクトのクラスである。故に、eaxレジスタに含まれるクラスの全てのオブ
ジェクトのために呼出されるべき正しい機能がサーバ機能であることを確認でき
る。eaxレジスタに含まれるクラスが正しいクラスであるか否かを判定するため
に、サーバ機能の検証コードにより、かかるクラスを呼出オブジェクトのクラス
と比較する。呼出オブジェクトのクラスは隠しパラメータとしてサーバ機能に渡
され、このステップでは、サーバ機能はこのパラメータを上述の比較に用いる。
eaxレジスタに正しいクラスが含まれていれば、サーバ機能はこれを呼出すべき
正しい機能であると判断し、これに含まれる命令を実行する(ステップ108)
。これらの命令は、サーバ機能の検証エントリポイントに位置する。このステッ
プで実行される命令は、プログラマがサーバ機能用に作成した実際のコードであ
る。
【0011】 逆に、eaxレジスタに正しいクラスが含まれていない場合は、サーバ機能の検
証コードは、呼出オブジェクトのクラスを示す隠しパラメータにアクセスし、探
索機能を使ってこのクラスのオブジェクトに適切な機能の位置を突き止める(ス
テップ110)。探索機能は、システムにより提供される機能である。適切な機
能の位置を突き止めたら、検証コードは、ステップ102に示す機能呼出のコー
ドを、呼出オブジェクトのクラスを示すように変更する。従って、次にこの機能
呼出が呼出されるときには、このクラスがeaxレジスタに移動される。検証コー
ドはまた、ステップ104に示す機能呼出のコードも変更するので次に呼出され
るときは、適切なサーバ機能の非検証エントリポイントが呼出される(ステップ
112)。続いて、サーバ機能の検証コードは、適切なクラスをeaxレジスタに
格納し(ステップ114)、適切なサーバ機能の検証エントリポイントを呼出す
(ステップ116)。機能メンバのメインコードが位置する検証エントリポイン
トが呼出されるのは、この機能メンバが呼出オブジェクトに対して適切な機能メ
ンバであると判定されたためである。この適切な機能メンバを実行後、処理は戻
る。
【0012】 適切な機能メンバを示すようにコードを変更することは、インラインキャッシ
ング技術に必要な処理ではあるもののかなりの処理時間を要する。これはCPU
の命令キャッシュをフラッシュする必要があるためである。インテルペンティア
TMなど幾つかのCPUアーキテクチャにおいては、CPUが命令キャッシュ
を保持しており、ここにメインメモリから多数の命令を先取りしてメインメモリ
へのアクセス回数を減らすことができる。命令が変更されると、かかるキャッシ
ュは最早有効でなくなるので、命令キャッシュはフラッシュを行うとともにメイ
ンメモリにアクセスして再びキャッシュを充填する必要がある。命令キャッシュ
のフラッシュ及び充填は処理時間のかさむ効率の悪い処理である。
【0013】 インラインキャッシングは動的束縛を行うかなり効率的な方法ではあるが、著
しく多くの不必要な処理も実行してしまう。例えば、機能メンバの検証コードは
、機能名が一義的でないとき、即ち、クラス階層の複数の機能メンバを示すとき
にしか呼出す必要がない。所与の名前を有する機能メンバがクラス階層に1つし
かないときは、かかる機能メンバ名に対する全ての表示は常に同一の機能メンバ
を示すので曖昧さは存在しない。この様な場合、検証コードを呼出す処理は無駄
な処理である。この点に鑑みて、既存のシステムの中には静的束縛と動的束縛の
両方を用いるハイブリッドアプローチを実装するシステムがある。このアプロー
チを用いると、一義的な機能メンバに対しては、静的束縛が用いられ、実行時に
、静的束縛された機能メンバが既にオーバーライドされているため一義的でなく
なったときは、このシステムは動的束縛に切り換える。この結果、かかるシステ
ムは検証コードが一義的であるときには、不必要な検証コードの呼出しを少なく
することができる。
【0014】 上記のハイブリッドシステムは2つの部分に分けて実装される。システムの第
1の部分はコンパイラ中に実装され、第2の部分は実行時にプログラムによって
実行される。図2Aに示すとおり、コンパイラは機能呼出をコンパイルするとき
、先ずそれが一義的な機能呼出であるか否かを判定する(ステップ200)。コ
ンパイラはこの判定を、クラス階層を調査して同一名の機能メンバが存在するか
否かを判定することによって行う。機能呼出が一義的であれば、コンパイラは静
的束縛を用いてコードのコンパイルを行う(ステップ202)。この場合、コン
パイラは、機能呼出のソースコードを、その機能メンバの検証エントリポイント
への呼出にコンパイルする。これとは逆に、機能メンバが一義的でなければ、コ
ンパイラは上述したインラインキャッシング技術を使って機能呼出をコンパイル
する(ステップ204)。
【0015】 プログラムのコンパイル後、プログラムを実行する。かかるシステムは、図2
Bに示したように、プログラムの実行中、システムが提供する機能が呼出された
場合を判定してクラスをロードする(ステップ210)。「クラスのロード」と
は、クラスの定義に基づいてオブジェクトがインスタンス生成されること指す。
このようなオブジェクトの生成は、クラス階層の機能メンバをオーバーライドす
ることになり、従って機能メンバを一義的でなくする可能性がある。クラスがロ
ードされたとシステムが判定すると、システムは静的束縛された機能メンバが一
義的でなくなったか否かを判定する(ステップ212)。システムはこの判定を
、ロードされたクラスの機能メンバが、図2Aに示すステップ202において静
的束縛を使ってコンパイルされたクラス階層の既存の機能メンバをオーバーライ
ドしたか否かを判定することによって行う。オーバーライドが行われた場合、シ
ステムは機能呼出のコードを再コンパイルしてインラインキャッシングに切り換
える(ステップ214)。このステップで、機能呼出コードを再コンパイルして
上述のコード表1に示した命令を加えなければならない。
【0016】 このようにハイブリッドシステムを用いれば、検証コードの不必要な呼出しを
避けることはできるものの、これによりシステムに多大な負担がかかることにな
る。というのは、静的束縛から動的束縛への切換を行うには再コンパイルを行わ
なければならないからである。コードの再コンパイルを行うことは、命令キャッ
シュのフラッシュ、メインメモリへのアクセス、コードの分解、生成を必要とす
る。従って、ハイブリッド動的束縛システムの改良が望まれる。
【0017】 (発明の概略) 本発明によれば、機能呼出の静的束縛と動的束縛とを切り換えるハイブリッド
動的束縛システムの改良されたシステムが提供される。本発明のシステムは、対
応する機能が一義的である機能呼出は静的束縛を行い、実行時において、対応す
る機能が一義的でなくなったときは、前記機能呼出のコードを再コンパイルする
ことなしに動的束縛に切り換えるものであり、これにより本システムの性能は従
来のシステムに比べ向上する。本システムは、この機能を次のようにして実行す
る。プレースホルダを静的束縛された機能呼出に挿入する。プレースホルダを挿
入しておくことで、前記静的束縛された機能呼出を動的束縛された機能呼出に変
換する必要が生じたときは、かかるプレースホルダのオーバーライドを行ってコ
ードを再コンパイルすることなしに変換を行うことができる。
【0018】 本発明の第1の特徴によれば、コンピュータプログラムをオブジェクトコード
にコンパイルするためのコンピュータシステムにおいて用いられる方法が提供さ
れる。前記コンピュータプログラムは、コードを備える機能と該機能の機能呼出
とを含む。本方法は、機能呼出が一義的であることを判定し、機能呼出が一義的
であると判定されたときは、この機能呼出をコンパイルして、静的束縛を実行す
るオブジェクトコードを生成する。本方法は、更に、生成されたオブジェクトコ
ードにプレースホルダを挿入する。これにより、生成されたオブジェクトコード
の実行中に前記機能呼出が一義的でなくなったときは、動的束縛に切り換える命
令をプレースホルダに挿入できる。
【0019】 本発明の第2の特徴によれば、静的束縛された機能呼出と動的束縛された機能
呼出とを含むコンピュータプログラムを有するコンピュータシステムにおいて用
いられる方法が提供される。静的束縛された機能呼出は一義的な機能を呼出し、
動的束縛された機能呼出は一義的でない機能を呼出す。本方法は、少なくとも1
つの静的束縛された機能呼出が一義的でない機能呼出に変わったかどうかを判定
する。少なくとも1つの静的束縛された機能呼出が一義的な機能呼出でなくなっ
たと判定されたときは、本方法は、かかる少なくとも1つの静的束縛された機能
呼出を動的束縛された機能呼出に変換する。この変換は、この静的束縛された機
能呼出をバックパッチすることによって行い、コンピュータプログラムの再コン
パイルは行わない。
【0020】 本発明の第3の特徴によれば、データ処理システムが提供される。本データ処
理システムは、メモリとプロセッサとを有している。メモリはコンパイラを含み
、該コンパイラは、機能呼出が一義的でないことを判定するとともに、該コンパ
イラが、機能呼出が一義的であると判定したときは静的束縛を用いて機能呼出を
コンパイルする。前記プログラムは実行時ライブラリを有し、該ライブラリは、
実行中静的束縛された機能呼出が一義でない機能呼出に変わったことを判定する
とともに、該ライブラリが、静的束縛された機能呼出が一義的でない機能呼出に
変わったと判定されたときは、静的束縛された機能呼出を動的束縛された機能呼
出に変換する。プロセッサは、コンパイラとプログラムとの両方を実行する。
【0021】 (発明の詳細な説明) 本発明の例示的な一実施形態として、改良されたハイブリッド動的束縛システ
ムを挙げる。この例示的な実施形態は、機能メンバが一義的であるときには機能
呼出の静的束縛を行い、この機能メンバが一義的でなくなったときには動的束縛
に切り換える。この切り替えは、機能呼出のコードを再コンパイルしなくても行
うことができ、このため本例示的実施形態は既存のシステムの性能を大幅に向上
させる。
【0022】 本例示的実施形態において、機能呼出が一義的であって、静的束縛された機能
呼出において最適化されるとコンパイラが判定したときは、コンパイラは静的束
縛の実行に必要な命令を挿入する。この命令は、機能メンバの検証エントリポイ
ントに対する呼出のための命令である。更に、コンパイラは、プレースホルダを
機能呼出のコードに挿入し、静的束縛された機能呼出をインラインキャッシング
を用いて動的束縛された機能呼出に切り換える必要が後に生じたときに、追加す
べき命令のためのスペースを確保する。プレースホルダは1命令分のスペースを
確保するので、実行時に静的に束縛された機能呼出をインラインキャッシングに
変換する必要があると判定したときは、本例示的実施形態は、プレースホルダに
対し命令のバックパッチを行って既存の命令を変更してインラインキャッシング
技術に切り換える。つまり、かかる切り替えは、コードを再コンパイルすること
を必要としないので、従来のシステムに比べ処理時間を大幅に短縮できる。
【0023】 図3は、本発明の例示的な一実施形態を実施するのに適したデータ処理システ
ム300を示した図である。データ処理システム300は、インターネット30
2に接続されたコンピュータシステム301を備えている。コンピュータシステ
ム301は、メインメモリ303、補助記憶装置304、中央処理装置(CPU
)306、入力装置308、ビデオディスプレイ310を備える。メインメモリ
303は、プログラム314を解釈するJavaTM仮想マシンを備えるととも
に、状況によってはプログラムの一部をコンパイラ313を使ってコンパイルし
て、実行時性能の向上を図る。JavaTM仮想マシン312は、更に、プログ
ラムが実行時に用いる種々の機能を有する実行時ライブラリ315を備える。J
avaTM仮想マシンについては、リンドルム、イェリン共著、「Java仮想
マシン仕様」(アジソン−ウェスレイ社 1997年刊)に、実行時ライブラリ
315については、ジャウォルスキ著、「Java1.1開発者ガイド」(サム
ズネット社 1997刊)の218ページから457ページに、それぞれ詳細に
説明されている。尚、これらの文献は参照して本明細書に援用する。本発明の例
示的実施形態における様々な特徴は、コンパイラ312及び実行時ライブラリ3
15に見ることができる。具体的には、コンパイラ312は、プログラム314
のコンパイル時に、静的束縛された機能呼出のオブジェクトコードにプレースホ
ルダを挿入し、また実行時においては、実行時ライブラリ315は、機能呼出し
を再コンパイルすることなく静的束縛と動的束縛との切り替えを行う。
【0024】 本例示的実施形態は、JavaTM環境において実行されるものとして説明し
たが、本発明はJavaTM環境以外の環境においても実行できることは当業者
には容易に理解されるであろう。また、本発明の実施態様例はメモリ303に含
まれるものとして説明したが、ハードディスク、フロッピーディスク、CD−R
OMなどの補助記憶装置、インターネット302から受信する搬送波、他の形態
のROMやRAMなど、他のコンピュータ可読媒体に含んでもよいことは、当業
者には容易に理解されるであろう。更に、データ処理システム300の特定の構
成要素について説明したが、本例示的実施形態の実施に適したデータ処理システ
ムは、更に他の構成要素を含んでもよいし、或いは、異なる構成要素を含んでも
よいことは当業者には容易に理解されるであろう。
【0025】 図4Aは、本発明の例示的実施形態のコンパイラ313が、機能呼出をコンパ
イルする際に実行するステップを示したフローチャートである。機能呼出のコン
パイルに際し、コンパイラは、先ずクラス階層の分析を行う(ステップ402)
。このステップでは、コンパイラはクラス階層を分析して、その機能メンバが一
義的でなく何度も名前を付けられているかどうかを判定する。コンパイラは、次
に、クラス階層の分析結果を調査して、その機能呼出が一義的であるかどうかを
判定する。機能呼出が一義的でなければ、コンパイラは、上述した適切なインラ
インキャッシング命令文を含むオブジェクトコードを生成してこの機能呼出のコ
ンパイルを行う(ステップ406)。機能呼出が一義的であれば、コンパイラは
オブジェクトコードにプレースホルダを挿入する(ステップ408)。このステ
ップでは、コンパイラは下記の命令を挿入する。
【0026】 move eax, null
【0027】 この命令は、「空白値(null)」をeaxレジスタに移動させるものであり、何
ら影響を与えない動作である。次に、コンパイラは適切な命令をオブジェクトコ
ードに挿入して、静的結合を実行する(ステップ410)。このステップでは、
コンパイラは下記の静的束縛命令文を挿入して、呼び出すべき機能の検証エント
リポイントを呼出す。
【0028】 call verified_entry_point
【0029】 インラインキャッシング或いは静的束縛のいずれかの使用後、機能呼出はコン
パイルされ処理が完了する。
【0030】 図4Bは、静的束縛を動的束縛に切り換える際に実行時ライブラリ315が実
行するステップを示したフローチャートである。実行に際し、コンピュータプロ
グラムと共に動作する実行時ライブラリは、クラスをロードする要求をプログラ
ムから受け取る(ステップ420)。JavaTM実行時環境においては、Ja
vaTM実行時ライブラリに含まれる「Load Class」機能を呼び出すことによっ
て、プログラムはかかる要求を出す。クラスがロードされると、実行時ライブラ
リは、クラス階層に機能メンバが追加されており、これにより静的束縛を使って
コンパイル済みである既存の機能メンバが一義的でなくなっているかどうかを判
定する(ステップ422)。機能メンバが一義的でなくなっていれば、実行時ラ
イブラリはプレースホルダに対して命令をバックパッチし、プログラムに含まれ
るこの機能を呼出す各機能呼出に関しインラインキャッシングを行うように既存
の命令を修正する(ステップ424)。本開示においては、「バックパッチ」と
いう用語は、コードを修正して、再コンパイルすることなしにそのコードの機能
性を変更することを指す。例えば、「foo」という機能メンバがあるとして、コ
ンパイラ313は、下記のコード表2に示す2つの命令を使って静的束縛された
機能呼出のためのオブジェクトコードを生成する。
【0031】 コード表2 move eax, null call verified_entry_point foo
【0032】 インラインキャッシングへ切り換えた後、プレースホルダ、即ち移動命令はバ
ックパッチされ、また、呼出命令は変更され、かかる機能呼出は下記に示すコー
ド表3のようになる。
【0033】 コード表3 move eax, class call unverified_entry_point class.foo
【0034】 この例では、「class」は、一義的でなくなる前のfoo機能メンバを含むクラス
である。このように、インラインキャッシングを用いて動的束縛を行うようにコ
ードをバックパッチして、コードを再コンパイルする必要がない。
【0035】 本発明の例示的な実施形態は、静的束縛と動的束縛の切り替えを行うための従
来のシステムを改良したシステムである。本例示的実施形態は、コンパイル時に
、プレースホルダを静的束縛された機能呼出に挿入する。実行に際し、機能呼出
が示す機能が一義的でなくなったときは、本例示的実施形態では、コードをバッ
クパッチするのみで、かかる機能呼出をインラインキャッシングを用いるように
切り換えることができるので、再コンパイルを行う必要がない。
【0036】 以上、本発明についてその好適な実施形態を用いて説明したが、本発明の精神
、及び、添付した特許請求の範囲によって定められる本発明の範囲から逸脱する
ことなく実施形態や細部において様々な変更が可能であることは、当業者には容
易に理解されるであろう。
【図面の簡単な説明】
【図1】 従来のインラインキャッシング技術において実行されるステップを示したフロ
ーチャートである。
【図2A】 従来の静的束縛及び動的束縛を用いるハイブリッド機能呼出システムを使って
機能呼出をコンパイルするときに、コンパイラにより実行されるステップを示し
たフローチャートである。
【図2B】 静的束縛された機能呼出を動的束縛された機能呼出に切り替えるときに、図2
Aに示したコンパイラが出力したコンピュータプログラムにより実行されるステ
ップを示したフローチャートである。
【図3】 本発明の例示的な実施形態の実施に適したデータ処理システムを示した図であ
る。
【図4A】 機能呼出をコンパイルするときに、図3に示したコンパイラにより実行される
ステップを示した図である。
【図4B】 静的に束縛された機能呼出を動的に束縛された機能呼出に変更するときに、図
3に示した実行時ライブラリにより実行されるステップを示した図である。
【符号の説明】
300 データ処理システム 301 コンピュータ処理システム 302 インターネット 303 メインメモリ 304 補助記憶装置 306 中央処理装置(CPU) 308 入力装置 310 ビデオディスプレイ 312 JavaTM仮想マシン 313 コンパイラ 314 プログラム 315 実行時ライブラリ
【手続補正書】
【提出日】平成12年12月8日(2000.12.8)
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正内容】
【特許請求の範囲】
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),OA(BF,BJ ,CF,CG,CI,CM,GA,GN,GW,ML, MR,NE,SN,TD,TG),AP(GH,GM,K E,LS,MW,SD,SL,SZ,UG,ZW),E A(AM,AZ,BY,KG,KZ,MD,RU,TJ ,TM),AE,AL,AM,AT,AU,AZ,BA ,BB,BG,BR,BY,CA,CH,CN,CU, CZ,DE,DK,EE,ES,FI,GB,GD,G E,GH,GM,HR,HU,ID,IL,IN,IS ,JP,KE,KG,KP,KR,KZ,LC,LK, LR,LS,LT,LU,LV,MD,MG,MK,M N,MW,MX,NO,NZ,PL,PT,RO,RU ,SD,SE,SG,SI,SK,SL,TJ,TM, TR,TT,UA,UG,UZ,VN,YU,ZA,Z W

Claims (23)

    【特許請求の範囲】
  1. 【請求項1】 データ処理システムにおいて動的束縛を実行するための方法
    であって、 前記データ処理システムは、ソースコードを具備するコンピュータプログラム
    と、前記コンピュータプログラムをオブジェクトコードにコンパイルするための
    コンパイラと、クラスをロードするためのクラスローダとを備え、 前記コンピュータプログラムは、メインコードを具備する複数の機能を有する
    とともに、前記機能に対する複数の機能呼出を有し、 前記各機能は、該機能のメインコードに対する検証エントリポイントを有し、
    前記方法は、 前記コンピュータプログラムの前記機能呼出の少なくとも1つに関するオブジ
    ェクトコードを生成するために、前記コンパイラが前記少なくとも1つの機能呼
    出をコンパイルする工程を備え、該コンパイル工程は、 前記少なくとも1つの機能呼出が一義的であり1つの機能を示すかどうかを判
    定するためのクラス階層分析を実行する副工程と、 前記少なくとも1つの機能呼出が一義的であると前記コンパイラが判定した場
    合に、前記一義的な機能呼出のオブジェクトコードにプレースホルダを挿入し、
    前記一義的な機能呼出のオブジェクトコードに前記1つの機能の検証エントリポ
    イントにアクセスする指令を挿入する副工程とを有し、前記方法は、更に、 前記オブジェクトコードが、前記コンパイル工程の後に実行を開始し、前記ク
    ラスをロードするように前記クラスローダに依頼する工程と、 前記コンピュータプログラムの前記一義的な機能呼出が、前記クラスのロード
    によって一義的でなくなったかどうかを前記クラスローダが判定する工程と、 前記一義的な機能呼出が一義的ではなくなったと前記クラスローダが判定した
    場合に、動的束縛を実行するために前記オブジェクトコード内の前記一義的な機
    能呼出をバックパッチする工程とを備える。
  2. 【請求項2】 請求項1に記載の方法において、前記機能は、検証コードへ
    の検証エントリポイントを有しており、前記コンパイル工程は、更に、 前記機能呼出が一義的でなく複数の前記機能を示すと前記コンパイラが判定し
    た場合に、前記複数の機能の1つの機能の非検証エントリポイントにアクセスす
    るためのインラインキャッシング指令を前記一義的な機能呼出のオブジェクトコ
    ードに挿入する工程を含む。
  3. 【請求項3】 請求項1に記載の方法において、前記バックパッチ工程は、
    インラインキャッシングを実行するために、前記一義的な機能呼出のオブジェク
    トコードをバックパッチする工程を含む。
  4. 【請求項4】 請求項3に記載の方法において、前記バックパッチ工程は、
    前記データ処理システムのレジスタに前記クラスを示す表示を格納する工程を含
    む。
  5. 【請求項5】 請求項3に記載の方法において、前記バックパッチ工程は、
    更に、前記一義的な機能呼出が呼出す機能の非検証エントリポイントにアクセス
    するために、前記一義的な機能呼出のオブジェクトコードをバックパッチする工
    程を含む。
  6. 【請求項6】 コンピュータシステムにおいてコンピュータプログラムをオ
    ブジェクトコードにコンパイルする方法であって、前記コンピュータプログラム
    は、コードを具備する機能を有するとともに前記機能に対する機能呼出を有し、
    前記方法は、 機能呼出が一義的であることを判定する工程と、 前記機能呼出が一義的であると判定された場合に、静的束縛を実行するオブジ
    ェクトコードを生成するために、前記機能呼出をコンパイルし、前記生成された
    オブジェクトコードにプレースホルダを挿入して、後の段階で、前記機能呼出が
    一義的でなくなった場合に、動的束縛に切り換えるための指令を前記プレースホ
    ルダに挿入できるようにする工程とを備える。
  7. 【請求項7】 請求項6に記載の方法において、前記判定工程は、クラス階
    層分析を実行する工程を含む。
  8. 【請求項8】 静的に束縛された機能呼出と動的に束縛された機能呼出とを
    具備するコンピュータプログラムを有するコンピュータシステムにおける方法で
    あって、前記静的に束縛された機能呼出は、一義的な機能を呼び出すためのもの
    であり、前記動的に束縛された機能呼出は、一義的でない機能を呼び出すための
    ものであり、前記方法は、 前記コンピュータプログラムの実行時に、前記静的に束縛された機能呼出の少
    なくとも1つが一義的でなくなったかどうかを判定する工程と、 前記静的に束縛された機能呼出の少なくとも1つが一義的でなくなったと判定
    された場合に、前記静的に束縛された機能呼出をバックパッチすることにより、
    前記コンピュータプログラムの再コンパイルを行うことなしに、前記静的束縛さ
    れた機能呼出の少なくとも1つを動的に束縛された機能呼出に変換する工程とを
    備える。
  9. 【請求項9】 請求項8に記載の方法において、前記変換工程は、前記静的
    に束縛された機能呼出をインラインキャッシングに変換する工程を含む。
  10. 【請求項10】 請求項8に記載の方法において、該方法は、更に、クラス
    がロードされたことを判定する工程を備え、 前記静的に束縛された機能呼出の少なくとも1つが一義的でなくなったかどう
    かを判定する前記の工程は、前記クラスがロードされたと判定された場合に、前
    記静的に束縛された機能呼出の少なくとも1つが一義的でなくなったどうかを判
    定する工程を含む。
  11. 【請求項11】 請求項10に記載の方法において、前記クラスは名前を有
    するクラス機能を具備し、前記静的に束縛された機能呼出は名前を有し、前記静
    的に束縛された機能呼出の少なくとも1つが一義的でなくなったかどうかを判定
    する前記の工程は、更に、前記クラス機能の1つの名前が、前記静的に束縛され
    た機能呼出の1つの名前と同様であるかどうかを判定する工程を含む。
  12. 【請求項12】 データ処理システムは、メモリを備え、該メモリは、 機能呼出が一義的であることを判定することにより前記機能呼出をコンパイル
    するとともに、前記機能呼出が一義的であると前記コンパイラが判定した場合に
    、静的束縛を用いて前記機能呼出をコンパイルするコンパイラと、 前記静的束縛された機能呼出を具備するプログラムとを有し、該プログラムは
    、実行時ライブラリを有し、該実行時ライブラリは、実行時に前記静的束縛され
    た機能呼出が一義的でなくなったことを判定するとともに、前記静的に束縛され
    た機能呼出が一義的でなくなったと判定された場合に、前記静的に束縛された機
    能呼出を動的に束縛された機能呼出に変換し、前記システムは、更に、 前記コンパイラと前記プログラムとを実行するプロセッサを備える。
  13. 【請求項13】 請求項12に記載のデータ処理システムにおいて、前記コ
    ンパイラは、仮想マシンの一部である。
  14. 【請求項14】 請求項12に記載のデータ処理システムにおいて、前記実
    行時ライブラリは、静的束縛された機能呼出を、インラインキャッシングを用い
    る機能呼出に変換する。
  15. 【請求項15】 請求項12に記載のデータ処理システムにおいて、前記コ
    ンパイラは、クラス階層分析を実行することにより前記機能呼出が一義的である
    と判定する。
  16. 【請求項16】 請求項12に記載のデータ処理システムにおいて、前記プ
    ログラムは、オブジェクト指向である。
  17. 【請求項17】 請求項12に記載のデータ処理システムにおいて、前記実
    行時ライブラリは、クラスがロードされる際に、前記静的に束縛された機能呼出
    が一義的でなくなったことを判定する。
  18. 【請求項18】 コンピュータプログラムをオブジェクトコードにコンパイ
    ルする方法を実行するためにコンピュータシステムを制御する指令を含むコンピ
    ュータ可読媒体であって、前記コンピュータプログラムは、コードを具備する機
    能と該機能に対する機能呼出とを有し、前記方法は、 機能呼出が一義的であることを判定する工程と、 前記機能呼出が一義的であると判定された時に、静的束縛を実行するオブジェ
    クトコードを生成するために、前記機能呼出をコンパイルし、後の段階で、前記
    機能呼出が一義的でなくなった場合に、動的束縛に切り換えるための指令を前記
    プレースホルダに挿入できるようにするために、前記生成されたオブジェクトコ
    ードにプレースホルダを挿入する工程とを含む。
  19. 【請求項19】 請求項18に記載のコンピュータ可読媒体において、前記
    判定工程は、クラス階層分析を実行する工程を含む。
  20. 【請求項20】 方法を実行するためにコンピュータシステムを制御する指
    令を含むコンピュータ可読媒体であって、前記コンピュータシステムは、静的に
    束縛された機能呼出と動的に束縛された機能呼出とを有するコンピュータプログ
    ラムを有し、前記静的に束縛された機能呼出は、一義的な機能を呼び出すための
    ものであり、前記動的に束縛された機能呼出は、一義的でない機能呼出を呼び出
    すためのものであり、前記方法は、 前記コンピュータプログラムの実行時に、前記静的に束縛された機能呼出の少
    なくとも1つが一義的でなくなったかどうかを判定する工程と、 前記静的に束縛された機能呼出の少なくとも1つが一義的でなくなったと判定
    された場合に、前記少なくとも1つの静的に束縛された機能呼出をバックパッチ
    することにより、前記コンピュータプログラムの再コンパイルを行うことなしに
    、前記静的に束縛された機能呼出を動的に束縛された機能呼出に変換する工程と
    を備える。
  21. 【請求項21】 請求項20に記載のコンピュータ可読媒体において、前記
    変換工程は、前記静的に束縛された機能呼出をインラインキャッシングに変換す
    る工程を含む。
  22. 【請求項22】 請求項20に記載のコンピュータ可読媒体において、前記
    方法は、更に、クラスがロードされたことを判定する工程を備え、前記静的に束
    縛された機能呼出の少なくとも1つが一義的でなくなったかどうかを判定する前
    記の工程は、前記クラスがロードされていることが決定される場合に、前記静的
    に束縛された機能呼出の少なくとも1つが一義的でなくなったかどうかを判定す
    る工程を含む。
  23. 【請求項23】 請求項22に記載のコンピュータ可読媒体において、前記
    クラスは名前を有するクラス機能を具備し、前記静的に束縛された機能呼出の少
    なくとも1つが一義的でなくなったかどうかを判定する前記の工程は、更に、前
    記クラス機能の1つが、前記静的に束縛された機能呼出の1つと同様の名前を有
    するどうかを判定する工程を含む。
JP2000551313A 1998-05-27 1999-05-26 静的束縛された機能呼出から動的束縛された機能呼出への再コンパイルを必要としない動的切り換え Pending JP2002517033A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/085,223 US5983021A (en) 1998-05-27 1998-05-27 Dynamically switching statically bound function calls to dynamically bound function calls without recompilation
US09/085,223 1998-05-27
PCT/US1999/011520 WO1999061979A2 (en) 1998-05-27 1999-05-26 Dynamically converting statically bound function calls to dynamically bound function calls without recompilation

Publications (1)

Publication Number Publication Date
JP2002517033A true JP2002517033A (ja) 2002-06-11

Family

ID=22190262

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000551313A Pending JP2002517033A (ja) 1998-05-27 1999-05-26 静的束縛された機能呼出から動的束縛された機能呼出への再コンパイルを必要としない動的切り換え

Country Status (7)

Country Link
US (1) US5983021A (ja)
EP (2) EP1300758B1 (ja)
JP (1) JP2002517033A (ja)
AT (1) ATE234484T1 (ja)
AU (1) AU4203499A (ja)
DE (1) DE69905875T2 (ja)
WO (1) WO1999061979A2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012529681A (ja) * 2009-06-08 2012-11-22 サトーホールディングス株式会社 印刷装置へランタイムプログラミングコードを導入するためのシステム及び方法
JP2014194781A (ja) * 2014-04-09 2014-10-09 Sato Holdings Corp 印刷装置へランタイムプログラミングコードを導入するためのシステム及び方法

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6463581B1 (en) * 1996-10-03 2002-10-08 International Business Machines Corporation Method for determining reachable methods in object-oriented applications that use class libraries
US6704927B1 (en) * 1998-03-24 2004-03-09 Sun Microsystems, Inc. Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
JP2000020319A (ja) * 1998-06-30 2000-01-21 Canon Inc プログラム実行装置、その制御方法および記憶媒体
US6760907B2 (en) * 1998-06-30 2004-07-06 Sun Microsystems, Inc. Code generation for a bytecode compiler
US6651080B1 (en) * 1998-10-16 2003-11-18 Sun Microsystems, Inc. Techniques for implementing pluggable virtual machines
CA2255042C (en) * 1998-11-30 2004-04-13 Leonard W. Theivendra Class loader
US6964039B2 (en) * 2000-12-13 2005-11-08 Esmertec Ag Method to create optimized machine code through combined verification and translation of JAVA™ bytecode
DE10206903A1 (de) * 2002-02-19 2003-09-04 Siemens Ag Softwareapplikation, Softwarearchitektur und Verfahren zur Erstellung von Softwareapplikationen, insbesondere für MES-Systeme
US20030212736A1 (en) * 2002-05-10 2003-11-13 Sreekrishna Kotnur System and method for activating and pausing a component
US7401330B2 (en) * 2003-12-11 2008-07-15 Hewlett-Packard Development Company, L.P. Cloning programming code
US7421715B1 (en) * 2005-02-09 2008-09-02 Cerylion, Inc. System and method for dynamic late-binding of persistent object implementations in software-based systems
US7421716B1 (en) * 2005-02-09 2008-09-02 Cerylion, Inc. System and method for providing composite applications
US7421702B1 (en) * 2005-02-09 2008-09-02 Cerylion, Inc. User-driven, service oriented software application model
US20060242654A1 (en) * 2005-04-22 2006-10-26 Lund Kasper V Process and apparatus for sharing inline caches
US8473971B2 (en) * 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
JP4770425B2 (ja) * 2005-11-24 2011-09-14 富士ゼロックス株式会社 保護済み実行プログラムの作成のためのプログラム、方法及び装置
US8321836B2 (en) * 2007-06-21 2012-11-27 Microsoft Corporation Late bound programmatic assistance
US20080320453A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US20090328001A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Unloadable managed code
US9075667B2 (en) * 2009-05-21 2015-07-07 Microsoft Technology Licensing, Llc Dynamic binding directed by static types
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
US8694977B2 (en) * 2011-07-15 2014-04-08 Infineon Technologies Ag Distributed compiling process with instruction signature support
US8789030B2 (en) 2012-09-18 2014-07-22 Concurix Corporation Memoization from offline analysis
US8839204B2 (en) 2012-11-08 2014-09-16 Concurix Corporation Determination of function purity for memoization
US8752021B2 (en) 2012-11-08 2014-06-10 Concurix Corporation Input vector analysis for memoization estimation
US8656378B2 (en) * 2012-11-08 2014-02-18 Concurix Corporation Memoization configuration file consumed at compile time
US8752034B2 (en) 2012-11-08 2014-06-10 Concurix Corporation Memoization configuration file consumed at runtime
US9262416B2 (en) 2012-11-08 2016-02-16 Microsoft Technology Licensing, Llc Purity analysis using white list/black list analysis
EP3057019A1 (en) * 2015-02-13 2016-08-17 Thomson Licensing Method and device for protecting an application and method and device for executing a protected application thus protected

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5339430A (en) * 1992-07-01 1994-08-16 Telefonaktiebolaget L M Ericsson System for dynamic run-time binding of software modules in a computer system
JP3178151B2 (ja) * 1993-03-19 2001-06-18 富士ゼロックス株式会社 オブジェクト指向言語のメッセージコンパイル装置
US5748963A (en) * 1995-05-12 1998-05-05 Design Intelligence, Inc. Adaptive binding
US5872973A (en) * 1995-10-26 1999-02-16 Viewsoft, Inc. Method for managing dynamic relations between objects in dynamic object-oriented languages
DE69911104T2 (de) * 1998-03-24 2004-07-08 Sun Microsystems, Inc., Palo Alto Statische Bindung von dynamisch abgesendeten Anrufen in Anwesenheit von dynamischer Verknüpfung und Ladung

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012529681A (ja) * 2009-06-08 2012-11-22 サトーホールディングス株式会社 印刷装置へランタイムプログラミングコードを導入するためのシステム及び方法
JP2014194781A (ja) * 2014-04-09 2014-10-09 Sato Holdings Corp 印刷装置へランタイムプログラミングコードを導入するためのシステム及び方法

Also Published As

Publication number Publication date
US5983021A (en) 1999-11-09
DE69905875D1 (de) 2003-04-17
AU4203499A (en) 1999-12-13
EP1300758A2 (en) 2003-04-09
EP1080405B1 (en) 2003-03-12
WO1999061979A2 (en) 1999-12-02
EP1300758A3 (en) 2004-10-06
DE69905875T2 (de) 2003-12-24
EP1080405A2 (en) 2001-03-07
WO1999061979A3 (en) 2000-01-27
ATE234484T1 (de) 2003-03-15
EP1300758B1 (en) 2015-12-30

Similar Documents

Publication Publication Date Title
JP2002517033A (ja) 静的束縛された機能呼出から動的束縛された機能呼出への再コンパイルを必要としない動的切り換え
EP1451682B1 (en) Platform-independent selective ahead-of-time compilation
EP4099152B1 (en) Extending a virtual machine instruction set architecture
JP4536718B2 (ja) プログラム・コード変換用の中間表現を生成するための改善されたアーキテクチャ
KR100503077B1 (ko) 자바 실행 장치 및 자바 실행 방법
US5475840A (en) High performance dynamic linking through caching
US5615400A (en) System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers
US7526760B1 (en) Methods for implementing virtual method invocation with shared code
US6484313B1 (en) Compiling and persisting of intermediate language code
US7124407B1 (en) Method and apparatus for caching native code in a virtual machine interpreter
US9038039B2 (en) Apparatus and method for accelerating java translation
JP2002525707A (ja) バーチャルコールのインライン化のための精確な方法
US8214815B2 (en) Reducing the run-time cost of invoking a server page
US7581216B2 (en) Preserving platform independence with native accelerators for performance critical program objects
US11726849B2 (en) Executing a parametric method within a specialized context
US6931638B2 (en) Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine
JPH09288586A (ja) ダイナミック・ライブラリ・タスク切替え
US20040015912A1 (en) Method of byte code quickening: quick instructions for method invocation
US7032230B2 (en) Efficient virtual function calls for compiled/interpreted environments
US20050246677A1 (en) Native method invocation (NMI) custom marshalling stub service
US7194736B2 (en) Dynamic division optimization for a just-in-time compiler
JP2005284729A (ja) バイトコードをネイティブコードにコンパイルする仮想マシン
US11972308B2 (en) Determining different resolution states for a parametric constant in different contexts
Voss Time invariant virtual member function dispatching for C++ evolvable classes
CA2355990A1 (en) Efficient virtual function call for compiled/interpreted environments

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060511

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090707

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091007

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100302