JPH11327906A - 動的リンキング及び動的ロ―ディングの存在下において動的にディスパッチされたコ―ルの静的結合 - Google Patents
動的リンキング及び動的ロ―ディングの存在下において動的にディスパッチされたコ―ルの静的結合Info
- Publication number
- JPH11327906A JPH11327906A JP11077732A JP7773299A JPH11327906A JP H11327906 A JPH11327906 A JP H11327906A JP 11077732 A JP11077732 A JP 11077732A JP 7773299 A JP7773299 A JP 7773299A JP H11327906 A JPH11327906 A JP H11327906A
- Authority
- JP
- Japan
- Prior art keywords
- function
- class
- computer
- compiled
- processing step
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
- G06F9/4491—Optimising based on receiver type
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
在下において動的にディスパッチされたコールの静的結
合を実行するための革新的な技術を提供する。 【解決手段】実行時における関数の実行性能を増大させ
るための方法は、インタプリットされた、あるいは、以
前にコンパイルされた関数をコンパイルすること、及び
処理過程に対する関数内でコールを識別することを備え
ている。この方法はまた、従属情報を関数に対して付加
することを備える。従属性情報は、関数のステータスを
表示すると共に、処理過程に関するクラス、名前、及び
シグネチャに関する情報を含む。
Description
行時コンパイレーションに関する。より詳細には、本発
明は、動的リンキング及び動的ローディングの存在下に
おいて動的にディスパッチされたコールの静的結合を実
行する技術に関する。
的な概念は、データを操作してオブジェクトと呼ばれる
単一単位に変換する、データ及びメソッド(すなわち、
関数)双方の組み合わせである。オブジェクトの関数
は、一般的に、オブジェクトによってカプセル化されて
いるデータにアクセスするための唯一の手段を提供す
る。データは、メッセージによって特定されたメソッド
を呼び出すためにオブジェクトに命令するオブジェクト
に対してメッセージを送ることによってアクセスされ
る。
オブジェクト指向言語における最も重要な事項の1つで
ある。その理由は、オブジェクト指向プログラムにおい
て、メッセージのディスパッチは、非常に高頻度の動作
であると共に、実行時に実行される動作だからである。
したがって、できる限り高速に実行されるべきである。
実行時前に関数のアドレスを決定可能な手続型プログラ
ム言語(例えば、Cプログラム言語)とは異なり、オブ
ジェクト指向言語は、受取側オブジェクトに対してディ
スパッチ済みであるメッセージを取り扱うメソッドを、
実行時に動的に決定しなければならず、また、拡張サー
チを伴い得る。
より良いものとするために、クラス階層の例について以
下に説明する。図1は、各クラスのメソッドを含むクラ
ス階層を図示する。クラス階層1は、そのルートに2個
の仮想関数foo()及びbar()を定義する親クラスA3を含
む。仮想関数は、親クラスにおいて定義され得ると共
に、関連子クラスにおいて再定義され得る関数である。
クラスB5及びクラスC7は、本質的に、親クラスA3
のデータ及びメソッドを含んでいる。図示されるよう
に、クラスB5は、仮想関数foo()及びbar()のいずれに
ついても再定義していない。しかしながら、クラスC7
は仮想関数foo()を再定義している。メソッドfoo()を呼
び出すためにクラスC7のオブジェクトが要求されると
き、呼び出されたメソッドは、親クラスA7でなく、ク
ラスC7によって定義されたメソッドである。クラスD
9及びE11もまた、メソッドfoo()を再定義する。
トのクラスを静的に決定することは不可能なので、オブ
ジェクトに関連付けられている正確なメソッドのサーチ
は、実行時実行中、すなわち、より詳細には、メッセー
ジのディスパッチ中に実行される。例えば、以下のよう
なメソッドがあるとする。 全クラスA−Eが実行時の実行に際してロードされる場
合、どの関数foo()をコールするかの決定は、クラスx
がインスタンスであるか否かに依存する。
実行時にコンパイルされる。実行時コンパイレーション
に際しては、クラスA3及びB5だけがロードされ得
る。したがって、メッセージx.foo()がA::foo()だけを
呼び出すであろうことは、ロード済クラスの査閲から当
業者にとって明らかである。当然のことながら、実行時
の実行に際してクラスC7がロードされる場合には、こ
の仮定は誤りであることが証明される。
発明の実施の形態は、動的リンキング及び動的ローディ
ングの存在下において動的にディスパッチされたコール
の静的結合を実行するための革新的な技術を提供する。
本発明の1つの局面によれば、実行時における関数の実
行性能を増大させるための方法は、インタプリットされ
た、あるいは、以前にコンパイルされた関数をコンパイ
ルすること、及び処理過程に対する関数内でコールを識
別することを備えている。この方法はまた、従属情報を
関数に対して付加することを備える。従属性情報は、関
数のステータスを表示すると共に、処理過程に関するク
ラス、名前、及びシグネチャに関する情報を含む。
ステムのクラス階層に関連する第1のクラスを解析する
ための、コンピュータ上で実行される方法は、第1のク
ラスをマークすること、及び2つのクラス間の関係を表
示するために第1のクラスのスーパークラスである第2
のクラスをマークすることを備える。そして、システム
に関連するコンパイル済関数が査閲される。コンパイル
済関数は、コンパイル済関数の最適化ステータスと共に
コンパイル済関数の有効性ステータスを表示する従属性
情報を含む。コンパイル済関数の査閲は、第1のクラス
及び第2のクラスの少なくとも一方が従属性情報中にて
識別される時期の決定を含む。第1のクラス、または、
第1のクラス及び第2のクラスの双方が従属性情報中に
て識別されたと決定されたとき、コンパイル済関数が無
効であるか否かに関する決定が下される。ある実施形態
では、メソッドは、コンパイル済関数が無効であると決
定されるときコンパイル済関数を逆コンパイルすること
を含み得る。コンパイル済関数の逆コンパイルは、関数
をインタプリット済状態に戻す。
面と共に以下の詳細な説明を考察することにより容易に
理解されるであろう。
ード(OPコード)及び任意の1つ以上のオペランドに
より特定されるオペレーションを実行するために計算機
装置に指示する命令を意味する。仮想マシン命令とは、
ソフトウェアエミュレート済マイクロプロセッサ又はコ
ンピュータアーキテクチャのための命令(仮想コードと
も呼ばれる)を意味する。ネイティブマシン命令とは、
特定のマイクロプロセッサ又はコンピュータのために設
計された命令(ネイティブコードとも呼ばれる)を意味
する。
数、サブルーチン、プロシージャ、及びメンバ関数とも
呼ばれる)を意味する。実行時コンパイレーションと
は、実行時に実行されるコードのコンパイレーションを
意味する。実行時実行とは、実行時に実行されるコード
の実行を意味する。
わち、バイトコード)において動的にディスパッチされ
たコールを静的に結合する好適な実施の形態について説
明される。特に、コンパイル済Java仮想マシン命令のた
めの実行時クラスローディング及び初期化チェックを実
行するために、IBMパーソナルコンピュータ、若しく
は、その互換機のために生成され得る、実ネイティブマ
シン命令を示す例示が記載されている。しかしながら、
本発明は、いかなる特定の言語、コンピュータアーキテ
クチャ、あるいは、特定のインプリメンテーションにも
限定されるものではない。したがって、以下の発明の実
施の形態の記載は、説明のためのものであって、限定を
目的とするものではない。
クロシステムズ社により開発された、小規模デバイス
(例えば、ポケットベル、携帯電話及びスマートカー
ド)からスーパーコンピュータに至るまで幅広い範囲の
コンピュータ上で実行されるために十分に高移植性であ
るように設計された、オブジェクト指向の高レベルプロ
グラム言語である。Java(及び他の言語)で記述された
コンピュータプログラムは、Java仮想マシンによる実行
のために、仮想マシン命令にコンパイルされ得る。一般
的に、Java仮想マシンは、仮想マシン命令をデコード
し、実行するインタプリタである。
上のバイトを含む、バイトコードである。バイトコード
は、クラスのメソッドのためのバイトコードを含む「ク
ラスファイル」と呼ばれる特定のファイル形式中に格納
される。クラスのメソッドのためのバイトコードに加
え、クラスファイルは、他の付属情報と共にシンボルテ
ーブルを含んでいる。
ファイル中に具象化されたコンピュータプログラムは、
プラットフォームに依存しない。コンピュータプログラ
ムは、Java仮想マシンのインプリメンテーションを実行
可能な任意のコンピュータ上で、修飾されることなく実
行され得る。Java仮想マシンは、Java仮想マシン用のコ
ンピュータプログラムが、プラットフォームに依存しな
いことを許容することを重要な要素とする、「汎用」コ
ンピュータのソフトウェアエミュレータである。
リタとしても実現され得る。実行時にデコーディングが
実行されないように、実行に先立ってソースコードをネ
イティブマシン命令にデコードするコンパイラに対し
て、従来のインタプリタは、実行時に、インタプリット
済プログラムの1つのプログラムの仮想マシン命令をデ
コードすると共に実行する。Java仮想マシンは、実行時
コンパイレーションのために、インタプリタ及びコンパ
イラの双方を含み得る。一般的に、Java仮想マシンは、
Javaプログラム言語以外のプログラム言語(例えば、C
++プログラム言語)で記述される。
ソフトウェアを実行するために用いられ得るコンピュー
タシステムを例示する。図2は、ディスプレイ303、
スクリーン305、キャビネット307、キーボード3
09及びマウス311を含むコンピュータシステム30
1を図示する。マウス311は、グラフィカルユーザイ
ンターフェースと対話するための1個以上のボタンを有
し得る。キャビネット307は、本発明を実行するコン
ピュータコードを組み込むソフトウェアプログラム、本
発明と共に用いるデータ等を格納すると共に引き出すた
めに用いられ得る、CD−ROMドライブ313、シス
テムメモリ、及びハードドライブ(図2参照)を収容す
る。CD−ROM315がコンピュータ読み取り可能媒
体の例示として図示されているが、フロッピーディス
ク、テープ、フラッシュメモリ、システムメモリ、及び
ハードドライブを含む、他のコンピュータ読み取り可能
媒体も用いられ得る。さらに、(例えば、インターネッ
トを含むネットワーク中における)搬送波に具象化され
たデータ信号もコンピュータ読み取り可能媒体足り得
る。
1つにおけるソフトウェアを実行するために用いられ
る、コンピュータシステム301のシステムブロック図
を示す。図2のように、コンピュータシステム301
は、モニタ303、キーボード309及びマウス311
を有している。コンピュータシステム301はさらに、
中央処理装置351、システムメモリ353、固定記憶
装置355(例えば、ハードディスク)、リムーバブル
記憶装置357(例えば、CD−ROMドライブ)、デ
ィスプレイアダプタ359、サウンドカード361、ス
ピーカ363、及びネットワークインターフェース36
5といったサブシステムを備えている。本発明と共に用
いることが好適な他のコンピュータは、より多くの、あ
るいは、より少ないサブシステムを備え得る。例えば、
他のコンピュータシステムは、1個以上のプロセッサ3
51を備えたり(すなわち、マルチプロセッサシステ
ム)、キャッシュメモリを備え得る。
スアーキテクチャは、矢印367で示されている。しか
しながら、これらの矢印は、サブシステムとリンクする
ために機能する、任意の相互接続スキームの例示にすぎ
ない。例えば、ローカルバスは、中央処理装置とシステ
ムメモリ及びディスプレイアダプタとを接続するために
用いられ得る。図3に図示されるコンピュータシステム
301は、本発明と共に用いることが好適なコンピュー
タシステムの例示にすぎない。サブシステムの異なる構
成を備える他のコンピュータアーキテクチャも用いられ
得る。
ているコンピュータプログラムは、後にJava仮想マシン
によって実行される、バイトコード、又は、Java仮想マ
シン命令にコンパイルされる。バイトコードは、インタ
プリテーションのためにJava仮想マシンに入力されるク
ラスファイルに格納される。仮想マシンは、図2及び図
3を参照して先に説明したコンピュータシステムのよう
な、コンピュータシステム上で稼働し得る。図4は、本
発明の実行に好適であると共に、図2及び図3のコンピ
ュータシステム301によってサポートされる仮想マシ
ンの代表図である。コンピュータプログラム、例えば、
Java(商標)プログラム言語で記述されたコンピュータ
プログラムが実行されると、ソースコード410がコン
パイル時環境405内のコンパイラ420に対して供給
される。コンパイラ420は、ソースコード410をバ
イトコード430に翻訳する。一般的に、ソースコード
410は、ソフトウェア開発者によってソースコード4
10が作成されたとき、バイトコード430に翻訳され
る。
れ、ダウンロードされ、あるいは、例えば、図3のネッ
トワークインターフェース365のようなネットワーク
を通じて分散され、または、図3の主記憶装置355の
ような記憶装置上に格納され得る。本発明の実施の形態
では、バイトコード430はプラットフォームに依存し
ない。すなわち、バイトコード430は、実質的に、好
適な仮想マシン440を稼働させる任意のコンピュータ
システム上で実行され得る。
を含む実行時環境435に供給される。1つの実施形態
では、仮想マシンはJava(商標)仮想マシンたり得る。
実行時環境435は、一般的に、図3のCPU351の
ような1つのプロセッサ又は複数のプロセッサを使用し
て実行され得る。仮想マシン440は、コンパイラ44
2、インタプリタ444、及び実行時システム446を
含んでいる。バイトコード430は、コンパイラ44
2、あるいは、インタプリタ444のいずれかに提供さ
れ得る。
供給されると、バイトコード430内に含まれているメ
ソッドがマシン命令にコンパイルされる。1つの実施形
態では、コンパイラ442は、バイトコード430内に
含まれているメソッドのコンパイレーションを、メソッ
ドがまさに実行されるときまで遅延するジャストインコ
ンパイラである。バイトコード430がインタプリタ4
44に供給されると、バイトコード430は1バイトコ
ード毎にインタプリタ中に読み込まれる。そして、イン
タプリタ444は、各バイトコードがインタプリタ44
4中に読み込まれるのに従って、各バイトコードによっ
て定義された演算を実行する。すなわち、インタプリタ
444は、当業者に知られているように、バイトコード
430を「インタプリット」する。一般的に、インタプ
リタ444はバイトコード430を処理すると共に、バ
イトコード430に関連する演算を実質的に連続して実
行する。
れるとき、あるいは、実行時環境435から呼び出され
るとき、メソッドがインタプリットされる場合には、実
行時システム446は、インタプリタ444によって直
接実行され得るバイトコード430のシーケンスの形式
で実行時環境435からメソッドを取得し得る。これに
対して、呼び出されたメソッドが未だコンパイルされて
いないコンパイル済メソッドである場合には、実行時シ
ステム446は、バイトコード430列の形式でメソッ
ドを実行時環境435から取得し、そして、コンパイラ
442を起動する。コンパイラ442は、バイトコード
430からマシン命令を生成し、得られたマシン語命令
は、図3のCPU351によって直接実行され得る。一
般的に、マシン語命令は、仮想マシン440が終了する
と、破棄される。
動的にロード、リンク及び初期化される。ローディング
は、システムが、クラスのバイナリフォーム(例えば、
クラスファイル)を見つけだし、そして、クラスを表す
ためにバイナリコードからClassオブジェクトを構成す
るプロセスである。Classクラスは、クラスの構成を格
納し、又は、表すためのクラスである。リンキングは、
クラスのバイナリフォームを獲得し、そして、実行され
得るようにシステムの実行時状態と結びつけるプロセス
である。クラスの初期化は、クラスのスタティックイニ
シャライザ、及び、クラス内で宣言されたスタティック
フィールドのイニシャライザの実行を含む。
ントプールを有する。コンスタントプールは、Javaクラ
スファイル内に格納され、そして、シンボルテーブルに
似た関数として機能する。一般的に、コンスタントプー
ル内の各エントリは、1から始まりコンスタントプール
内のエントリ数まで増加する番号で指標付けされる。ク
ラスのメソッドは、指標を用いてコンスタントプール内
のエントリにアクセスし、あるクラスのメソッドは、他
のクラスのコンスタントプールにアクセスし得ない。
ルに加えて、コンスタントプールはクラス、メソッド、
フィールド、及びインターフェースを概念的に格納す
る。これらのエントリを概念的に格納するということ
は、エントリを識別する名前は格納されるが、物理アド
レスは格納されないことを意味する。すなわち、クラス
AがフィールドFを有する場合には、(Fのタイプシグ
ネチャと共に)双方の名前A及びFがコンスタントプー
ル内に格納され得る。アドレスでなく名前を格納するこ
とにより、Java実行システムは、実行時にシンボリック
レファレンスを物理アドレスに動的に導出する。
おける、実行時にメソッドをコンパイルするフローチャ
ートを図示する。ステップ501にて、システムは、メ
ソッドのコンパイルは有益であると決定する。一般的
に、メソッドのコンパイルは、メソッドの実行性能を増
大する。しかしながら、メソッドがコンパイルされない
インスタンスは多数存在する。例として、コンパイル済
メソッドは、コンパイルされていないメソッドよりも多
くの記憶スペースを要求し得る。少なくとも、一旦、特
定のメソッドがコンパイルされるべきであると決定され
ると、そのメソッドはステップ503にてコンパイルさ
れる。
イルされたメソッド中の仮想関数に対するコールを識別
する。上述のように、仮想関数コールの導出は、実行時
に動的に実行される。Java仮想マシン命令において、コ
ールは呼び出し仮想命令である。
コンパイレーション時のクラス階層を解析する。クラス
階層は、一般に、仮想関数コールの受手側であるロード
済クラスの1関数だけを表示し得る。ロード済クラスの
1関数だけが仮想関数コールの受手側である場合には、
システムは、コンパイル済メソッド内に、その関数に対
する直接コールを配置する。さらに、システムは、全関
数をコンパイル済メソッド中にインラインする。全関数
のインラインは、コンパイル済メソッドのためにより多
くの記憶スペースを要求するが、より高速な性能を結果
としてもたらす。
であり得る、1つ以上のロード済関数が存在し得る。こ
のような場合には、システムは、関数、及び/又は、イ
ンライン関数に対する直接コールを含む、判断ツリー、
または、ハッシュテーブルをインラインし得る。すなわ
ち、ステップ505を参照して説明したように、仮想関
数に対するコールは、ステップ909にて最適化され得
る。
イル済メソッドに対して従属性情報を付加する。従属性
情報は、ステップ509にて最適化済みである各仮想関
数のクラス、関数名、及びシグネチャ(すなわち、パラ
メータタイプ)を含み得る。この方法では、実行時実行
に際してクラスがロードされると、コンパイル済メソッ
ドが依然として有効であるか、逆最適化されるべきか、
あるいは、再最適化されるべきかを決定するために、コ
ンパイル済メソッドについて従属性情報がチェックされ
得る。この処理過程は、図7を参照して以下に詳述す
る。
メソッドの実施例を図示する。コンパイル済メソッド6
09は、ヘッダ603及びコンパイル済コード605を
備えている。ヘッダ603は、特に、従属性情報607
を含んでいる。本実施例中では、従属性情報は、コンパ
イル済メソッド609中で最適化された全仮想関数コー
ルのクラス、名前、及びシグネチャのリストである。こ
の情報は、シンプルリストとして格納され得るが、他の
種々の格納技術も用いられ得る。
ディングのフローチャートを図示する。ステップ701
にて、システムは、実行時にロードされるべきクラスを
受け取る。そして、システムは、ステップ703にて、
クラス、及びそのクラスの全スーパークラスをマークす
る。クラスは、クラス階層構造(図8参照)におけるブ
ーリアンフィールドを設定することによってマークされ
得る。
イル済メソッドが、その従属性情報中に任意のマーク済
クラスを含んでいるかを決定するために、全てのコンパ
イル済メソッドを査閲する。上述のように、従属性情報
は、コンパイル済メソッドのヘッダ内に格納され得る。
任意のマーク済クラスがコンパイル済メソッドの従属性
情報に含まれている場合には、システムは、ステップ7
07にて、関数名及びシグネチャの一致があるか否か決
定する。
を決定することにより、システムは、クラスのローディ
ングが、任意のコンパイル済メソッドを効率的に無効に
するか否かを確認する。すなわち、関数名及びシグネチ
ャの一致が存在するか否かの決定は、クラスのローディ
ングが最適化済みの仮想関数コールのための新規且つ前
回未解釈な受け手を生成するか否かを決定することであ
る。
A3及びクラスA5だけが実行時コンパイレーションに
際してロードされる場合、仮想関数コールの受け手であ
り得る関数は1つしか存在しないので、システムは、
A::foo()に対する直接コールを、コンパイル済メソッ
ド内に配置し得る(あるいは、全関数をインラインする
ことすら可能である)。しかしながら、実行時実行中
に、クラスC7がロードされる場合には、仮想関数コー
ル(すなわち、C::foo())のための他の受け手が存在
し得る。したがって、コンパイルメソッドは、逆最適化
されるべきか、あるいは、再最適化されるべきである。
ドについて一致が存在する場合には、コンパイル済メソ
ッドは、ステップ709にて逆最適化される。コンパイ
ル済メソッドの逆最適化は、メソッドを自身のインタプ
リット済フォームに逆戻りさせること、あるいは、「逆
コンパイル」することを含み得る。さらに、システム
は、新規にロードされたクラスを考慮するために、コン
パイル済メソッドを再最適化し得る。
表例を図示する。クラス801は、その下方のクラスに
対してスーパークラスであることを示すルートに図示さ
れている。図示されているように、クラス803、80
5は、クラス801のサブクラスである。各クラスのク
ラス情報は、図7のステップ703におけるのと同様
に、クラスをマークするために用いられるブーリアンフ
ィールドを含み得る。
ラスポインタ、及びシビリングポインタを含み得る。サ
ブクラスポインタは、本例中ではクラス803が相当す
る第1サブクラスを指している。シビリングポインタ
は、シビリングであるクラスのリンクリストを形成す
る。図示されているように、クラス803のシビリング
ポインタは、クラス805を指している。サブクラスポ
インタ及びシビリングポインタを使用することにより、
本発明に係る発明の実施の形態におけるシステムは、ク
ラス階層を容易にトラバースすることができる。
るが、種々の変形例、改良例、及び等価例が用いられ得
る。本発明は、上述の発明の実施の形態に対して適当な
改良を施すことによっても、同様に利用可能であること
は明らかである。例えば、既述の発明の実施の形態は、
Java仮想マシンによって実行されるアプリケーションに
関するが、本発明の原理は、他のシステム及び言語に対
して容易に適用され得る。したがって、上記記述は、そ
の最大の均等の範囲及びその特許請求の範囲の境界及び
範囲によって定義される本発明の範囲を制限するもので
ない。
クラスのクラス階層を示す説明図。
を実行するために用いられ得るコンピュータシステムを
例示する説明図。
ク図。
ンのブロック図。
にメソッドをコンパイルするフローチャート。
に実施形態を図示する説明図。
実行中におけるクラスのローディングの処理過程を示す
フローチャート。
中におけるクラス階層の代表例を示す説明図。
Claims (22)
- 【請求項1】 実行時における関数の実行性能を増大さ
せるための、コンピュータ上で実行される方法であっ
て、 前記関数をコンパイルし、 前記関数に含まれている、処理過程に対するコールを識
別し、 前記関数の有効性と前記関数のコンパイレーションステ
ータスとを示す前記関数のステータスを示す従属性情報
であって、前記処理過程に関するクラス情報と、名前情
報と、及びシグネチャ情報とを含む従属性情報を、前記
関数に対して付加することを備える、方法。 - 【請求項2】 請求項1に記載の方法において、前記処
理過程は仮想処理過程であり、前記方法はさらに、 前記関数に関連するクラス構造体を解析することを備
え、 前記クラス構造体の解析は、前記仮想処理過程が実質的
に前記コールの唯一のターゲットである時期の決定を含
む、方法。 - 【請求項3】 請求項1又は請求項2のいずれかの請求
項に記載の方法はさらに、 前記仮想処理過程が実質的に前記コールの唯一のターゲ
ットであると決定されるとき、前記仮想処理過程を前記
関数にインラインすることを備える、方法。 - 【請求項4】 請求項1又は請求項2のいずれかの請求
項に記載の方法はさらに、 前記仮想処理過程に対する直接コールを前記関数中に配
置することを備える、方法。 - 【請求項5】 請求項1乃至請求項4のいずれかの請求
項に記載の方法はさらに、 前記関数がコンパイレーションに適する時期を決定する
ことを備える、方法。 - 【請求項6】 請求項1乃至請求項5のいずれかの請求
項に記載の方法はさらに、 前記関数に関連するクラスをローディングし、 前記関数が有効である旨を前記従属性情報が示す時期、
前記関数が逆最適化に適当である旨を前記従属性情報が
示す時期、また、前記関数が再最適化に適当である旨を
前記従属性情報が示す時期を決定することを備える、方
法。 - 【請求項7】 請求項6に記載の方法において、前記ク
ラスのローディングは、 前記関数が前記処理過程に対する実質的に唯一のコール
元でない時期を決定し、 前記関数が前記処理過程に対する実質的に唯一のコール
元でないと決定されたとき、前記関数を逆コンパイルす
ることを備える、方法。 - 【請求項8】 請求項6に記載の方法において、前記ク
ラスのローディングは、 前記関数が前記処理過程に対する実質的に唯一のコール
元でない時期を決定し、 前記関数が前記処理過程に対する実質的に唯一のコール
元でないと決定された場合には、前記関数を再コンパイ
ルすることを備える、方法。 - 【請求項9】 実行時中にシステムのクラス階層に関連
する第1のクラスを解析するための、コンピュータ上で
実行される方法であって、 前記第1のクラスをマークし、 前記クラス階層に含まれていると共に、前記第1のクラ
スに関連付けられている第2のクラスを、実質的に前記
第1のクラスに関連付けられている第2のクラスと識別
することでマークし、 従属性情報を含むと共に前記システムに関連するコンパ
イル済関数を査閲し、前記従属性情報は、前記コンパイ
ル済関数の有効性ステータス、及び最適化ステータスを
表示するための情報であり、前記従属性情報に関して前
記第1のクラス及び前記第2のクラスの少なくとも一方
が識別される時期の決定を含み、 前記従属性情報に関して前記第1のクラス及び前記第2
のクラスの少なくとも一方が識別されるとき、前記コン
パイル済関数が無効である時期を決定することを備え
る、方法。 - 【請求項10】 請求項9に記載の方法はさらに、 前記コンパイル済関数が無効であるとき、前記コンパイ
ル済関数をインタプリット済形式に効率よく配置して、
前記コンパイル関数を逆コンパイルすることを備える、
方法。 - 【請求項11】 請求項9に記載の方法はさらに、 前記コンパイル済関数が無効であるとき、前記コンパイ
ル済関数が前記第1のクラスを継承することを許容し
て、前記コンパイル済関数を再コンパイルする、方法。 - 【請求項12】 実行時に、関数の実行性能を増大する
ために好適な計算機システムであって、 プロセッサと、 前記関数をコンパイルするコンパイラと、 前記関数に含まれている、処理過程に対するコールを識
別するコール識別部と、 前記関数の有効性ステータスの時期を含む前記関数のス
テータスを示す従属性情報を、前記関数に付加するため
に適した機構とを備える、計算機システム。 - 【請求項13】 請求項12に記載の計算機システムに
おいて、前記処理過程は仮想処理過程であり、前記計算
機システムはさらに、 前記関数に関連するクラス構造体を解析する解析器を備
え、 前記解析器は、前記仮想処理過程が実質的に前記コール
の唯一のターゲットである時期を決定する、計算機シス
テム。 - 【請求項14】 請求項12又は請求項13のいずれか
の請求項に記載の計算機システムはさらに、 前記仮想処理過程が実質的に前記コールの唯一のターゲ
ットであると決定されるとき、前記仮想処理過程を前記
関数にインラインするインライナーを備える、計算機シ
ステム。 - 【請求項15】 実行時における関数の実行性能を増大
させるための、コンピュータプログラム製品であって、 前記関数をコンパイルするコンピュータコードと、 前記関数に含まれている、処理過程に対するコールを識
別するコンピュータコードと、 前記関数の有効性及び前記関数のコンパイレーションス
テータスを示す前記関数のステータスを表示すると共
に、前記処理過程に関するクラス情報、名前情報、及び
シグネチャ情報を含む、従属性情報を前記関数に対して
付加するコンピュータコードと、 前記コンピュータコードを格納するコンピュータ読み取
り可能媒体とを備える、コンピュータプログラム製品。 - 【請求項16】 請求項15に記載のコンピュータプロ
グラム製品において、前記処理過程は仮想処理過程であ
り、前記コンピュータプログラム製品はさらに、 前記関数に関連するクラス構造体を解析するコンピュー
タコードを備え、 前記クラス構造体の解析は、前記仮想処理過程が実質的
に前記コールの唯一のターゲットである時期を決定す
る、コンピュータプログラム製品。 - 【請求項17】 請求項16又は請求項17のいずれか
の請求項に記載のコンピュータプログラム製品はさら
に、 前記仮想処理過程は前記コールの実質的に唯一のターゲ
ットであると決定されたとき、前記仮想処理過程を前記
関数にインラインするコンピュータコードを備える、コ
ンピュータプログラム製品。 - 【請求項18】 請求項15又は請求項16のいずれか
の請求項に記載のコンピュータプログラム製品はさら
に、 前記仮想処理過程に対する直接コールを前記関数中に配
置するコンピュータコードを備える、方法。 - 【請求項19】 請求項15乃至請求項18のいずれか
の請求項に記載のコンピュータプログラム製品はさら
に、 前記関数がコンパイレーションに適する時期を決定する
コンピュータコードを備える、コンピュータプログラム
製品。 - 【請求項20】 請求項15乃至請求項19のいずれか
の請求項に記載のコンピュータプログラム製品はさら
に、 前記関数に関連するクラスをロードするコンピュータコ
ードと、 前記従属性情報が、前記関数は有効である旨を示す時
期、前記関数は逆最適化に適当である旨を示す時期、ま
た、前記関数は再最適化に適当である旨を示す時期を決
定するコンピュータコードを備える、コンピュータプロ
グラム製品。 - 【請求項21】 請求項15乃至請求項20のいずれか
の請求項に記載のコンピュータプログラム製品におい
て、前記コンピュータ読み取り可能媒体は、フロッピー
ディスク、ハードディスク、テープ、搬送波に具象化さ
れたデータ信号、CD−ROM、システムメモリ、フラ
ッシュメモリから構成される群から選択される、コンピ
ュータプログラム製品。 - 【請求項22】 計算機環境において用いるためのコン
パイル済メソッドの構造体であって、 1つ以上の仮想関数に対する最適化コールを含むコンパ
イル済コード領域、 前記1つ以上の仮想関数に関連するクラスに関連する情
報と、前記1つ以上の仮想関数の名前に関連する情報
と、前記1つ以上の仮想関数のシグネチャに関連する情
報とを含む従属性情報を有するヘッダ領域を備える、コ
ンパイル済メソッドの構造体。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US7976598P | 1998-03-24 | 1998-03-24 | |
| US60/079765 | 1998-03-24 |
Publications (3)
| Publication Number | Publication Date |
|---|---|
| JPH11327906A true JPH11327906A (ja) | 1999-11-30 |
| JPH11327906A5 JPH11327906A5 (ja) | 2006-10-19 |
| JP5129904B2 JP5129904B2 (ja) | 2013-01-30 |
Family
ID=22152672
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP07773299A Expired - Lifetime JP5129904B2 (ja) | 1998-03-24 | 1999-03-23 | 実行時における関数の実行性能を増大させるための方法、計算機システム、実行時における関数の実行性能を増大させるための、コンピュータプログラムを格納するコンピュータ読み取り可能媒体 |
Country Status (5)
| Country | Link |
|---|---|
| EP (1) | EP0950947B1 (ja) |
| JP (1) | JP5129904B2 (ja) |
| KR (1) | KR19990078174A (ja) |
| CN (2) | CN1149477C (ja) |
| DE (1) | DE69911104T2 (ja) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2006146613A (ja) * | 2004-11-19 | 2006-06-08 | Matsushita Electric Ind Co Ltd | プログラム変換方法 |
| US7506323B2 (en) | 2002-06-18 | 2009-03-17 | Panasonic Corporation | Program execution processing terminal device, program execution processing method, and program |
| JP2010267291A (ja) * | 1998-11-16 | 2010-11-25 | Myriad Group Ag | コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、およびコンピュータ・システムを動作させる方法 |
Families Citing this family (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5983021A (en) * | 1998-05-27 | 1999-11-09 | Sun Microsystems | Dynamically switching statically bound function calls to dynamically bound function calls without recompilation |
| US6223340B1 (en) * | 1998-10-09 | 2001-04-24 | Sun Microsystems, Inc. | Method for directly inlining virtual calls without on-stack replacement |
| US7490320B2 (en) * | 2005-02-18 | 2009-02-10 | International Business Machines Corporation | Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation |
| KR20080039080A (ko) * | 2006-10-31 | 2008-05-07 | 에스케이 텔레콤주식회사 | 이종언어편집 라이브러리의 인터페이스 기능이 구비된단말장비, api호출방법 및 컴파일함수생성방법 |
| US8819649B2 (en) | 2011-09-09 | 2014-08-26 | Microsoft Corporation | Profile guided just-in-time (JIT) compiler and byte code generation |
| US20130205282A1 (en) * | 2012-02-07 | 2013-08-08 | Microsoft Corporation | Transferring program execution from compiled code to interpreted code |
| CN105335137B (zh) * | 2014-07-23 | 2019-01-18 | 国际商业机器公司 | 用于处理源文件的方法和装置 |
Family Cites Families (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP3178151B2 (ja) * | 1993-03-19 | 2001-06-18 | 富士ゼロックス株式会社 | オブジェクト指向言語のメッセージコンパイル装置 |
| US5613120A (en) * | 1994-10-20 | 1997-03-18 | Silicon Graphics, Inc. | System and method for enabling, without recompilation, modification of class definitions and implementations in an object-oriented computer program |
| US5606699A (en) * | 1995-04-28 | 1997-02-25 | International Business Machines Corporation | Storing and querying execution information for object-oriented programs |
| US5748963A (en) * | 1995-05-12 | 1998-05-05 | Design Intelligence, Inc. | Adaptive binding |
-
1999
- 1999-03-22 DE DE69911104T patent/DE69911104T2/de not_active Expired - Lifetime
- 1999-03-22 EP EP99302209A patent/EP0950947B1/en not_active Expired - Lifetime
- 1999-03-23 JP JP07773299A patent/JP5129904B2/ja not_active Expired - Lifetime
- 1999-03-24 CN CNB991043073A patent/CN1149477C/zh not_active Expired - Lifetime
- 1999-03-24 CN CNB2004100399963A patent/CN1287280C/zh not_active Expired - Lifetime
- 1999-03-24 KR KR1019990009951A patent/KR19990078174A/ko not_active Abandoned
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2010267291A (ja) * | 1998-11-16 | 2010-11-25 | Myriad Group Ag | コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、およびコンピュータ・システムを動作させる方法 |
| US7506323B2 (en) | 2002-06-18 | 2009-03-17 | Panasonic Corporation | Program execution processing terminal device, program execution processing method, and program |
| JP2006146613A (ja) * | 2004-11-19 | 2006-06-08 | Matsushita Electric Ind Co Ltd | プログラム変換方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| EP0950947A3 (en) | 2000-02-23 |
| DE69911104D1 (de) | 2003-10-16 |
| CN1149477C (zh) | 2004-05-12 |
| EP0950947B1 (en) | 2003-09-10 |
| DE69911104T2 (de) | 2004-07-08 |
| CN1287280C (zh) | 2006-11-29 |
| EP0950947A2 (en) | 1999-10-20 |
| JP5129904B2 (ja) | 2013-01-30 |
| CN1529237A (zh) | 2004-09-15 |
| KR19990078174A (ko) | 1999-10-25 |
| CN1235301A (zh) | 1999-11-17 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US6704927B1 (en) | Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading | |
| US7490320B2 (en) | Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation | |
| US6481006B1 (en) | Method and apparatus for efficient invocation of Java methods from native codes | |
| US8312439B2 (en) | Inlining native functions into compiled java code | |
| US5999732A (en) | Techniques for reducing the cost of dynamic class initialization checks in compiled code | |
| US6704926B1 (en) | Bimodal Java just-in-time complier | |
| AU774467B2 (en) | Automatic stub/adapter generator | |
| US6637025B1 (en) | Dynamic selection/definition of which class/methods should or should not be jit'ed using information stored in a jar file | |
| US6317796B1 (en) | Inline database for receiver types in object-oriented systems | |
| US6412108B1 (en) | Method and apparatus for speeding up java methods prior to a first execution | |
| US9250865B2 (en) | Selective speculative class-based optimization | |
| US20040083467A1 (en) | System and method for executing intermediate code | |
| US6604167B1 (en) | Method and apparatus traversing stacks for just-in-time compilers for Java virtual machines | |
| JP5129904B2 (ja) | 実行時における関数の実行性能を増大させるための方法、計算機システム、実行時における関数の実行性能を増大させるための、コンピュータプログラムを格納するコンピュータ読み取り可能媒体 | |
| US8099723B2 (en) | Referencing a constant pool in a java virtual machine | |
| US6779188B1 (en) | Apparatus and method for improved devirtualization of method calls | |
| Puder | Byte code transformations using XSL stylesheets | |
| Vlachoyiannis et al. | A GENERIC PURPOSE, CROSS-PLATFORM, HIGH EXTENSIBLE VIRTUAL MACHINE | |
| Holm | A framework for rapid development of dynamic binary translators | |
| Ferreira | THE JEWEL VIRTUAL MACHINE | |
| JP2001117759A (ja) | プラグ可能なバーチャル・マシンをインプリメントする技術 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060320 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060320 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060905 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090317 |
|
| A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090615 |
|
| A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090619 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090917 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20091020 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100217 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20100217 |
|
| A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20100311 |
|
| A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20100416 |
|
| RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20110602 |
|
| RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20110606 |
|
| A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20111107 |
|
| A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20111110 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120209 |
|
| A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20120524 |
|
| A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20120529 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120906 |
|
| 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: 20121105 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20151109 Year of fee payment: 3 |
|
| 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 |