JP2003509767A - オブジェクト指向コンピュータプログラムのロード - Google Patents

オブジェクト指向コンピュータプログラムのロード

Info

Publication number
JP2003509767A
JP2003509767A JP2001523960A JP2001523960A JP2003509767A JP 2003509767 A JP2003509767 A JP 2003509767A JP 2001523960 A JP2001523960 A JP 2001523960A JP 2001523960 A JP2001523960 A JP 2001523960A JP 2003509767 A JP2003509767 A JP 2003509767A
Authority
JP
Japan
Prior art keywords
class
computer system
client device
virtual processor
methods
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2001523960A
Other languages
English (en)
Other versions
JP2003509767A5 (ja
Inventor
アンドリュー ヒンスリー クリストファー
Original Assignee
タオ グループ リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=10860898&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP2003509767(A) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by タオ グループ リミテッド filed Critical タオ グループ リミテッド
Publication of JP2003509767A publication Critical patent/JP2003509767A/ja
Publication of JP2003509767A5 publication Critical patent/JP2003509767A5/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation

Abstract

(57)【要約】 オブジェクト指向コンピュータプログラムを実行する方法は、実行環境にロードする工程を具え、クラス全体を必ずしもロードすることなく、選択された方法を実行する。マルチプロセッサ環境では、サーバ(410)は、プロセッサに独立した仮想プロセッサツール(482)の記憶手段を有する。個々のツールは、いずれも元のクラスファイル(480)を転送することなく、要求に応じて、通信ネットワーク(450)を介して、個々のクライアント(430,440)に転送される。各クライアントは、ダウンロードプロセッサ依存型ツールをネイティブコードに翻訳する小型プロセッサ独立型ネイティブトランスレータ(424,425)を持ち運ぶことができる。本発明は、種々のシステム、特に、例えば移動電話ネットワークのようなワイヤレスクライアントネットワークに適用可能である。

Description

【発明の詳細な説明】
【0001】 本発明は、一般的に、オブジェクト指向コンピュータプログラムをロードする
方法とそのためのコンピュータシステムに関するものである。具体的には、本発
明はコードがクラスファイル形式で提供され、各々が複数の方法を含むオブジェ
クト指向プログラムに関するものであるが、ただしそれに限るわけではない。
【0002】 オブジェクト指向プログラミング言語のよく知られている例として「Java
(登録商標)」(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ではそのデータおよびプログラムコードへの参照が実
際のクラスファイルから派生したクラスの参照と同じように機能することを保証
していなければならない。
【0004】 クラスファイル内のプログラムコードは、Java(登録商標)バイトコード
(JBC)または単にバイトコードと呼ばれる命令形式である。クラス内の各メ
ソッドは、バイトコードの固有の並びを持つ。メソッドのバイトコードは、JB
C命令の並びである。
【0005】 JVMがバイトコードの実行に使用する方式は次の2種類がある。 ・ インタプリタ。 この方式では、JVMは、各JBC命令を順番に見てデ
コードし、その命令が要求するアクションを実行することによりバイトコードを
実行するプログラムコード断片であるインタプリタを内蔵している。この方式は
実装が最も簡単であるが、欠点は、単一の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内の参照されているものへ
の直接ポインタとなるようにする。
【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命令(またはそのコンパイルされた等価物)が
初めて実行されるときにロードされる。
【0009】 動作中、特定のクラスの特定のメソッドが呼び出されたときに、必要とされる
特定のクラスがJVM内のすでに常駐している場合も常駐していない場合もある
。必要なクラスが常駐していない場合、そのクラスのクラスファイルをまずJV
M外から(たとえば、ディスクまたはネットワークから)ロードし、リンクし、
初期化してJVM内に配置する必要がある。次に、必要なメソッドを見つけるた
めに、そのクラスについてメソッドのリストを検索する。必要なメソッドが見つ
かったら、そのメソッドのJava(登録商標)バイトコードを実行し、ret
urn命令が出現したら、そこでそのメソッドを終了し、制御をそのメソッドの
呼び出し元に返す。メソッドの呼び出しは、メソッドで捕らえられない例外が投
げられた場合も終了する。
【0010】 図1は、JVMでJITコンパイラを使用する代表的な従来技術による実装を
示している。JITコンパイラ120は、使用する直前にクラスバイトコード1
10を取り出し、特定のプロセッサ上で実行できるようにネイティブコード13
0に変換する。クラス140の残り(または場合によってはクラス全体)は、実
行中にネイティブコード130がそれを参照する必要があればメモリ内に利用で
きる形で配置されたままになる。
【0011】 図3は、マルチプロセッサ環境の代表的な従来技術によるJVM実装を示して
いる。サーバ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で一般的に示されているように、ローカルメモリ内に留まることにな
る。
【0013】 他の従来技術の配置(図には示されていない)では、クライアントのJIT
231、241はサーバ210上に維持することができ、ネイティブコードへの
変換はクライアント230、240ではなくそこで実行される。
【0014】 従来技術の配置にはいくつかの欠点がある。
【0015】 まず、それぞれの場合に、クライアントごとに大きな実行環境が必要になると
いう点である。さらに、Java(登録商標)クラスファイル211またはネイ
ティブバージョン233、243のいずれかがクラスファイルの残り234、2
44とともに、通信ネットワーク250上で送信される。実際に、いずれの方式
も満足なものではなく、特に、クラスファイルは通常大きいので携帯電話ネット
ワークなどの無線クライアントネットワークが利用される状況では不十分である
【0016】 本発明の第1の態様によれば、複数のメソッドをそれぞれが含むクラスの形で
提供されるコードを含むオブジェクト指向コンピュータプログラムをロードする
方法を提供し、前記方法は、 (a)実行するためにいずれかのクラスのメソッドのうちから1つ選択するス
テップと、 (b)必ずしも選択したクラス全体を実行環境にロードせずに、選択したメソ
ッドを実行環境にロードするステップを含む。
【0017】 本発明の方法は、Java(登録商標)仮想マシン(JVM)の動的機能すべ
てを実装するが、従来の方式に比べて使用メモリが非常に低減されている。
【0018】 本発明の好ましい実施形態では、通信ネットワーク間でのバインド/リンク、
ロード、コンパイル、および送信を細かな粒度で制御できる。より具体的には、
粒度は、従来のオブジェクト指向システムの場合のようなクラスレベルではなく
メソッド/ツールレベルである。本発明は、Java(登録商標)仮想マシン(
JVM)環境に特に適用できるが、それに限るわけではない。本発明は、全部の
JVMリンク方式、つまりスタティックリンク、ロード時ダイナミックリンク、
および遅延ダイナミックバインディングに対応する。本発明の好ましい実施形態
の具体的応用分野として、無線通信(無線クライアントネットワーク)、および
特にただしそれに限るわけではないが携帯電話ネットワークがある。本発明は、
さらに、他の組み込みデバイス、好ましくはネットワーク接続デバイス、たとえ
ば(これに限るわけではないが)携帯型コンピュータ、ゲームコンソール、カメ
ラ、さらには他のどのようなタイプのネットワーク接続またはネットワーク接続
可能デバイスにも適用できる。一実施形態では、システムは無線ネットワークか
らなる、あるいは無線ネットワークを含むが、他の実施形態では、プライベート
またはパブリック固定ネットワークまたはインターネットを含むことができる。
クライアントデバイスが無線通信を利用できない場合、必要に応じてインターネ
ットに結合する手段を備えることもできる(たとえば、標準モデムやISDNリ
ンクを介して)。このような方法で、本発明は、さまざまな組み込みデバイス、
たとえば、カメラ、テレビ、洗濯機、自動車、さらに事実上考え得るどのような
タイプのコンピュータ操作デバイスにも適用可能と思われる。
【0019】 本発明の一利点は、無線クライアントネットワークに適用したときに、(メソ
ッド/ツールの)個々の送信の時間が、クラスファイル全部をダウンロードする
必要のある従来のシステムに比べて著しく短縮されるという点である。つまり、
ネットワークプロバイダは、ネットワークの仮想回線を長時間開いたままにする
必要がないということである。送信する小さな各メソッド/ツールは、必要なら
ば、別のルートに送ることもできる。さらに、送信する異なるデータチャンクの
サイズが小さいため、冗長性および誤り訂正が少なくて済む。したがって、ネッ
トワーク上の負荷は、単にデータ転送速度を考慮して期待した以上に軽減される
場合がある。
【0020】 本発明の好ましい実施形態は、実行前に(解釈実行するのではなく)コンパイ
ルするオブジェクト指向コンピュータプログラムでの使用に特に適用できる。本
発明を分散コンピュータシステムのコンテキストで使用する場合、個々のメソッ
ドをネットワーク経由でクライアントデバイスに送信する前または後にコンパイ
ルすることができる。
【0021】 本発明は仮想プロセッサの命令セットを使用する複数の仮想プロセッサツール
にクラスを変換する予備的なステップを含むのが好ましい。次に、実行のためメ
ソッドの1つを選択するステップに、仮想プロセッサツールの1つを選択するス
テップを含めることができる。ネットワーク接続されたシステムのコンテキスト
で使用する場合、仮想プロセッサツールをネットワーク上で個別にクライアント
デバイスに送信するか、またはそれとは別に、個の仮想プロセッサツールをまず
最初にコンパイルし、それからネイティブのコンパイル済みコードをネットワー
クで送信することができる。
【0022】 本発明はさらに、前述のメソッドを実行するように改造したコンピュータシス
テムにも拡大適用される。
【0023】 本発明はさらに、それぞれが複数のメソッドを含むクラスの形で提供されるコ
ードを含むオブジェクト指向コンピュータプログラムをロードかつ/または実行
するコンピュータシステムに拡大適用され、前記システムは実行環境を定義し、
実行のためいずれかのクラスのメソッドの1つを選択し、必ずしも選択したクラ
スの全体を実行環境にロードせずに選択したメソッドを実行環境にロードするよ
うに動作が可能である。
【0024】 本発明の他の態様によれば、伝送手段を介して複数のクライアントデバイスと
通信するサーバーを備える分散コンピュータシステムを提供し、それぞれのクラ
イアントデバイスは、複数のメソッドをそれぞれが含むクラスの形で提供される
コードを含むオブジェクト指向コンピュータプログラムを実行するためのそれぞ
れの実行環境を持ち、前記システムは、 (a)クライアントデバイスの1つで実行するためにいずれかのクラスのメソ
ッドのうちから1つ選択する手段と、 (b)必ずしも選択したクラス全体を前記実行環境にロードせずに、選択した
メソッドを前記クライアントデバイス内の実行環境にロードする手段を備える。
【0025】 本発明は、オブジェクト指向コンピュータプログラムの方法と装置に拡大適用
されるだけでなく、そのようなプログラムのコンパイル、そのようなプログラム
のバインド、そのようなプログラムの実行、およびそのようなプログラムの送信
を通信ネットワーク上で実行するための方法と装置にも拡大適用される。
【0026】 最後に、本発明はさらに、データキャリア上で実装されているいないに関係な
く、説明したメソッドのいずれかを実装するコンピュータプログラムにも拡大適
用される。さらに、説明したメソッドを実行するコンピュータプログラムを表す
データストリームにも拡大適用される。
【0027】 「コード」という単語を説明と請求項で使用している場合、これはデータがプ
ログラム自体の一部であるデータを含むことは理解されるであろう。したがって
、制限することなく、「コード」という表現は定数、変数名および型、フラグ、
ポインタ、オブジェクト名などを含む。
【0028】 本発明は、さまざまな方法で実施することができ、また添付図面を参照しなが
ら例を用いて特定の一実施形態を説明する。
【0029】 図面の簡単な説明で説明されている図1は、JVM内のJITコンパイラがプ
ロセッサ独立のバイトコードからプロセッサ依存のネイティブコードに変換し、
特定のプロセッサ上で実行する方法を示している。 本発明では、バイトコード
からネイティブコードへの変換は次のように2つの異なる段階に分けて実行する
。 1.クラスファイルを中間プロセッサ独立形式に変換するステップ。これは仮
想プロセッサまたはVPコードと呼ばれる。コンバータ自体は、好ましい実装で
は「jcodeトランスレータ」と呼ばれている。 2.中間VP形式からネイティブマシンコードに変換するステップ。コンバー
タはここでは、「ネイティブトランスレータ」と呼ばれる。
【0030】 図2は、クラスバイトコードからネイティブコードへの変換を詳細に示す。ク
ラスバイトコード210は、クラスベリファイヤ(class verifie
r)211により最初に妥当性の確認が行われる。これは、個々のバイト自体を
チェックするだけでなく、有効な外部および内部参照もチェックする。クラスベ
リファイヤは、必要ならば、追加クラスをロードし、外部参照をチェックする。
【0031】 コードは、チェックが済むと、jcodeトランスレータ212に渡され、そ
こで、以下に詳述するように、VPコード213に変換される。VPコード21
3は、ネイティブトランスレータ214によってネイティブコード230に変換
される。
【0032】 クラスベリファイヤ211、jcodeトランスレータ212、VPコード2
13がすべてプロセッサ独立であることを理解することが重要であり、これはネ
イティブトランスレータ214のみであり、もちろんプロセッサ固有の最終ネイ
ティブコード230である。
【0033】 図2の右側には、変換プロセスで操作されているオブジェクトの概略表現が示
されている。プロセスは、複数の個別メソッド202を含むJava(登録商標
)クラスファイル201の形のクラスバイトコードから始まる。jcodeトラ
ンスレータは、クラスファイルを複数の個々の仮想プロセッサツール203に変
換する。実行するアプリケーションに応じて、必要な仮想プロセッサツール20
3を選択し、それらの選択したツール(およびそれらのツールのみ)がネイティ
ブトランスレータによって個々のネイティブメソッド204に変換される。元の
クラスファイル全体201が必ずしもネイティブトランスレータ214に渡され
るわけではなく、実際にアプリケーションによって必要とされる仮想プロセッサ
ツール203のみが変換され、最終的にクライアント上で実行できるように格納
されることを理解することが重要である。変換プロセスが完了したら、クラスフ
ァイル201全体だけでなくVPツール203もメモリから破棄される。個々の
ネイティブメソッド204のみが残るため、メモリ利用効率が非常に高い。
【0034】 図4は、異機種マルチプロセッサ環境内で好ましい実施形態を使用する状況の
概略を示す。これは、図3に示されている対応する従来技術の方式と比較すべき
である。
【0035】 図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内に収められる。
【0036】 図4に示されているように、サーバ上でVPを使用すると、クラスファイルの
検証とコンパイルの第1段階(VPへの変換)をサーバで1回だけ実行できる。
次に、実行前に(プロセッサタイプにより異なる)ネイティブ変換のみをクライ
アントデバイスで実行する必要がある。このような配列により、サーバで更新さ
れたクラスを簡単に供給することができ、しかも、それらのクラスを使用しよう
としている特定のクライアントの詳細をいっさい知る必要がない。更新されたク
ラスは、クラスバイトコード内で1回だけ修正する必要があり、その後、1回だ
けVPに変換する。VPは、必要に応じて、クライアントデバイスに送信され、
エンドユーザに対しまったく透過的な方法でクライアントでネイティブコードへ
の最終変換を実行できる。さらに、新しいタイプのクライアントが異なるネイテ
ィブコードを必要とする市場に出回った場合も、サーバやVPコードへの修正は
必要ない。クライアントメーカーは単に、適切なネイティブトランスレータをク
ライアントに提供するだけであり、デバイスはサーバで人手が介在することなく
動作する。
【0037】 説明した方式では、ネットワークで、Java(登録商標)クラスファイル4
80をダウンロードする必要も、また個々のメソッド481をすべてダウンロー
ドする必要もない。個々のクライアントアプリケーションで実際に必要とするV
Pツールのみをネットワークで送信するればよい。必要なVPツールは、オンデ
マンドでダウンロードしたり(たとえば、クライアントからサーバに返される制
御信号を使って)、あるいはそれとは別に、サーバ側で必要と判断したときに送
信することができる。一実施形態では、たとえば、サーバは更新されたVPツー
ルをネットワークで送信し、クライアント上で実行されているアプリケーション
プログラムを更新することができる。これは、リアルタイムで、エンドユーザに
まったく透過的に実行することもできる。それとは別に、あるいはそれに加えて
、個々の送信されたVPツールは「アド−イン」、つまりユーザがクライアント
上で実行するアプリケーションプログラムに追加しようとする追加機能を表すこ
とができる。1つの特に便利な方式では、クライアントでコードを使用できない
アプリケーションプログラムにおいて機能を使用しようとしたときに、クライア
ントは自動的に、必要なVPツールをダウンロードすることを要求するサーバに
信号を送信する。サーバは、ローカルネイティブトランスレータ424、425
によってネイティブ形式に変換された要求VPツールを送信することにより応答
する。
【0038】 図4aは、個々のネイティブトランスレータがサーバ上に保持される他の実施
形態を示している。図4aでは、参照番号は図4で使用されているのと同じ意味
を持つ。
【0039】 この実施形態の一バージョンでは、クライアントプロセッサのそれぞれのネイ
ティブメソッドの完全な集まりがサーバ上のそれぞれのネイティブコードストア
432′、442′内に格納される。必ずしも前もってどのメソッドが個々のク
ライアントに必要なのかを判断できないため、VPツール482全体をそれぞれ
のネイティブトランスレータ424、425に渡し、ネイティブメソッド483
、484の包括的選択を行うことが好ましい。クライアントによって特定の新し
いメソッドまたは更新されたメソッドが呼ばれると、あるいはサーバによって送
信が要求されると、通信ネットワーク450を介して適切な個々のネイティブメ
ソッドが送信される。前のように、個々のメソッドのみが送信され、クラス全体
もまた元のクラスから作成されたネイティブメソッドすべても送信されない。
【0040】 さらに他の方法では、サーバは可能なクライアントプロセッサごとに予め変換
されたメソッドの完全な集合体を保持する必要はない。その代わりに、特定のV
Pツールが必要になったときに、オンザフライで、適切なネイティブトランスレ
ータ424、425により変換し、そのネイティブメソッドを即座にクライアン
トに送信する。
【0041】 図5に示されている特定の実装が携帯電話ネットワークのそれであるとする。
ネットワークを使用する個々の携帯電話530、550はそれぞれ、ネイティブ
トランスレータ524、525とネイティブコードストア532、542を備え
る。電話の機能をアップグレードする必要がある場合、更新されたVPコードは
、中央サーバ520のVPストア523から供給される。更新されたVPコード
は地上通信網511を介して無線送信機512に送信される。その後、コードを
パケット化し、無線リンク513で個々の電話に送信する。受信したVPコード
は、自動的にネイティブコードに変換され、ネイティブコードストアに格納され
る。プロセス全体を携帯電話ユーザに透過的にすることができ、またはそれとは
別に、更新されたコードを無線リンク513を介して電話ユーザからの特定の要
求を受け取ったときに送信できる。
【0042】 この方法で携帯電話ネットワーク(または実際には他のタイプの無線クライア
ントネットワーク)を実装すると、クライアントは、クラス全体(たとえば10
KB)をダウンロードする代わりに個々のメソッド(それぞれの長さはたとえば
100バイト)をダウンロードすることができる。この方法で個々のメソッドを
送信すると、大きなファイルを送信しているときに仮想回路を長時間開いたまま
にする必要がないため無線ネットワークプロバイダには都合がよい。それぞれの
小さな個々のメソッドを別のルートで送ることもできる。また、小さなデータチ
ャンクを送信するので、冗長性および誤り訂正の手法の必要性も減じ、それによ
りネットワーク容量の増加が生データ転送速度と単に比較して期待される以上と
なる。元のクラスファイルの一部もVPツールもクライアントメモリ内に残って
いる必要がないという事実は、そのメモリ全体をネイティブメソッドの格納とネ
イティブコードでのアプリケーションの実行専用にできることを意味している。
【0043】 完全を期すため、クラスファイルをVPに変換し、VPツールをネイティブに
変換する好ましい方法について詳述することにする。これは単なる例に過ぎない
こと、また本発明は、最初のバイトコードからVPに、次にVPからネイティブ
に変換する2段階変換がある実施形態に制限されないことは理解されるであろう
【0044】 図2に戻り、クラスバイトコード210からネイティブコード230への好ま
しい2段階変換について詳述する。すでに述べたように、クラスベリファイヤ2
11はクラスバイトコードが有効かどうかをチェックする。クラスベリファイヤ
は、いくつかの実施形態では、jcodeトランスレータ内に組み込むことがで
き、そのクラスでは、クラスバイトコード210が矢印240で示されているよ
うにまっすぐjcodeトランスレータ212に渡される。
【0045】 実装されるJVMおよびバイトコード命令はスタックベースであり、オペラン
ド(数値、オブジェクトへのポインタ)はスタック上に保持され、押し込まれた
最後のアイテムが最初に取り出される仕組みをとる。バイトコード命令は通常、
スタックから1つまたは複数のオペランドを取り出して、ある種のアクションを
実行し、結果オペランド(もしあれば)をスタックに押し戻す。他方、VPはレ
ジスタベースであり、VP命令により直接アドレス指定される一組のレジスタを
持つ。命令は通常、命令で指定したレジスタからオペランドを取り、ある種のア
クションを実行し、結果オペランド(もしあれば)を命令で指定されている他の
レジスタに入れる。このレジスタベースのアーキテクチャは、VPは非常に多く
のレジスタを備え、VPへの変換を行ういずれかのシステムがレジスタの本数を
気にしなくて済むだけの数を有する以外に、大半の実際のプロセッサによく似て
いる。
【0046】 VP命令は式に基づく。単一の命令は通常、1つまたは2つのオペランドを持
ち、各オペランドには定数、レジスタ、または式を使用できる。式は、1つまた
は2つのオペランドを持ち、それぞれは定数、レジスタ、または式を使用できる
。この方式で、どのように複雑な命令でも作成できる。
【0047】 次に、クラスファイルの各部がどのように変換されるかを詳述する。説明では
、「フィックスアップ」という用語を使用するが、これはコンパイラの出力コー
ドまたはデータ内の特定の位置にアタッチされたデータの小さなアイテムであり
、その位置にあるコードまたはデータを使用する前に何らかの方法で修正する必
要があることをJVMに指示するものである。フィックスアップは、ネイティブ
コードが他のクラスまたはその中のフィールドやメソッドへの直接参照を取得で
きるように、ネイティブ命令またはデータアイテムを変更する場合に使用される
【0048】 Java(登録商標)クラスファイルは以下の部分で構成される。 ・ 名前の代わりにクラスファイルの他の部分の定数値および名前を格納し、
ここに格納される名前への参照がある定数プール。 ・ このクラス、スーパークラス、および直接スーパーインタフェースの名前
などの情報。 ・ お互いに関する情報を含むフィールドのリスト。 ・ お互いに関する情報を含むメソッドのリスト。この情報には、コードセク
ションが含まれる。そのため、メソッドごとに1つずつ、複数のコードセクショ
ンがある。
【0049】 Java(登録商標)クラスファイルは次のようにVPツールに変換される。 ・ データツール。その名前と異なり、クラスで使用するデータとはまったく
関係ない。その代わりに、名前、パラメータ、すべてのコンストラクタの型、フ
ィールド、メソッド、およびクラスのAPIを構成する他のエンティティなどを
含み、これらには限定されないクラスに関する情報を含む。これの代表的な用途
は、リフレクション(つまり、Java(登録商標)ライブラリ内のjava(
登録商標).lang.reflectの機能)である。リフレクションは、プ
ログラマがコンストラクタ、フィールド、メソッド、およびクラスに属するその
他のエンティティを列挙し、操作するためのプログラムインタフェースである。
データツールはさらに、クラスファイルが使用できなかったり、クラスファイル
がすでに変換されている状況で、検証するjcodeトランスレータによっても
使用される。クラスがVPで書かれている場合には、とにかくクラスファイルは
ない。 ・ クラスツール。これには、JVMで使用するある種のハウスキーピング情
報(割り当てるオブジェクトのサイズ、クラスのスタティックデータがあればそ
のデータ、スーパークラスおよびスーパーインタフェースなど)、と非スタティ
ックメソッドの一部または全部のコードが含まれる。 ・ 0個またはそれ以上のメソッドツール。クラスツールに現れないメソッド
はそれ独自の個別ツールを持つ。メソッドをそのメソッドのツール内に置くかど
うかの決定は、メソッドのサイズなどpの多数の要因に基づく。 ・ フィックスアップツール。フィックスアップツールは通常、特定のフィー
ルドのオブジェクト内のオフセットを決定するために使用されるフィックスアッ
プ定数値を返す。このツールは、オフセットを提供するためにフィックスアップ
時に呼び出され、バインダ/リンカは、オフセットを使用しようとするコード内
にそのオフセットを当てる。これを使って、「フィールドを取得する」と「フィ
ールドを置く」の両方をバイトコードで実装する。より一般的には、フィックス
アップツールは、フィックスアップに使用するデータを返す。これは、フィック
スアップ時にのみ決定でき、コンパイル時には決定できない。データには、クラ
スインスタンスのサイズおよびフィールドのクラスインスタンス内のオフセット
などが含まれる。 データツールは、Java(登録商標)アプリケーションがいくつかの機能(
大半はリフレクション)を使用しないことがわかっている場合に破棄することが
でき、またフィックスアップツールは、他のJava(登録商標)クラスを動的
にロードしないデバイスにJava(登録商標)アプリケーションを埋め込む場
合に破棄することができる。
【0050】 jcodeトランスレータは、スタック上のアイテムごとにVPレジスタを使
用する。
【0051】 VPコードで直接、バイトコード内から他のクラス、メソッド、またはフィー
ルドにアクセスするためのクラスファイルのメカニズムを実装するわけではない
。バイトコードには、メソッドを呼び出す(この場合、他のクラス)、フィール
ドの内容を取得する(この場合、このクラスまたは他のクラス)、値をスタック
にプッシュする、値をスタックからポップする、フィールドの内容を設定するな
どの命令がある。jcodeトランスレータは、これらを以下のいずれかの操作
を実行できるVP命令に変換する(網羅してはいない)。 ・ クラス内の非スタティックメソッド(つまり、オブジェクトポインタの渡
し先)を呼び出す。VPには、メソッドを持つクラスという概念があり、これを
使用してJava(登録商標)クラスを実装する。このようなメソッドの呼び出
しは、仮想的に(呼び出される実際のメソッドはポインタが渡されるオブジェク
トのクラスによって決まる)または非仮想的に(呼び出されるメソッドは呼び出
しで指定されたクラス内にある)行うことができる。 ・ サブルーチンを呼び出す。これは、スタティックメソッド(つまり、オブ
ジェクトポインタが渡されないメソッド)および場合によっては非スタティック
メソッドのバイトコードの呼び出しを実装するために使用される。 ・ フィックスアップツールから定数フィックスアップの値を取得する。
【0052】 クラスファイル内の定数プールは次のように変換される。 ・ 定数値(整数または浮動小数点数)を含む定数プールエントリは定数値を
参照する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のアクセスが
可能になる。 ・ フィールドまたはメソッドの名前および型を与える定数プールエントリは
直接には使用されないが、他の定数プールエントリ型またはクラスファイルの他
の部分により参照されるときに使用される。
【0053】 クラスファイル内のコードセクションは次のように変換される。 ・ 純粋に数値だけの計算を実行するコード(つまり、外部メソッドへの参照
がない)は、バイトコードからVP内の対応するツールに直接変換される。 ・ 図6に示されているように、バイトコード600にはフィールドへの参照
610が含まれており、これは呼び出し611によりフィックスアップ時にフィ
ックスアップツールに変換される。フィックスアップツールへの呼び出しは、フ
ィールドの場所を参照する値を返す。したがって、命令が実行されるまでに正し
いオフセットを含むようにパッチを当てる必要がある。 ・ スタティックメソッド620は、対応するVPツールに変換されるが、フ
ィックスアップコード621の追加がある。 ・ 非スタティックメソッド630はメソッドの呼び出しのフィックスアップ
(つまり、メソッド名への参照)をそれに追加している。これは結局、最後のネ
イティブコード内のアトムになる。
【0054】 呼び出し規則は、バイトコードとVPとでかなり異なる。Java(登録商標
)バイトコードなどの従来のバイトコードでは、サブルーチンに渡すパラメータ
はスタックに置かれ、その後に呼び出すメソッドへの参照が置かれる。次にメソ
ッドを呼び出すバイトコード命令が実行されてスタックからそのメソッド参照が
取り出され、その参照が解決され、スタックから取り出したパラメータ付きで新
しいメソッドの実行が開始する。return命令が実行されると、制御権が元
のメソッドに戻される。これはVPに変換され、宛先メソッドを指すようにフィ
ックスアップされた(このフィックスアップは静的または動的に見つけることが
できる)gos(goto subroutine)命令を実行する前にすべて
のパラメータをVPレジスタにロードする。実行権がサブルーチンに渡され、「
ret」命令が実行されると戻る。
【0055】 ファイルの他の部分は次のように変換される。 ・ クラスの名前により、コンパイラが出力したコードおよびデータを参照す
るために、JVMで使用される名前を決定する。 ・ スーパークラスの名前が、コンパイラによって出力されたコードおよびデ
ータ内のスーパークラスへの何らかの参照となる。好ましい形態では、リンク後
、ポインタがスーパークラスのコードおよびデータを指すように、フィックスア
ップがアタッチされたポインタが出力データに含まれる。 ・ 各インタフェースの名前が、出力されたコードおよびデータ内のインタフ
ェースへの何らかの参照となる。好ましい実装では、リンク後、ポインタがイン
タフェースのコードおよびデータを指すように、フィックスアップがアタッチさ
れた各インタフェースのポインタが出力データに含まれる。 ・ 各メソッドにアタッチされたデバッグ情報(およびクラスファイルに格納
されているソースファイル名)が、もしあれば、JVMが稼動する環境に適した
形式に変換される。好ましい実装では、デバッグ情報は、システムの非Java
(登録商標)部分に使用されるのと同じ形態に変換される。
【0056】 最後のVPクラスは、1つまたは複数の名前付きツールを備え、通常これは、
少なくともデータツール、クラスツール、フィックスアップツール、および0個
またはそれ以上のメソッドツールを含む。ツール名は、jcodeトランスレー
タによって自動的に生成され、それぞれの名前がクラスの名前と、そのクラスの
実装内の各ツールの機能に関連付けられる。
【0057】 図2に再び戻り、VPコードをネイティブコードに変換するネイティブトラン
スレータについて詳述する。もちろん、VPコードはそれ自体実行中アプリケー
ション内で決して直接実行されるわけではなく、常に、プロセッサ依存のネイテ
ィブトランスレータによって、コードを実行するプロセッサに適したネイティブ
コードに変換される。
【0058】 ネイティブトランスレータ214は、組み込みシステム内のメモリに簡単に格
納できるように、きわめて小さなコード断片(プロセッサにもよるが150Kバ
イト程度)である。トランスレータ214は、VPレジスタを使用されている特
定のプロセッサのレジスタにマッピングする。トランスレータは、実際のプロセ
ッサのレジスタアーキテクチャの知識を利用して、出力ネイティブコード内の各
位置でどのVPレジスタを実際のプロセッサのレジスタにマッピングし、どれを
メモリ内に保持するか(アクセスするのに遅い)を決定する。トランスレータは
さらに、マシン依存の命令最適化も実行する。ネイティブコードがバインドされ
るまで、そのままふつうにフィックスアップコードのセクションを含む。バイン
ド後(あるいはときには実行時に)、フィックスアップコードは適切なマシン依
存命令で置き換えられる。たとえば、非スタティックメソッドのフィックスアッ
プは、ネイティブコード内のアトムに変換される。
【0059】 jcodeトランスレータとネイティブトランスレータは両方とも、それ自体
、VPコードで書くのが好ましく、目的のプラットフォーム上で実行するように
変換できる(ネイティブトランスレータ自体を使用して)。その初期VPコード
から、両方のトランスレータのコンパイル済みバージョンをネイティブコードに
し、トランスレータを実行する特定のプロセッサについて最適化することができ
る。jcodeトランスレータ用にVPコードをコンパイルするには、そのコー
ドをネイティブトランスレータに通す。ネイティブトランスレータ用にVPコー
ドをコンパイルするには、そのコードをネイティブトランスレータそれ自体に渡
す。
【0060】 好ましい実施形態では、Java(登録商標)仮想マシンを使用するが、本発
明の全体的な概念はもっと一般的であり、JVMを使用することも、あるいは実
際にJava(登録商標)を使用することもまったく本質的でない。ただし、J
ava(登録商標)を使用する場合、説明した本発明を利用すると、Java(
登録商標)を使ってアプリケーションを作成するのに慣れているプログラマであ
ればVPコードに関して理解していなくてもまたさらにはVPコードについて何
も知らなくても自分が好む言語でプログラムを開発できる。
【図面の簡単な説明】
【図1】 JVM内の従来のJITコンパイラの動作を示す図である。
【図2】 本発明の好ましい実施形態の2段階変換プロセスを示す図である。
【図3】 代表的な従来技術のクライアント/サーバシステムの図である。
【図4】 クライアント/サーバシステム内の本発明の好ましい実施形態の動作を示す図
である。
【図4a】 図4に示されている実施形態の一変種の図である。
【図5】 無線ネットワーク内の本発明の動作を示す図である。
【図6】 本発明の好ましい実施形態により、バイトコードから中間仮想プロセッサコー
ドに変換するいくつかの態様を示す図である。
───────────────────────────────────────────────────── フロントページの続き (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 (39)

    【特許請求の範囲】
  1. 【請求項1】 複数のメソッドをそれぞれが含むクラスの形で提供されるコ
    ードを含むオブジェクト指向コンピュータプログラムをロードする方法であって
    、 (a)実行するためにいずれかのクラスのメソッドのうちから1つ選択するス
    テップと、 (b)前記選択したクラス全体を実行環境に必ずしもロードすることなく、選
    択したメソッドを実行環境にロードするステップと を具えたことを特徴とする方法。
  2. 【請求項2】 前記実行環境に前記選択されたクラスの前記メソッドのすべ
    てを必ずしもロードすることなく、前記選択されたメソッドをロードすることを
    特徴とする請求項1記載の方法。
  3. 【請求項3】 前記実行環境に前記選択されたメソッド以外の前記選択され
    たクラスの前記メソッドのいずれも必ずしもロードすることなく、前記選択され
    たメソッドをロードすることを特徴とする請求項1記載の方法。
  4. 【請求項4】 前記選択されたクラスの前記メソッドのすべてを必ずしもコ
    ンパイルすることく、前記選択されたメソッドをコンパイルすることを特徴とす
    る請求項1記載の方法。
  5. 【請求項5】 前記選択されたメソッド以外の選択されたクラスの前記メソ
    ッドのいずれも必ずしもコンパイルすることなく、前記選択されたメソッドをコ
    ンパイルすることを特徴とする請求項1記載の方法。
  6. 【請求項6】 前記選択されたクラスのすべてのメソッドを必ずしも送信す
    ることなく、サーバから前記選択されたメソッドを実行するクライアントデバイ
    スに前記選択したメソッドを通信ネットワーク経由で送信することを特徴とする
    請求項1記載の方法。
  7. 【請求項7】 前記選択されたメソッド以外の選択されたクラスのメソッド
    のいずれも必ずしも送信することなく、サーバから前記選択されたメソッドを実
    行するクライアントデバイスに前記選択したメソッドを通信ネットワーク経由で
    送信することを特徴とする請求項1記載の方法。
  8. 【請求項8】 前記クラスは、Java(登録商標)クラスであることを特
    徴とする請求項1記載の方法。
  9. 【請求項9】 仮想プロセッサの命令セットを使用する複数の仮想プロセッ
    サツールに、前記クラスを変換する予備的なステップを含むことを特徴とする請
    求項1記載の方法。
  10. 【請求項10】 前記実行するメソッドのうちから1つ選択するステップは
    、仮想プロセッサツールのうちから1つ選択するステップを含むことを特徴とす
    る請求項1記載の方法。
  11. 【請求項11】 前記選択されたクラスから変換された前記仮想プロセッサ
    ツールすべてを必ずしもコンパイルし前記実行環境にロードすることなく、前記
    仮想プロセッサツールをコンパイルしてロードすることを特徴とする請求項10
    記載の方法。
  12. 【請求項12】 前記選択されたツール以外の、前記選択されたクラスから
    変換された前記仮想プロセッサツールのいずれも必ずしもコンパイルし前記実行
    環境にロードすることなく、前記仮想プロセッサツールをコンパイルしてロード
    することを特徴とする請求項10記載の方法。
  13. 【請求項13】 前記選択されたクラスから変換されたすべての仮想プロセ
    ッサツールをかならずしも送信することなく、サーバから前記選択されたメソッ
    ドを実行するクライアントデバイスに前記選択した仮想プロセッサツールを通信
    ネットワーク経由で送信することを特徴とする請求項10記載の方法。
  14. 【請求項14】 前記選択されたクラスから変換された仮想プロセッサツー
    ルのいずれも必ずしも送信することなく、サーバから前記選択されたメソッドを
    実行するクライアントデバイスに前記選択した仮想プロセッサツールを通信ネッ
    トワーク経由で送信することを特徴とする請求項10記載の方法。
  15. 【請求項15】 前記通信ネットワークを介して送信する前に前記選択され
    た仮想プロセッサツールをネイティブコードにコンパイルすることを特徴とする
    請求項13または14記載の方法。
  16. 【請求項16】 前記通信ネットワークを介して送信した後に、前記仮想プ
    ロセッサツールをネイティブコードにコンパイルすることを特徴とする請求項1
    3または14記載の方法。
  17. 【請求項17】 前記請求項1ないし16のいずれかに記載の方法を実行す
    るように手直しされたことを特徴とするコンピュータシステム。
  18. 【請求項18】 それぞれが複数のメソッドを含むクラスの形で提供される
    コードを含むオブジェクト指向コンピュータプログラムをロードするコンピュー
    タシステムであって、 前記システムは実行環境を定義し、実行のためいずれかの前記クラスの前記メ
    ソッドの1つを選択し、 前記選択したクラスの全体を前記実行環境に必ずしもロードすることなく、前
    記選択したメソッドを前記実行環境にロードするように動作が可能であることを
    特徴とするコンピュータシステム。
  19. 【請求項19】 伝送手段を介して複数のクライアントデバイスと通信する
    サーバーを備える分散コンピュータシステムであって、 それぞれのクライアントデバイスは、複数のメソッドをそれぞれが含むクラス
    の形で提供されるコードを含むオブジェクト指向コンピュータプログラムを実行
    するためのそれぞれの実行環境を有し、 (a)クライアントデバイスの1つで実行するためにいずれかのクラスのメソ
    ッドのうちから1つ選択する手段と、 (b)必ずしも前記選択したクラス全体を前記実行環境にロードせずに、前記
    選択したメソッドを前記クライアントデバイス内の前記実行環境にロードする手
    段と を具えたことを特徴とする分散コンピュータシステム。
  20. 【請求項20】 前記選択されたクラスの前記メソッドのすべてを必ずしも
    送信することなく、前記選択されたメソッドを前記サーバから前記クライアント
    デバイスに送信することを特徴とする請求項19記載のコンピュータシステム。
  21. 【請求項21】 前記選択されたメソッド以外の前記選択されたクラスの前
    記メソッドのいずれも必ずしも送信することなく、前記選択されたメソッドを前
    記サーバから前記クライアントデバイスに送信することを特徴とする請求項19
    記載のコンピュータシステム。
  22. 【請求項22】 前記選択されたメソッドを送信前にサーバでコンパイルす
    ることを特徴とする請求項19記載のコンピュータシステム。
  23. 【請求項23】 前記選択されたメソッドを送信後にクライアントデバイス
    でコンパイルすることを特徴とする請求項19記載のコンピュータシステム。
  24. 【請求項24】 クライアントデバイスが古くなったメソッドを使用してい
    ると判断された場合に、更新したメソッドを前記クライアントデバイスに送信す
    るようにサーバを構成することを特徴とする請求項19記載のコンピュータシス
    テム。
  25. 【請求項25】 更新されたメソッドをクライアントデバイスから要求され
    たときに、前記更新されたメソッドを前記クライアントデバイスに送信するよう
    にサーバを構成することを特徴とする請求項19記載のコンピュータシステム。
  26. 【請求項26】 要求側クライアントデバイスによる要求に従ってメソッド
    を送信するようにサーバを構成し、 受信したメソッドを動的にその実行環境にバインドするように前記要求側クラ
    イアントデバイスを構成することを特徴とする請求項19記載のコンピュータシ
    ステム。
  27. 【請求項27】 前記サーバは、複数の仮想プロセッサツールを格納し、 前記ツールは、仮想プロセッサの命令セットを使用し、前記オブジェクト指向
    プログラムの1つまたは複数のクラスの変換結果となることを特徴とする請求項
    19記載のコンピュータシステム。
  28. 【請求項28】 実行するメソッドのうちから1つ選択する手段は、仮想プ
    ロセッサツールのうちから1つ選択する手段を具えたことを特徴とする請求項2
    7記載のコンピュータシステム。
  29. 【請求項29】 前記選択されたクラスから変換された前記仮想プロセッサ
    ツールのすべてを必ずしも送信することなく、前記サーバが前記選択された仮想
    プロセッサツールを前記クライアントデバイスに送信することを特徴とする請求
    項28記載のコンピュータシステム。
  30. 【請求項30】 前記選択されたツール以外の前記選択されたクラスから変
    換された前記仮想プロセッサツールのいずれも必ずしも送信することなく、前記
    サーバは前記選択された仮想プロセッサツールを前記クライアントデバイスに送
    信することを特徴とする請求項28記載のコンピュータシステム。
  31. 【請求項31】 前記選択された仮想プロセッサツールを送信手段で送信す
    る前に、ネイティブコードに変換することを特徴とする請求項28記載のコンピ
    ュータシステム。
  32. 【請求項32】 前記選択された仮想プロセッサツールを送信手段で送信し
    た後にクライアントデバイスによりネイティブコードに変換することを特徴とす
    る請求項28記載のコンピュータシステム。
  33. 【請求項33】 送信手段が無線ネットワークを備えるか、または無線ネッ
    トワークを含むことを特徴とする請求項19記載のコンピュータシステム。
  34. 【請求項34】 クライアントデバイスが携帯電話であることを特徴とする
    請求項33記載のコンピュータシステム。
  35. 【請求項35】 クライアントデバイスが携帯型コンピュータであることを
    特徴とする請求項33記載のコンピュータシステム。
  36. 【請求項36】 クライアントデバイスがゲームコンソールであることを特
    徴とする請求項33記載のコンピュータシステム。
  37. 【請求項37】 請求項1ないし16のいずれかに記載の方法を実行するこ
    とを特徴とするコンピュータプログラム。
  38. 【請求項38】 請求項37、または、請求項1ないし16のいずれかに記
    載の方法を実行するためコンピュータプログラムを伝送することを特徴とするデ
    ータキャリア。
  39. 【請求項39】 請求項37に記載、または、請求項1ないし16のいずれ
    かに記載の方法を実行するためコンピュータプログラムを表すことを特徴とする
    データストリーム。
JP2001523960A 1999-09-14 1999-12-23 オブジェクト指向コンピュータプログラムのロード Pending JP2003509767A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB9921721.8 1999-09-14
GBGB9921721.8A GB9921721D0 (en) 1999-09-14 1999-09-14 Loading object-oriented computer programs
PCT/GB1999/004413 WO2001020449A1 (en) 1999-09-14 1999-12-23 Loading object-oriented computer programs

Publications (2)

Publication Number Publication Date
JP2003509767A true JP2003509767A (ja) 2003-03-11
JP2003509767A5 JP2003509767A5 (ja) 2007-02-08

Family

ID=10860898

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001523960A Pending JP2003509767A (ja) 1999-09-14 1999-12-23 オブジェクト指向コンピュータプログラムのロード

Country Status (12)

Country Link
US (1) US20020144011A1 (ja)
EP (1) EP1221091B1 (ja)
JP (1) JP2003509767A (ja)
KR (1) KR100679687B1 (ja)
AT (1) ATE250776T1 (ja)
AU (1) AU766361B2 (ja)
CA (1) CA2384803A1 (ja)
DE (1) DE69911660T2 (ja)
ES (1) ES2209538T3 (ja)
GB (1) GB9921721D0 (ja)
HK (1) HK1048530A1 (ja)
WO (1) WO2001020449A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
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
DE60237718D1 (de) * 2001-05-30 2010-10-28 Research In Motion Ltd System zur verarbeitung einer anwendung für ein mobiles kommunikationsgerät
US7178140B2 (en) * 2002-02-28 2007-02-13 Sun Microsystems, Inc. Speeding up application downloading from a remote server
US20060174235A1 (en) * 2003-02-18 2006-08-03 Tomihisa Kamada Native compile method, native compile preprocessing method, computer program, and server
KR100818919B1 (ko) * 2006-02-24 2008-04-03 삼성전자주식회사 메소드 호출 방법 및 이를 이용한 자바 가상 머신
US8195640B2 (en) 2006-06-16 2012-06-05 Microsoft Corporation Online service for program lookup
US20080016504A1 (en) * 2006-07-14 2008-01-17 Wesley Homer Cheng Dynamically programmable electronic data collection system combining declarative programming and native coding

Family Cites Families (8)

* Cited by examiner, † Cited by third party
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
US6219045B1 (en) * 1995-11-13 2001-04-17 Worlds, Inc. Scalable virtual world chat client-server system
IL126909A0 (en) * 1996-05-07 1999-09-22 Webline Communications Corp Method and apparatus for coordinating internet multi-media content with telephone and audio communications
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
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
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US6219787B1 (en) * 1997-12-22 2001-04-17 Texas Instruments Incorporated Method and apparatus for extending security model to native code
GB2343021A (en) * 1998-10-19 2000-04-26 Ibm Class loading model for object oriented programming

Also Published As

Publication number Publication date
EP1221091B1 (en) 2003-09-24
EP1221091A1 (en) 2002-07-10
DE69911660T2 (de) 2004-06-17
ES2209538T3 (es) 2004-06-16
WO2001020449A1 (en) 2001-03-22
KR20020085875A (ko) 2002-11-16
HK1048530A1 (zh) 2003-04-04
GB9921721D0 (en) 1999-11-17
DE69911660D1 (de) 2003-10-30
ATE250776T1 (de) 2003-10-15
CA2384803A1 (en) 2001-03-22
AU1880600A (en) 2001-04-17
AU766361B2 (en) 2003-10-16
US20020144011A1 (en) 2002-10-03
KR100679687B1 (ko) 2007-02-07

Similar Documents

Publication Publication Date Title
JP2003509761A (ja) オブジェクト指向コンピュータプログラムのロード
EP1214645B1 (en) Method and system for distributing object-oriented computer programs
EP0737919B1 (en) Method and system for providing interoperability among processes written to execute on different operating systems
US6484309B2 (en) Enabling software designed for one operating system to operate on another operating system
US8402460B2 (en) Installing and updating interpreted programming language applications using a designated virtual machine
US6029000A (en) Mobile communication system with cross compiler and cross linker
EP0620522A2 (en) High performance dynamic linking through caching
US8255922B1 (en) Mechanism for enabling multiple processes to share physical memory
JP2002508544A (ja) 変更定数プールを備えたJavaランタイム・システム
JP5845221B2 (ja) 高速パッチベースメソッドコール
US8561042B2 (en) System and method for reducing execution time of bytecode in java virtual machine
JP2003509767A (ja) オブジェクト指向コンピュータプログラムのロード
US11243876B2 (en) Techniques for accessing off-heap memory
CN111857886A (zh) 一种软件运行方法、系统、计算设备及存储介质

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061213

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061213

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20061213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100209

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100629