JP5129904B2 - 実行時における関数の実行性能を増大させるための方法、計算機システム、実行時における関数の実行性能を増大させるための、コンピュータプログラムを格納するコンピュータ読み取り可能媒体 - Google Patents
実行時における関数の実行性能を増大させるための方法、計算機システム、実行時における関数の実行性能を増大させるための、コンピュータプログラムを格納するコンピュータ読み取り可能媒体 Download PDFInfo
- Publication number
- JP5129904B2 JP5129904B2 JP07773299A JP7773299A JP5129904B2 JP 5129904 B2 JP5129904 B2 JP 5129904B2 JP 07773299 A JP07773299 A JP 07773299A JP 7773299 A JP7773299 A JP 7773299A JP 5129904 B2 JP5129904 B2 JP 5129904B2
- Authority
- JP
- Japan
- Prior art keywords
- class
- compiled
- computer system
- computer
- function
- 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.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
- G06F9/4491—Optimising based on receiver type
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、ソフトウェアの実行時コンパイレーションに関する。より詳細には、本発明は、動的リンキング及び動的ローディングの存在下において動的にディスパッチされたコールの静的結合を実行する技術に関する。
【0002】
【従来の技術】
オブジェクト指向言語の背景にある基本的な概念は、データを操作してオブジェクトと呼ばれる単一単位に変換する、データ及びメソッド(すなわち、関数)双方の組み合わせである。オブジェクトの関数は、一般的に、オブジェクトによってカプセル化されているデータにアクセスするための唯一の手段を提供する。データは、メッセージによって特定されたメソッドを呼び出すためにオブジェクトに命令するオブジェクトに対してメッセージを送ることによってアクセスされる。
【0003】
効率の良いメッセージのディスパッチは、オブジェクト指向言語における最も重要な事項の1つである。その理由は、オブジェクト指向プログラムにおいて、メッセージのディスパッチは、非常に高頻度の動作であると共に、実行時に実行される動作だからである。したがって、できる限り高速に実行されるべきである。実行時前に関数のアドレスを決定可能な手続型プログラム言語(例えば、Cプログラム言語)とは異なり、オブジェクト指向言語は、受取側オブジェクトに対してディスパッチ済みであるメッセージを取り扱うメソッドを、実行時に動的に決定しなければならず、また、拡張サーチを伴い得る。
【0004】
複雑なメッセージのディスパッチの理解をより良いものとするために、クラス階層の例について以下に説明する。図1は、各クラスのメソッドを含むクラス階層を図示する。クラス階層1は、そのルートに2個の仮想関数foo()及びbar()を定義する親クラスA3を含む。仮想関数は、親クラスにおいて定義され得ると共に、関連子クラスにおいて再定義され得る関数である。クラスB5及びクラスC7は、本質的に、親クラスA3のデータ及びメソッドを含んでいる。図示されるように、クラスB5は、仮想関数foo()及びbar()のいずれについても再定義していない。しかしながら、クラスC7は仮想関数foo()を再定義している。メソッドfoo()を呼び出すためにクラスC7のオブジェクトが要求されるとき、呼び出されたメソッドは、親クラスA7でなく、クラスC7によって定義されたメソッドである。クラスD9及びE11もまた、メソッドfoo()を再定義する。
【0005】
【発明が解決しようとする課題】
一般的に、オブジェクトのクラスを静的に決定することは不可能なので、オブジェクトに関連付けられている正確なメソッドのサーチは、実行時実行中、すなわち、より詳細には、メッセージのディスパッチ中に実行される。例えば、以下のようなメソッドがあるとする。
test()
{
...
x.foo();
...
}
全クラスA−Eが実行時の実行に際してロードされる場合、どの関数foo()をコールするかの決定は、クラスxがインスタンスであるか否かに依存する。
【0006】
さらに、性能を上げるために、test関数は実行時にコンパイルされる。実行時コンパイレーションに際しては、クラスA3及びB5だけがロードされ得る。したがって、メッセージx.foo()がA::foo()だけを呼び出すであろうことは、ロード済クラスの査閲から当業者にとって明らかである。当然のことながら、実行時の実行に際してクラスC7がロードされる場合には、この仮定は誤りであることが証明される。
【0007】
【課題を解決するための手段】
一般的に、本発明に係る発明の実施の形態は、動的リンキング及び動的ローディングの存在下において動的にディスパッチされたコールの静的結合を実行するための革新的な技術を提供する。本発明の1つの局面によれば、実行時における関数の実行性能を増大させるための方法は、インタプリットされた、あるいは、以前にコンパイルされた関数をコンパイルすること、及び処理過程に対する関数内でコールを識別することを備えている。この方法はまた、従属情報を関数に対して付加することを備える。従属性情報は、関数のステータスを表示すると共に、処理過程に関するクラス、名前、及びシグネチャに関する情報を含む。
【0008】
本発明の他の局面によれば、実行時中にシステムのクラス階層に関連する第1のクラスを解析するための、コンピュータ上で実行される方法は、第1のクラスをマークすること、及び2つのクラス間の関係を表示するために第1のクラスのスーパークラスである第2のクラスをマークすることを備える。そして、システムに関連するコンパイル済関数が査閲される。コンパイル済関数は、コンパイル済関数の最適化ステータスと共にコンパイル済関数の有効性ステータスを表示する従属性情報を含む。コンパイル済関数の査閲は、第1のクラス及び第2のクラスの少なくとも一方が従属性情報中にて識別される時期の決定を含む。第1のクラス、または、第1のクラス及び第2のクラスの双方が従属性情報中にて識別されたと決定されたとき、コンパイル済関数が無効であるか否かに関する決定が下される。ある実施形態では、メソッドは、コンパイル済関数が無効であると決定されるときコンパイル済関数を逆コンパイルすることを含み得る。コンパイル済関数の逆コンパイルは、関数をインタプリット済状態に戻す。
【0009】
本発明の他の特徴、並びに利点は、添付図面と共に以下の詳細な説明を考察することにより容易に理解されるであろう。
【0010】
【発明の実施の形態】
定義
マシン命令(すなわち、命令)とは、オペレーションコード(OPコード)及び任意の1つ以上のオペランドにより特定されるオペレーションを実行するために計算機装置に指示する命令を意味する。
仮想マシン命令とは、ソフトウェアエミュレート済マイクロプロセッサ又はコンピュータアーキテクチャのための命令(仮想コードとも呼ばれる)を意味する。
ネイティブマシン命令とは、特定のマイクロプロセッサ又はコンピュータのために設計された命令(ネイティブコードとも呼ばれる)を意味する。
【0011】
メソッドは、ソフトウェアルーチン(関数、サブルーチン、プロシージャ、及びメンバ関数とも呼ばれる)を意味する。
実行時コンパイレーションとは、実行時に実行されるコードのコンパイレーションを意味する。
実行時実行とは、実行時に実行されるコードの実行を意味する。
【0012】
詳細な説明
以下の説明では、本発明は、Java仮想マシン命令(すなわち、バイトコード)において動的にディスパッチされたコールを静的に結合する好適な実施の形態について説明される。特に、コンパイル済Java仮想マシン命令のための実行時クラスローディング及び初期化チェックを実行するために、IBMパーソナルコンピュータ、若しくは、その互換機のために生成され得る、実ネイティブマシン命令を示す例示が記載されている。しかしながら、本発明は、いかなる特定の言語、コンピュータアーキテクチャ、あるいは、特定のインプリメンテーションにも限定されるものではない。したがって、以下の発明の実施の形態の記載は、説明のためのものであって、限定を目的とするものではない。
【0013】
Java(商標)プログラム言語は、サンマイクロシステムズ社により開発された、小規模デバイス(例えば、ポケットベル、携帯電話及びスマートカード)からスーパーコンピュータに至るまで幅広い範囲のコンピュータ上で実行されるために十分に高移植性であるように設計された、オブジェクト指向の高レベルプログラム言語である。Java(及び他の言語)で記述されたコンピュータプログラムは、Java仮想マシンによる実行のために、仮想マシン命令にコンパイルされ得る。一般的に、Java仮想マシンは、仮想マシン命令をデコードし、実行するインタプリタである。
【0014】
Java仮想マシン用仮想マシン命令は、1以上のバイトを含む、バイトコードである。バイトコードは、クラスのメソッドのためのバイトコードを含む「クラスファイル」と呼ばれる特定のファイル形式中に格納される。クラスのメソッドのためのバイトコードに加え、クラスファイルは、他の付属情報と共にシンボルテーブルを含んでいる。
【0015】
Javaバイトコードとして1つ以上のクラスファイル中に具象化されたコンピュータプログラムは、プラットフォームに依存しない。コンピュータプログラムは、Java仮想マシンのインプリメンテーションを実行可能な任意のコンピュータ上で、修飾されることなく実行され得る。Java仮想マシンは、Java仮想マシン用のコンピュータプログラムが、プラットフォームに依存しないことを許容することを重要な要素とする、「汎用」コンピュータのソフトウェアエミュレータである。
【0016】
Java仮想マシンは、ソフトウェアインタプリタとしても実現され得る。
実行時にデコーディングが実行されないように、実行に先立ってソースコードをネイティブマシン命令にデコードするコンパイラに対して、従来のインタプリタは、実行時に、インタプリット済プログラムの1つのプログラムの仮想マシン命令をデコードすると共に実行する。Java仮想マシンは、実行時コンパイレーションのために、インタプリタ及びコンパイラの双方を含み得る。一般的に、Java仮想マシンは、Javaプログラム言語以外のプログラム言語(例えば、C++プログラム言語)で記述される。
【0017】
図2は、本発明に係る発明の実施の形態のソフトウェアを実行するために用いられ得るコンピュータシステムを例示する。図2は、ディスプレイ303、スクリーン305、キャビネット307、キーボード309及びマウス311を含むコンピュータシステム301を図示する。マウス311は、グラフィカルユーザインターフェースと対話するための1個以上のボタンを有し得る。キャビネット307は、本発明を実行するコンピュータコードを組み込むソフトウェアプログラム、本発明と共に用いるデータ等を格納すると共に引き出すために用いられ得る、CD−ROMドライブ313、システムメモリ、及びハードドライブ(図2参照)を収容する。CD−ROM315がコンピュータ読み取り可能媒体の例示として図示されているが、フレキシブルディスク、テープ、フラッシュメモリ、システムメモリ、及びハードドライブを含む、他のコンピュータ読み取り可能媒体も用いられ得る。
【0018】
図3は、本発明に係る発明の実施の形態の1つにおけるソフトウェアを実行するために用いられる、コンピュータシステム301のシステムブロック図を示す。図2のように、コンピュータシステム301は、モニタ303、キーボード309及びマウス311を有している。コンピュータシステム301はさらに、中央処理装置351、システムメモリ353、固定記憶装置355(例えば、ハードディスク)、リムーバブル記憶装置357(例えば、CD−ROMドライブ)、ディスプレイアダプタ359、サウンドカード361、スピーカ363、及びネットワークインターフェース365といったサブシステムを備えている。本発明と共に用いることが好適な他のコンピュータは、より多くの、あるいは、より少ないサブシステムを備え得る。例えば、他のコンピュータシステムは、1個以上のプロセッサ351を備えたり(すなわち、マルチプロセッサシステム)、キャッシュメモリを備え得る。
【0019】
コンピュータシステム301のシステムバスアーキテクチャは、矢印367で示されている。しかしながら、これらの矢印は、サブシステムとリンクするために機能する、任意の相互接続スキームの例示にすぎない。例えば、ローカルバスは、中央処理装置とシステムメモリ及びディスプレイアダプタとを接続するために用いられ得る。図3に図示されるコンピュータシステム301は、本発明と共に用いることが好適なコンピュータシステムの例示にすぎない。サブシステムの異なる構成を備える他のコンピュータアーキテクチャも用いられ得る。
【0020】
一般的に、Javaプログラム言語で記述されているコンピュータプログラムは、後にJava仮想マシンによって実行される、バイトコード、又は、Java仮想マシン命令にコンパイルされる。バイトコードは、インタプリテーションのためにJava仮想マシンに入力されるクラスファイルに格納される。仮想マシンは、図2及び図3を参照して先に説明したコンピュータシステムのような、コンピュータシステム上で稼働し得る。図4は、本発明の実行に好適であると共に、図2及び図3のコンピュータシステム301によってサポートされる仮想マシンの代表図である。コンピュータプログラム、例えば、Java(商標)プログラム言語で記述されたコンピュータプログラムが実行されると、ソースコード410がコンパイル時環境405内のコンパイラ420に対して供給される。コンパイラ420は、ソースコード410をバイトコード430に翻訳する。一般的に、ソースコード410は、ソフトウェア開発者によってソースコード410が作成されたとき、バイトコード430に翻訳される。
【0021】
バイトコード430は、一般的に、複製され、ダウンロードされ、あるいは、例えば、図3のネットワークインターフェース365のようなネットワークを通じて分散され、または、図3の主記憶装置355のような記憶装置上に格納され得る。本発明の実施の形態では、バイトコード430はプラットフォームに依存しない。すなわち、バイトコード430は、実質的に、好適な仮想マシン440を稼働させる任意のコンピュータシステム上で実行され得る。
【0022】
バイトコード430は、仮想マシン440を含む実行時環境435に供給される。1つの実施形態では、仮想マシンはJava(商標)仮想マシンたり得る。実行時環境435は、一般的に、図3のCPU351のような1つのプロセッサ又は複数のプロセッサを使用して実行され得る。仮想マシン440は、コンパイラ442、インタプリタ444、及び実行時システム446を含んでいる。バイトコード430は、コンパイラ442、あるいは、インタプリタ444のいずれかに提供され得る。
【0023】
バイトコード430がコンパイラ442に供給されると、バイトコード430内に含まれているメソッドがマシン命令にコンパイルされる。1つの実施形態では、コンパイラ442は、バイトコード430内に含まれているメソッドのコンパイレーションを、メソッドがまさに実行されるときまで遅延するジャストインコンパイラである。バイトコード430がインタプリタ444に供給されると、バイトコード430は1バイトコード毎にインタプリタ中に読み込まれる。そして、インタプリタ444は、各バイトコードがインタプリタ444中に読み込まれるのに従って、各バイトコードによって定義された演算を実行する。すなわち、インタプリタ444は、当業者に知られているように、バイトコード430を「インタプリット」する。一般的に、インタプリタ444はバイトコード430を処理すると共に、バイトコード430に関連する演算を実質的に連続して実行する。
【0024】
メソッドが他のメソッドによって呼び出されるとき、あるいは、実行時環境435から呼び出されるとき、メソッドがインタプリットされる場合には、実行時システム446は、インタプリタ444によって直接実行され得るバイトコード430のシーケンスの形式で実行時環境435からメソッドを取得し得る。これに対して、呼び出されたメソッドが未だコンパイルされていないコンパイルメソッドである場合には、実行時システム446は、バイトコード430列の形式でメソッドを実行時環境435から取得し、そして、コンパイラ442を起動する。コンパイラ442は、バイトコード430からマシン命令を生成し、得られたマシン語命令は、図3のCPU351によって直接実行され得る。一般的に、マシン語命令は、仮想マシン440が終了すると、破棄される。
【0025】
Javaクラス(及びインターフェース)は、動的にロード、リンク及び初期化される。ローディングは、システムが、クラスのバイナリフォーム(例えば、クラスファイル)を見つけだし、そして、クラスを表すためにバイナリコードからClassオブジェクトを構成するプロセスである。Classクラスは、クラスの構成を格納し、又は、表すためのクラスである。リンキングは、クラスのバイナリフォームを獲得し、そして、実行され得るようにシステムの実行時状態と結びつけるプロセスである。クラスの初期化は、クラスのスタティックイニシャライザ、及び、クラス内で宣言されたスタティックフィールドのイニシャライザの実行を含む。
【0026】
各Javaクラスは、自身に関連するコンスタントプールを有する。コンスタントプールは、Javaクラスファイル内に格納され、そして、シンボルテーブルに似た関数として機能する。一般的に、コンスタントプール内の各エントリは、1から始まりコンスタントプール内のエントリ数まで増加する番号で指標付けされる。クラスのメソッドは、指標を用いてコンスタントプール内のエントリにアクセスし、あるクラスのメソッドは、他のクラスのコンスタントプールにアクセスし得ない。
【0027】
リテラル定数を格納するコンスタントプールに加えて、コンスタントプールはクラス、メソッド、フィールド、及びインターフェースを概念的に格納する。これらのエントリを概念的に格納するということは、エントリを識別する名前は格納されるが、物理アドレスは格納されないことを意味する。すなわち、クラスAがフィールドFを有する場合には、(Fのタイプシグネチャと共に)双方の名前A及びFがコンスタントプール内に格納され得る。アドレスでなく名前を格納することにより、Java実行システムは、実行時にシンボリックレファレンスを物理アドレスに動的に導出する。
【0028】
図5は、本発明に係る発明の実施の形態における、実行時にメソッドをコンパイルするフローチャートを図示する。ステップ501にて、システムは、メソッドのコンパイルは有益であると決定する。一般的に、メソッドのコンパイルは、メソッドの実行性能を増大する。しかしながら、メソッドがコンパイルされないインスタンスは多数存在する。例として、コンパイル済メソッドは、コンパイルされていないメソッドよりも多くの記憶スペースを要求し得る。少なくとも、一旦、特定のメソッドがコンパイルされるべきであると決定されると、そのメソッドはステップ503にてコンパイルされる。
【0029】
ステップ505では、システムは、コンパイルされたメソッド中の仮想関数に対するコールを識別する。上述のように、仮想関数コールの導出は、実行時に動的に実行される。Java仮想マシン命令において、コールは呼び出し仮想命令である。
【0030】
システムは、ステップ507にて、実行時コンパイレーション時のクラス階層を解析する。クラス階層は、一般に、仮想関数コールの受手側であるロード済クラスの1関数だけを表示し得る。ロード済クラスの1関数だけが仮想関数コールの受手側である場合には、システムは、コンパイル済メソッド内に、その関数に対する直接コールを配置する。さらに、システムは、全関数をコンパイル済メソッド中にインラインする。全関数のインラインは、コンパイル済メソッドのためにより多くの記憶スペースを要求するが、より高速な性能を結果としてもたらす。
【0031】
場合によっては、仮想関数コールの受手側であり得る、1つ以上のロード済関数が存在し得る。このような場合には、システムは、関数、及び/又は、インライン関数に対する直接コールを含む、判断ツリー、または、ハッシュテーブルをインラインし得る。すなわち、ステップ505を参照して説明したように、仮想関数に対するコールは、ステップ509にて最適化され得る。
【0032】
ステップ511では、システムは、コンパイル済メソッドに対して従属性情報を付加する。従属性情報は、ステップ509にて最適化済みである各仮想関数のクラス、関数名、及びシグネチャ(すなわち、パラメータタイプ)を含み得る。この方法では、実行時実行に際してクラスがロードされると、コンパイル済メソッドが依然として有効であるか、逆最適化されるべきか、あるいは、再最適化されるべきかを決定するために、コンパイル済メソッドについて従属性情報がチェックされ得る。この処理過程は、図7を参照して以下に詳述する。
【0033】
図6は、従属性情報を備えるコンパイル済メソッドの実施例を図示する。コンパイル済メソッド609は、ヘッダ603及びコンパイル済コード605を備えている。ヘッダ603は、特に、従属性情報607を含んでいる。本実施例中では、従属性情報は、コンパイル済メソッド609中で最適化された全仮想関数コールのクラス、名前、及びシグネチャのリストである。この情報は、シンプルリストとして格納され得るが、他の種々の格納技術も用いられ得る。
【0034】
図7は、実行時実行中におけるクラスローディングのフローチャートを図示する。ステップ701にて、システムは、実行時にロードされるべきクラスを受け取る。そして、システムは、ステップ703にて、クラス、及びそのクラスの全スーパークラスをマークする。クラスは、クラス階層構造(図8参照)におけるブーリアンフィールドを設定することによってマークされ得る。
【0035】
ステップ705にて、システムは、コンパイル済メソッドが、その従属性情報中に任意のマーク済クラスを含んでいるかを決定するために、全てのコンパイル済メソッドを査閲する。上述のように、従属性情報は、コンパイル済メソッドのヘッダ内に格納され得る。任意のマーク済クラスがコンパイル済メソッドの従属性情報に含まれている場合には、システムは、ステップ707にて、関数名及びシグネチャの一致があるか否か決定する。
【0036】
関数名及びシグネチャの一致があるか否かを決定することにより、システムは、クラスのローディングが、任意のコンパイル済メソッドを効率的に無効にするか否かを確認する。すなわち、関数名及びシグネチャの一致が存在するか否かの決定は、クラスのローディングが最適化済みの仮想関数コールのための新規且つ前回未解釈な受け手を生成するか否かを決定することである。
【0037】
例えば、再度、図1を参照すると、クラスA3及びクラスA5だけが実行時コンパイレーションに際してロードされる場合、仮想関数コールの受け手であり得る関数は1つしか存在しないので、システムは、A::foo()に対する直接コールを、コンパイル済メソッド内に配置し得る(あるいは、全関数をインラインすることすら可能である)。しかしながら、実行時実行中に、クラスC7がロードされる場合には、仮想関数コール(すなわち、C::foo())のための他の受け手が存在し得る。したがって、コンパイルメソッドは、逆最適化されるべきか、あるいは、再最適化されるべきである。
【0038】
ステップ707にて、コンパイル済メソッドについて一致が存在する場合には、コンパイル済メソッドは、ステップ709にて逆最適化される。コンパイル済メソッドの逆最適化は、メソッドを自身のインタプリット済フォームに逆戻りさせること、あるいは、「逆コンパイル」することを含み得る。さらに、システムは、新規にロードされたクラスを考慮するために、コンパイル済メソッドを再最適化し得る。
【0039】
図8は、メモリ中におけるクラス階層の代表例を図示する。クラス801は、その下方のクラスに対してスーパークラスであることを示すルートに図示されている。図示されているように、クラス803、805は、クラス801のサブクラスである。各クラスのクラス情報は、図7のステップ703におけるのと同様に、クラスをマークするために用いられるブーリアンフィールドを含み得る。
【0040】
さらに、各クラスのクラス情報は、サブクラスポインタ、及びシビリングポインタを含み得る。サブクラスポインタは、本例中ではクラス803が相当する第1サブクラスを指している。シビリングポインタは、シビリングであるクラスのリンクリストを形成する。図示されているように、クラス803のシビリングポインタは、クラス805を指している。サブクラスポインタ及びシビリングポインタを使用することにより、本発明に係る発明の実施の形態におけるシステムは、クラス階層を容易にトラバースすることができる。
【0041】
結論
以上が本発明に係る好適な発明の実施の形態の説明であるが、種々の変形例、改良例、及び等価例が用いられ得る。本発明は、上述の発明の実施の形態に対して適当な改良を施すことによっても、同様に利用可能であることは明らかである。例えば、既述の発明の実施の形態は、Java仮想マシンによって実行されるアプリケーションに関するが、本発明の原理は、他のシステム及び言語に対して容易に適用され得る。したがって、上記記述は、その最大の均等の範囲及びその特許請求の範囲の境界及び範囲によって定義される本発明の範囲を制限するものでない。
【図面の簡単な説明】
【図1】オブジェクト指向環境において仮想関数を含むクラスのクラス階層を示す説明図。
【図2】本発明に係る発明の実施の形態のソフトウェアを実行するために用いられ得るコンピュータシステムを例示する説明図。
【図3】図1のコンピュータシステムのシステムブロック図。
【図4】本発明に係る発明の実施の形態に従う仮想マシンのブロック図。
【図5】本発明に係る発明の実施の形態に従う、実行時にメソッドをコンパイルするフローチャート。
【図6】従属性情報を含むコンパイル済メソッドの1つに実施形態を図示する説明図。
【図7】本発明に係る発明の実施の形態に従う、実行時実行中におけるクラスのローディングの処理過程を示すフローチャート。
【図8】本発明に係る発明の実施の形態に従う、メモリ中におけるクラス階層の代表例を示す説明図。
Claims (4)
- プロセッサと、
前記プロセッサに接続され、前記プロセッサに仮想マシンを実現させるためのコンピュータプログラムを格納するメモリと、
を有するコンピュータシステムであって、
前記仮想マシンは、
ロード対象のクラスを受信すると、前記メモリに格納されている前記受信したクラスと該クラスのスーパークラスとに関連するクラス情報の所定のフィールドを設定することによって、前記受信したクラスと該クラスのスーパークラスとをマーク付けするステップと、
前記マーク付けされたクラス情報を参照して、各コンパイル済みのメソッドに関連する従属性情報であって、前記コンパイル済みのメソッドの最適化された全仮想関数コールのクラス、関数名及びタイプシグネチャのリストから構成される前記従属性情報の前記クラスが前記マーク付けされたクラスを含むか判断するステップと、
前記従属性情報の前記クラスが前記マーク付けされたクラスを含むことに応答して、前記従属性情報の関数名及びタイプシグネチャと前記マーク付けされたクラスの仮想関数及びタイプシグネチャとの一致があるか判断するステップと、
前記関数名と前記タイプシグネチャとの一致があることに応答して、前記コンパイル済みのメソッドを逆最適化してインタプリット済み状態に戻すステップと、
を実行するコンピュータシステム。 - 前記クラスに関連するクラス情報は、前記クラス、前記クラスのメソッド、前記メソッドのタイプシグネチャの名前を格納するコンスタントプールを有する、請求項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 (2)
Publication Number | Publication Date |
---|---|
JPH11327906A JPH11327906A (ja) | 1999-11-30 |
JP5129904B2 true 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) |
Families Citing this family (10)
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 |
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
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 | プログラム変換方法 |
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 KR KR1019990009951A patent/KR19990078174A/ko active IP Right Grant
- 1999-03-24 CN CNB2004100399963A patent/CN1287280C/zh not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP0950947A3 (en) | 2000-02-23 |
CN1287280C (zh) | 2006-11-29 |
CN1149477C (zh) | 2004-05-12 |
DE69911104T2 (de) | 2004-07-08 |
JPH11327906A (ja) | 1999-11-30 |
CN1529237A (zh) | 2004-09-15 |
EP0950947B1 (en) | 2003-09-10 |
EP0950947A2 (en) | 1999-10-20 |
CN1235301A (zh) | 1999-11-17 |
DE69911104D1 (de) | 2003-10-16 |
KR19990078174A (ko) | 1999-10-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6704927B1 (en) | Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading | |
US5999732A (en) | Techniques for reducing the cost of dynamic class initialization checks in compiled code | |
US7490320B2 (en) | Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation | |
US6651080B1 (en) | Techniques for implementing pluggable virtual machines | |
US8312439B2 (en) | Inlining native functions into compiled java code | |
US11733985B2 (en) | Accessing a migrated member in an updated type | |
US6295643B1 (en) | Method and apparatus for improving java virtual machine performance using persistent execution information | |
US8156482B2 (en) | System and method for efficiently generating native code calls from byte code in virtual machines | |
US6481006B1 (en) | Method and apparatus for efficient invocation of Java methods from native codes | |
AU774467B2 (en) | Automatic stub/adapter generator | |
US6704926B1 (en) | Bimodal Java just-in-time complier | |
US9250865B2 (en) | Selective speculative class-based optimization | |
US20040083467A1 (en) | System and method for executing intermediate code | |
JP5129904B2 (ja) | 実行時における関数の実行性能を増大させるための方法、計算機システム、実行時における関数の実行性能を増大させるための、コンピュータプログラムを格納するコンピュータ読み取り可能媒体 | |
US6779188B1 (en) | Apparatus and method for improved devirtualization of method calls | |
Kang | Function call interception techniques | |
WO2009076071A2 (en) | Representing pointers and boxing in environments using only reference types | |
US11243876B2 (en) | Techniques for accessing off-heap memory | |
Kågström et al. | Cibyl: an environment for language diversity on mobile devices | |
Puder | Byte code transformations using XSL stylesheets | |
Vilk et al. | The doppio jvm: Building a complete language in the browser | |
Ferreira | THE JEWEL VIRTUAL MACHINE | |
Deacon | A Generic Approach to Object Migration using Specialised Methods | |
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 |