JP2003509761A - オブジェクト指向コンピュータプログラムのロード - Google Patents
オブジェクト指向コンピュータプログラムのロードInfo
- Publication number
- JP2003509761A JP2003509761A JP2001522815A JP2001522815A JP2003509761A JP 2003509761 A JP2003509761 A JP 2003509761A JP 2001522815 A JP2001522815 A JP 2001522815A JP 2001522815 A JP2001522815 A JP 2001522815A JP 2003509761 A JP2003509761 A JP 2003509761A
- Authority
- JP
- Japan
- Prior art keywords
- code
- class
- methods
- execution environment
- program
- 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
Links
- 238000004590 computer program Methods 0.000 title claims abstract description 23
- 238000000034 method Methods 0.000 claims abstract description 171
- 238000004891 communication Methods 0.000 claims abstract description 13
- 230000005540 biological transmission Effects 0.000 claims description 5
- 230000000717 retained effect Effects 0.000 claims 1
- 238000006243 chemical reaction Methods 0.000 description 13
- 230000003068 static effect Effects 0.000 description 13
- 230000008569 process Effects 0.000 description 9
- 238000013459 approach Methods 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 4
- 239000010750 BS 2869 Class C2 Substances 0.000 description 3
- 230000009471 action Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000012937 correction Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 239000010749 BS 2869 Class C1 Substances 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000011230 binding agent Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000014616 translation Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 238000005406 washing Methods 0.000 description 1
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/445—Program loading or initiating
- G06F9/44594—Unloading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- 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/445—Program loading or initiating
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
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)
- Mobile Radio Communication Systems (AREA)
- Multi Processors (AREA)
Abstract
(57)【要約】
オブジェクト指向コンピュータプログラムをロードする方法は、元のプログラムコードを必ずしも保持することなく実行環境ですぐに実行できるように、プログラムをコンパイル済みコードに変換し、そのコードを保持するステップを含む。好ましい実施形態としては、プログラムを実行する前に元のクラスファイルをメモリから破棄する。本発明は、特に、通常使用可能なメモリが限られている携帯電話などの複数のクライアントデバイスで構成される無線通信ネットワークに応用することができる。本発明を使用すると、コンパイル後元のクラスファイルは破棄され、クライアントデバイスのメモリ内に保持する必要がない。
Description
【0001】
本発明は、一般的に、オブジェクト指向コンピュータプログラムをロードする
方法とそのためのコンピュータシステムに関するものである。具体的には、本発
明はコードがクラスファイル形式で提供され、各々が複数の方法を含むオブジェ
クト指向プログラムに関するものであるが、ただしそれに限るわけではない。
方法とそのためのコンピュータシステムに関するものである。具体的には、本発
明はコードがクラスファイル形式で提供され、各々が複数の方法を含むオブジェ
クト指向プログラムに関するものであるが、ただしそれに限るわけではない。
【0002】
オブジェクト指向プログラミング言語のよく知られている例として「Java
(登録商標)」(Sun Microsystems Incの商標)がある。
「Java(登録商標)実装」とは、1つまたは複数のクラスファイルからなる
ソフトウェアアプリケーションを実行できるソフトウェアシステムのことである
。これらのクラスファイルは、Sun Microsystems Inc.が
発行しているJava(登録商標) Virtual Machine Spe
cificationのあるバージョンに適合している必要がある。クラスファ
イルは、特定のクラスに必要なデータおよびプログラムコードを定義する。
(登録商標)」(Sun Microsystems Incの商標)がある。
「Java(登録商標)実装」とは、1つまたは複数のクラスファイルからなる
ソフトウェアアプリケーションを実行できるソフトウェアシステムのことである
。これらのクラスファイルは、Sun Microsystems Inc.が
発行しているJava(登録商標) Virtual Machine Spe
cificationのあるバージョンに適合している必要がある。クラスファ
イルは、特定のクラスに必要なデータおよびプログラムコードを定義する。
【0003】
ある程度対話操作はあるが、Java(登録商標)実装は概念に関して以下の
2つの部分に分けられる。 ・ Java(登録商標) Virtual Machine(JVM)。
クラスファイルを読み込んで、そこに記述されている命令をSunのJava(
登録商標) Virtual Machine Specificationの
あるバージョンに従って実行する。クラスに含まれる命令のうち一部は、他のク
ラスのデータまたはプログラムコードを参照する場合があり、JVMはさらに、
クラス間のそのような関係も管理する。 ・ Java(登録商標) Class Library。 これはデータと
プログラムコードを含む定義済みクラスの集合であり、SunのJava(登録
商標) Class Library Specificationに従って動
作する。これらのライブラリクラスは、実際のクラスファイルと異なる方法、た
とえば、Cまたはアセンブラプログラミング言語を使用して実装することも可能
であり、その場合、JVMではそのデータおよびプログラムコードへの参照が実
際のクラスファイルから派生したクラスの参照と同じように機能することを保証
していなければならない。
2つの部分に分けられる。 ・ Java(登録商標) Virtual Machine(JVM)。
クラスファイルを読み込んで、そこに記述されている命令をSunのJava(
登録商標) Virtual Machine Specificationの
あるバージョンに従って実行する。クラスに含まれる命令のうち一部は、他のク
ラスのデータまたはプログラムコードを参照する場合があり、JVMはさらに、
クラス間のそのような関係も管理する。 ・ Java(登録商標) Class Library。 これはデータと
プログラムコードを含む定義済みクラスの集合であり、SunのJava(登録
商標) Class Library Specificationに従って動
作する。これらのライブラリクラスは、実際のクラスファイルと異なる方法、た
とえば、Cまたはアセンブラプログラミング言語を使用して実装することも可能
であり、その場合、JVMではそのデータおよびプログラムコードへの参照が実
際のクラスファイルから派生したクラスの参照と同じように機能することを保証
していなければならない。
【0004】
クラスファイル内のプログラムコードは、Java(登録商標)バイトコード
(JBC)または単にバイトコードと呼ばれる命令形式である。クラス内の各メ
ソッドは、バイトコードの固有の並びを持つ。メソッドのバイトコードは、JB
C命令の並びである。
(JBC)または単にバイトコードと呼ばれる命令形式である。クラス内の各メ
ソッドは、バイトコードの固有の並びを持つ。メソッドのバイトコードは、JB
C命令の並びである。
【0005】
JVMがバイトコードの実行に使用する方式は次の2種類がある。
・ インタプリタ。 この方式では、JVMは、各JBC命令を順番に見てデ
コードし、その命令が要求するアクションを実行することによりバイトコードを
実行するプログラムコード断片であるインタプリタを内蔵している。この方式は
実装が最も簡単であるが、欠点は、単一のJBC命令を解釈するのにインタプリ
タプログラムの多数のステップを必要とするため、他の方法に比べて遅いという
点である。 ・ コンパイラ。 この方式では、実行を開始する前に、JVMは、バイトコ
ードのJBC命令を稼動しているCPUが理解できるマシンコード命令(ネイテ
ィブマシンコード(native machine code))に変換する。
次に、メソッドのプログラムコードを実行する際に、代わりにコンパイルされた
マシンコードが実行される。JBC命令からマシンコード命令に最初にコンパイ
ルするのに時間がかかるというオーバーヘッドがあるが、アプリケーションを起
動するときではなくアプリケーションを準備しているとき、この作業を実行でき
る。コンパイルの実行が完了すると、メソッドのプログラムコードの実行が高速
化され、Cなど他の従来のコンパイル型言語に匹敵する速度が得られる。コンパ
イラ方式の特別なケースとして、ジャストインタイムコンパイラ(just−i
n−time compiler)(JIT)があり、クラスのバイトコードを
最初に使用する直前にコンパイルする方法である。
コードし、その命令が要求するアクションを実行することによりバイトコードを
実行するプログラムコード断片であるインタプリタを内蔵している。この方式は
実装が最も簡単であるが、欠点は、単一のJBC命令を解釈するのにインタプリ
タプログラムの多数のステップを必要とするため、他の方法に比べて遅いという
点である。 ・ コンパイラ。 この方式では、実行を開始する前に、JVMは、バイトコ
ードのJBC命令を稼動しているCPUが理解できるマシンコード命令(ネイテ
ィブマシンコード(native machine code))に変換する。
次に、メソッドのプログラムコードを実行する際に、代わりにコンパイルされた
マシンコードが実行される。JBC命令からマシンコード命令に最初にコンパイ
ルするのに時間がかかるというオーバーヘッドがあるが、アプリケーションを起
動するときではなくアプリケーションを準備しているとき、この作業を実行でき
る。コンパイルの実行が完了すると、メソッドのプログラムコードの実行が高速
化され、Cなど他の従来のコンパイル型言語に匹敵する速度が得られる。コンパ
イラ方式の特別なケースとして、ジャストインタイムコンパイラ(just−i
n−time compiler)(JIT)があり、クラスのバイトコードを
最初に使用する直前にコンパイルする方法である。
【0006】
一部のJVMでは、この2つの方式を組み合わせて使用し、何回も実行される
プログラムコードのみをコンパイルし、残りをインタプリタで解釈実行する。
プログラムコードのみをコンパイルし、残りをインタプリタで解釈実行する。
【0007】
リンクというのは、あるクラスC1から他のクラスC2(またはC2内のデー
タまたはメソッド)への参照を解決するプロセスである。C2がすでにロードさ
れていなければ、ロードし、コンパイラ方式を使用している場合にはコンパイル
し、自動的にリンクする。次に、C1からC2(またはC2内のデータまたはメ
ソッドの何らかのアイテム)への参照を修正し、C2内の参照されているものへ
の直接ポインタとなるようにする。
タまたはメソッド)への参照を解決するプロセスである。C2がすでにロードさ
れていなければ、ロードし、コンパイラ方式を使用している場合にはコンパイル
し、自動的にリンクする。次に、C1からC2(またはC2内のデータまたはメ
ソッドの何らかのアイテム)への参照を修正し、C2内の参照されているものへ
の直接ポインタとなるようにする。
【0008】
SunのJava(登録商標) Virtual Machine Spec
ificationでは、次のようないくつかのリンク方式が可能である。 ・ スタティックリンク(Static linking):アプリケーショ
ンのすべてのクラスのロードおよびリンクは、アプリケーションの準備で実行さ
れる。この方式は通常、アプリケーションがデバイス内に永久的に埋め込まれる
とき使用される。 ・ ロード時ダイナミックリンク(Dynamic load time l
inking):クラスC2は、C2(またはC2内の何らかのデータアイテム
またはメソッド)を参照している他のクラスを初めてロードするときにロードさ
れる。 ・ 遅延ダイナミックバインディング(Dynamic late bind
ing):クラスC2は、C2(またはC2内の何らかのデータアイテムまたは
メソッド)を参照しているJBC命令(またはそのコンパイルされた等価物)が
初めて実行されるときにロードされる。
ificationでは、次のようないくつかのリンク方式が可能である。 ・ スタティックリンク(Static linking):アプリケーショ
ンのすべてのクラスのロードおよびリンクは、アプリケーションの準備で実行さ
れる。この方式は通常、アプリケーションがデバイス内に永久的に埋め込まれる
とき使用される。 ・ ロード時ダイナミックリンク(Dynamic load time l
inking):クラスC2は、C2(またはC2内の何らかのデータアイテム
またはメソッド)を参照している他のクラスを初めてロードするときにロードさ
れる。 ・ 遅延ダイナミックバインディング(Dynamic late bind
ing):クラスC2は、C2(またはC2内の何らかのデータアイテムまたは
メソッド)を参照しているJBC命令(またはそのコンパイルされた等価物)が
初めて実行されるときにロードされる。
【0009】
動作中、特定のクラスの特定のメソッドが呼び出されたときに、必要とされる
特定のクラスがJVM内のすでに常駐している場合も常駐していない場合もある
。必要なクラスが常駐していない場合、そのクラスのクラスファイルをまずJV
M外から(たとえば、ディスクまたはネットワークから)ロードし、リンクし、
初期化してJVM内に配置する必要がある。次に、必要なメソッドを見つけるた
めに、そのクラスについてメソッドのリストを検索する。必要なメソッドが見つ
かったら、そのメソッドのJava(登録商標)バイトコードを実行し、ret
urn命令が出現したら、そこでそのメソッドを終了し、制御をそのメソッドの
呼び出し元に返す。メソッドの呼び出しは、メソッドで捕らえられない例外が投
げられた場合も終了する。
特定のクラスがJVM内のすでに常駐している場合も常駐していない場合もある
。必要なクラスが常駐していない場合、そのクラスのクラスファイルをまずJV
M外から(たとえば、ディスクまたはネットワークから)ロードし、リンクし、
初期化してJVM内に配置する必要がある。次に、必要なメソッドを見つけるた
めに、そのクラスについてメソッドのリストを検索する。必要なメソッドが見つ
かったら、そのメソッドのJava(登録商標)バイトコードを実行し、ret
urn命令が出現したら、そこでそのメソッドを終了し、制御をそのメソッドの
呼び出し元に返す。メソッドの呼び出しは、メソッドで捕らえられない例外が投
げられた場合も終了する。
【0010】
図1は、JVMでJITコンパイラを使用する代表的な従来技術による実装を
示している。JITコンパイラ120は、使用する直前にクラスバイトコード1
10を取り出し、特定のプロセッサ上で実行できるようにネイティブコード13
0に変換する。クラス140の残り(または場合によってはクラス全体)は、実
行中にネイティブコード130がそれを参照する必要があればメモリ内に利用で
きる形で配置されたままになる。通常、参照する必要があると考えられるクラス
の残りとしては、データフィールドのテーブルや定数プールなどがある。スタテ
ィックリンクを使用する場合、アプリケーションの準備が行われているときにロ
ードと場合によってはコンパイルの一部または全部が実行される。またしても、
ネイティブコードでデータフィールドのテーブルおよび定数プールを参照できる
ように元のクラスファイル(またはその一部)がメモリ内に留まる必要がある。
示している。JITコンパイラ120は、使用する直前にクラスバイトコード1
10を取り出し、特定のプロセッサ上で実行できるようにネイティブコード13
0に変換する。クラス140の残り(または場合によってはクラス全体)は、実
行中にネイティブコード130がそれを参照する必要があればメモリ内に利用で
きる形で配置されたままになる。通常、参照する必要があると考えられるクラス
の残りとしては、データフィールドのテーブルや定数プールなどがある。スタテ
ィックリンクを使用する場合、アプリケーションの準備が行われているときにロ
ードと場合によってはコンパイルの一部または全部が実行される。またしても、
ネイティブコードでデータフィールドのテーブルおよび定数プールを参照できる
ように元のクラスファイル(またはその一部)がメモリ内に留まる必要がある。
【0011】
図3は、マルチプロセッサ環境の代表的な従来技術によるJVM実装を示して
いる。サーバ210は、クライアントプロセッサ230、240で必要になるさ
まざまなクラスのバイトコードを保持するためクラスストア(class st
ore)220を維持する。クラスストア220内には、中に複数の個別メソッ
ド212を含む代表的なJava(登録商標)クラス211が示されている。
いる。サーバ210は、クライアントプロセッサ230、240で必要になるさ
まざまなクラスのバイトコードを保持するためクラスストア(class st
ore)220を維持する。クラスストア220内には、中に複数の個別メソッ
ド212を含む代表的なJava(登録商標)クラス211が示されている。
【0012】
サーバ210は、250で一般に示されている通信ネットワーク上で必要に応
じてクラスファイル211をクライアント230、240に送る。この例では、
プロセッサ230、240は2つの異なるタイプ、つまりそれぞれクライアント
タイプ1とクライアントタイプ2である。クライアントはそれぞれ独自のJIT
、それぞれ231、241を維持し、受け取ったクラスファイル211をコンパ
イルしてネイティブコード233、243のそれぞれの独自のバージョンにし、
それを独自のネイティブコードストア232、242に保存することができる。
さらに、図1を参照してすでに説明したように、ローカルプロセッサ上で実行さ
れている間にネイティブコード233、243で参照する必要がある場合、クラ
スファイル211の残り(または場合によってはクラスファイル全体)が、23
4、244で一般的に示されているように、ローカルメモリ内に留まることにな
る。
じてクラスファイル211をクライアント230、240に送る。この例では、
プロセッサ230、240は2つの異なるタイプ、つまりそれぞれクライアント
タイプ1とクライアントタイプ2である。クライアントはそれぞれ独自のJIT
、それぞれ231、241を維持し、受け取ったクラスファイル211をコンパ
イルしてネイティブコード233、243のそれぞれの独自のバージョンにし、
それを独自のネイティブコードストア232、242に保存することができる。
さらに、図1を参照してすでに説明したように、ローカルプロセッサ上で実行さ
れている間にネイティブコード233、243で参照する必要がある場合、クラ
スファイル211の残り(または場合によってはクラスファイル全体)が、23
4、244で一般的に示されているように、ローカルメモリ内に留まることにな
る。
【0013】
他の従来技術の配置(図には示されていない)では、クライアントのJIT
231、241はサーバ210上に維持することができ、ネイティブコードへの
変換はクライアント230、240ではなくそこで実行される。
231、241はサーバ210上に維持することができ、ネイティブコードへの
変換はクライアント230、240ではなくそこで実行される。
【0014】
従来技術の配置にはいくつかの欠点がある。
【0015】
まず、それぞれの場合に、クライアントごとに大きな実行環境が必要になると
いう点である。さらに、Java(登録商標)クラスファイル211またはネイ
ティブバージョン233、243のいずれかがクラスファイルの残り234、2
44とともに、通信ネットワーク250上で送信され、クライアントメモリ内に
留まる必要がある。実際に、いずれの方式も満足なものではなく、特に、クラス
ファイルは通常大きいので携帯電話ネットワークなどの無線クライアントネット
ワークが利用される状況では不十分である。
いう点である。さらに、Java(登録商標)クラスファイル211またはネイ
ティブバージョン233、243のいずれかがクラスファイルの残り234、2
44とともに、通信ネットワーク250上で送信され、クライアントメモリ内に
留まる必要がある。実際に、いずれの方式も満足なものではなく、特に、クラス
ファイルは通常大きいので携帯電話ネットワークなどの無線クライアントネット
ワークが利用される状況では不十分である。
【0016】
本発明の第1の態様によれば、それぞれが複数のメソッドを含むクラスの形で
提供されるプログラムコードからなるオブジェクト指向コンピュータプログラム
をロードする方法を提供し、前記複数のメソッドは必ずしも前記クラスのプログ
ラムコードを保持しない実行環境ですぐに実行できるようにクラスのメソッドを
コンパイル済みコードにコンパルするステップとそのコードを保持するステップ
を備える。通常、必ずというわけではないが、それぞれのクラスは個々のクラス
ファイルにより定義され、その場合、本発明では、実行環境が必ずしも元のクラ
スファイルを保持する必要がないと規定する。
提供されるプログラムコードからなるオブジェクト指向コンピュータプログラム
をロードする方法を提供し、前記複数のメソッドは必ずしも前記クラスのプログ
ラムコードを保持しない実行環境ですぐに実行できるようにクラスのメソッドを
コンパイル済みコードにコンパルするステップとそのコードを保持するステップ
を備える。通常、必ずというわけではないが、それぞれのクラスは個々のクラス
ファイルにより定義され、その場合、本発明では、実行環境が必ずしも元のクラ
スファイルを保持する必要がないと規定する。
【0017】
元のクラスおよび/またはクラスファイルを表すプログラムコードは本発明で
は、コンパイル済みコードを実行環境で実行するためには必要でない。
は、コンパイル済みコードを実行環境で実行するためには必要でない。
【0018】
好ましい実施形態では、コンパイルは2つのステップからなるプロセスで進行
する。第1のステップで、プログラムコード(たとえば、クラスのバイトコード
)が、仮想プロセッサの命令セットを使用する仮想プロセッサコードに変換され
る。第2のステップで、仮想プロセッサコードは、実際の物理的プロセッサの命
令セットを使用するネイティブコードに変換される。
する。第1のステップで、プログラムコード(たとえば、クラスのバイトコード
)が、仮想プロセッサの命令セットを使用する仮想プロセッサコードに変換され
る。第2のステップで、仮想プロセッサコードは、実際の物理的プロセッサの命
令セットを使用するネイティブコードに変換される。
【0019】
本発明の様々な態様では、万一実行アプリケーションによって必要とされる場
合に備えて元のクラスファイルをメモリに保持しておく必要がないためメモリ利
用度が改善される。上述の2段階変換プロセスを使用することにより、アプリケ
ーションプログラマは、高級プログラム言語(Java(登録商標)など)でプ
ログラムを設計することができ、しかも、通常大きいJava(登録商標)クラ
スファイルのサイズを気にせずに済む。本発明の好ましい実施形態では、アプリ
ケーションをJava(登録商標)などのメモリ集約的な高級プログラミング言
語で書くことができるが、それと同時に、できあがったプログラムを極わずかな
メモリ内で実行することができる。これは、アプリケーションを、たとえば携帯
電話、携帯型コンピュータ、ゲームコンソールなどの組み込み型システムで使用
する際に特に有用である。
合に備えて元のクラスファイルをメモリに保持しておく必要がないためメモリ利
用度が改善される。上述の2段階変換プロセスを使用することにより、アプリケ
ーションプログラマは、高級プログラム言語(Java(登録商標)など)でプ
ログラムを設計することができ、しかも、通常大きいJava(登録商標)クラ
スファイルのサイズを気にせずに済む。本発明の好ましい実施形態では、アプリ
ケーションをJava(登録商標)などのメモリ集約的な高級プログラミング言
語で書くことができるが、それと同時に、できあがったプログラムを極わずかな
メモリ内で実行することができる。これは、アプリケーションを、たとえば携帯
電話、携帯型コンピュータ、ゲームコンソールなどの組み込み型システムで使用
する際に特に有用である。
【0020】
本発明は、多数の異なるリンク方式、たとえばスタティックリンク、ロード時
ダイナミックリンク、および遅延ダイナミックバインディングなどとともに使用
できる。
ダイナミックリンク、および遅延ダイナミックバインディングなどとともに使用
できる。
【0021】
本発明の他の態様によれば、それぞれが複数のメソッドを含むクラスの形で提
供されるコードからなるオブジェクト指向コンピュータプログラムをロードする
コンピュータシステムを提供し、前記システムは実行環境を定義し、さらに必ず
しも前記クラスのプログラムコードを保持しない実行環境ですぐに実行できるよ
うにクラスのメソッドをコンパイル済みコードにコンパルしそのコンパイル済み
コードを保持する動作が可能である。
供されるコードからなるオブジェクト指向コンピュータプログラムをロードする
コンピュータシステムを提供し、前記システムは実行環境を定義し、さらに必ず
しも前記クラスのプログラムコードを保持しない実行環境ですぐに実行できるよ
うにクラスのメソッドをコンパイル済みコードにコンパルしそのコンパイル済み
コードを保持する動作が可能である。
【0022】
本発明の他の態様によれば、伝送手段を介して複数のクライアントデバイスと
通信するサーバーを備える分散コンピュータシステムを提供し、それぞれのクラ
イアントデバイスは、複数のメソッドをそれぞれが含むクラスの形で提供される
プログラムコードを含むオブジェクト指向コンピュータプログラムを実行するた
めのそれぞれの実行環境を持ち、前記システムは、 (a)プログラムコードをコンパイル済みコードにコンパイルする手段と、 (b)クライアントデバイスの1つで実行するためにいずれかのクラスのメソ
ッドのうちから1つ選択する手段と、 (c)選択したクラスのプログラムコードを必ずしも送信することなく、コン
パイル済みコードをサーバから前記クライアントデバイスに送信する手段を備え
る。
通信するサーバーを備える分散コンピュータシステムを提供し、それぞれのクラ
イアントデバイスは、複数のメソッドをそれぞれが含むクラスの形で提供される
プログラムコードを含むオブジェクト指向コンピュータプログラムを実行するた
めのそれぞれの実行環境を持ち、前記システムは、 (a)プログラムコードをコンパイル済みコードにコンパイルする手段と、 (b)クライアントデバイスの1つで実行するためにいずれかのクラスのメソ
ッドのうちから1つ選択する手段と、 (c)選択したクラスのプログラムコードを必ずしも送信することなく、コン
パイル済みコードをサーバから前記クライアントデバイスに送信する手段を備え
る。
【0023】
本発明の他の態様によれば、複数のメソッドをそれぞれが含むクラスの形で提
供されるプログラムコードを含むオブジェクト指向コンピュータプログラムを複
数のクライアントデバイスにロードするためのコンピュータシステムを提供し、
前記各デバイスはそれぞれの実行環境を備え、前記システムは、 (a)選択したクラスの選択したメソッドをコンパイル済みコードにコンパイ
ルする手段と、 (b)プログラムコードを実行環境に必ずしもロードすることなく、実行可状
態にあるコンパイル済みコードをそれぞれの実行環境にロードする手段を備える
。
供されるプログラムコードを含むオブジェクト指向コンピュータプログラムを複
数のクライアントデバイスにロードするためのコンピュータシステムを提供し、
前記各デバイスはそれぞれの実行環境を備え、前記システムは、 (a)選択したクラスの選択したメソッドをコンパイル済みコードにコンパイ
ルする手段と、 (b)プログラムコードを実行環境に必ずしもロードすることなく、実行可状
態にあるコンパイル済みコードをそれぞれの実行環境にロードする手段を備える
。
【0024】
本発明のこの態様では、アプリケーションプログラムを複数の個別クライアン
トデバイス、たとえば携帯電話に多重アップロードすることができる。コンパイ
ル済みコードを電話のメモリにアップロードするが、元のクラスファイルまたは
プログラムコードをアップロードする必要はない。
トデバイス、たとえば携帯電話に多重アップロードすることができる。コンパイ
ル済みコードを電話のメモリにアップロードするが、元のクラスファイルまたは
プログラムコードをアップロードする必要はない。
【0025】
本発明の他の態様によれば、複数のメソッドをそれぞれが含むクラスの形で提
供されるコードを含むオブジェクト指向コンピュータプログラムをロードする方
法を提供し、前記方法は、 (a)実行するためいずれかのクラスのメソッドのうちから1つ選択するステ
ップと、 (b)選択したクラス全体を実行環境に必ずしもロードすることなく、選択し
たメソッドを実行環境にロードするステップを含む。
供されるコードを含むオブジェクト指向コンピュータプログラムをロードする方
法を提供し、前記方法は、 (a)実行するためいずれかのクラスのメソッドのうちから1つ選択するステ
ップと、 (b)選択したクラス全体を実行環境に必ずしもロードすることなく、選択し
たメソッドを実行環境にロードするステップを含む。
【0026】
本発明の方法は、Java(登録商標)仮想マシン(JVM)の動的機能すべ
てを実装するが、従来の方式に比べて使用メモリが非常に低減されている。
てを実装するが、従来の方式に比べて使用メモリが非常に低減されている。
【0027】
本発明の好ましい実施形態では、通信ネットワーク間でのバインド/リンク、
ロード、コンパイル、および送信を細かな粒度で制御できる。より具体的には、
粒度は、従来のオブジェクト指向システムの場合のようなクラスレベルではなく
メソッド/ツールレベルである。本発明は、Java(登録商標)仮想マシン(
JVM)環境に特に適用できるが、それに限るわけではない。本発明は、全部の
JVMリンク方式、つまりスタティックリンク、ロード時ダイナミックリンク、
および遅延ダイナミックバインディングに対応する。本発明の好ましい実施形態
の具体的応用分野として、無線通信(無線クライアントネットワーク)、および
特にただしそれに限るわけではないが携帯電話ネットワークがある。本発明は、
さらに、他の組み込みデバイス、好ましくはネットワーク接続デバイス、たとえ
ば(これに限るわけではないが)携帯型コンピュータ、ゲームコンソール、カメ
ラ、さらには他のどのようなタイプのネットワーク接続またはネットワーク接続
可能デバイスにも適用できる。一実施形態では、システムは無線ネットワークか
らなる、あるいは無線ネットワークを含むが、他の実施形態では、プライベート
またはパブリック固定ネットワークまたはインターネットを含むことができる。
クライアントデバイスが無線通信を利用できない場合、必要に応じてインターネ
ットに結合する手段を備えることもできる(たとえば、標準モデムやISDNリ
ンクを介して)。このような方法で、本発明は、さまざまな組み込みデバイス、
たとえば、カメラ、テレビ、洗濯機、自動車、さらに事実上考え得るどのような
タイプのコンピュータ操作デバイスにも適用可能と思われる。
ロード、コンパイル、および送信を細かな粒度で制御できる。より具体的には、
粒度は、従来のオブジェクト指向システムの場合のようなクラスレベルではなく
メソッド/ツールレベルである。本発明は、Java(登録商標)仮想マシン(
JVM)環境に特に適用できるが、それに限るわけではない。本発明は、全部の
JVMリンク方式、つまりスタティックリンク、ロード時ダイナミックリンク、
および遅延ダイナミックバインディングに対応する。本発明の好ましい実施形態
の具体的応用分野として、無線通信(無線クライアントネットワーク)、および
特にただしそれに限るわけではないが携帯電話ネットワークがある。本発明は、
さらに、他の組み込みデバイス、好ましくはネットワーク接続デバイス、たとえ
ば(これに限るわけではないが)携帯型コンピュータ、ゲームコンソール、カメ
ラ、さらには他のどのようなタイプのネットワーク接続またはネットワーク接続
可能デバイスにも適用できる。一実施形態では、システムは無線ネットワークか
らなる、あるいは無線ネットワークを含むが、他の実施形態では、プライベート
またはパブリック固定ネットワークまたはインターネットを含むことができる。
クライアントデバイスが無線通信を利用できない場合、必要に応じてインターネ
ットに結合する手段を備えることもできる(たとえば、標準モデムやISDNリ
ンクを介して)。このような方法で、本発明は、さまざまな組み込みデバイス、
たとえば、カメラ、テレビ、洗濯機、自動車、さらに事実上考え得るどのような
タイプのコンピュータ操作デバイスにも適用可能と思われる。
【0028】
本発明の一利点は、無線クライアントネットワークに適用したときに、(メソ
ッド/ツールの)個々の送信の時間が、クラスファイル全部をダウンロードする
必要のある従来のシステムに比べて著しく短縮されるという点である。つまり、
ネットワークプロバイダは、ネットワークの仮想回線を長時間開いたままにする
必要がないということである。送信する小さな各メソッド/ツールは、必要なら
ば、別のルートに送ることもできる。さらに、送信する異なるデータチャンクの
サイズが小さいため、冗長性および誤り訂正が少なくて済む。したがって、ネッ
トワーク上の負荷は、単にデータ転送速度を考慮して期待した以上に軽減される
場合がある。
ッド/ツールの)個々の送信の時間が、クラスファイル全部をダウンロードする
必要のある従来のシステムに比べて著しく短縮されるという点である。つまり、
ネットワークプロバイダは、ネットワークの仮想回線を長時間開いたままにする
必要がないということである。送信する小さな各メソッド/ツールは、必要なら
ば、別のルートに送ることもできる。さらに、送信する異なるデータチャンクの
サイズが小さいため、冗長性および誤り訂正が少なくて済む。したがって、ネッ
トワーク上の負荷は、単にデータ転送速度を考慮して期待した以上に軽減される
場合がある。
【0029】
本発明の好ましい実施形態は、実行前に(解釈実行するのではなく)コンパイ
ルするオブジェクト指向コンピュータプログラムでの使用に特に適用できる。本
発明を分散コンピュータシステムのコンテキストで使用する場合、個々のメソッ
ドをネットワーク経由でクライアントデバイスに送信する前または後にコンパイ
ルすることができる。
ルするオブジェクト指向コンピュータプログラムでの使用に特に適用できる。本
発明を分散コンピュータシステムのコンテキストで使用する場合、個々のメソッ
ドをネットワーク経由でクライアントデバイスに送信する前または後にコンパイ
ルすることができる。
【0030】
本発明は仮想プロセッサの命令セットを使用する複数の仮想プロセッサツール
にクラスを変換する予備的なステップを含むのが好ましい。次に、実行のためメ
ソッドの1つを選択するステップに、仮想プロセッサツールの1つを選択するス
テップを含めることができる。ネットワーク接続されたシステムのコンテキスト
で使用する場合、仮想プロセッサツールをネットワーク上で個別にクライアント
デバイスに送信するか、またはそれとは別に、個の仮想プロセッサツールをまず
最初にコンパイルし、それからネイティブのコンパイル済みコードをネットワー
クで送信することができる。
にクラスを変換する予備的なステップを含むのが好ましい。次に、実行のためメ
ソッドの1つを選択するステップに、仮想プロセッサツールの1つを選択するス
テップを含めることができる。ネットワーク接続されたシステムのコンテキスト
で使用する場合、仮想プロセッサツールをネットワーク上で個別にクライアント
デバイスに送信するか、またはそれとは別に、個の仮想プロセッサツールをまず
最初にコンパイルし、それからネイティブのコンパイル済みコードをネットワー
クで送信することができる。
【0031】
本発明はさらに、前述のメソッドを実行するように改造したコンピュータシス
テムにも拡大適用される。
テムにも拡大適用される。
【0032】
本発明はさらに、それぞれが複数のメソッドを含むクラスの形で提供されるコ
ードを含むオブジェクト指向コンピュータプログラムをロードかつ/または実行
するコンピュータシステムに拡大適用され、前記システムは実行環境を定義し、
実行のためいずれかのクラスのメソッドの1つを選択し、選択したクラスの全体
を実行環境に必ずしもロードせずに、選択したメソッドを実行環境にロードする
ように動作が可能である。
ードを含むオブジェクト指向コンピュータプログラムをロードかつ/または実行
するコンピュータシステムに拡大適用され、前記システムは実行環境を定義し、
実行のためいずれかのクラスのメソッドの1つを選択し、選択したクラスの全体
を実行環境に必ずしもロードせずに、選択したメソッドを実行環境にロードする
ように動作が可能である。
【0033】
本発明の他の態様によれば、伝送手段を介して複数のクライアントデバイスと
通信するサーバーを備える分散コンピュータシステムを提供し、それぞれのクラ
イアントデバイスは、複数のメソッドをそれぞれが含むクラスの形で提供される
コードを含むオブジェクト指向コンピュータプログラムを実行するためのそれぞ
れの実行環境を持ち、前記システムは、 (a)クライアントデバイスの1つで実行するためにいずれかのクラスのメソ
ッドのうちから1つ選択する手段と、 (b)選択したクラス全体を前記実行環境に必ずしもロードせずに、選択した
メソッドを前記クライアントデバイス内の実行環境にロードする手段を備える。
通信するサーバーを備える分散コンピュータシステムを提供し、それぞれのクラ
イアントデバイスは、複数のメソッドをそれぞれが含むクラスの形で提供される
コードを含むオブジェクト指向コンピュータプログラムを実行するためのそれぞ
れの実行環境を持ち、前記システムは、 (a)クライアントデバイスの1つで実行するためにいずれかのクラスのメソ
ッドのうちから1つ選択する手段と、 (b)選択したクラス全体を前記実行環境に必ずしもロードせずに、選択した
メソッドを前記クライアントデバイス内の実行環境にロードする手段を備える。
【0034】
本発明は、オブジェクト指向コンピュータプログラムの方法と装置に拡大適用
されるだけでなく、そのようなプログラムのコンパイル、そのようなプログラム
の結合、そのようなプログラムの実行、およびそのようなプログラムの送信を通
信ネットワーク上で実行するための方法と装置にも拡大適用される。
されるだけでなく、そのようなプログラムのコンパイル、そのようなプログラム
の結合、そのようなプログラムの実行、およびそのようなプログラムの送信を通
信ネットワーク上で実行するための方法と装置にも拡大適用される。
【0035】
最後に、本発明はさらに、データキャリア上で実装されているいないに関係な
く、説明したメソッドのいずれかを実装するコンピュータプログラムにも拡大適
用される。さらに、説明したメソッドを実行するコンピュータプログラムを表す
データストリームにも拡大適用される。
く、説明したメソッドのいずれかを実装するコンピュータプログラムにも拡大適
用される。さらに、説明したメソッドを実行するコンピュータプログラムを表す
データストリームにも拡大適用される。
【0036】
「コード」という単語を説明と請求項で使用している場合、これはデータがプ
ログラム自体の一部であるデータを含むことは理解されるであろう。したがって
、制限することなく、「コード」という表現は定数、変数名および型、フラグ、
ポインタ、オブジェクト名などを含む。
ログラム自体の一部であるデータを含むことは理解されるであろう。したがって
、制限することなく、「コード」という表現は定数、変数名および型、フラグ、
ポインタ、オブジェクト名などを含む。
【0037】
本発明は、さまざまな方法で実施することができ、また添付図面を参照しなが
ら例を用いて特定の一実施形態を説明する。
ら例を用いて特定の一実施形態を説明する。
【0038】
図面の簡単な説明で説明されている図1は、JVM内のJITコンパイラがプ
ロセッサ独立のバイトコードからプロセッサ依存のネイティブコードに変換し、
特定のプロセッサ上で実行する方法を示している。このような従来技術の方式で
は、クラス140の残り(または場合によってはクラス全体)を、実行中にネイ
ティブコード130がそれを参照する必要があればメモリ内に保持する必要があ
る。図7に概略が示されている本発明の好ましい実施形態は、別の方式をとる。
ここで、クラスバイトコード710は、コンパイラ720によりネイティブコー
ド730に変換される。コンパイラは、定数プール内のデータを含めて、元のク
ラスバイトコードファイルの必要な部分すべてをネイティブに変換する。ネイテ
ィブコード730は、それ自体完結しており、実行時に元のクラスの一部を参照
する必要はない。したがって、コンパイラ720は、矢印740で概略が示され
ているようにメモリからクラス全体(つまり、元のクラスファイルの全体)を破
棄することができる。
ロセッサ独立のバイトコードからプロセッサ依存のネイティブコードに変換し、
特定のプロセッサ上で実行する方法を示している。このような従来技術の方式で
は、クラス140の残り(または場合によってはクラス全体)を、実行中にネイ
ティブコード130がそれを参照する必要があればメモリ内に保持する必要があ
る。図7に概略が示されている本発明の好ましい実施形態は、別の方式をとる。
ここで、クラスバイトコード710は、コンパイラ720によりネイティブコー
ド730に変換される。コンパイラは、定数プール内のデータを含めて、元のク
ラスバイトコードファイルの必要な部分すべてをネイティブに変換する。ネイテ
ィブコード730は、それ自体完結しており、実行時に元のクラスの一部を参照
する必要はない。したがって、コンパイラ720は、矢印740で概略が示され
ているようにメモリからクラス全体(つまり、元のクラスファイルの全体)を破
棄することができる。
【0039】
コンパイラ720は、スタティックリンク、ロード時ダイナミックリンク、ま
たは遅延ダイナミックバインドを実行するように配列することができる。クラス
を直接ネイティブコードに変換したり、それとは別に、以下で説明するように、
2段階で変換を実行することができる。
たは遅延ダイナミックバインドを実行するように配列することができる。クラス
を直接ネイティブコードに変換したり、それとは別に、以下で説明するように、
2段階で変換を実行することができる。
【0040】
本発明では、バイトコードからネイティブコードへの変換は次のように2つの
異なる段階に分けて実行するのが好ましい。 1.クラスファイルを中間プロセッサ独立形式に変換するステップ。これは仮
想プロセッサまたはVPコードと呼ばれる。コンバータ自体は、好ましい実装で
は「jcodeトランスレータ」と呼ばれている。 2.中間VP形式からネイティブマシンコードに変換するステップ。コンバー
タはここでは、「ネイティブトランスレータ」と呼ばれる。
異なる段階に分けて実行するのが好ましい。 1.クラスファイルを中間プロセッサ独立形式に変換するステップ。これは仮
想プロセッサまたはVPコードと呼ばれる。コンバータ自体は、好ましい実装で
は「jcodeトランスレータ」と呼ばれている。 2.中間VP形式からネイティブマシンコードに変換するステップ。コンバー
タはここでは、「ネイティブトランスレータ」と呼ばれる。
【0041】
図2は、クラスバイトコードからネイティブコードへの変換を詳細に示す。ク
ラスバイトコード210は、クラスベリファイヤ(class verifie
r)211により最初に妥当性の確認が行われる。これは、個々のバイト自体を
チェックするだけでなく、有効な外部および内部参照もチェックする。クラスベ
リファイヤは、必要ならば、追加クラスをロードし、外部参照をチェックする。
ラスバイトコード210は、クラスベリファイヤ(class verifie
r)211により最初に妥当性の確認が行われる。これは、個々のバイト自体を
チェックするだけでなく、有効な外部および内部参照もチェックする。クラスベ
リファイヤは、必要ならば、追加クラスをロードし、外部参照をチェックする。
【0042】
コードは、チェックが済むと、jcodeトランスレータ212に渡され、そ
こで、以下に詳述するように、VPコード213に変換される。VPコード21
3は、ネイティブトランスレータ214によってネイティブコード230に変換
される。
こで、以下に詳述するように、VPコード213に変換される。VPコード21
3は、ネイティブトランスレータ214によってネイティブコード230に変換
される。
【0043】
クラスベリファイヤ211、jcodeトランスレータ212、VPコード2
13がすべてプロセッサ独立であることを理解することが重要であり、これはネ
イティブトランスレータ214のみであり、もちろんプロセッサ固有の最終ネイ
ティブコード230である。
13がすべてプロセッサ独立であることを理解することが重要であり、これはネ
イティブトランスレータ214のみであり、もちろんプロセッサ固有の最終ネイ
ティブコード230である。
【0044】
図2の右側には、変換プロセスで操作されているオブジェクトの概略表現が示
されている。プロセスは、複数の個別メソッド202を含むJava(登録商標
)クラスファイル201の形のクラスバイトコードから始まる。jcodeトラ
ンスレータは、クラスファイルを複数の個々の仮想プロセッサツール203に変
換する。実行するアプリケーションに応じて、必要な仮想プロセッサツール20
3を選択し、それらの選択したツール(およびそれらのツールのみ)がネイティ
ブトランスレータによって個々のネイティブメソッド204に変換される。元の
クラスファイル全体201が必ずしもネイティブトランスレータ214に渡され
るわけではなく、実際にアプリケーションによって必要とされる仮想プロセッサ
ツール203のみが変換され、最終的にクライアント上で実行できるように格納
されることを理解することが重要である。変換プロセスが完了したら、クラスフ
ァイル201全体だけでなくVPツール203もメモリから破棄される。個々の
ネイティブメソッド204のみが残るため、メモリ利用効率が非常に高い。
されている。プロセスは、複数の個別メソッド202を含むJava(登録商標
)クラスファイル201の形のクラスバイトコードから始まる。jcodeトラ
ンスレータは、クラスファイルを複数の個々の仮想プロセッサツール203に変
換する。実行するアプリケーションに応じて、必要な仮想プロセッサツール20
3を選択し、それらの選択したツール(およびそれらのツールのみ)がネイティ
ブトランスレータによって個々のネイティブメソッド204に変換される。元の
クラスファイル全体201が必ずしもネイティブトランスレータ214に渡され
るわけではなく、実際にアプリケーションによって必要とされる仮想プロセッサ
ツール203のみが変換され、最終的にクライアント上で実行できるように格納
されることを理解することが重要である。変換プロセスが完了したら、クラスフ
ァイル201全体だけでなくVPツール203もメモリから破棄される。個々の
ネイティブメソッド204のみが残るため、メモリ利用効率が非常に高い。
【0045】
図4は、異機種マルチプロセッサ環境内で好ましい実施形態を使用する状況の
概略を示す。これは、図3に示されている対応する従来技術の方式と比較すべき
である。
概略を示す。これは、図3に示されている対応する従来技術の方式と比較すべき
である。
【0046】
図4では、サーバ410が2つのクライアント430、440(異なるプロセ
ッサを持つ)に通信ネットワーク450を介してサービスを提供している。プロ
セッサ独立計算はすべてサーバ上で実行され、特に、サーバはクラスストア42
0、クラスベリファイヤ421、jcodeトランスレータ422、およびVP
ストア423を保持する。複数のメソッド481を含む初期Java(登録商標
)クラスファイル480は、前述の2段階プロセスを介して、複数のVPツール
482に変換され、VPストア423内に格納される。VP(プロセッサ独立)
ツールは必要に応じて、ネットワーク450を介して個々のクライアントで利用
できる。VPツールは、個々のクライアントトランスレータ424、425によ
ってネイティブメソッド483、484に変換され、それぞれのプロセッサにつ
いて最適化される。これらのネイティブメソッドは、格納されたそれぞれのネイ
ティブコード432、442内に収められる。
ッサを持つ)に通信ネットワーク450を介してサービスを提供している。プロ
セッサ独立計算はすべてサーバ上で実行され、特に、サーバはクラスストア42
0、クラスベリファイヤ421、jcodeトランスレータ422、およびVP
ストア423を保持する。複数のメソッド481を含む初期Java(登録商標
)クラスファイル480は、前述の2段階プロセスを介して、複数のVPツール
482に変換され、VPストア423内に格納される。VP(プロセッサ独立)
ツールは必要に応じて、ネットワーク450を介して個々のクライアントで利用
できる。VPツールは、個々のクライアントトランスレータ424、425によ
ってネイティブメソッド483、484に変換され、それぞれのプロセッサにつ
いて最適化される。これらのネイティブメソッドは、格納されたそれぞれのネイ
ティブコード432、442内に収められる。
【0047】
図4に示されているように、サーバ上でVPを使用すると、クラスファイルの
検証とコンパイルの第1段階(VPへの変換)をサーバで1回だけ実行できる。
次に、実行前に(プロセッサタイプにより異なる)ネイティブ変換のみをクライ
アントデバイスで実行する必要がある。このような配列により、サーバで更新さ
れたクラスを簡単に供給することができ、しかも、それらのクラスを使用しよう
としている特定のクライアントの詳細をいっさい知る必要がない。更新されたク
ラスは、クラスバイトコード内で1回だけ修正する必要があり、その後、1回だ
けVPに変換する。VPは、必要に応じて、クライアントデバイスに送信され、
エンドユーザに対しまったく透過的な方法でクライアントでネイティブコードへ
の最終変換を実行できる。さらに、新しいタイプのクライアントが異なるネイテ
ィブコードを必要とする市場に出回った場合も、サーバやVPコードへの修正は
必要ない。クライアントメーカーは単に、適切なネイティブトランスレータをク
ライアントに提供するだけであり、デバイスはサーバで人手が介在することなく
動作する。
検証とコンパイルの第1段階(VPへの変換)をサーバで1回だけ実行できる。
次に、実行前に(プロセッサタイプにより異なる)ネイティブ変換のみをクライ
アントデバイスで実行する必要がある。このような配列により、サーバで更新さ
れたクラスを簡単に供給することができ、しかも、それらのクラスを使用しよう
としている特定のクライアントの詳細をいっさい知る必要がない。更新されたク
ラスは、クラスバイトコード内で1回だけ修正する必要があり、その後、1回だ
けVPに変換する。VPは、必要に応じて、クライアントデバイスに送信され、
エンドユーザに対しまったく透過的な方法でクライアントでネイティブコードへ
の最終変換を実行できる。さらに、新しいタイプのクライアントが異なるネイテ
ィブコードを必要とする市場に出回った場合も、サーバやVPコードへの修正は
必要ない。クライアントメーカーは単に、適切なネイティブトランスレータをク
ライアントに提供するだけであり、デバイスはサーバで人手が介在することなく
動作する。
【0048】
説明した方式では、ネットワークで、Java(登録商標)クラスファイル4
80をダウンロードする必要も、また個々のメソッド481をすべてダウンロー
ドする必要もない。個々のクライアントアプリケーションで実際に必要とするV
Pツールのみをネットワークで送信するればよい。必要なVPツールは、オンデ
マンドでダウンロードしたり(たとえば、クライアントからサーバに返される制
御信号を使って)、あるいはそれとは別に、サーバ側で必要と判断したときに送
信することができる。一実施形態では、たとえば、サーバは更新されたVPツー
ルをネットワークで送信し、クライアント上で実行されているアプリケーション
プログラムを更新することができる。これは、リアルタイムで、エンドユーザに
まったく透過的に実行することもできる。それとは別に、あるいはそれに加えて
、個々の送信されたVPツールは「アド−イン」、つまりユーザがクライアント
上で実行するアプリケーションプログラムに追加しようとする追加機能を表すこ
とができる。1つの特に便利な方式では、クライアントでコードを使用できない
アプリケーションプログラムにおいて機能を使用しようとしたときに、クライア
ントは自動的に、必要なVPツールをダウンロードすることを要求するサーバに
信号を送信する。サーバは、ローカルネイティブトランスレータ424、425
によってネイティブ形式に変換された要求VPツールを送信することにより応答
する。
80をダウンロードする必要も、また個々のメソッド481をすべてダウンロー
ドする必要もない。個々のクライアントアプリケーションで実際に必要とするV
Pツールのみをネットワークで送信するればよい。必要なVPツールは、オンデ
マンドでダウンロードしたり(たとえば、クライアントからサーバに返される制
御信号を使って)、あるいはそれとは別に、サーバ側で必要と判断したときに送
信することができる。一実施形態では、たとえば、サーバは更新されたVPツー
ルをネットワークで送信し、クライアント上で実行されているアプリケーション
プログラムを更新することができる。これは、リアルタイムで、エンドユーザに
まったく透過的に実行することもできる。それとは別に、あるいはそれに加えて
、個々の送信されたVPツールは「アド−イン」、つまりユーザがクライアント
上で実行するアプリケーションプログラムに追加しようとする追加機能を表すこ
とができる。1つの特に便利な方式では、クライアントでコードを使用できない
アプリケーションプログラムにおいて機能を使用しようとしたときに、クライア
ントは自動的に、必要なVPツールをダウンロードすることを要求するサーバに
信号を送信する。サーバは、ローカルネイティブトランスレータ424、425
によってネイティブ形式に変換された要求VPツールを送信することにより応答
する。
【0049】
クラスファイル480が適切なVPツール482に変換されると、クラスファ
イルをサーバメモリから破棄できる。同様に、それぞれのクライアントで、ダウ
ンロードされたVPツールがネイティブメソッド483、484に変換された後
、VPツールをクライアントメモリから破棄できる。
イルをサーバメモリから破棄できる。同様に、それぞれのクライアントで、ダウ
ンロードされたVPツールがネイティブメソッド483、484に変換された後
、VPツールをクライアントメモリから破棄できる。
【0050】
図4aは、個々のネイティブトランスレータがサーバ上に保持される他の実施
形態を示している。図4aでは、参照番号は図4で使用されているのと同じ意味
を持つ。
形態を示している。図4aでは、参照番号は図4で使用されているのと同じ意味
を持つ。
【0051】
この実施形態の一バージョンでは、クライアントプロセッサのそれぞれのネイ
ティブメソッドの完全な集まりがサーバ上のそれぞれのネイティブコードストア
432′、442′内に格納される。必ずしも前もってどのメソッドが個々のク
ライアントに必要なのかを判断できないため、VPツール482全体をそれぞれ
のネイティブトランスレータ424、425に渡し、ネイティブメソッド483
、484の包括的選択を行うことが好ましい。クライアントによって特定の新し
いメソッドまたは更新されたメソッドが呼ばれると、あるいはサーバによって送
信が要求されると、通信ネットワーク450を介して適切な個々のネイティブメ
ソッドが送信される。前のように、個々のメソッドのみが送信され、クラス全体
もまた元のクラスから作成されたネイティブメソッドすべても送信されない。
ティブメソッドの完全な集まりがサーバ上のそれぞれのネイティブコードストア
432′、442′内に格納される。必ずしも前もってどのメソッドが個々のク
ライアントに必要なのかを判断できないため、VPツール482全体をそれぞれ
のネイティブトランスレータ424、425に渡し、ネイティブメソッド483
、484の包括的選択を行うことが好ましい。クライアントによって特定の新し
いメソッドまたは更新されたメソッドが呼ばれると、あるいはサーバによって送
信が要求されると、通信ネットワーク450を介して適切な個々のネイティブメ
ソッドが送信される。前のように、個々のメソッドのみが送信され、クラス全体
もまた元のクラスから作成されたネイティブメソッドすべても送信されない。
【0052】
この実施形態では、ネイティブメソッド483、484が構築されたら、クラ
スファイル480の全体と個々のVPツール482の両方をサーバメモリから破
棄できる。クラスファイルの一部も、またVPツールも、ネットワーク経由でダ
ウンロードされないことに注意されたい。同様に、クラスファイルの一部も、ま
たVPツールも、クライアントメモリ内に存在しない。これにより、クライアン
トメモリの利用効率が特に改善する。
スファイル480の全体と個々のVPツール482の両方をサーバメモリから破
棄できる。クラスファイルの一部も、またVPツールも、ネットワーク経由でダ
ウンロードされないことに注意されたい。同様に、クラスファイルの一部も、ま
たVPツールも、クライアントメモリ内に存在しない。これにより、クライアン
トメモリの利用効率が特に改善する。
【0053】
さらに他の方法では、サーバは可能なクライアントプロセッサごとに予め変換
されたメソッドの完全な集合体を保持する必要はない。その代わりに、特定のV
Pツールが必要になったときに、オンザフライで、適切なネイティブトランスレ
ータ424、425により変換し、そのネイティブメソッドを即座にクライアン
トに送信する。
されたメソッドの完全な集合体を保持する必要はない。その代わりに、特定のV
Pツールが必要になったときに、オンザフライで、適切なネイティブトランスレ
ータ424、425により変換し、そのネイティブメソッドを即座にクライアン
トに送信する。
【0054】
図5に示されている特定の実装が携帯電話ネットワークのそれであるとする。
ネットワークを使用する個々の携帯電話530、550はそれぞれ、ネイティブ
トランスレータ524、525とネイティブコードストア532、542を備え
る。電話の機能をアップグレードする必要がある場合、更新されたVPコードは
、中央サーバ520のVPストア523から供給される。更新されたVPコード
は地上通信網511を介して無線送信機512に送信される。その後、コードを
パケット化し、無線リンク513で個々の電話に送信する。受信したVPコード
は、自動的にネイティブコードに変換され、ネイティブコードストアに格納され
る。プロセス全体を携帯電話ユーザに透過的にすることができ、またはそれとは
別に、更新されたコードを無線リンク513を介して電話ユーザからの特定の要
求を受け取ったときに送信できる。
ネットワークを使用する個々の携帯電話530、550はそれぞれ、ネイティブ
トランスレータ524、525とネイティブコードストア532、542を備え
る。電話の機能をアップグレードする必要がある場合、更新されたVPコードは
、中央サーバ520のVPストア523から供給される。更新されたVPコード
は地上通信網511を介して無線送信機512に送信される。その後、コードを
パケット化し、無線リンク513で個々の電話に送信する。受信したVPコード
は、自動的にネイティブコードに変換され、ネイティブコードストアに格納され
る。プロセス全体を携帯電話ユーザに透過的にすることができ、またはそれとは
別に、更新されたコードを無線リンク513を介して電話ユーザからの特定の要
求を受け取ったときに送信できる。
【0055】
この方法で携帯電話ネットワーク(または実際には他のタイプの無線クライア
ントネットワーク)を実装すると、クライアントは、クラス全体(たとえば1M
B)をダウンロードする代わりに個々のメソッド(それぞれの長さはたとえば1
00バイト)をダウンロードすることができる。この方法で個々のメソッドを送
信すると、大きなファイルを送信しているときに仮想回路を長時間開いたままに
する必要がないため無線ネットワークプロバイダには都合がよい。それぞれの小
さな個々のメソッドを別のルートで送ることもできる。また、小さなデータチャ
ンクを送信するので、冗長性および誤り訂正の手法の必要性も減じ、それにより
ネットワーク容量の増加が生データ転送速度と単に比較して期待される以上とな
る。元のクラスファイルの一部もVPツールもクライアントメモリ内に残ってい
る必要がないという事実は、そのメモリ全体をネイティブメソッドの格納とネイ
ティブコードでのアプリケーションの実行専用にできることを意味している。
ントネットワーク)を実装すると、クライアントは、クラス全体(たとえば1M
B)をダウンロードする代わりに個々のメソッド(それぞれの長さはたとえば1
00バイト)をダウンロードすることができる。この方法で個々のメソッドを送
信すると、大きなファイルを送信しているときに仮想回路を長時間開いたままに
する必要がないため無線ネットワークプロバイダには都合がよい。それぞれの小
さな個々のメソッドを別のルートで送ることもできる。また、小さなデータチャ
ンクを送信するので、冗長性および誤り訂正の手法の必要性も減じ、それにより
ネットワーク容量の増加が生データ転送速度と単に比較して期待される以上とな
る。元のクラスファイルの一部もVPツールもクライアントメモリ内に残ってい
る必要がないという事実は、そのメモリ全体をネイティブメソッドの格納とネイ
ティブコードでのアプリケーションの実行専用にできることを意味している。
【0056】
完全を期すため、クラスファイルをVPに変換し、VPツールをネイティブに
変換する好ましい方法について詳述することにする。これは単なる例に過ぎない
こと、また本発明は、最初のバイトコードからVPに、次にVPからネイティブ
に変換する2段階変換がある実施形態に制限されないことは理解されるであろう
。
変換する好ましい方法について詳述することにする。これは単なる例に過ぎない
こと、また本発明は、最初のバイトコードからVPに、次にVPからネイティブ
に変換する2段階変換がある実施形態に制限されないことは理解されるであろう
。
【0057】
図2に戻り、クラスバイトコード210からネイティブコード230への好ま
しい2段階変換について詳述する。すでに述べたように、クラスベリファイヤ2
11はクラスバイトコードが有効かどうかをチェックする。クラスベリファイヤ
は、いくつかの実施形態では、jcodeトランスレータ内に組み込むことがで
き、そのクラスでは、クラスバイトコード210が矢印240で示されているよ
うにまっすぐjcodeトランスレータ212に渡される。
しい2段階変換について詳述する。すでに述べたように、クラスベリファイヤ2
11はクラスバイトコードが有効かどうかをチェックする。クラスベリファイヤ
は、いくつかの実施形態では、jcodeトランスレータ内に組み込むことがで
き、そのクラスでは、クラスバイトコード210が矢印240で示されているよ
うにまっすぐjcodeトランスレータ212に渡される。
【0058】
実装されるJVMおよびバイトコード命令はスタックベースであり、オペラン
ド(数値、オブジェクトへのポインタ)はスタック上に保持され、押し込まれた
最後のアイテムが最初に取り出される仕組みをとる。バイトコード命令は通常、
スタックから1つまたは複数のオペランドを取り出して、ある種のアクションを
実行し、結果オペランド(もしあれば)をスタックに押し戻す。他方、VPはレ
ジスタベースであり、VP命令により直接アドレス指定される一組のレジスタを
持つ。命令は通常、命令で指定したレジスタからオペランドを取り、ある種のア
クションを実行し、結果オペランド(もしあれば)を命令で指定されている他の
レジスタに入れる。このレジスタベースのアーキテクチャは、VPは非常に多く
のレジスタを備え、VPへの変換を行ういずれかのシステムがレジスタの本数を
気にしなくて済むだけの数を有する以外に、大半の実際のプロセッサによく似て
いる。
ド(数値、オブジェクトへのポインタ)はスタック上に保持され、押し込まれた
最後のアイテムが最初に取り出される仕組みをとる。バイトコード命令は通常、
スタックから1つまたは複数のオペランドを取り出して、ある種のアクションを
実行し、結果オペランド(もしあれば)をスタックに押し戻す。他方、VPはレ
ジスタベースであり、VP命令により直接アドレス指定される一組のレジスタを
持つ。命令は通常、命令で指定したレジスタからオペランドを取り、ある種のア
クションを実行し、結果オペランド(もしあれば)を命令で指定されている他の
レジスタに入れる。このレジスタベースのアーキテクチャは、VPは非常に多く
のレジスタを備え、VPへの変換を行ういずれかのシステムがレジスタの本数を
気にしなくて済むだけの数を有する以外に、大半の実際のプロセッサによく似て
いる。
【0059】
VP命令は式に基づく。単一の命令は通常、1つまたは2つのオペランドを持
ち、各オペランドには定数、レジスタ、または式を使用できる。式は、1つまた
は2つのオペランドを持ち、それぞれは定数、レジスタ、または式を使用できる
。この方式で、どのように複雑な命令でも作成できる。
ち、各オペランドには定数、レジスタ、または式を使用できる。式は、1つまた
は2つのオペランドを持ち、それぞれは定数、レジスタ、または式を使用できる
。この方式で、どのように複雑な命令でも作成できる。
【0060】
次に、クラスファイルの各部がどのように変換されるかを詳述する。説明では
、「フィックスアップ」という用語を使用するが、これはコンパイラの出力コー
ドまたはデータ内の特定の位置にアタッチされたデータの小さなアイテムであり
、その位置にあるコードまたはデータを使用する前に何らかの方法で修正する必
要があることをJVMに指示するものである。フィックスアップは、ネイティブ
コードが他のクラスまたはその中のフィールドやメソッドへの直接参照を取得で
きるように、ネイティブ命令またはデータアイテムを変更する場合に使用される
。
、「フィックスアップ」という用語を使用するが、これはコンパイラの出力コー
ドまたはデータ内の特定の位置にアタッチされたデータの小さなアイテムであり
、その位置にあるコードまたはデータを使用する前に何らかの方法で修正する必
要があることをJVMに指示するものである。フィックスアップは、ネイティブ
コードが他のクラスまたはその中のフィールドやメソッドへの直接参照を取得で
きるように、ネイティブ命令またはデータアイテムを変更する場合に使用される
。
【0061】
Java(登録商標)クラスファイルは以下の部分で構成される。
・ 名前の代わりにクラスファイルの他の部分の定数値および名前を格納し、
ここに格納される名前への参照がある定数プール。 ・ このクラス、スーパークラス、および直接スーパーインタフェースの名前
などの情報。 ・ お互いに関する情報を含むフィールドのリスト。 ・ お互いに関する情報を含むメソッドのリスト。この情報には、コードセク
ションが含まれる。そのため、メソッドごとに1つずつ、複数のコードセクショ
ンがある。
ここに格納される名前への参照がある定数プール。 ・ このクラス、スーパークラス、および直接スーパーインタフェースの名前
などの情報。 ・ お互いに関する情報を含むフィールドのリスト。 ・ お互いに関する情報を含むメソッドのリスト。この情報には、コードセク
ションが含まれる。そのため、メソッドごとに1つずつ、複数のコードセクショ
ンがある。
【0062】
Java(登録商標)クラスファイルは次のようにVPツールに変換される。
・ データツール。その名前と異なり、クラスで使用するデータとはまったく
関係ない。その代わりに、名前、パラメータ、すべてのコンストラクタの型、フ
ィールド、メソッド、およびクラスのAPIを構成する他のエンティティなどを
含み、これらには限定されないクラスに関する情報を含む。これの代表的な用途
は、リフレクション(つまり、Java(登録商標)ライブラリ内のjava(
登録商標).lang.reflectの機能)である。リフレクションは、プ
ログラマがコンストラクタ、フィールド、メソッド、およびクラスに属するその
他のエンティティを列挙し、操作するためのプログラムインタフェースである。
データツールはさらに、クラスファイルが使用できなかったり、クラスファイル
がすでに変換されている状況で、検証するjcodeトランスレータによっても
使用される。クラスがVPで書かれている場合には、とにかくクラスファイルは
ない。
関係ない。その代わりに、名前、パラメータ、すべてのコンストラクタの型、フ
ィールド、メソッド、およびクラスのAPIを構成する他のエンティティなどを
含み、これらには限定されないクラスに関する情報を含む。これの代表的な用途
は、リフレクション(つまり、Java(登録商標)ライブラリ内のjava(
登録商標).lang.reflectの機能)である。リフレクションは、プ
ログラマがコンストラクタ、フィールド、メソッド、およびクラスに属するその
他のエンティティを列挙し、操作するためのプログラムインタフェースである。
データツールはさらに、クラスファイルが使用できなかったり、クラスファイル
がすでに変換されている状況で、検証するjcodeトランスレータによっても
使用される。クラスがVPで書かれている場合には、とにかくクラスファイルは
ない。
【0063】
・ クラスツール。これには、JVMで使用するある種のハウスキーピング情
報(割り当てるオブジェクトのサイズ、クラスのスタティックデータがあればそ
のデータ、スーパークラスおよびスーパーインタフェースなど)、と非スタティ
ックメソッドの一部または全部のコードが含まれる。 ・ 0個またはそれ以上のメソッドツール。クラスに現れないメソッドはそれ
独自の個別ツールを持つ。メソッドをそのメソッドのツール内に置くかどうかの
決定は、メソッドのサイズなどpの多数の要因に基づく。 ・ フィックスアップツール。フィックスアップツールは通常、特定のフィー
ルドのオブジェクト内のオフセットを決定するために使用されるフィックスアッ
プ定数値を返す。このツールは、オフセットを提供するためにフィックスアップ
時に呼び出され、バインダ/リンカは、オフセットを使用しようとするコード内
にそのオフセットを当てる。これを使って、「フィールドを取得する」と「フィ
ールドを置く」の両方をバイトコードで実装する。より一般的には、フィックス
アップツールは、フィックスアップに使用するデータを返す。これは、フィック
スアップ時にのみ決定でき、コンパイル時には決定できない。データには、クラ
スインスタンスのサイズおよびフィールドのクラスインスタンス内のオフセット
などが含まれる。 データツールは、Java(登録商標)アプリケーションがいくつかの機能(
大半はリフレクション)を使用しないことがわかっている場合に破棄することが
でき、またフィックスアップツールは、他のJava(登録商標)クラスを動的
にロードしないデバイスにJava(登録商標)アプリケーションを埋め込む場
合に破棄することができる。
報(割り当てるオブジェクトのサイズ、クラスのスタティックデータがあればそ
のデータ、スーパークラスおよびスーパーインタフェースなど)、と非スタティ
ックメソッドの一部または全部のコードが含まれる。 ・ 0個またはそれ以上のメソッドツール。クラスに現れないメソッドはそれ
独自の個別ツールを持つ。メソッドをそのメソッドのツール内に置くかどうかの
決定は、メソッドのサイズなどpの多数の要因に基づく。 ・ フィックスアップツール。フィックスアップツールは通常、特定のフィー
ルドのオブジェクト内のオフセットを決定するために使用されるフィックスアッ
プ定数値を返す。このツールは、オフセットを提供するためにフィックスアップ
時に呼び出され、バインダ/リンカは、オフセットを使用しようとするコード内
にそのオフセットを当てる。これを使って、「フィールドを取得する」と「フィ
ールドを置く」の両方をバイトコードで実装する。より一般的には、フィックス
アップツールは、フィックスアップに使用するデータを返す。これは、フィック
スアップ時にのみ決定でき、コンパイル時には決定できない。データには、クラ
スインスタンスのサイズおよびフィールドのクラスインスタンス内のオフセット
などが含まれる。 データツールは、Java(登録商標)アプリケーションがいくつかの機能(
大半はリフレクション)を使用しないことがわかっている場合に破棄することが
でき、またフィックスアップツールは、他のJava(登録商標)クラスを動的
にロードしないデバイスにJava(登録商標)アプリケーションを埋め込む場
合に破棄することができる。
【0064】
jcodeトランスレータは、スタック上のアイテムごとにVPレジスタを使
用する。
用する。
【0065】
VPコードで直接、バイトコード内から他のクラス、メソッド、またはフィー
ルドにアクセスするためのクラスファイルのメカニズムを実装するわけではない
。バイトコードには、メソッドを呼び出す(この場合、他のクラス)、フィール
ドの内容を取得する(この場合、このクラスまたは他のクラス)、値をスタック
にプッシュする、値をスタックからポップする、フィールドの内容を設定するな
どの命令がある。jcodeトランスレータは、これらを以下のいずれかの操作
を実行できるVP命令に変換する(網羅してはいない)。 ・ クラス内の非スタティックメソッド(つまり、オブジェクトポインタの渡
し先)を呼び出す。VPには、メソッドを持つクラスという概念があり、これを
使用してJava(登録商標)クラスを実装する。このようなメソッドの呼び出
しは、仮想的に(呼び出される実際のメソッドはポインタが渡されるオブジェク
トのクラスによって決まる)または非仮想的に(呼び出されるメソッドは呼び出
しで指定されたクラス内にある)行うことができる。 ・ サブルーチンを呼び出す。これは、スタティックメソッド(つまり、オブ
ジェクトポインタが渡されないメソッド)および場合によっては非スタティック
メソッドのバイトコードの呼び出しを実装するために使用される。 ・ フィックスアップツールから定数フィックスアップの値を取得する。
ルドにアクセスするためのクラスファイルのメカニズムを実装するわけではない
。バイトコードには、メソッドを呼び出す(この場合、他のクラス)、フィール
ドの内容を取得する(この場合、このクラスまたは他のクラス)、値をスタック
にプッシュする、値をスタックからポップする、フィールドの内容を設定するな
どの命令がある。jcodeトランスレータは、これらを以下のいずれかの操作
を実行できるVP命令に変換する(網羅してはいない)。 ・ クラス内の非スタティックメソッド(つまり、オブジェクトポインタの渡
し先)を呼び出す。VPには、メソッドを持つクラスという概念があり、これを
使用してJava(登録商標)クラスを実装する。このようなメソッドの呼び出
しは、仮想的に(呼び出される実際のメソッドはポインタが渡されるオブジェク
トのクラスによって決まる)または非仮想的に(呼び出されるメソッドは呼び出
しで指定されたクラス内にある)行うことができる。 ・ サブルーチンを呼び出す。これは、スタティックメソッド(つまり、オブ
ジェクトポインタが渡されないメソッド)および場合によっては非スタティック
メソッドのバイトコードの呼び出しを実装するために使用される。 ・ フィックスアップツールから定数フィックスアップの値を取得する。
【0066】
クラスファイル内の定数プールは次のように変換される。
・ 定数値(整数または浮動小数点数)を含む定数プールエントリは定数値を
参照するJBC命令のコンパイル済みバージョンに組み込まれる。 ・ JBC命令によって直接使用される文字列データを含む定数プールエント
リは、コンパイラの出力コードにアタッチされたデータにコピーされる。 ・ 文字列データを含む他の定数プールエントリは直接には使用されないが、
以下の定数プールタイプまたはクラスファイルの他の部分によって参照されると
きに使用される。 ・ クラスCを参照する定数プールエントリにより、クラスC(またはJVM
のクラスの内部名)を参照するフィックスアップがコンパイラの出力コード/デ
ータにアタッチされ、これにより、この定数プールエントリを使用してCを参照
するJBC命令がネイティブコードシーケンスにコンパイルされ、フィックスア
ップを適用した後、このシーケンスでクラスCのコードおよびデータへのアクセ
スが可能になる。 ・ クラスC内のフィールドFを参照する定数プールエントリにより、C内の
F(またはJVMのC内のFの内部名)を参照するフィックスアップがコンパイ
ラの出力コード/データにアタッチされ、これにより、この定数プールエントリ
を使用してFを参照するJBC命令がネイティブコードシーケンスにコンパイル
され、フィックスアップを適用した後、このシーケンスでフィールドFのアクセ
スが可能になる。 ・ クラスC内のメソッドMを参照する定数プールエントリにより、C内のM
(またはJVMのC内のMの内部名)を参照するフィックスアップがコンパイラ
の出力コード/データにアタッチされ、これにより、この定数プールエントリを
使用してMを参照するJBC命令がネイティブコードシーケンスにコンパイルさ
れ、フィックスアップを適用した後、このシーケンスでメソッドMのアクセスが
可能になる。 ・ フィールドまたはメソッドの名前および型を与える定数プールエントリは
直接には使用されないが、他の定数プールエントリ型またはクラスファイルの他
の部分により参照されるときに使用される。
参照するJBC命令のコンパイル済みバージョンに組み込まれる。 ・ JBC命令によって直接使用される文字列データを含む定数プールエント
リは、コンパイラの出力コードにアタッチされたデータにコピーされる。 ・ 文字列データを含む他の定数プールエントリは直接には使用されないが、
以下の定数プールタイプまたはクラスファイルの他の部分によって参照されると
きに使用される。 ・ クラスCを参照する定数プールエントリにより、クラスC(またはJVM
のクラスの内部名)を参照するフィックスアップがコンパイラの出力コード/デ
ータにアタッチされ、これにより、この定数プールエントリを使用してCを参照
するJBC命令がネイティブコードシーケンスにコンパイルされ、フィックスア
ップを適用した後、このシーケンスでクラスCのコードおよびデータへのアクセ
スが可能になる。 ・ クラスC内のフィールドFを参照する定数プールエントリにより、C内の
F(またはJVMのC内のFの内部名)を参照するフィックスアップがコンパイ
ラの出力コード/データにアタッチされ、これにより、この定数プールエントリ
を使用してFを参照するJBC命令がネイティブコードシーケンスにコンパイル
され、フィックスアップを適用した後、このシーケンスでフィールドFのアクセ
スが可能になる。 ・ クラスC内のメソッドMを参照する定数プールエントリにより、C内のM
(またはJVMのC内のMの内部名)を参照するフィックスアップがコンパイラ
の出力コード/データにアタッチされ、これにより、この定数プールエントリを
使用してMを参照するJBC命令がネイティブコードシーケンスにコンパイルさ
れ、フィックスアップを適用した後、このシーケンスでメソッドMのアクセスが
可能になる。 ・ フィールドまたはメソッドの名前および型を与える定数プールエントリは
直接には使用されないが、他の定数プールエントリ型またはクラスファイルの他
の部分により参照されるときに使用される。
【0067】
クラスファイル内のコードセクションは次のように変換される。
・ 純粋に数値だけの計算を実行するコード(つまり、外部メソッドへの参照
がない)は、バイトコードからVP内の対応するツールに直接変換される。 ・ 図6に示されているように、バイトコード600にはフィールドへの参照
610が含まれており、これは呼び出し611によりフィックスアップ時にフィ
ックスアップツールに変換される。フィックスアップツールへの呼び出しは、フ
ィールドの場所を参照する値を返す。したがって、命令が実行されるまでに正し
いオフセットを含むようにパッチを当てる必要がある。 ・ スタティックメソッド620は、対応するVPツールに変換されるが、フ
ィックスアップコード621の追加がある。 ・ 非スタティックメソッド630はメソッドの呼び出しのフィックスアップ
(つまり、メソッド名への参照)をそれに追加している。これは結局、最後のネ
イティブコード内のアトムになる。
がない)は、バイトコードからVP内の対応するツールに直接変換される。 ・ 図6に示されているように、バイトコード600にはフィールドへの参照
610が含まれており、これは呼び出し611によりフィックスアップ時にフィ
ックスアップツールに変換される。フィックスアップツールへの呼び出しは、フ
ィールドの場所を参照する値を返す。したがって、命令が実行されるまでに正し
いオフセットを含むようにパッチを当てる必要がある。 ・ スタティックメソッド620は、対応するVPツールに変換されるが、フ
ィックスアップコード621の追加がある。 ・ 非スタティックメソッド630はメソッドの呼び出しのフィックスアップ
(つまり、メソッド名への参照)をそれに追加している。これは結局、最後のネ
イティブコード内のアトムになる。
【0068】
呼び出し規則は、バイトコードとVPとでかなり異なる。Java(登録商標
)バイトコードなどの従来のバイトコードでは、サブルーチンに渡すパラメータ
はスタックに置かれ、その後に呼び出すメソッドへの参照が置かれる。次にメソ
ッドを呼び出すバイトコード命令が実行されてスタックからそのメソッド参照が
取り出され、その参照が解決され、スタックから取り出したパラメータ付きで新
しいメソッドの実行が開始する。return命令が実行されると、制御権が元
のメソッドに戻される。これはVPに変換され、宛先メソッドを指すようにフィ
ックスアップされた(このフィックスアップは静的または動的に見つけることが
できる)gos(goto subroutine)命令を実行する前にすべて
のパラメータをVPレジスタにロードする。実行権がサブルーチンに渡され、「
ret」命令が実行されると戻る。
)バイトコードなどの従来のバイトコードでは、サブルーチンに渡すパラメータ
はスタックに置かれ、その後に呼び出すメソッドへの参照が置かれる。次にメソ
ッドを呼び出すバイトコード命令が実行されてスタックからそのメソッド参照が
取り出され、その参照が解決され、スタックから取り出したパラメータ付きで新
しいメソッドの実行が開始する。return命令が実行されると、制御権が元
のメソッドに戻される。これはVPに変換され、宛先メソッドを指すようにフィ
ックスアップされた(このフィックスアップは静的または動的に見つけることが
できる)gos(goto subroutine)命令を実行する前にすべて
のパラメータをVPレジスタにロードする。実行権がサブルーチンに渡され、「
ret」命令が実行されると戻る。
【0069】
ファイルの他の部分は次のように変換される。
・ クラスの名前により、コンパイラが出力したコードおよびデータを参照す
るために、JVMで使用される名前を決定する。 ・ スーパークラスの名前が、コンパイラによって出力されたコードおよびデ
ータ内のスーパークラスへの何らかの参照となる。好ましい形態では、リンク後
、ポインタがスーパークラスのコードおよびデータを指すように、フィックスア
ップがアタッチされたポインタが出力データに含まれる。 ・ 各インタフェースの名前が、出力されたコードおよびデータ内のインタフ
ェースへの何らかの参照となる。好ましい実装では、リンク後、ポインタがイン
タフェースのコードおよびデータを指すように、フィックスアップがアタッチさ
れた各インタフェースのポインタが出力データに含まれる。 ・ 各メソッドにアタッチされたデバッグ情報(およびクラスファイルに格納
されているソースファイル名)が、もしあれば、JVMが稼動する環境に適した
形式に変換される。好ましい実装では、デバッグ情報は、システムの非Java
(登録商標)部分に使用されるのと同じ形態に変換される。
るために、JVMで使用される名前を決定する。 ・ スーパークラスの名前が、コンパイラによって出力されたコードおよびデ
ータ内のスーパークラスへの何らかの参照となる。好ましい形態では、リンク後
、ポインタがスーパークラスのコードおよびデータを指すように、フィックスア
ップがアタッチされたポインタが出力データに含まれる。 ・ 各インタフェースの名前が、出力されたコードおよびデータ内のインタフ
ェースへの何らかの参照となる。好ましい実装では、リンク後、ポインタがイン
タフェースのコードおよびデータを指すように、フィックスアップがアタッチさ
れた各インタフェースのポインタが出力データに含まれる。 ・ 各メソッドにアタッチされたデバッグ情報(およびクラスファイルに格納
されているソースファイル名)が、もしあれば、JVMが稼動する環境に適した
形式に変換される。好ましい実装では、デバッグ情報は、システムの非Java
(登録商標)部分に使用されるのと同じ形態に変換される。
【0070】
最後のVPクラスは、1つまたは複数の名前付きツールを備え、通常これは、
少なくともデータツール、クラスツール、フィックスアップツール、および0個
またはそれ以上のメソッドツールを含む。ツール名は、jcodeトランスレー
タによって自動的に生成され、それぞれの名前がクラスの名前と、そのクラスの
実装内の各ツールの機能に関連付けられる。
少なくともデータツール、クラスツール、フィックスアップツール、および0個
またはそれ以上のメソッドツールを含む。ツール名は、jcodeトランスレー
タによって自動的に生成され、それぞれの名前がクラスの名前と、そのクラスの
実装内の各ツールの機能に関連付けられる。
【0071】
図2に再び戻り、VPコードをネイティブコードに変換するネイティブトラン
スレータについて詳述する。もちろん、VPコードはそれ自体実行中アプリケー
ション内で決して直接実行されるわけではなく、常に、プロセッサ依存のネイテ
ィブトランスレータによって、コードを実行するプロセッサに適したネイティブ
コードに変換される。
スレータについて詳述する。もちろん、VPコードはそれ自体実行中アプリケー
ション内で決して直接実行されるわけではなく、常に、プロセッサ依存のネイテ
ィブトランスレータによって、コードを実行するプロセッサに適したネイティブ
コードに変換される。
【0072】
ネイティブトランスレータ214は、組み込みシステム内のメモリに簡単に格
納できるように、きわめて小さなコード断片(プロセッサにもよるが150Kバ
イト程度)である。トランスレータ214は、VPレジスタを使用されている特
定のプロセッサのレジスタにマッピングする。トランスレータは、実際のプロセ
ッサのレジスタアーキテクチャの知識を利用して、出力ネイティブコード内の各
位置でどのVPレジスタを実際のプロセッサのレジスタにマッピングし、どれを
メモリ内に保持するか(アクセスするのに遅い)を決定する。トランスレータは
さらに、マシン依存の命令最適化も実行する。ネイティブコードがバインドされ
るまで、そのままふつうにフィックスアップコードのセクションを含む。バイン
ド後(あるいはときには実行時に)、フィックスアップコードは適切なマシン依
存命令で置き換えられる。たとえば、非スタティックメソッドのフィックスアッ
プは、ネイティブコード内のアトムに変換される。
納できるように、きわめて小さなコード断片(プロセッサにもよるが150Kバ
イト程度)である。トランスレータ214は、VPレジスタを使用されている特
定のプロセッサのレジスタにマッピングする。トランスレータは、実際のプロセ
ッサのレジスタアーキテクチャの知識を利用して、出力ネイティブコード内の各
位置でどのVPレジスタを実際のプロセッサのレジスタにマッピングし、どれを
メモリ内に保持するか(アクセスするのに遅い)を決定する。トランスレータは
さらに、マシン依存の命令最適化も実行する。ネイティブコードがバインドされ
るまで、そのままふつうにフィックスアップコードのセクションを含む。バイン
ド後(あるいはときには実行時に)、フィックスアップコードは適切なマシン依
存命令で置き換えられる。たとえば、非スタティックメソッドのフィックスアッ
プは、ネイティブコード内のアトムに変換される。
【0073】
jcodeトランスレータとネイティブトランスレータは両方とも、それ自体
、VPコードで書くのが好ましく、目的のプラットフォーム上で実行するように
変換できる(ネイティブトランスレータ自体を使用して)。その初期VPコード
から、両方のトランスレータのコンパイル済みバージョンをネイティブコードに
し、トランスレータを実行する特定のプロセッサについて最適化することができ
る。jcodeトランスレータ用にVPコードをコンパイルするには、そのコー
ドをネイティブトランスレータに通す。ネイティブトランスレータ用にVPコー
ドをコンパイルするには、そのコードをネイティブトランスレータそれ自体に渡
す。
、VPコードで書くのが好ましく、目的のプラットフォーム上で実行するように
変換できる(ネイティブトランスレータ自体を使用して)。その初期VPコード
から、両方のトランスレータのコンパイル済みバージョンをネイティブコードに
し、トランスレータを実行する特定のプロセッサについて最適化することができ
る。jcodeトランスレータ用にVPコードをコンパイルするには、そのコー
ドをネイティブトランスレータに通す。ネイティブトランスレータ用にVPコー
ドをコンパイルするには、そのコードをネイティブトランスレータそれ自体に渡
す。
【0074】
好ましい実施形態では、Java(登録商標)仮想マシンを使用するが、本発
明の全体的な概念はもっと一般的であり、JVMを使用することも、あるいは実
際にJava(登録商標)を使用することもまったく本質的でない。ただし、J
ava(登録商標)を使用する場合、説明した本発明を利用すると、Java(
登録商標)を使ってアプリケーションを作成するのに慣れているプログラマであ
ればVPコードに関して理解していなくてもまたさらにはVPコードについて何
も知らなくても自分が好む言語でプログラムを開発できる。
明の全体的な概念はもっと一般的であり、JVMを使用することも、あるいは実
際にJava(登録商標)を使用することもまったく本質的でない。ただし、J
ava(登録商標)を使用する場合、説明した本発明を利用すると、Java(
登録商標)を使ってアプリケーションを作成するのに慣れているプログラマであ
ればVPコードに関して理解していなくてもまたさらにはVPコードについて何
も知らなくても自分が好む言語でプログラムを開発できる。
【図1】
JVM内の従来のJITコンパイラの動作を示す図である。
【図2】
本発明の好ましい実施形態の2段階変換プロセスを示す図である。
【図3】
代表的な従来技術のクライアント/サーバシステムの図である。
【図4】
クライアント/サーバシステム内の本発明の好ましい実施形態の動作を示す図
である。
である。
【図4a】
図4に示されている実施形態の一変種の図である。
【図5】
無線ネットワーク内の本発明の動作を示す図である。
【図6】
本発明の好ましい実施形態により、バイトコードから中間仮想プロセッサコー
ドに変換するいくつかの態様を示す図である。
ドに変換するいくつかの態様を示す図である。
【図7】
本発明の好ましい動作の概略図である。
─────────────────────────────────────────────────────
フロントページの続き
(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,TZ,UG,ZW
),EA(AM,AZ,BY,KG,KZ,MD,RU,
TJ,TM),AE,AL,AM,AT,AU,AZ,
BA,BB,BG,BR,BY,CA,CH,CN,C
R,CU,CZ,DE,DK,DM,EE,ES,FI
,GB,GD,GE,GH,GM,HR,HU,ID,
IL,IN,IS,JP,KE,KG,KP,KR,K
Z,LC,LK,LR,LS,LT,LU,LV,MA
,MD,MG,MK,MN,MW,MX,NO,NZ,
PL,PT,RO,RU,SD,SE,SG,SI,S
K,SL,TJ,TM,TR,TT,TZ,UA,UG
,US,UZ,VN,YU,ZA,ZW
Claims (29)
- 【請求項1】 それぞれが複数のメソッドを含むクラスの形で提供されるプ
ログラムコードからなるオブジェクト指向コンピュータプログラムをロードする
方法であって、 前記複数のメソッドは、前記クラスのプログラムコードを必ずしも保持しない
実行環境ですぐに実行できるように、クラスのメソッドをコンパイル済みコード
にコンパルするステップと、 前記コードを保持するステップと を具えたことを特徴とする方法。 - 【請求項2】 前記プログラムコードは、前記実行環境にロードされないこ
とを特徴とする請求項1記載の方法。 - 【請求項3】 前記プログラムコードは、前記実行環境にロードされ、その
後破棄されることを特徴とする請求項1記載の方法。 - 【請求項4】 前記メソッドをコンパイルするステップは、 前記メソッドを、仮想プロセッサの命令セットを使用する仮想プロセッサコー
ドに変換し、その後前記仮想プロセッサコードをネイティブコードに変換するス
テップを具えたことを特徴とする請求項1記載の方法。 - 【請求項5】 前記仮想プロセッサコードは、前記実行環境にロードされな
いことを特徴とする請求項4記載の方法。 - 【請求項6】 前記仮想プロセッサコードは、前記実行環境にロードされ、
その後破棄されることを特徴とする請求項4記載の方法。 - 【請求項7】 前記実行環境は、クライアントデバイスに常駐し、 前記コンパイル済みコードは、通信ネットワークを介して前記クライアントデ
バイスに送信され、 前記プログラムコードは、必ずしも送信されないことを特徴とする請求項1記
載の方法。 - 【請求項8】 前記実行環境は、クライアントデバイスに常駐し、 前記仮想プロセッサコードは、通信ネットワークを介して前記クライアントデ
バイスに送信され、 前記プログラムコードは、必ずしも送信されないことを特徴とする請求項4記
載の方法。 - 【請求項9】 前記実行環境は、クライアントデバイスに常駐し、 前記ネイティブコードは、通信ネットワークを介して前記クライアントデバイ
スに送信され、 前記プログラムコードは、必ずしも送信されないことを特徴とする請求項4記
載の方法。 - 【請求項10】 クラスの複数のメソッドをコンパイルして前記メソッドを
スタティックリンクするステップを含むことを特徴とする請求項1記載の方法。 - 【請求項11】 前記コンパイル済みコードを前記実行環境にロードする際
に、クラスの複数のメソッドを結合し、前記メソッドをダイナミックリンクする
ステップを含むことを特徴とする請求項1記載の方法。 - 【請求項12】 前記コンパイル済みコードを前記実行環境で実行する際に
、クラスの複数のメソッドをコンパイルし、前記メソッドをダイナミックバイン
ドするステップを含むことを特徴とする請求項1記載の方法。 - 【請求項13】 前記クラスは、Java(登録商標)クラスであることを
特徴とする請求項1記載の方法。 - 【請求項14】 前記請求項1ないし13のいずれかに記載のプログラムを
ロードするステップを含むコンピュータプログラムを実行するステップと、 前記実行環境で前記プログラムを実行するステップと を具えたことを特徴とする方法。 - 【請求項15】 前記請求項1ないし14のいずれかに記載の方法を実行す
るように手直しされたことを特徴とするコンピュータプログラム。 - 【請求項16】 それぞれが複数のメソッドを含むクラスの形で提供される
コードからなるオブジェクト指向コンピュータプログラムをロードするコンピュ
ータシステムであって、 前記システムは、実行環境を定義し、前記実行環境ですぐに実行できるように
クラスのメソッドをコンパイル済みコードにコンパルし、該コンパイル済みコー
ドを保持する動作が可能であり、 前記実行環境は、さらに前記クラスのプログラムコードを必ずしも保持しない
ことを特徴とするコンピュータシステム。 - 【請求項17】 伝送手段を介して複数のクライアントデバイスと通信する
サーバーを具えた分散コンピュータシステムであって、 それぞれのクライアントデバイスは、複数のメソッドをそれぞれが含むクラス
の形で提供されるプログラムコードを含むオブジェクト指向コンピュータプログ
ラムを実行するためのそれぞれの実行環境を有し、 (a)プログラムコードをコンパイル済みコードにコンパイルする手段と、 (b)クライアントデバイスの1つで実行するためにいずれかのクラスのメソ
ッドのうちから1つ選択する手段と、 (c)コンパイル済みコードをサーバから前記クライアントデバイスに送信す
るが、必ずしも選択したクラスのプログラムコードを送信しない手段と を具えたことを特徴とする分散コンピュータシステム。 - 【請求項18】 前記プログラムコードをコンパイルする手段は、前記プロ
グラムコードを、仮想プロセッサの命令セットを使用する仮想プロセッサコード
に変換する手段と、 仮想プロセッサコードをネイティブコードに変換する手段と を具えたことを特徴とする請求項17記載のコンピュータシステム。 - 【請求項19】 前記コンパイル済みコードを送信する手段は、前記仮想プ
ロセッサコードを前記サーバから前記クライアントデバイスに送信する手段 を具えたことを特徴とする請求項18記載のコンピュータシステム。 - 【請求項20】 前記コンパイル済みコードを送信する手段は、前記ネイテ
ィブコードを前記サーバから前記クライアントデバイスに送信する手段 を具えたことを特徴とする請求項18記載のコンピュータシステム。 - 【請求項21】 前記送信手段は、無線ネットワークで構成されるか、また
は、無線ネットワークを含むことを特徴とする請求項17から20のいずれかに
記載のコンピュータシステム。 - 【請求項22】 前記クライアントデバイスは、携帯電話であることを特徴
とする請求項21記載のコンピュータシステム。 - 【請求項23】 前記クライアントデバイスは、ゲームコンソールであるこ
とを特徴とする請求項21記載のコンピュータシステム。 - 【請求項24】 前記クライアントデバイスは、携帯型コンピュータである
ことを特徴とする請求項21記載のコンピュータシステム。 - 【請求項25】 複数のメソッドをそれぞれが含むクラスの形で提供される
プログラムコードを含むオブジェクト指向コンピュータプログラムを複数のクラ
イアントデバイスにロードするためのコンピュータシステムであって、 前記各デバイスは、それぞれの実行環境を具え、 (a)選択したクラスの選択したメソッドをコンパイル済みコードにコンパイ
ルする手段と、 (b)前記プログラムコードを実行環境に必ずしもロードすることなく、実行
可状態にあるコンパイル済みコードをそれぞれの実行環境にロードする手段と を具えたことを特徴とするコンピュータシステム。 - 【請求項26】 それぞれの前記実行環境で選択されたメソッドをスタティ
ックリンクするように配列されていることを特徴とする請求項25記載のコンピ
ュータシステム。 - 【請求項27】 請求項1ないし14のいずれかに記載の方法を実行するよ
うに手直しされたことを特徴とするコンピュータプログラム。 - 【請求項28】 請求項1ないし14のいずれか記載の方法を実行するよう
に手直しされたコンピュータプログラムを伝送することを特徴とするデータキャ
リア。 - 【請求項29】 請求項1ないし14のいずれかに記載の方法を実行するよ
うに手直しされたコンピュータプログラムを表すことを特徴とするデータストリ
ーム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB9921720.0 | 1999-09-14 | ||
GBGB9921720.0A GB9921720D0 (en) | 1999-09-14 | 1999-09-14 | Loading object-oriented computer programs |
PCT/GB1999/004415 WO2001019159A2 (en) | 1999-09-14 | 1999-12-23 | Loading object-oriented computer programs |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2003509761A true JP2003509761A (ja) | 2003-03-11 |
Family
ID=10860897
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001522815A Pending JP2003509761A (ja) | 1999-09-14 | 1999-12-23 | オブジェクト指向コンピュータプログラムのロード |
Country Status (9)
Country | Link |
---|---|
US (2) | US7191434B2 (ja) |
EP (2) | EP1416378A3 (ja) |
JP (1) | JP2003509761A (ja) |
KR (1) | KR20020085876A (ja) |
AU (1) | AU776957B2 (ja) |
CA (1) | CA2381779A1 (ja) |
GB (1) | GB9921720D0 (ja) |
HK (1) | HK1048525A1 (ja) |
WO (1) | WO2001019159A2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008502968A (ja) * | 2004-06-15 | 2008-01-31 | ジェムプリュス | 中間オブジェクト指向言語を備えるソフトウェアをポータブル・デバイスにロードするための方法 |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6865730B1 (en) * | 2000-03-08 | 2005-03-08 | International Business Machines Corporation | Interprocedural analysis and optimization of an object oriented program in the presence of dynamic class loading |
US20020087958A1 (en) * | 2000-04-20 | 2002-07-04 | International Business Machines Corporation | Method and apparatus of transforming a class |
US20030149967A1 (en) * | 2000-05-04 | 2003-08-07 | Tomihisa Kamada | Information processing method and system |
US7082597B2 (en) * | 2001-06-20 | 2006-07-25 | Sun Microsystems, Inc. | Representation of objects in a Java programming environment |
US7036120B2 (en) * | 2001-07-31 | 2006-04-25 | Sun Microsystems, Inc. | Two tier clusters for representation of objects in Java programming environments |
JP3808755B2 (ja) * | 2001-11-07 | 2006-08-16 | 富士通株式会社 | Jitコンパイラを備えた仮想計算機 |
ES2198198B1 (es) * | 2002-01-29 | 2005-05-01 | Airtel Movil, S.A. | Sistema de personalizacion de las aplicaciones de una tarjeta sim o usim de un terminal movil. |
US7340730B2 (en) * | 2002-03-18 | 2008-03-04 | Sun Microsystems, Inc. | On demand, network accessible, run time compile server |
US6988099B2 (en) * | 2002-06-27 | 2006-01-17 | Bea Systems, Inc. | Systems and methods for maintaining transactional persistence |
US20040225747A1 (en) * | 2003-05-09 | 2004-11-11 | Zafer Kadi | Providing compiled bytecode applications to a wireless device |
US7219329B2 (en) * | 2003-06-13 | 2007-05-15 | Microsoft Corporation | Systems and methods providing lightweight runtime code generation |
GB0316531D0 (en) * | 2003-07-15 | 2003-08-20 | Transitive Ltd | Method and apparatus for performing native binding |
US7356814B1 (en) * | 2003-12-15 | 2008-04-08 | Electronic Data Systems Corporation | System, method, and computer program product for communicating with an LDAP server |
US7904893B2 (en) * | 2004-03-17 | 2011-03-08 | Marvell International Ltd. | Power and/or energy optimized compile/execution |
US20060265703A1 (en) | 2005-04-21 | 2006-11-23 | Holt John M | Computer architecture and method of operation for multi-computer distributed processing with replicated memory |
US7844665B2 (en) | 2004-04-23 | 2010-11-30 | Waratek Pty Ltd. | Modified computer architecture having coordinated deletion of corresponding replicated memory locations among plural computers |
DE102004058882A1 (de) * | 2004-12-06 | 2006-06-08 | Giesecke & Devrient Gmbh | Erzeugen von Programmcode in einem Ladeformat und Bereitstellen von ausführbarem Programmcode |
US7389500B2 (en) * | 2005-07-08 | 2008-06-17 | Microsoft Corporation | Selective pre-compilation of virtual code to enhance boot time emulator performance |
US20080016504A1 (en) * | 2006-07-14 | 2008-01-17 | Wesley Homer Cheng | Dynamically programmable electronic data collection system combining declarative programming and native coding |
KR101407629B1 (ko) * | 2007-06-04 | 2014-06-13 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
US8752056B2 (en) * | 2007-12-03 | 2014-06-10 | International Business Machines Corporation | Running native code across single or multi-core hybrid processor achitecture |
US8539464B2 (en) * | 2008-10-30 | 2013-09-17 | International Business Machines Corporation | Distributed just-in-time compilation |
DE102009006882A1 (de) * | 2009-01-30 | 2010-08-05 | Advanced Micro Devices, Inc., Sunnyvale | Anwendung plattformabhängiger Routinen in virtuellen Maschinen durch Einbetten einer nativen Codierung in Klassendateien |
EP2531916A1 (en) | 2010-02-03 | 2012-12-12 | Rtx A/S | Programming of a dect/cat-iq communication device |
WO2013132767A1 (ja) * | 2012-03-09 | 2013-09-12 | パナソニック株式会社 | プロセッサ、マルチプロセッサシステム、コンパイラ、ソフトウェアシステム、メモリ制御システムおよびコンピュータシステム |
US9529610B2 (en) * | 2013-12-30 | 2016-12-27 | Unisys Corporation | Updating compiled native instruction paths |
Family Cites Families (81)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5155847A (en) | 1988-08-03 | 1992-10-13 | Minicom Data Corporation | Method and apparatus for updating software at remote locations |
US5005152A (en) | 1989-04-05 | 1991-04-02 | Allen-Bradley Company | Industrial controller with decompilable user program |
AU638999B2 (en) | 1989-06-30 | 1993-07-15 | Digital Equipment Corporation | Incremental compiler for source-code development system |
JP2582956B2 (ja) | 1991-05-07 | 1997-02-19 | 三菱電機株式会社 | プログラマブル制御装置 |
SE469956B (sv) | 1991-11-27 | 1993-10-11 | Icl Systems Ab | Förfarande och arrangemang för att minska mängden information som krävs vid enhetlig revidering av programvara i ett flertal användarenheter i ett datorsystem |
JPH05257664A (ja) | 1991-12-12 | 1993-10-08 | Internatl Business Mach Corp <Ibm> | バージョン独立のオブジェクト指向アプリケーション・プログラムを生成するシステム及び方法 |
EP0573190B1 (en) | 1992-06-03 | 2001-09-05 | Sun Microsystems, Inc. | Dynamically configurable kernel |
EP0582738A1 (en) * | 1992-08-12 | 1994-02-16 | International Business Machines Corporation | Language compiler |
DE9300562U1 (de) | 1992-08-27 | 1993-03-04 | Siemens AG, 8000 München | Steuerungssystem eines Vermittlungssystems |
US5367685A (en) * | 1992-12-22 | 1994-11-22 | Firstperson, Inc. | Method and apparatus for resolving data references in generated code |
DE59309391D1 (de) | 1993-01-18 | 1999-04-01 | Siemens Ag | Realzeit-Steuerungssystem |
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 |
DE4413451A1 (de) | 1994-04-18 | 1995-12-14 | Rolf Brugger | Vorrichtung zum Vertrieb von Musikinformationen in digitaler Form |
US5560013A (en) * | 1994-12-06 | 1996-09-24 | International Business Machines Corporation | Method of using a target processor to execute programs of a source architecture that uses multiple address spaces |
US5815708A (en) | 1995-10-06 | 1998-09-29 | Sun Microsystems, Inc. | Method and apparatus for dynamically loading method call exception code in response to a software method exception generated in a client/server computer system |
US6219045B1 (en) | 1995-11-13 | 2001-04-17 | Worlds, Inc. | Scalable virtual world chat client-server system |
US6151618A (en) * | 1995-12-04 | 2000-11-21 | Microsoft Corporation | Safe general purpose virtual machine computing system |
US5727147A (en) * | 1995-12-08 | 1998-03-10 | Sun Microsystems, Inc. | System and method for resolving symbolic references to externally located program files |
GB9600823D0 (en) * | 1996-01-16 | 1996-03-20 | British Telecomm | Distributed processing |
US5848274A (en) | 1996-02-29 | 1998-12-08 | Supercede, Inc. | Incremental byte code compilation system |
US5764989A (en) | 1996-02-29 | 1998-06-09 | Supercede, Inc. | Interactive software development system |
AU2935297A (en) * | 1996-05-07 | 1997-11-26 | Webline Communications Corporation | Method and apparatus for coordinating internet multi-media content with telephone and audio communications |
US6151703A (en) * | 1996-05-20 | 2000-11-21 | Inprise Corporation | Development system with methods for just-in-time compilation of programs |
DE19620888A1 (de) | 1996-05-23 | 1997-11-27 | Siemens Ag | Verfahren zur Aktualisierung eines Teils eines Programmcodes, wobei der Programmcode in einer Interpreter-Programmiersprache vorliegt, während der Ausführung des Programmcodes, durch einen Rechner |
US5815718A (en) | 1996-05-30 | 1998-09-29 | Sun Microsystems, Inc. | Method and system for loading classes in read-only memory |
US5859982A (en) | 1996-06-05 | 1999-01-12 | Sun Microsystems, Inc. | Computer system and method for executing methods of downloaded programs with reduced run-time memory space requirements |
US5794049A (en) | 1996-06-05 | 1998-08-11 | Sun Microsystems, Inc. | Computer system and method for executing architecture specific code with reduced run-time memory space requirements |
TW359800B (en) | 1996-08-19 | 1999-06-01 | Ibm | Device independent and transfer optimised interactive client-server dialog system and method for performing interactive applications therein |
DE19637883B4 (de) | 1996-09-17 | 2005-06-16 | Fujitsu Siemens Computers Gmbh | Datenverarbeitungsanlage zur Ausführung großer Programmsysteme |
US5838978A (en) * | 1996-10-09 | 1998-11-17 | Hewlett-Packard Company | System and method of using annotations to optimize dynamically translated code in the presence of signals |
ES2184066T3 (es) | 1996-10-25 | 2003-04-01 | Schlumberger Systems & Service | Uso de un lenguaje de programacion de alto nivel con microcontrolador. |
EP0938703B1 (en) * | 1996-11-13 | 2003-07-02 | Paran, Arik | Real time program language accelerator |
WO1998037486A1 (en) * | 1997-02-18 | 1998-08-27 | International Business Machines Corporation | Method for lookup of packages and classes in java, and devices making use of this method |
US5920720A (en) * | 1997-02-25 | 1999-07-06 | Microsoft Corporation | Efficient computer based virtual machine object structure |
US5978585A (en) * | 1997-03-27 | 1999-11-02 | Inprise Corporation | Development system with improved methods for recompiling dependent code modules |
US5943496A (en) | 1997-05-17 | 1999-08-24 | Intertop Corporation | Methods for developing and instantiating object classes using a java virtual machine extension |
US6139199A (en) * | 1997-06-11 | 2000-10-31 | Sun Microsystems, Inc. | Fast just-in-time (JIT) scheduler |
US6078744A (en) * | 1997-08-01 | 2000-06-20 | Sun Microsystems | Method and apparatus for improving compiler performance during subsequent compilations of a source program |
US6442753B1 (en) * | 1997-08-28 | 2002-08-27 | International Business Machines Corporation | Apparatus and method for checking dependencies among classes in an object-oriented program |
US5966702A (en) * | 1997-10-31 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for pre-processing and packaging class files |
US6081665A (en) * | 1997-12-19 | 2000-06-27 | Newmonics Inc. | Method for efficient soft real-time execution of portable byte code computer programs |
US6219787B1 (en) * | 1997-12-22 | 2001-04-17 | Texas Instruments Incorporated | Method and apparatus for extending security model to native code |
US6295645B1 (en) | 1997-12-22 | 2001-09-25 | Texas Instruments Incorporated | Method and apparatus for providing downloadable functionality to an embedded coprocessor |
US6110226A (en) * | 1998-02-19 | 2000-08-29 | Cygnus Solutions | Java development environment using optimizing ahead-of-time compiler |
FR2775375A1 (fr) | 1998-02-23 | 1999-08-27 | Solaic Sa | Chargement de programmes informatiques en blocs |
EP0943990A3 (en) * | 1998-02-27 | 2004-12-22 | Texas Instruments Incorporated | Method and system of providing dynamic optimization information in a code interpretive runtime environment |
US6330709B1 (en) * | 1998-03-30 | 2001-12-11 | International Business Machines Corporation | Virtual machine implementation for shared persistent objects |
US6158048A (en) * | 1998-05-29 | 2000-12-05 | Intel Corporation | Method for eliminating common subexpressions from java byte codes |
US6093216A (en) * | 1998-05-29 | 2000-07-25 | Intel Corporation | Method of run-time tracking of object references in Java programs |
US6493575B1 (en) * | 1998-06-04 | 2002-12-10 | Randy J. Kesten | Fluoroscopic tracking enhanced intraventricular catheter system |
AU5079599A (en) * | 1998-06-08 | 1999-12-30 | Ericsson Inc. | Application and communication platform for connectivity based services |
US7076765B1 (en) * | 1998-06-24 | 2006-07-11 | Kabushiki Kaisha Toshiba | System for hiding runtime environment dependent part |
US6092120A (en) * | 1998-06-26 | 2000-07-18 | Sun Microsystems, Inc. | Method and apparatus for timely delivery of a byte code and serialized objects stream |
US6760907B2 (en) * | 1998-06-30 | 2004-07-06 | Sun Microsystems, Inc. | Code generation for a bytecode compiler |
US6141794A (en) * | 1998-10-16 | 2000-10-31 | Sun Microsystems, Inc. | System and method for synchronizing access to shared variables in a virtual machine in a digital computer system |
GB2343021A (en) | 1998-10-19 | 2000-04-26 | Ibm | Class loading model for object oriented programming |
JP4130713B2 (ja) * | 1998-10-21 | 2008-08-06 | 松下電器産業株式会社 | プログラム変換装置 |
US6298477B1 (en) * | 1998-10-30 | 2001-10-02 | Sun Microsystems, Inc. | Method and apparatus for selecting ways to compile at runtime |
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US6115719A (en) * | 1998-11-20 | 2000-09-05 | Revsoft Corporation | Java compatible object oriented component data structure |
US6530075B1 (en) * | 1998-12-03 | 2003-03-04 | International Business Machines Corporation | JIT/compiler Java language extensions to enable field performance and serviceability |
US6637025B1 (en) * | 1998-12-03 | 2003-10-21 | International Business Machines Corporation | Dynamic selection/definition of which class/methods should or should not be jit'ed using information stored in a jar file |
US6338160B1 (en) * | 1998-12-08 | 2002-01-08 | Nazomi Communications, Inc. | Constant pool reference resolution method |
US6523171B1 (en) * | 1998-12-29 | 2003-02-18 | International Business Machines Corporation | Enhanced source code translator from procedural programming language (PPL) to an object oriented programming language (OOPL) |
US6631521B1 (en) * | 1999-03-29 | 2003-10-07 | International Business Machines Corporation | System, method, and program for performing program specific operations during the uninstallation of a computer program from a computer system |
US6748588B1 (en) * | 1999-03-31 | 2004-06-08 | Microsoft Corporation | One-pass greedy-pattern-matching finite-state-machine code generation |
US6295642B1 (en) * | 1999-04-29 | 2001-09-25 | International Business Machines Corporation | Method and apparatus for partial just in time compiling in a data processing system |
US6584612B1 (en) * | 1999-07-15 | 2003-06-24 | International Business Machines Corporation | Transparent loading of resources from read-only memory for an application program |
US6745385B1 (en) * | 1999-09-01 | 2004-06-01 | Microsoft Corporation | Fixing incompatible applications by providing stubs for APIs |
US6996829B2 (en) * | 2000-02-25 | 2006-02-07 | Oracle International Corporation | Handling callouts made by a multi-threaded virtual machine to a single threaded environment |
US6745386B1 (en) * | 2000-03-09 | 2004-06-01 | Sun Microsystems, Inc. | System and method for preloading classes in a data processing device that does not have a virtual memory manager |
GB0013132D0 (en) * | 2000-05-31 | 2000-07-19 | Ibm | Virtual machine with reiitialisation |
US6973646B1 (en) * | 2000-07-21 | 2005-12-06 | International Business Machines Corporation | Method for compiling program components in a mixed static and dynamic environment |
US6704926B1 (en) * | 2000-09-28 | 2004-03-09 | International Business Machines Corporation | Bimodal Java just-in-time complier |
JP2002169696A (ja) * | 2000-12-04 | 2002-06-14 | Mitsubishi Electric Corp | データ処理装置 |
US6851111B2 (en) * | 2000-12-15 | 2005-02-01 | International Business Machines Corporation | System and method for class loader constraint checking |
US6691306B1 (en) * | 2000-12-22 | 2004-02-10 | Lsi Logic Corporation | Use of limited program space of general purpose processor for unlimited sequence of translated instructions |
US6915511B2 (en) * | 2001-05-22 | 2005-07-05 | Sun Microsystems, Inc. | Dynamic class reloading mechanism |
US7051323B2 (en) * | 2002-10-08 | 2006-05-23 | Sun Microsystems, Inc. | Method and apparatus for initializing romized system classes at virtual machine build time |
US7031990B2 (en) * | 2002-12-06 | 2006-04-18 | Sun Microsystems, Inc. | Combining external and intragenerational reference-processing in a garbage collector based on the train algorithm |
US7143398B2 (en) * | 2003-03-13 | 2006-11-28 | Che-An Chang | Application infa operating system |
-
1999
- 1999-09-14 GB GBGB9921720.0A patent/GB9921720D0/en not_active Ceased
- 1999-12-23 WO PCT/GB1999/004415 patent/WO2001019159A2/en active IP Right Grant
- 1999-12-23 JP JP2001522815A patent/JP2003509761A/ja active Pending
- 1999-12-23 EP EP03022724A patent/EP1416378A3/en not_active Withdrawn
- 1999-12-23 CA CA002381779A patent/CA2381779A1/en not_active Abandoned
- 1999-12-23 EP EP99962451A patent/EP1214649A2/en not_active Withdrawn
- 1999-12-23 AU AU18808/00A patent/AU776957B2/en not_active Ceased
- 1999-12-23 KR KR1020027003350A patent/KR20020085876A/ko active IP Right Grant
-
2002
- 2002-03-08 US US10/094,241 patent/US7191434B2/en not_active Expired - Fee Related
- 2002-11-25 HK HK02108518.4A patent/HK1048525A1/zh unknown
-
2005
- 2005-06-24 US US11/165,780 patent/US20050240907A1/en not_active Abandoned
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008502968A (ja) * | 2004-06-15 | 2008-01-31 | ジェムプリュス | 中間オブジェクト指向言語を備えるソフトウェアをポータブル・デバイスにロードするための方法 |
US7913265B2 (en) | 2004-06-15 | 2011-03-22 | Gemalto Sa | Method of loading software with an intermediate object oriented language in a portable device |
Also Published As
Publication number | Publication date |
---|---|
EP1416378A3 (en) | 2006-10-25 |
WO2001019159A2 (en) | 2001-03-22 |
HK1048525A1 (zh) | 2003-04-04 |
EP1214649A2 (en) | 2002-06-19 |
US20040015914A1 (en) | 2004-01-22 |
US7191434B2 (en) | 2007-03-13 |
WO2001019159A3 (en) | 2001-12-06 |
CA2381779A1 (en) | 2001-03-22 |
EP1416378A2 (en) | 2004-05-06 |
AU1880800A (en) | 2001-04-17 |
US20050240907A1 (en) | 2005-10-27 |
GB9921720D0 (en) | 1999-11-17 |
KR20020085876A (ko) | 2002-11-16 |
AU776957B2 (en) | 2004-09-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2003509761A (ja) | オブジェクト指向コンピュータプログラムのロード | |
AU777773B2 (en) | Translating and executing object-oriented computer programs | |
US11030105B2 (en) | Variable handles | |
US6484309B2 (en) | Enabling software designed for one operating system to operate on another operating system | |
EP0737919B1 (en) | Method and system for providing interoperability among processes written to execute on different operating systems | |
US8402460B2 (en) | Installing and updating interpreted programming language applications using a designated virtual machine | |
EP0620522A2 (en) | High performance dynamic linking through caching | |
JP2002508544A (ja) | 変更定数プールを備えたJavaランタイム・システム | |
JP5845221B2 (ja) | 高速パッチベースメソッドコール | |
JP2003509767A (ja) | オブジェクト指向コンピュータプログラムのロード | |
WO2012047134A1 (ru) | Система и способ распределенных вычислений | |
US11243876B2 (en) | Techniques for accessing off-heap memory | |
US11347661B2 (en) | Transitioning between thread-confined memory segment views and shared memory segment views | |
CN111857886A (zh) | 一种软件运行方法、系统、计算设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051128 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20051128 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20081205 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090428 |