JP2003526154A - 仮想記憶管理プログラムを有していないデータ処理装置にクラスをプレロードするためのシステム及び方法 - Google Patents

仮想記憶管理プログラムを有していないデータ処理装置にクラスをプレロードするためのシステム及び方法

Info

Publication number
JP2003526154A
JP2003526154A JP2001564991A JP2001564991A JP2003526154A JP 2003526154 A JP2003526154 A JP 2003526154A JP 2001564991 A JP2001564991 A JP 2001564991A JP 2001564991 A JP2001564991 A JP 2001564991A JP 2003526154 A JP2003526154 A JP 2003526154A
Authority
JP
Japan
Prior art keywords
source module
source
module
pointers
modules
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
JP2001564991A
Other languages
English (en)
Inventor
フランク エヌ イェリン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2003526154A publication Critical patent/JP2003526154A/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

Abstract

(57)【要約】 オーサリング・システムは、仮装記憶管理プログラムを欠いているクライアント装置におけるプレローディングのために特定した組のクラスを準備する。オーサリング・システムは、特定した組のクラスを複数のソース・モジュールに変換し、ソース・モジュールのサブセットは、それぞれ、ソース・モジュールのその他のものへのポインタを有する項目を含む。オーサリング・システムは、複数のソース・モジュール、インタプリタ及びスタートアップ処理手順を含む、クライアント装置にロードするための、ロード・モジュールを生成する。スタートアップ処理手順は、実行のためにインタプリタをロードするときにクライアント装置による実行のためである。スタートアップ処理手順は、クライアント装置のある特定の一つにおけるソース・モジュールの実際のメモリ位置に従ってソース・モジュールのポインタを更新されたポインタで置換える。

Description

【発明の詳細な説明】
【0001】 1.(技術分野) 本発明は、一般にのJava(ジャバ)TMようなオブジェクト指向形コンピュ
ータ言語で書かれたプログラムを実行するコンピュータ・システム及び装置に関
し、特にそのような装置に一組のクラスをプレロードするためのシステム及びメ
ソッドに関する。
【0002】 2.(背景技術) JavaTMプログラム、またはランタイム・プログラム・リンキングを支持す
るその他のオブジェクト指向形言語のプログラムを実行するコンピュータ・シス
テムでは、実行される一組のコンピュータ・プログラムは、ランタイムでダイナ
ミックに決定され、ロードされかつリンクされる。これは、非常に柔軟であり、
かつ遠隔的に配置されたコンピュータからロードされたソフトウェアを用いるこ
とを特に容易にするが、基本的なデータ処理動作を支援するために必要な基本的
な組のクラス・ファイルのローディング及びリンキングは、時間が掛り、かつ特
に、その計算力及びメモリソースが一般のデスクトップ・コンピュータよりも遥
かに制限される小さいクライアント装置において、メモリソースに関して高価で
ある。
【0003】 この問題は、Theron Tockに1998年9月9日に発行されかつサ
ン・マイクロシステムズ株式会社(Sun Microsystems,Inc
.)に譲渡された、米国特許第5,815,718号において取り組まれている
。’718特許は、非常に制限された読取り/書込みメモリソースを有するクラ
イアント装置における使用のために、読出し専用記憶素子(ROM)にクラス・
ファイルをプレロードすることに特に集中している。かかる装置は、それらのソ
フトウェアのかなりの部分を記憶するためにROMを用いる。
【0004】 本発明は、関連するがある程度異なる問題に関する−−仮想記憶管理プログラ
ムを有していないクライアント装置にクラス・ファイルをプレロードすること。
本発明によって取り組まれた別の問題は、あらゆる一つのデータ構造の最大の大
きさを制限するクライアント装置でそれらが実行できるように仮想マシン(例え
ば、Javaプログラム検証装置(ベリファイア)、クラス・ローダ、インタプ
リタ(解釈プログラム)及び関連セキュリティ・プロシージャ(処理手順))の
データ構造を再構成する方法である。例えば、ソースの最大の大きさは、64K
バイトでありうる。
【0005】 (発明の開示) オーサリング・システムは、仮装記憶管理プログラムを欠いているクライアン
ト装置にプレロードするために特定した組のクラスを準備する。オーサリング・
システムは、特定した組のクラスを複数のソース・モジュールに変換し、ソース
・モジュールのサブセットは、それぞれがソース・モジュールのその他のものに
おける項目へのポインタを有する項目を含む。オーサリング・システムは、複数
のソース・モジュール、インタプリタ及びスタートアップ処理手順を含む、クラ
イアント装置にロードするための、ロード・モジュールを生成する。インタプリ
タは、所定のコンピュータ言語のプログラムを、クライアント装置上で、実行す
るためである。特定した組のクラスは、所定のコンピュータ言語におけるメソッ
ドを含む。スタートアップ処理手順は、実行のためにインタプリタをロードする
ときのクライアント装置による実行のためである。スタートアップ処理手順は、
クライアント装置のあらゆる特定のものにおけるソース・モジュールの実際のメ
モリ位置に従ってソース・モジュールのポインタを更新されたポイントと置換え
る。
【0006】 本発明の別の形態は、データ処理装置、ユーザ・インタフェース及びオペレー
ティング・システムを記憶するためのメモリを有するが、仮装記憶管理プログラ
ム、並びに上記のソース・モジュール、インタプリタ及びスタートアップ処理手
順を欠いている、クライアント装置である。
【0007】 本発明の実施形態では、ソース・モジュールは、クラス表ソース・モジュール
、メソッド表ソース・モジュール、フィールド表ソース・モジュール、定数プー
ルソース・モジュール及びストリングソース・モジュールを含む。クラス・デー
タ構造は、メソッド表、フィールド表及び定数プールソース・モジュールにおけ
る項目へのポインタを含み、フィールド表ソース・モジュールは、ストリングソ
ース・モジュールの項目へのポインタを含み、定数プールソース・モジュールは
、フィールド表ソース・モジュールの項目及びストリングソース・モジュールの
項目へのポインタを含む。
【0008】 本発明の実施形態では、スタートアップ処理手順は、クライアント装置のある
特定の一つを有する0 mod 4 アドレスにおけるサブセットのソース・モジ
ュールの少なくとも二つのそれぞれに第1のデータ構造を位置決めするための命
令を含む。
【0009】 本発明の実施形態では、ソース・モジュールは、ソース・モジュールの第2の
サブセットのそれぞれに対するメモリ・アドレスを表しているコンテンツの表を
含み、第2のサブセットは、ソース・モジュールのポインタの少なくとも一つに
よってポイントされたソース・モジュールのそれらを含む。スタートアップ処理
手順は、(A)第2のサブセットのソース・モジュールのそれぞれに対する現行
メモリ・アドレスを決定し、現行メモリ・アドレスとコンテンツの表に表示され
るメモリ・アドレスとの間の差に対応している第2のサブセットの各ソース・モ
ジュールに対する差分値を決定し、かつ(B)差分値に従ってソース・モジュー
ルのポインタの少なくともサブセットを調整するための命令を含む。
【0010】 本発明の実施形態では、ソース・モジュールは、特定した組のクラスのメソッ
ドに対するコードへのポインタを有するメソッド表モジュール、及びコンパイル
されたインタプリタのネイティブ・メソッドへのメソッド表ポイントのポインタ
のサブセットを含む。
【0011】 (発明を実施するための最良の形態) 図1及び2を参照すると、クライアント装置102、少なくとも一つのサーバ
・コンピュータ104、オーサリング・システム106、及び様々なクライアン
ト装置102、サーバ・コンピュータ104、及びオーサリング・システム10
6を相互接続する一つ以上の通信ネットワークまたは接続108を有する分散形
コンピュータ・システム100が示されている。クライアント装置102は、パ
ーソナル・デジタル・アシスタンス(PDA’s)のようなハンドヘルド装置、
組込み形装置、デスクトップ・コンピュータ、等を含む、様々な種類のコンピュ
ータ及びコントローラ制御形装置を含みうる。サーバ・コンピュータ104は、
クライアント装置によってアクセスされうる文書及びダウンロード可能なアプレ
ット110を記憶する。
【0012】 通信ネットワークまたは接続108は、サーバとクライアント装置との間のシ
リアル・ケーブル又は赤外線シリアル接続のように簡単でありうるか、または
ローカル・エリア・ネットワークまたはインターネット・ネットワーク接続を含
みうる。
【0013】 好適な実施形態では、クライアント装置102の少なくともあるものは、Ja
va Virtual MachineTM(Java仮装マシン)(サン・マイク
ロシステムズの登録商標)(JVM)112として知られているプログラム・イ
ンタプリタを用いて、言語プログラム及びアプレットを実行するように構成され
ている。この実施形態におけるJVM112は、それらのオペレーティング・シ
ステムの一部として仮装メモリ管理プログラムを有していなし、かつあらゆる実
行プログラムによって用いることができるアクティブ・メモリの量にサイズ制限
を更に有する、いクライアント装置による実行のために設計される(それが小さ
い装置によって用いられることを表すために“KVM”とときどき呼ばれる)J
ava Virtual Machineの特別版である。
【0014】 オーサリング・システム106の役割は、それらのオペレーティング・システ
ムの一部として仮装メモリ管理プログラムを欠いおり、かつあらゆる実行プログ
ラムによって用いることができるアクティブ・メモリの量にサイズ制限を更に有
する、クライアント装置において用いる一組のプレロードされたクラス・ファイ
ルを生成することである。この文書の残りの部分に対して、用語“クライアント
装置”は、オーサリング・システム106が一組のプレロードされたクラスを生
成するクライアント装置だけを参照するために用いられる。その他のクライアン
ト装置は、この文書の対象ではない。
【0015】 また、Javaプログラムまたはアプレットを実行するようにJVMがロード
されるときにはいつでもクライアント装置によって実行される、JVMスタート
アップ処理手順114を生成することは、オーサリング・システム106の役割
である。
【0016】 JVMオーサリング・システムの概観 JVMオーサリング・システム106は、一つまたはデータ処理装置(CPU
’s)120、ユーザ・インタフェース122、メモリ124、ネットワーク1
08を介してその他の装置との通信を使用可能にするネットワーク通信インタフ
ェース126、システム106の様々なコンポーネントを相互接続する一つ以上
のインターネット・バス128を有する一般的なコンピュータ・ワークステーシ
ョンでありうる。メモリ124は、高速ランダム・アクセス・メモリ(RAM)
及びハードディクス記憶装置のような不揮発性メモリを一般に含む。
【0017】 好適な実施形態では、メモリ124は、以下のものを記憶する: 基本的システム機能を実行するための一組のオペレーティング・システ
ム処理手順130; その他のコンピュータ及び装置との通信を取り扱う(処理する)ための
ネットワーク・アクセス又は通信処理手順132;(上に示したように、これは
、簡単なシリアル接続通信処理手順でありうるか、または全ネットワーク接続性
処理手順でありうる); JVMに対するソース・コード136及びJVMスタートアップ処理手
順に対するソース・コード138を含む、処理手順に対するソース・コードを記
憶するためのソース・コード・レポジトリ134; クラス・ファイル142及びクラス・ライブラリ144を含む、Jav
a言語プログラムを記憶するための、クラス・ファイル・レポジトリ140; 一組のクラス・ファイルをクライアント装置にプレロードするために本
発明の好適な実施形態で用いられるツールの一つであり、そして特にC言語プロ
グラムを含むJVMオフライン・クラス・ファイル152を生成するために用い
られる、オフライン・クラス・ローダ150; JVMオフライン・クラス・ファイル152を実行可能なファイルにコ
ンパイルするための、Cコンパイラのような、ローカル・コンパイラ154; 以下にその特質を詳述する、一組のソースファイル158を生成するよ
うにローカル・コンパイラ154によって生成されたファイルを実行するための
プログラム・エクスキュータ156; クライアント装置によるネイティブ・コードとしての実行に適する形式
にプログラムをコンパイルするためのクライアント装置コンパイラ160; クライアント装置102にロードするためのロード・モジュール162
;ロード・モジュールは、一組のプレロード・クラス・ファイルを表す一組のソ
ースファイルを含む; クライアント装置による実行のためのコンパイルされたJVMプログラ
ム164;及び クライアント装置による実行のためのコンパイルされたJVMスタート
アップ・プログラム166。
【0018】 上記したファイル及びプログラムの多くの起点、機能及び構造は、“プレロー
ド・クラス・ファイルを生成するための処理”という題名のこの文書のセクショ
ンにおいて以下に詳述される。
【0019】 クライアント装置の概観 クライアント装置102は、例えば、3COM(Palm(パーム)部門)に
よって製造されるPalm装置(3COMの登録商標)及びPalmOSオペレ
ーティング・システムを用いているその他の装置のようなハンドヘルド・パーソ
ナル・デジタル・アシスタントでありうる。供給されるメモリの量に関して異な
る、Palmのいつくかのバージョンが存在するが、ここに記述されるPalm
の基本的特徴及び制限(限定)は、2000年度の最初の四半期のものとしてこ
の製品ラインの全てのバージョンに適用される。
【0020】 クライアント装置102は、データ処理装置(CPU)220、ユーザ・イン
タフェース222、メモリ224、ネットワークまたはその他の通信媒体108
を介してその他の装置(例えば、サーバ104)との通信を可能にするためのネ
ットワーク又はシリアル又はIR通信インタフェースのような、通信インタフェ
ース226、及びクライアント装置102の様々なコンポーネントを相互接続す
るための一つ以上のインターネット・バス228を一般に有する。メモリ224
は、高速ダイナミック・ランダム・アクセル・メモリ(DRAM)及び/又はス
タティック・ランダム・アクセス・メモリ(スタティックRAM)を一般的に含
む。
【0021】 好適な実施形態では、メモリは以下のものを記憶する: 基本的システム機能を実行するための一組のオペレーティング・システ
ム処理手順(例えば、PalmOS)230; その他のコンピュータ及び装置との通信を処理するためのネットワーク
・アクセス処理手順232; JVMオーサリング・システムによって生成されたロード・モジュール
162; クライアント装置のネイティブ・コードにコンパイルされたプログラム
である、Java Virtual Machine(JVM)112; 実行のためにJVMを準備するためにかつクライアント装置における仮
装メモリ管理プログラムの欠落に対して矯正するために用いられる、JVMスタ
ートアップ・プログラム114; クラス検証及びロード段階を行うことなくJVMによる実行の準備がで
きているプレロード・クラス・ファイルを表す、JVMソース234; サーバ104からダウンロードされるクラス・ファイル242を含む、
Java言語プログラムを記憶するための、クラス・レポジトリ240; Java言語で書かれたゲーム・プログラム又はその他の種類のプログ
ラムを実行するためのように、JVM112を呼出すアプリケーション252; アドレス・ブック・アプリケーション、カレンダー・アプリケーション
、等のような、その他のアプリケーション・プログラム254; JVM112、JVMスタートアップ処理手順114、及びアプリケー
ション・プログラム252、254を実行するためのプログラム・エクスキュー
タ256;及び データ・ファイル270 アプリケーション252は、一般にJVM及びJVMソースを含むロード・モ
ジュールの一部ではない。即ち、JVMを呼出すアプリケーション252は、一
般に別々にクライアント装置にロードされる。
【0022】 アプリケーション252は、ある実施形態では、サーバ104のような遠隔的
に配置されたコンピュータからHTML文書262をダウンロードするための命
令を含みかつメモリ224のHTML文書レポジトリ260に記憶されたブラウ
ザ・アプリケーションでありうる。ブラウザは、一般に、クライアント装置のネ
イティブ・コードにコンパイルされたアプリケーションであるが、代替の実施形
態では、ブラウザは、ロード・モジュール162のプレロード・クラスに含まれ
るJavaバイトコード・プログラムとして実装することができる。ダウンロー
ドされた文書は、JVM112によって実行可能なアプレットへのそれに組込ま
れた参照(例えば、HTMLオブジェクト・タグ又はアプレット・タグ)を有す
る文書を含みうし、かつブラウザ・アプリケーションは、アプレットまたはその
中のアプレットを実行することによって生成されたあらゆる画像を含む、文書を
ユーザ・インタフェース222のディスプレイに表示するための命令を含む。
【0023】 プレロード・クラス・ファイルを生成するための処理 図3は、クライアント装置のメモリ・マップを示す。図に示すように、装置の
メモリの第1の部分280は、オペレーティング・システムに確保される。装置
におけるPalmOSのバージョンにより、Palmにおいて64Kバイトから
256Kバイトまでの範囲にわたるサイズを有する、第2の部分282は、アク
ティブ・メモリ(または代替的にダイナミック・メモリ)と呼ばれ、かつアプリ
ケーション・プログラムを実行するために用いられる。スタティック・メモリと
呼ばれる、装置のメモリの残りの部分284は、ファイル、データベース表、及
びイナクティブアプリケーションを記憶するために用いられる。メモリの様々な
部分280、282、284に対するアドレス範囲は、図3に示したそれらもの
とは異なりうる。例えば、オペレーティング・システム部分280は、図3に示
したようなメモリの最も低いアドレスの代わりに、最も高いアドレスに配置(位
置決め)されうる。アクティブ・メモリ282がアプリケーションによって用い
られる変数及び一時的データ構造を記憶するために用いられる間、アプリケーシ
ョン・プログラムに対するコードは、アプリケーションの実行中に(一つ以上の
コードソースとして)スタティック・メモリ284に通常そのまま残る。
【0024】 PalmOSは、二つの種類のデータベースを支持する:レコード・データベ
ース及びソースデータベース。アドレス・ブック・アプリケーションに対するア
ドレスを記憶するために用いられるデータベースのような、レコード・データベ
ースでは、各データベース入力は、単一レコードである。アプリケーション及び
ライブラリは、ソースデータベースの例である。各レコード及び各ソースは、P
almOSにおいて64Kバイトに大きさが制限される。他方、PalmOSに
記憶される“ファイル”は、複数のレコード及びソースを含みうるしかつその大
きさは、64Kバイトを超越しうる。
【0025】 図4は、Javaクラス・ファイル142の主要コンポーネントがヘッダ29
2、定数プール294、(クラスの実行可能な処理手順を構成する)一組のメソ
ッド296、及び(ある一定の予期しない状態が発生したときに実行されるコー
ドを示す)例外表298であるということを示す。
【0026】 図5は、プレロード・クラス・ファイルを生成する処理300の段階を図式的
に示す。プレロード・クラス・ファイルは、それらがクライアント装置に一度設
置されたならば、検証及びローディングを経ることなく、クライアント装置のJ
VMによる即時実行に対して利用可能である。一組のクラス・ファイルをプレロ
ードすることによって、クライアント装置におけるJVMのスタートアップ時間
は、かなり縮小され、かつプレロード・クラスがクライアント装置のスタティッ
ク・メモリにほぼ全体的に記憶されるので、JVMのアクティブ(ダイナミック
とも呼ばれる)メモリ要件は、かなり低減される。
【0027】 オーサリング・システムによって必ずしも実行される必要がない、予備段階と
して、各クラスのメソッドに対するJavaソースコード302は、クラス・フ
ァイル142にJavaコンパイラ304によってコンパイルされる。“コンパ
イラ”304は、結果として得られるコードが特定のプロセッサに対するオブジ
ェクト・コードではなく、オブジェクト・クラスのメソッドを一緒に形成する、
メソッドと呼ばれる、Javaバイトコード・プログラムにより構成されるとい
う点で通常のコンパイラとは異なる。Javaコンパイラ及びJavaクラス・
ファイルは、よく知られており、かつ非常に広く用いられており、従ってここで
詳細に説明することを必要としない。示す必要があることは、Java Vir
tual Machineにプレロードされる基本的な組のクラスが本発明の開
発のずっと以前によく確立されていたということ、及び従ってプレロードされる
一組のクラス・ファイル142は、オーサリング・システムよりもソースからさ
らに得ることができるということである。
【0028】 オフライン・クラス・ローダ150は、一組のクラス・ファイル142を取り
かつ、クライアント装置にロードするための(ソース・モジュールを呼ばれる)
一組のファイル158を、実行されるときに、構築する、C言語プログラム15
2をそれらから自動的に生成する。勿論、プログラム152は、Java,Pa
scal及びC++を含む、あらゆる数のその他の言語で書くことができ、それ
ゆえに、プログラム152に用いられる特定のコンピュータ言語は、重要ではな
い。より重要なことは、プログラムを直接生成する代わりにプログラム152を
用いてファイル158を構築する理由は、ファイル158が何千ものポインタを
含むことであり、それは、手で計算することが難しいばかりでなく、クラス・フ
ァイル142又はファイル158のデータ構造のいずれかが変化されたときには
いつでもその値が変化する。例えば、クライアント装置によって実行されるとき
にファイル158のデータ構造によって表されるメソッドをより効率的にするた
めに新しい最適化が実施された場合には、ポインタの多く又は全ては、再び計算
されなければならない。ポインタをプログラム・ステートメントにすることによ
って、全てのポインタ値は、プログラム152をコンパイルするために用いられ
るコンパイラ154によって自動的に分解される。
【0029】 プログラム152の内容及び構造は、プログラム152によって生成されたソ
ースファイル158の内容及び構造を説明することによって、間接的に説明され
る。非常に大きい範囲にまで、プログラム152は一組のデータ構造ステートメ
ントで構成されるが、それは一組のプレロード・クラスに含まれるべきクラス・
ファイルのそれぞれに対する情報を含む。データ構造ステートメントの多くにお
けるエレメントは、その他のデータ構造のエレメントへの参照を含み、かつそれ
はコンパイラ154によってポインタに分解されるこれらの参照である。
【0030】 コンパイラは、プログラム152をJVM Offline Class Fi
le(オフライン・クラス・ファイル)とここで呼ばれるプログラムにコンパイ
ルする。プログラム・エクスキュータは、JVM Offline Class
File(オフライン・クラス・ファイル)156を実行し、それは、ソース・
モジュール(Resource Modules)158としてここで識別され
る一組のファイルを生成する。ファイルの数が特定の重要性を有していないので
、ソース・モジュール158は、一つ以上のファイルに記憶されうる。しかしな
がら、論理的に、ソース・モジュールは、それぞれが個別に説明されかつ ク
ライアント装置に個別のソースとして、事実上記憶される、いくつかの別々のモ
ジュールを含む。
【0031】 次に、クライアント装置に対するコンパイラ160は、クライアント装置にロ
ードされるプログラム及びデータ構造を生成するようにいくつかの組のプログラ
ム136、136、312をコンパイルするために用いられる。一実施形態では
、コンパイラ160は、クライアント装置に対するC言語コンパイラであり、そ
れは、クライアント装置によって実行可能なネイティブ・オブジェクト・コード
を生成する。コンパイルされるべきプログラムは、Java Virtual M
achineに対するコード136を含み、それは、プログラム検証装置、クラ
ス・ローダ、プログラム・インタプリタ、並びに多くのその他のサブプログラム
を含む一組のサブプログラムを含む。また、Java Virtual Mach
ineに対するコード136は、一組の50個ぐらいのネイティブ・オブジェク
ト・コードを用いてクライアント装置によって実行されなければならない、入力
/出力動作のような、ハードウェア特定動作を実行するためのメソッドである“
ネイティブ・メソッド”を含む。
【0032】 コンパイラ160によってコンパイルされる別のプログラムは、JVMスター
トアップ処理手順138であり、それは、JVMが実行されるときにおけるソー
ス・モジュールの現在の位置を決定し、それらがメモリの適切な位置をポイント
するようにソース・モジュールの全てのポインタを分解かつ更新する特殊プログ
ラムである。ソース・モジュールが記憶される物理メモリ位置は、JVMの一つ
の実行から次に変わりうるし、かつクライアント装置が仮装メモリ管理プログラ
ムを有していないので、JVMスタートアップ処理手順138は、ソース・モジ
ュールの現在位置を考慮に入れるためにソース・モジュールの全ての絶対アドレ
ス・ポインタを更新するために用いられる。
【0033】 コンパイラ160によってコンパイルされる更に別のデータ構造は、ネイティ
ブ・メソッド表(Native Methods Table)と呼ばれるデータ
構造を画定するプログラム312である。ネイティブ・メソッド表プログラム3
12は、オフライン・クラス・ローダ150によって生成されかつ一つのカラム
が以下に説明するメソッド表データ構造へのオフセットを示し、かつ他のカラム
がクライアント装置のメモリの対応するネイティブ・メソッドのメモリ位置を示
す、二つのカラムを有するデータ構造320(図6)により構成される。コンパ
イラ160は、ネイティブ・メソッドの位置を分解しかつそれらを結果として得
られるネイティブ・メソッド表320(図6)に記憶し、それは、個別にコンパ
イルされたプログラムとして処理される。より特定的には、ネイティブ・メソッ
ド表320は、一組のJVMコードソース132に関連付けられた“データソー
ス”168にコンパイラ160によって含まれる;データソース168は、コン
パイルされたJVM及びスタートアップ処理手順によって用いられる全ての変数
を含む。
【0034】 ソース・モジュール158は、コンパイラ160によってコンパイルされない
。それよりも、それら(ソース・モジュール158)は、コンパイラ160の一
部である、リンカへの指示(ディレクティブ)の使用を通して、コンパイラ16
0によって生成されたモジュールに“含まれる”。コンパイラ160によって生
成されたモジュールは、(Resource Module(ソース・モジュー
ル)158)により基本的に構成される)クライアント装置に対するLoad
Module(ロード・モジュール)162、JVMに対する全てのコンパイル
されたコード164及びJVMスタートアップ処理手順に対するコンパイルされ
たコード166を一緒に含む一組のJVMコードソース163、及びコンパイル
されたNative Methods Table(ネイティブ・メソッド表)3
20を含む、関連JVMデータソース168を含む。JVMプログラムは、JV
Mプログラムの合計の大きさがソースの大きさ限度を超えるので(それぞれが大
きさが64Kバイトよりも小さい)複数のコードソースに分解される。
【0035】 ソース・モジュール及びキー・データ構造 図7、8、9A−9C及び10−15を参照して、ソース・モジュール162
、158の内容及び構造を次に説明する。それぞれがクライアント装置のソース
大きさ限度(例えば、64Kバイト)より小さい大きさを有する、主要ソース・
モジュールは: その他のモジュールのクライアント・メモリ位置の追跡を行うために用
いられる、コンテンツの表350; javaストリング・オブジェクトを記憶するためのインターン・スト
リング表352; 可変長ストリングス(UTFストリングス)を記憶するためのUTFス
トリング表354; プレロード・クラスに関する情報を記憶するための、クラス表356; プレロード・クラスのメソッドに関する情報を記憶するための、メソッ
ド表358; プレロード・クラスのフィールドに関する情報を記憶するための、フィ
ールド表360; プレロード・クラスのメソッドによって用いられる定数数値並びにフィ
ールド、メソッド及びインターン・ストリングへのポインタを記憶するための定
数プール362; プレロード・クラスのメソッドに関連付けられた例外ハンドラに関する
情報を記憶するためのハンドラ表364; プレロードJavaクラスのそれぞれによってインプリメントされるイ
ンタフェースに関する情報を記憶するためのインタフェース表366; プレロード・クラスのメソッド及び例外ハンドラのバイトコードを記憶
するためのコード・モジュール368; パア−オブジェクト・インスタンス・ベーシスで割り当てられた変数と
は反対に、パア−クラス・ベーシスで割り当てられた変数の値を記憶するための
スタティク・データ(Static Data)表370。
【0036】 以下の更なる説明から明らかになるように、ソース・モジュールの全てではな
くそのあるものは、モジュールのその他のものにおける項目へのポインタを有す
る。例えば、コードソース368、ハンドラ表ソース364及びインタフェース
表ソース366は、それにおけるポインタを有していない。クラス表ソース35
6、メソッド表ソース358は、ポインタを有するソースの例である。更に、コ
ンテンツの表ソース以外のモジュールの全ては、モジュールのその他のものにお
けるポインタのターゲットである項目を有し、かつコンテンツの表でさえもそれ
自体へのポインタを含むように設定することができる。
【0037】 スタティック・データ表370は、実際には、クライアント装置にロードされ
る必要がない位置ホルダーである。それよりも、スタティック・データ表は、J
VMの実行中に生成されかつクライアント装置のアクティブ・メモリに記憶され
る。しかしながら、スタティック・データ表は、その他のモジュールがスタティ
ック・データ表370の様々なフィールド(即ち、入力)へのポインタを含むの
で、少なくともその初期生成中に、ロード・モジュールに含まれる。スタティッ
ク・データ表の項目へのポインタは、その他のソースへのポインタと同じ方法で
、スタートアップ処理手順による再配置または更新を必要とする。クライアント
装置のアクティブ・メモリのスタティック・データ表の位置は、一つの実行から
次の実行へ変わりうるので、スタティック・データ表の項目へのポインタは、J
VMスタートアップ処理手順が実行される毎に更新されなければならない。
【0038】 図8に示す、コンテンツの表350は、ソース・モジュールのそれぞれのメモ
リ位置及び大きさを記憶するために用いられる。初めに、アドレス位置は、例え
ば、ロード・モジュール・ファイル内のそれらの位置に基づき、任意の組の値で
ある。JVMスタートアップ処理手順がクライアント装置によって実行される毎
に、コンテンツの表のアドレスは、クライアント装置のメモリ内のそれらのソー
スの現在位置を示すために更新される。この手順を以下に詳述する。好適な実施
形態では、コンテンツの表は、クラス表ソース356のクラス表、java.l
ang.Object(最上位クラス)と呼ばれるクラスに対するクラス・ブロ
ック、図9A、9B及び10に示すハッシュ表、及びその他のキー・データ構造
へのポインタを含む、一組の“キー値”を更に記憶する。
【0039】 図9Aに示すような、UTFストリング表354は、ハッシュ表を用いて実施
される。ハッシュ表は、ストリングが(JVMに含まれる)対応するハッシュ関
数によってマップされる多数の“バケット”を包含する。ハッシュ表は、表にお
けるバケットの数を示す、長さ値380、表におけるUTFストリング286の
数を示す、カウント値382、及び一組のバケット384を含むヘッダを含む。
各バケット384は、ゼロ以上のUTFストリング286のリンクされたリスト
へのポインタを包含する。各バケットのポインタは、存在する場合には、リンク
されたリストにおける、第1のUTFストリングをポイントする。各UTFスト
リング386は、次のUTFストリング、ストリングにおける、バイトの数とし
て測定された、長さを示す長さフィールド392、及びストリング自体を記憶す
るバイト・フィールド394へのポインタ390を含む。
【0040】 インターン・ストリング表(Interned String Table)352は、UTFストリ
ング表(UTF String Table)354に構造が類似する。特に、図9Bに示すような
インターン・ストリング表(Interned String Table)352は、ハッシュ表を用
いて実施される。ハッシュ表は、ストリング・オブジェクトが(JVMに含まれ
る)対応するハッシュ関数によってマップされる多数の“バケット”を包含する
。ハッシュ表は、表におけるバケットの数を示す、長さ値400、表におけるス
トリングス・オブジェクト408の数を示す、カウント値402、及び一組のバ
ケット404を含むヘッダを含む。各バケット404は、ゼロ以上のセル406
のリンクされたリストへのポインタを包含する。各バケットのポインタは、存在
する場合には、リンクされたリストにおける、第1のセル406をポイントする
。各セル406は、次のセルへのポインタ並びにストリング・オブジェクト40
8(または、より正確には、タイプ“java.lang.String”のオ
ブジェクト)へのポインタを含む。図9Cに示すように、ストリング・オブジェ
クト408は、クラス“java.lang.String”へのポインタ41
0、タイプ char[]のオブジェクトのインスタンスへのポインタ、文字(
キャラクター)のアレーへのオフセット414、及び現行オブジェクトに対する
ストリングの長さのインジケータ416を一般に含む。文字(キャラクター)の
アレー420は、各ストリング・オブジェクトのオフセット及び長さフィールド
414、416によって示されるアレーにおける各そのようなストリングの位置
を有する 、全てのストリング・オブジェクトのストリングスを記憶する。スペ
ース(空間)を節約するために、たった一つのchar[]オブジェクト・イン
スタンス418が記憶されかつ全てのストリング・オブジェクトは、char[
]オブジェクト418のこの同じ、単一のインスタンスをポイントする。
【0041】 図10に示すような、クラス表は、クラス・ブロック424のリンクされたリ
ストをポイントする多数のバケット422を有する別のハッシュ表である。表は
、表におけるバケットの数を示す長さフィールド425及び表におけるクラス・
ブロックの数を示すカウント・フィールド426を含む。
【0042】 図11に示すような、各クラス・ブロック424は、いかのものを含む: 存在する場合には、次のクラス・ブロックへのポインタ430; クラス・ブロックに関連付けられたクラスの名前へのポインタ432; クラス名は、このポインタに記憶されたアドレスにおけるUTFストリングに記
憶される; クラス・ブロックに関連付けられたクラスのスーパークラスに対するク
ラス・ブロックへのポインタ434; クラス・オブジェクトに関連付けられたクラスのメソッドを次いでポイ
ントする、メソッド表450へのポインタ436; クラス・ブロックに関連付けられたクラスのフィールドを画定する、フ
ィールド表500へのポインタ436;及び クラス・ブロックに関連付けられたクラスに対する定数プール表510
へのポインタ438. メソッド表(Method Table)ソース358は、“C”がロード・モジュール16
2におけるクラス・ファイルの数である、一組の“C”メソッド表450を記憶
する(図7及び12参照)。各クラス・ブロック426は、メソッド表450の
一つをポイントする。同様に、フィールド表(Field Tables)ソース360は、一
組の“C”フィールド表500(図13)を記憶し、定数プール(Constant Pool
)ソース362は、一組の定数プール表520(図14)を記憶し、ハンドラ表(
Handler Tables)ソース364は、一組の例外表454(図12)を記憶し、か
つコード(Code)ソース368は、一組のコード・ボロック452(図12)を記
憶する。
【0043】 各メソッド表450は、関連クラスの各メソッドに対して一つずつの、一組の
メソッド・ブロック460を包含する。表は、表におけるメソッド・ブロックの
数を示すカウント・フィールド462及び表の大きさを示す長さフィールド46
4を含む。各メソッド・ブロックは、コード・ブロック452へのポインタ46
6及び例外表454並びに本説明には関係していないその他の情報への別のポイ
ンタ468を含む。
【0044】 各コード・ブロック452は、好適な実施形態ではjava言語バイトコード
・プログラム(即ち、メソッド)である、(コード、又は実行可能な命令とも呼
ばれる)実行可能プログラムを包含する。
【0045】 各例外表454は、対応するメソッドによって特定された各例外ハンドラーに
対する一つの例外ハンドラー・エントリ480を包含する。カウント・フィール
ド482は、例外ハンドラー・エントリの数を示し、かつ各エントリ480は、
特定のハンドラーが適用可能であるメソッドにおけるコード範囲(即ち、最初と
最後のバイトコード)を示し、オフセット値は、メソッドに対するコード・ブロ
ックにおける例外ハンドラーの位置、及び例外ハンドラーが用いられる例外のタ
イプを示す。
【0046】 図13に示すように、フィールド表ソースの各フィールド表500は、一組の
フィールド・エントリ502を包含する。各フィールド・エントリ502は、オ
フセットまたはポインタ、フィールドのデータ・タイプ、及びフィールドの名前
を包含するUTFストリングへのポインタを含む。フィールド・エントリに対応
しているフィールドが、関連クラス(オブジェクト・タイプ)の全てのオブジェ
クトに含まれる“パア−オブジェクト・インスタンス”フィールドであるときに
は、フィールド・エントリは、オフセットを包含しかつ、オフセットは、関連ク
ラスの各オブジェクトにおける対応するフィールドの位置を示す。他方、フィー
ルド・エントリに対応するフィールドが、スタティック・データ・アレイに記憶
される“ワンス・パア−クラス”変数を表すときには、フィールド・エントリは
、オフセット値の代わりにスタティック・データ・アレイにおけるエントリへの
ポインタを包含する。また、フィールド表500は、表におけるフィールド・エ
ントリの数を示す長さフィールド504を含む。
【0047】 図14に示すように、特定のクラスに対する定数プール520は、プールにお
ける項目の数を示す大きさフィールド522を有する。プールにおける各項目は
、1−バイト・タグ及び4−バイト“項目”によって表される。アドレス境界要
件を満たすために、タグ524は、一つのアレイに記憶されかつ項目は、別のア
レイに記憶される。各タグ524は、定数のデータ・タイプを示し、同時に対応
する項目526は、フィールド表500におけるフィールド・エントリ502へ
のポインタ、メソッドへの(即ち、メソッド表450におけるメソッド・ブロッ
ク460への)ポインタ、UTFストリング表354におけるUTFストリング
へのポインタ、又は数値(例えば、整数又は浮動小数点値)のいずれかである。
タグ524によって特定されたデータ・タイプは、項目526が数値またはポイ
ンタ並びにポインタのタイプを包含するかどうかを特定する。
【0048】 クライアント装置におけるJava Virtual Machine を初期化しかつラウンチする処理方法 図15を参照すると、ソース・モジュールのそれぞれは、その終端に2バイト
のヌル情報を含む。この理由は、以下の通りである。各モジュールのメモリ位置
は、JVMが実行していないときに変わりうる。即ち、クライアント装置は、様
々な理由に対してそのメモリ内のソースを再配置しうる。これによる問題は、ク
ライアント装置が、0 mod 4アドレス(即ち、4によって均等に分割される
アドレス)ではない位置におけるソースを記憶しうるということである。より特
定的には、ソースの開始アドレスは、2 mod 4アドレスでありうる。しかし
ながら、JVMは、0 mod 4である位置に記憶されているある一定のデータ
構造に依存する。この問題は、(A)各ソース・モジュールの終り又は始めにお
ける2バイトのヌル情報を記憶し、及び(B)JVMのスタートアップにより、
JVMソース・モジュールの位置をロックし、及び(C)ソース・モジュールに
おける非ヌル情報の第1のバイトを0 mod 4アドレスに配置させるために必
要なときにはいつでも各ソース・モジュールの始め又は終りに対するこれらの2
バイトを回転させることによって解決される。ソース・モジュールが2 mod
4アドレスに前に記憶され(それゆえにそのヌル・バイトがフロントに移動し)
それから次に0 mod 4アドレスにに記憶される場合には、ヌル・バイトは、
ソース・モジュールのフロントからバックに移動させる必要があるということに
注目する。
【0049】 ソース・モジュールのヌル・バイトがバックからフロントに移動されるときに
はいつでも、コンテンツの表350に記憶された対応する位置値は、2だけ減少
され、かつソース・モジュールのヌル・バイトがフロントからバックに移動され
るときにはいつでも、コンテンツの表350に記憶された対応する位置値は、2
だけ増大される。コンテンツの表へのこれらの調整は、ソース・モジュールのポ
インタの後続する変更を正確に実行させる。
【0050】 図16A及び16Bを参照すると、JVMスタートアップ処理手順の実行の前
に、JVM、スタートアップ処理手順及びソース・モジュールは、クライアント
装置(540)に設置されなければならず、それは、それらが装置のメモリに記
憶されるということを意味する。
【0051】 JVMがクライアント装置によって実行されるときにはいつでも、その実行は
、JVMスタートアップ処理手順(542)の実行によって先行される。スター
トアップ処理手順の完了により、スタートアップ処理手順によってロックされた
全てのJVMソースは、ロック解除される(546)。
【0052】 スタートアップ処理手順は、実際、JVMコードソースとここで呼ばれる、J
VMとして同じコードソースの一部であり、更にJVMは、JVMデータソース
とここで呼ばれる“データソース”を含む。JVMデータソースは、ネイティブ
・メソッド表(Native Methods Table)を含む、JVMにおける全ての変数を表す
。JVMスタートアップ処理手順が実行されるときには、PalmOSは、JV
Mデータソースをアクティブ・メモリに自動的にコピーする(550)。即ち、
Palm装置によって実行されるあらゆるプログラムに対して、PalmOSは
、対応するデータソースをアクティブ・メモリに自動的にコピーする。
【0053】 更に、データソースをアクティブ・メモリに移動する間、PalmOSは、関
連コードソース内の正しい位置をポイントするようにデータソース内のポインタ
を自動的に更新する。その結果、アクティブ・メモリにおけるネイティブ・メソ
ッド表のコピーは、JVMコードソース内のネイティブ・コード・メソッドへの
更新されたポインタを包含すべくPalmOSによって自動的に更新される。
【0054】 スタートアップ処理手順は、コンテンツの表のワーキング・コピーを生成する
(551)。図8に示すように、コンテンツの表のワーキング・コピーは、ソー
ス・モジュールのそれぞれの前者と現行位置との間の差を記憶するための“Δlo
cation(Δ位置)”カラムを含む。
【0055】 更に、それは、JVMの実行が完了した後に、メモリにおけるその位置をソー
スがロック解除されるまで変えることができないようにJVMによって用いられ
るソースのそれぞれをロックする。次いで、手順は、各JVMソース・モジュー
ルにおける2バイトのヌル情報の位置を調整するが、しかし0 mod 4アドレ
スにおける各そのようなソースにおいて第1の非ヌル・データ構造を位置決めす
ることが必要であり、かつ従ってコンテンツの表に記録されたようなモジュール
の開始アドレスを調整する場合にだけである(551)。
【0056】 プレロード・クラスに関連付けられた、変更可能なパア−クラス変数の(スタ
ティック・データ・アレイ又はスタティック・データ表と呼ばれる)アレイは、
アクティブ・メモリに確立される(552)。このアレイの位置は、ポインタ調
整段階556中に注目されかつ使用される。
【0057】 次に、スタートアップ処理手順は、JVMソースの現行の開始位置を決定し、
それらをコンテンツの表に示されたような先の開始位置と比較し、かつJVMソ
ース・モジュールのそれぞれに対して現行の位置と前の位置との間の差に等しい
、ΔLocation値を生成する(554)。全てのΔLocation値が
ゼロであり、JVMの最後の実行以来JVMソース・モジュールがまったく移動
されていないことを示す場合には、段階556で実行された作業(ポインタを調
整すること)のほとんどは、スキップされる。スタティック・データ・アレイは
、このソースがJVMの各実行により再生成されても、コンテンツの表に行(r
ow)が存在する“ソース”の一つであるということに注目する。一つの実行か
ら次の実行へのスタティック・データ・アレイの位置における変化は、(段階5
56における)スタティック・データ・アレイにおけるエントリへのフィールド
表ソースにおけるポインタを更新するために用いられる。
【0058】 JVMソースの開始位置における変化に基づき、JVMソース内のポインタを
調整する段階(556)は、仮装メモリ管理プログラムを欠いている装置におい
てJVMを実行することができる段階である。ポインタの調整は、以下のように
達成される。UTFストリング表354及びインターン・ストリング表352に
対して、これらの表内のポインタの値は、これらの表のそれぞれに対する位置に
おける変化に等しい量だけ調整される。例えば、UTFストリング表354は、
+1024バイトだけ移動され、次いでこの表における全てのポインタは、10
24だけ増分される。インターン・ストリング表352内において、jyava
.lang。Stringクラスへのポインタ410は、クラス表ソースに対す
るΔLocationと同じ量だけ調整される。
【0059】 クラス表356、メソッド表450、フィールド表500及び定数プール52
0内において、各ポインタは、(A)それが適切なソース内の位置をポイントす
ることを確実にするためにチェックされ、かつ(B)そのソースに対するΔLo
cationによって調整される。調整されるべき一組のポインタは、クラス表
の全てのクラス・ブロックを通して追跡し、かつJVMソースにおける全てのメ
ソッド表、フィールド表及び定数プールを捜し出すようにそのポインタを追従し
、それからそれらの各ポインタを調整することによって見出される。
【0060】 フィールド表ソースだけがスタティック・データ・アレイにおける項目へのポ
インタを包含する。これらのポインタは、JVMの先の実行からJVMの現行の
実行までのスタティック・データ・アレイにおける変化(もしあれば)に従って
更新される。好適な実施形態では、JVMスタートアップ処理手順(段階554
)は、スタティック・データ・アレイ以外の全てのソースに対するΔLocat
ion値をチェックし、かつ全てのそれらのΔLocation値がゼロに等し
いときに“高速”更新処理に切り替える。高速更新処理では、スタティック・デ
ータ・アレイをポイントするフィールド表ソースにおけるポインタだけが段階5
56において更新される。
【0061】 ネイティブ・メソッドへのメソッド表内のポインタは、ネイティブ・メソッド
表に記憶された値を用いて、段階558において、個別に更新される。上述した
ように、ネイティブ・メソッド表におけるポインタは、Javaコードソースに
おけるネイティブ・メソッドの現行の位置をポイントするように段階550にて
更新される。ネイティブ・メソッド表は、各ネイティブ・メソッドに対して一つ
の行(row)を包含し、メソッド表ソースへのオフセット及びネイティブ・メ
ソッドへのポインタを包含する。段階558では、ネイティブ・メソッド表32
0の各行に対して、行におけるポインタは、その行のオフセット値によって示さ
れたメソッド表ソースの位置にコピーされる。段階558は、コンテンツの表に
おいて注目された全てのソースに対するΔLocation値がゼロに等しいと
きでさえも実行される。
【0062】 クライアント装置がPalm装置である好適な実施形態では、JVMソースが
クライアント装置の“スタティック・メモリ”に記憶されると同時に、それらの
ソースのコンテンツは、適切なオペレーティング・システム・コマンド(指令)
の使用を通して重ね書きすることができるということがここで注目される。スタ
ティック・メモリに新しい値を書き込むことは、特別なオペレーティング・シス
テム・コマンドの使用を必要とし、かつクライアント装置のアクティブ・メモリ
282(図3)への通常の書込みよりも更に時間を消費するが、ポインタ調整処
理は、JVMスタートアップ処理手順の各実行に対してたった一度だけ実行され
る。
【0063】 好適な実施形態では、ポインタ更新は、JVMソースのワーキング・コピーで
なされる。可能なときにはいつでもこれらのワーキング・コピーは、アクティブ
・メモリに記憶されるが、アクティブ・メモリにおける一般的な制限は、ワーキ
ング・コピーの少なくともあるものをスタティック・メモリに強制的に記憶させ
る。ワーキング・コピーは、それらにおいてポインタを有していないJVMソー
スで構成されていない。段階560では、コンテンツの表は、その開始アドレス
に各ソースに対するΔLocationを加えることによって仕上げられる(完
結される)。次いで、ワーキング・コピーが存在する各JVMソースに対して、
JVMソースは、そのワーキング・コピーで置換えられる。スタートアップ処理
手順の終り近く(very end)までコンテンツの表及びその他のJVMソースが変更
されない理由は、スタートアップ処理手順が処理の最中に割込まれた場合には、
コンテンツの表及びJVMソースのコンテンツが内部的に一貫しておらずかつス
タートアップ処理手順の割込みから回復するようにJVMソースにおける全ての
ポインタを適切に調整することが不可能である。換言すると、終りまでコンテン
ツの表及びその他のJVMソースを変更しないままにすることは、JVMソース
のコンテンツが内部的に一貫していない間の時間量を最小化する。これは、スタ
ートアップ処理手順がクラッシュ又はスタートアップ処理手順のその他の割込み
から回復できるようにする。
【0064】 スタートアップ処理が完了した後、JVMが実行される(図16A、544)
。次いで、JVMは、単一のアプレットを実行しうるか、またはそれ自体の実行
が停止される前にJavaプログラムを実行しうる。JVMの実行が完了された
ときには、JVMソースは、ロック解除され、それによりその内部ハウスキーピ
ング・ポリシーに従ってオペレーティング・システムにそれらをメモリの新しい
位置に移動させることができる。
【0065】 代替実施形態 本発明は、コンピュータ読取り可能記憶媒体に組込まれたコンピュータ・プロ
グラム機構を含むコンピュータ・プログラム製品として実施することができる。
例えば、コンピュータ・プログラム製品は、図1及び2に示したプログラム・モ
ジュールを含むことができる。これらのプログラム・モジュールは、CD−RO
M、磁気ディスク記憶製品又はその他のコンピュータ読取り可能データ又はプロ
グラム記憶製品に記憶することができる。また、コンピュータ・プログラム製品
のソフトウェア・モジュールは、インターネットを介して、さもなければ、搬送
波による(ソフトウェア・モジュールが組込まれる)コンピュータ・データ信号
の送信によって、電子的に分配することもできる。
【0066】 本発明をいくつかの特定の実施形態を参照して記述したが、記述は、本発明の
説明のためであり本発明を限定することを意味するものではない。添付した特許
請求の範囲によって定義されるような本発明の真の精神及び適用範囲から逸脱す
ることなく当業者において様々な変更がなされうる。
【図面の簡単な説明】
【図1】 Java仮装マシン(JVM)オーサリング・システムのブロック図である。
【図2】 JVMが一組のプレロード・クラスにより実行されるクライアント装置のブロ
ック図である。
【図3】 クライアント装置のメモリ・マップである。
【図4】 クラス・ファイル・データ構造を示す図である。
【図5】 クライアント装置のJVMによる使用に対して一組のプレロード・クラスを生
成するための処理のフローチャートである。
【図6】 ネイティブ・メソッド表データ構造を示す図である。
【図7】 一組のソース・モジュールとしても知られる、ロード・モジュールを示す図で
ある。
【図8】 ソース・モジュールに関する情報を記憶する、コンテンツ・データ構造の表を
示す図である。
【図9A】 UTFストリング表データ構造を示す図である。
【図9B】 インターン・ストリング表データ構造を示す図である。
【図9C】 インターン・ストリング表データ構造を示す図である。
【図10】 クラス表データ構造を示す図である。
【図11】 クラス表データ構造を示す図である。
【図12】 メソッド表、コード・ブロック及び例外表データ構造を示す図である。
【図13】 フィールド表データ構造を示す図である。
【図14】 定数プール・データ構造を示す図である。
【図15】 0 mod 4 アドレスに降下するようにソースの第1のデータ構造の位置を
調整する処理の概念表現図である。
【図16A】 JVMスタートアップ処理手順のフローチャートである。
【図16B】 JVMスタートアップ処理手順のフローチャートである。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE,TR),OA(BF ,BJ,CF,CG,CI,CM,GA,GN,GW, ML,MR,NE,SN,TD,TG),AP(GH,G M,KE,LS,MW,MZ,SD,SL,SZ,TZ ,UG,ZW),EA(AM,AZ,BY,KG,KZ, MD,RU,TJ,TM),AE,AG,AL,AM, AT,AU,AZ,BA,BB,BG,BR,BY,B Z,CA,CH,CN,CO,CR,CU,CZ,DE ,DK,DM,DZ,EE,ES,FI,GB,GD, GE,GH,GM,HR,HU,ID,IL,IN,I S,JP,KE,KG,KP,KR,KZ,LC,LK ,LR,LS,LT,LU,LV,MA,MD,MG, MK,MN,MW,MX,MZ,NO,NZ,PL,P T,RO,RU,SD,SE,SG,SI,SK,SL ,TJ,TM,TR,TT,TZ,UA,UG,UZ, VN,YU,ZA,ZW

Claims (32)

    【特許請求の範囲】
  1. 【請求項1】 仮装記憶管理プログラムを欠いているクライアント装置にお
    けるプレローディングに対して特定した組のクラスを準備する方法であって: 前記特定した組のクラスを複数のソース・モジュールに変換する段階であり、
    前記ソース・モジュールのサブセットは、それぞれ 該ソース・モジュールのそ
    の他のものにおける項目へのポインタを有する項目を含み;各ポインタは、ポイ
    ンタされる項目のメモリ・アドレスを特定する、該段階; クライアント装置による実行に対して、コンパイルされたインタプリタを供給
    する段階であり;前記インタプリタは、所定のコンピュータ言語のプログラムを
    実行するためであり、かつ前記特定した組のクラスは、前記所定のコンピュータ
    言語のメソッドを含む、該段階; 実行のために前記インタプリタをロードするときに前記クライアント装置によ
    って実行されるべき、コンパイルされたスタートアップ処理手順を供給する段階
    であり;前記スタートアップ処理手順は、前記クライアント装置のある特定の一
    つにおける前記ソース・モジュールの実際のメモリ位置に従って前記ソースリソ
    ースのポインタを更新されたポインタで置換える、該段階;及び 前記クライアント装置にロードするためのロード・モジュールを生成する段階
    であり、前記ロード・モジュールは、複数のソース・モジュール、コンパイルさ
    れたインタプリタ及びコンパイルされたスタートアップ処理手順を含む、該段階
    を具備する方法。
  2. 【請求項2】 前記ソース・モジュールは、クラス表ソース・モジュール、
    メソッド表ソース・モジュール、フィールド表ソース・モジュール、定数プール
    ソース・モジュール及びストリングソース・モジュールを含み、前記クラス・デ
    ータ構造は、前記メソッド表、フィールド表及び定数プールソース・モジュール
    における項目へのポインタを含み、前記フィールド表ソース・モジュールは、前
    記ストリングソース・モジュールにおける項目へのポインタを含み、かつ前記定
    数プールソース・モジュールは、前記フィールド表ソースにおける項目及び前記
    ストリングソース・モジュールにおける項目へのポインタを含む、請求項1に記
    載の方法。
  3. 【請求項3】 前記スタートアップ処理手順は、前記クライアント装置のあ
    る特定の一つを有する0 mod 4アドレスにおけるサブセットの前記ソース・
    モジュールの少なくとも二つのそれぞれにおいて第1のデータ構造を位置決めす
    るための命令を含む、請求項1に記載の方法。
  4. 【請求項4】 前記ソース・モジュールは、当該ソース・モジュールの第2
    のサブセットのそれぞれに対するメモリ・アドレスを表示するコンテンツの表を
    含み、該第2のサブセットは、前記ソースモジューにおけるポインタの少なくと
    も一つによってポイントされた前記ソース・モジュールのそれらを含み; 前記スタートアップ処理手順は、(A)第2のサブセットのソース・モジュー
    ルのそれぞれに対する現行メモリ・アドレスを決定し、現行メモリ・アドレスと
    コンテンツの表に表示されるメモリ・アドレスとの間の差に対応している第2の
    サブセットの各ソース・モジュールに対する差分値を決定し、かつ(B)差分値
    に従ってソース・モジュールのポインタの少なくともサブセットを調整するため
    の命令を含む、請求項1に記載の方法。
  5. 【請求項5】 前記ソース・モジュールは、特定した組のクラスのメソッド
    に対するコードへのポインタを有するメソッド表モジュール、及びコンパイルさ
    れたインタプリタのネイティブ・メソッドへのメソッド表ポイントのポインタの
    サブセットを含む、請求項1に記載の方法。
  6. 【請求項6】 コンピュータ・システムと協同して使用するコンピュータ・
    プログラム・プロダクトであって、該コンピュータ・プログラム・プロダクトは
    、コンピュータ読取り可能記憶媒体とそれに組込まれたコンピュータ・プログラ
    ム機構を備え、該コンピュータ・プログラム機構は、 特定した組のクラスを複数のソース・モジュールに変換するクラス・プレロー
    ダであり、該ソース・モジュールのサブセットは、それぞれ、該ソース・モジュ
    ールのその他のものにおける項目へのポインタを有する項目を含み;各ポインタ
    は、ポイントされる項目のメモリ・アドレスを特定する、該クラス・プレローダ
    ; コンパイルされたインタプリタを生成するように、仮装メモリ管理プログラム
    を欠いているクライアント装置による実行に対して、インタプリタをコンパイル
    するコンパイラであり;該インタプリタは、所定のコンピュータ言語のプログラ
    ムを実行するためであり、かつ前記特定した組のクラスは、前記所定のコンピュ
    ータ言語のメソッドを含む、該コンパイラ; 前記コンパイラは、更に、コンパイルされたスタートアップ処理手順を生成す
    るように、実行のためにインタプリタをロードするときにクライアント装置によ
    って実行される、スタートアップ処理手順をコンパイルし、該スタートアップ処
    理手順は、前記クライアント装置のある特定の一つにおける前記ソース・モジュ
    ールの実際のメモリ位置に従ってソース・モジュールのポインタを更新されたポ
    インタで置換え;かつ 前記コンパイラは、更に、クライアント装置にロードするためのロード・モジ
    ュールを生成し、該ロード・モジュールは、複数のソース・モジュール、コンパ
    イルされたインタプリタ及びコンパイルされたスタートアップ処理手順を含む、
    コンピュータ・プログラム・プロダクト。
  7. 【請求項7】 前記ソース・モジュールは、クラス表ソース・モジュール、
    メソッド表ソース・モジュール、フィールド表ソース・モジュール、定数プール
    ソース・モジュール及びストリングソース・モジュールを含み、前記クラス・デ
    ータ構造は、前記メソッド表、フィールド表及び定数プールソース・モジュール
    における項目へのポインタを含み、前記フィールド表ソース・モジュールは、前
    記ストリングソース・モジュールにおける項目へのポインタを含み、かつ前記定
    数プールソース・モジュールは、前記フィールド表ソースにおける項目及び前記
    ストリングソース・モジュールにおける項目へのポインタを含む、請求項6に記
    載のコンピュータ・プログラム・プロダクト。
  8. 【請求項8】 前記スタートアップ処理手順は、前記クライアント装置のあ
    る特定の一つを有する0 mod 4アドレスにおけるサブセットの前記ソース・
    モジュールの少なくとも二つのそれぞれにおいて第1のデータ構造を位置決めす
    るための命令を含む、請求項6に記載のコンピュータ・プログラム・プロダクト
  9. 【請求項9】 前記ソース・モジュールは、当該ソース・モジュールの第2
    のサブセットのそれぞれに対するメモリ・アドレスを表示するコンテンツの表を
    含み、該第2のサブセットは、前記ソースモジューにおけるポインタの少なくと
    も一つによってポイントされた前記ソース・モジュールのそれらを含み; 前記スタートアップ処理手順は、(A)第2のサブセットのソース・モジュー
    ルのそれぞれに対する現行メモリ・アドレスを決定し、現行メモリ・アドレスと
    コンテンツの表に表示されるメモリ・アドレスとの間の差に対応している第2の
    サブセットの各ソース・モジュールに対する差分値を決定し、かつ(B)差分値
    に従ってソース・モジュールのポインタの少なくともサブセットを調整するため
    の命令を含む、請求項6に記載のコンピュータ・プログラム・プロダクト。
  10. 【請求項10】 前記ソース・モジュールは、特定した組のクラスのメソッ
    ドに対するコードへのポインタを有するメソッド表モジュール、及びコンパイル
    されたインタプリタのネイティブ・メソッドへのメソッド表ポイントのポインタ
    のサブセットを含む、請求項6に記載のコンピュータ・プログラム・プロダクト
  11. 【請求項11】 仮装記憶管理プログラムを欠いているクライアント装置に
    おけるプレローディングに対して特定した組のクラスを準備するコンピュータ・
    システムであって: データ処理装置; 特定した組のクラス、インタプリタ、及びスタートアップ処理手順を記憶する
    メモリ; 特定した組のクラスを複数のソース・モジュールに変換するクラス・プレロー
    ダであり、該ソース・モジュールのサブセットは、それぞれ、該ソース・モジュ
    ールのその他のものにおける項目へのポインタを有する項目を含み;各ポインタ
    は、ポイントされる項目のメモリ・アドレスを特定する、該クラス・プレローダ
    ; コンパイルされたインタプリタを生成するように、仮装メモリ管理プログラム
    を欠いているクライアント装置による実行に対して、インタプリタをコンパイル
    するコンパイラであり;該インタプリタは、所定のコンピュータ言語のプログラ
    ムを実行するためであり、かつ前記特定した組のクラスは、前記所定のコンピュ
    ータ言語のメソッドを含む、該コンパイラ; 前記コンパイラは、更に、コンパイルされたスタートアップ処理手順を生成す
    るように、実行のためにインタプリタをロードするときにクライアント装置によ
    って実行される、スタートアップ処理手順をコンパイルし、該スタートアップ処
    理手順は、前記クライアント装置のある特定の一つにおける前記ソース・モジュ
    ールの実際のメモリ位置に従ってソース・モジュールのポインタを更新されたポ
    インタで置換え;かつ 前記コンパイラは、更に、クライアント装置にロードするためのロード・モジ
    ュールを生成し、該ロード・モジュールは、複数のソース・モジュール、コンパ
    イルされたインタプリタ及びコンパイルされたスタートアップ処理手順を含む、
    コンピュータ・システム。
  12. 【請求項12】 前記ソース・モジュールは、クラス表ソース・モジュール
    、メソッド表ソース・モジュール、フィールド表ソース・モジュール、定数プー
    ルソース・モジュール及びストリングソース・モジュールを含み、前記クラス・
    データ構造は、前記メソッド表、フィールド表及び定数プールソース・モジュー
    ルにおける項目へのポインタを含み、前記フィールド表ソース・モジュールは、
    前記ストリングソース・モジュールにおける項目へのポインタを含み、かつ前記
    定数プールソース・モジュールは、前記フィールド表ソースにおける項目及び前
    記ストリングソース・モジュールにおける項目へのポインタを含む、請求項11
    に記載のコンピュータ・システム。
  13. 【請求項13】 前記スタートアップ処理手順は、前記クライアント装置の
    ある特定の一つを有する0 mod 4アドレスにおけるサブセットの前記ソース
    ・モジュールの少なくとも二つのそれぞれにおいて第1のデータ構造を位置決め
    するための命令を含む、請求項11に記載のコンピュータ・システム。
  14. 【請求項14】 前記ソース・モジュールは、当該ソース・モジュールの第
    2のサブセットのそれぞれに対するメモリ・アドレスを表示するコンテンツの表
    を含み、該第2のサブセットは、前記ソースモジューにおけるポインタの少なく
    とも一つによってポイントされた前記ソース・モジュールのそれらを含み; 前記スタートアップ処理手順は、(A)第2のサブセットのソース・モジュー
    ルのそれぞれに対する現行メモリ・アドレスを決定し、現行メモリ・アドレスと
    コンテンツの表に表示されるメモリ・アドレスとの間の差に対応している第2の
    サブセットの各ソース・モジュールに対する差分値を決定し、かつ(B)差分値
    に従ってソース・モジュールのポインタの少なくともサブセットを調整するため
    の命令を含む、請求項11に記載のコンピュータ・システム。
  15. 【請求項15】 前記ソース・モジュールは、特定した組のクラスのメソッ
    ドに対するコードへのポインタを有するメソッド表モジュール、及びコンパイル
    されたインタプリタのネイティブ・メソッドへのメソッド表ポイントのポインタ
    のサブセットを含む、請求項11に記載のコンピュータ・システム。
  16. 【請求項16】 仮装記憶管理プログラムを欠いているクライアント装置を
    動作する方法であって: 複数のソース・モジュールをクライアント装置のメモリに記憶する段階であり
    、前記複数のソース・モジュールは、一組のクラスを表し、前記ソース・モジュ
    ールのサブセットは、それぞれ、該ソース・モジュールのその他のものにおける
    項目へのポインタを有する項目を含み;各ポインタは、ポイントされる項目のメ
    モリ・アドレスを特定する、該段階; インタプリタを用いて所定のコンピュータ言語のプログラムを実行する段階で
    あり、該実行されるプログラムは、一組のクラスのメソッドを含む、該段階; 前記インタプリタをロードすることによりかつ該インタプリタを用いてプログ
    ラムを実行する前に、前記クライアント装置における前記ソース・モジュールの
    実際のメモリ位置に従って前記ソース・モジュールのポインタを更新されたポイ
    ンタで置換えるようにスタートアップ処理手順を実行する段階、 を具備する方法。
  17. 【請求項17】 前記ソース・モジュールは、クラス表ソース・モジュール
    、メソッド表ソース・モジュール、フィールド表ソース・モジュール、定数プー
    ルソース・モジュール及びストリングソース・モジュールを含み、前記クラス・
    データ構造は、前記メソッド表、フィールド表及び定数プールソース・モジュー
    ルにおける項目へのポインタを含み、前記フィールド表ソース・モジュールは、
    前記ストリングソース・モジュールにおける項目へのポインタを含み、かつ前記
    定数プールソース・モジュールは、前記フィールド表ソースにおける項目及び前
    記ストリングソース・モジュールにおける項目へのポインタを含む、請求項16
    に記載の方法。
  18. 【請求項18】 前記スタートアップ処理手順は、前記クライアント装置の
    ある特定の一つを有する0 mod 4アドレスにおけるサブセットの前記ソース
    ・モジュールの少なくとも二つのそれぞれにおいて第1のデータ構造を位置決め
    するための命令を含む、請求項16に記載の方法。
  19. 【請求項19】 前記ソース・モジュールは、当該ソース・モジュールの第
    2のサブットのそれぞれに対するメモリ・アドレスを表示するコンテンツの表を
    含み、該第2のサブセットは、前記ソースモジューにおけるポインタの少なくと
    も一つによってポイントされた前記ソース・モジュールのそれらを含み; 前記スタートアップ処理手順は、(A)第2のサブセットのソース・モジュー
    ルのそれぞれに対する現行メモリ・アドレスを決定し、現行メモリ・アドレスと
    コンテンツの表に表示されるメモリ・アドレスとの間の差に対応している第2の
    サブセットの各ソース・モジュールに対する差分値を決定し、かつ(B)差分値
    に従ってソース・モジュールのポインタの少なくともサブセットを調整するため
    の命令を含む、請求項16に記載の方法。
  20. 【請求項20】 前記ソース・モジュールは、特定した組のクラスのメソッ
    ドに対するコードへのポインタを有するメソッド表モジュール、及びコンパイル
    されたインタプリタのネイティブ・メソッドへのメソッド表ポイントのポインタ
    のサブセットを含む、請求項16に記載の方法。
  21. 【請求項21】 コンピュータ・システムと協同して使用するコンピュータ
    ・プログラム・プロダクトであって、該コンピュータ・プログラム・プロダクト
    は、コンピュータ読取り可能記憶媒体とそれに組込まれたコンピュータ・プログ
    ラム機構を備え、該コンピュータ・プログラム機構は、 仮装メモリ管理プログラムを欠いているクライアント装置にロードするための
    ロード・モジュールを備え、該ロード・モジュールは、 複数のソース・モジュールであり、該複数のソース・モジュールは、一組の
    クラスを表し、前記ソース・モジュールのサブセットは、それぞれ、該ソース・
    モジュールのその他のものにおける項目へのポインタを有する項目を含み;各ポ
    インタは、ポイントされる項目のメモリ・アドレスを特定する、該複数のソース
    ・モジュール; 所定のコンピュータ言語のプログラムを実行するインタプリタであり;前記
    特定された組のクラスは、前記所定のコンピュータ言語のメソッドを含む、該イ
    ンタプリタ; 実行のために前記インタプリタをロードするときに前記クライアント装置に
    よって実行される、スタートアップ処理手順であり、該スタートアップ処理手順
    は、前記クライアント装置のある特定の一つの該ソース・モジュールの実際のメ
    モリ位置に従って前記ソース・モジュールのポインタを更新されたポインタで置
    換える、該スタートアップ処理手順、 を含む、コンピュータ・プログラム・プロダクト。
  22. 【請求項22】 前記ソース・モジュールは、クラス表ソース・モジュール
    、メソッド表ソース・モジュール、フィールド表ソース・モジュール、定数プー
    ルソース・モジュール及びストリングソース・モジュールを含み、前記クラス・
    データ構造は、前記メソッド表、フィールド表及び定数プールソース・モジュー
    ルにおける項目へのポインタを含み、前記フィールド表ソース・モジュールは、
    前記ストリングソース・モジュールにおける項目へのポインタを含み、かつ前記
    定数プールソース・モジュールは、前記フィールド表ソースにおける項目及び前
    記ストリングソース・モジュールにおける項目へのポインタを含む、請求項21
    に記載のコンピュータ・プログラム・プロダクト。
  23. 【請求項23】 前記スタートアップ処理手順は、前記クライアント装置の
    ある特定の一つを有する0 mod 4アドレスにおけるサブセットの前記ソース
    ・モジュールの少なくとも二つのそれぞれにおいて第1のデータ構造を位置決め
    するための命令を含む、請求項21に記載のコンピュータ・プログラム・プロダ
    クト。
  24. 【請求項24】 前記ソース・モジュールは、当該ソース・モジュールの第
    2のサブセットのそれぞれに対するメモリ・アドレスを表示するコンテンツの表
    を含み、該第2のサブセットは、前記ソースモジューにおけるポインタの少なく
    とも一つによってポイントされた前記ソース・モジュールのそれらを含み; 前記スタートアップ処理手順は、(A)第2のサブセットのソース・モジュー
    ルのそれぞれに対する現行メモリ・アドレスを決定し、現行メモリ・アドレスと
    コンテンツの表に表示されるメモリ・アドレスとの間の差に対応している第2の
    サブセットの各ソース・モジュールに対する差分値を決定し、かつ(B)差分値
    に従ってソース・モジュールのポインタの少なくともサブセットを調整するため
    の命令を含む、請求項21に記載のコンピュータ・プログラム・プロダクト。
  25. 【請求項25】 前記ソース・モジュールは、特定した組のクラスのメソッ
    ドに対するコードへのポインタを有するメソッド表モジュール、及びコンパイル
    されたインタプリタのネイティブ・メソッドへのメソッド表ポイントのポインタ
    のサブセットを含む、請求項21に記載のコンピュータ・プログラム・プロダク
    ト。
  26. 【請求項26】 データ処理装置と; 仮装記憶管理プログラムを欠いているオペレーティング・システム; 複数のソース・モジュールであり、該複数のソース・モジュールは、一組の
    クラスを表し、前記ソース・モジュールのサブセットは、それぞれ、該ソース・
    モジュールのその他のものにおける項目へのポインタを有する項目を含み;各ポ
    インタは、ポイントされる項目のメモリ・アドレスを特定する、該複数のソース
    ・モジュール; 所定のコンピュータ言語のプログラムを実行するインタプリタであり;前記
    特定された組のクラスは、前記所定のコンピュータ言語のメソッドを含む、該イ
    ンタプリタ; 実行のために前記インタプリタをロードするときに前記クライアント装置に
    よって実行される、スタートアップ処理手順であり、該スタートアップ処理手順
    は、前記クライアント装置のある特定の一つの該ソース・モジュールの実際のメ
    モリ位置に従って前記ソース・モジュールのポインタを更新されたポインタで置
    換える、該スタートアップ処理手順、 を記憶するメモリと を備えている、クライアント装置。
  27. 【請求項27】 前記ソース・モジュールは、クラス表ソース・モジュール
    、メソッド表ソース・モジュール、フィールド表ソース・モジュール、定数プー
    ルソース・モジュール及びストリングソース・モジュールを含み、前記クラス・
    データ構造は、前記メソッド表、フィールド表及び定数プールソース・モジュー
    ルにおける項目へのポインタを含み、前記フィールド表ソース・モジュールは、
    前記ストリングソース・モジュールにおける項目へのポインタを含み、かつ前記
    定数プールソース・モジュールは、前記フィールド表ソースにおける項目及び前
    記ストリングソース・モジュールにおける項目へのポインタを含む、請求項26
    に記載のクライアント装置。
  28. 【請求項28】 前記スタートアップ処理手順は、前記クライアント装置の
    ある特定の一つを有する0 mod 4アドレスにおけるサブセットの前記ソース
    ・モジュールの少なくとも二つのそれぞれにおいて第1のデータ構造を位置決め
    するための命令を含む、請求項26に記載のクライアント装置。
  29. 【請求項29】 前記ソース・モジュールは、当該ソース・モジュールの第
    2のサブセットのそれぞれに対するメモリ・アドレスを表示するコンテンツの表
    を含み、該第2のサブセットは、前記ソースモジューにおけるポインタの少なく
    とも一つによってポイントされた前記ソース・モジュールのそれらを含み; 前記スタートアップ処理手順は、(A)第2のサブセットのソース・モジュー
    ルのそれぞれに対する現行メモリ・アドレスを決定し、現行メモリ・アドレスと
    コンテンツの表に表示されるメモリ・アドレスとの間の差に対応している第2の
    サブセットの各ソース・モジュールに対する差分値を決定し、かつ(B)差分値
    に従ってソース・モジュールのポインタの少なくともサブセットを調整するため
    の命令を含む、請求項26に記載のクライアント装置。
  30. 【請求項30】 前記ソース・モジュールは、特定した組のクラスのメソッ
    ドに対するコードへのポインタを有するメソッド表モジュール、及びコンパイル
    されたインタプリタのネイティブ・メソッドへのメソッド表ポイントのポインタ
    のサブセットを含む、請求項26に記載のクライアント装置。
  31. 【請求項31】 前記クライアント装置は、ディスプレイを含み;かつ 前記メモリは: それに組込まれた前記インタプリタによって実行可能なアプレットへの参照
    を有する文書を含む、文書を遠隔的に配置されたコンピュータからロードし、か
    つ前記アプレットを実行することによって生成された前記文書及び画像をディス
    プレイ上に表示するために、前記クライアント装置によって実行可能な、ブラウ
    ザ・アプリケーションを更に記憶する、 請求項26に記載のクライアント装置。
  32. 【請求項32】 搬送波に組み入れられたコンピュータ・データ信号であっ
    て: 仮装メモリ管理プログラムを欠いているクライアント装置にロードするための
    、ロード・モジュールを備え、前記ロード・モジュールは、 複数のソース・モジュールであり、該複数のソース・モジュールは、一組の
    クラスを表し、前記ソース・モジュールのサブセットは、それぞれ、該ソース・
    モジュールのその他のものにおける項目へのポインタを有する項目を含み;各ポ
    インタは、ポイントされる項目のメモリ・アドレスを特定する、該複数のソース
    ・モジュール; 所定のコンピュータ言語のプログラムを実行するインタプリタであり;前記
    特定された組のクラスは、前記所定のコンピュータ言語のメソッドを含む、該イ
    ンタプリタ; 実行のために前記インタプリタをロードするときに前記クライアント装置に
    よって実行される、スタートアップ処理手順であり、該スタートアップ処理手順
    は、前記クライアント装置のある特定の一つの該ソース・モジュールの実際のメ
    モリ位置に従って前記ソース・モジュールのポインタを更新されたポインタで置
    換える、該スタートアップ処理手順、 を含む、コンピュータ・データ信号。
JP2001564991A 2000-03-09 2001-03-08 仮想記憶管理プログラムを有していないデータ処理装置にクラスをプレロードするためのシステム及び方法 Pending JP2003526154A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/522,268 2000-03-09
US09/522,268 US6745386B1 (en) 2000-03-09 2000-03-09 System and method for preloading classes in a data processing device that does not have a virtual memory manager
PCT/US2001/007497 WO2001067236A2 (en) 2000-03-09 2001-03-08 System and method for preloading classes in a data processing device that does not have a virtual memory manager

Publications (1)

Publication Number Publication Date
JP2003526154A true JP2003526154A (ja) 2003-09-02

Family

ID=24080171

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001564991A Pending JP2003526154A (ja) 2000-03-09 2001-03-08 仮想記憶管理プログラムを有していないデータ処理装置にクラスをプレロードするためのシステム及び方法

Country Status (11)

Country Link
US (1) US6745386B1 (ja)
EP (1) EP1269309B1 (ja)
JP (1) JP2003526154A (ja)
KR (1) KR20030044902A (ja)
CN (1) CN1218245C (ja)
AT (1) ATE268023T1 (ja)
AU (2) AU4202801A (ja)
CA (1) CA2402298A1 (ja)
DE (1) DE60103521T2 (ja)
RU (1) RU2002126996A (ja)
WO (1) WO2001067236A2 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6324685B1 (en) 1998-03-18 2001-11-27 Becomm Corporation Applet server that provides applets in various forms
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
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
CN100337198C (zh) * 2001-05-30 2007-09-12 捷讯研究有限公司 一种移动通信设备应用程序处理系统
US8205193B2 (en) * 2001-06-11 2012-06-19 Hewlett-Packard Development Company, L.P. Runtime updating of virtual machine class files
JP2004152279A (ja) * 2002-10-08 2004-05-27 Matsushita Electric Ind Co Ltd プログラム更新方法および端末装置
CN100365570C (zh) * 2003-12-18 2008-01-30 中国电子科技集团公司第三十研究所 运用于dsp的动态加载方法
KR100654428B1 (ko) * 2004-01-14 2006-12-06 삼성전자주식회사 자바 프로그램의 처리 속도를 향상시키는 시스템 및 그 방법
US7406687B1 (en) * 2004-03-17 2008-07-29 Sun Microsystems, Inc. Sharing runtime representation of software component methods across component loaders
US7356811B2 (en) * 2004-07-08 2008-04-08 International Business Machines Corporation Method and apparatus for referencing a constant pool in a java virtual machine
KR100790053B1 (ko) * 2006-06-05 2008-01-02 주식회사 대우일렉트로닉스 마스터 장치의 번들 처리 장치 및 방법
CN100442233C (zh) * 2007-01-31 2008-12-10 华为技术有限公司 实现应用系统动态升级的方法及系统
US20100057737A1 (en) * 2008-08-29 2010-03-04 Oracle International Corporation Detection of non-occurrences of events using pattern matching
US8799357B2 (en) * 2010-11-08 2014-08-05 Sony Corporation Methods and systems for use in providing a remote user interface
KR20130020050A (ko) * 2011-08-18 2013-02-27 삼성전자주식회사 로컬리티 센서티브 해시의 버킷 구간 관리 장치 및 그 방법
US9507613B2 (en) * 2012-03-30 2016-11-29 Oracle International Corporation Methods and apparatus for dynamically preloading classes
US8997075B2 (en) * 2013-07-23 2015-03-31 Red Hat, Inc. System and method for dynamic class management
US9274769B1 (en) * 2014-09-05 2016-03-01 International Business Machines Corporation Table of contents pointer value save and restore placeholder positioning
US10191753B2 (en) 2016-03-30 2019-01-29 Oracle International Corporation Generating verification metadata and verifying a runtime type based on verification metadata
US10394528B2 (en) 2016-03-30 2019-08-27 Oracle International Corporation Returning a runtime type loaded from an archive in a module system
CN108228694A (zh) * 2017-06-30 2018-06-29 勤智数码科技股份有限公司 基于细化数据项的目录生成方法
US10866806B2 (en) * 2017-11-14 2020-12-15 Nvidia Corporation Uniform register file for improved resource utilization
CN114519582A (zh) * 2022-02-21 2022-05-20 中国邮政储蓄银行股份有限公司 服务的预热方法、预热装置和服务系统

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5548759A (en) * 1994-07-05 1996-08-20 Microsoft Corporation System for storing executable code within a resource data section of an executable file
US5692047A (en) * 1995-12-08 1997-11-25 Sun Microsystems, Inc. System and method for executing verifiable programs with facility for using non-verifiable programs from trusted sources
US5727147A (en) * 1995-12-08 1998-03-10 Sun Microsystems, Inc. System and method for resolving symbolic references to externally located program files
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
US5946487A (en) * 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US6349344B1 (en) 1997-12-16 2002-02-19 Microsoft Corporation Combining multiple java class files into a run-time image
FR2775805B1 (fr) 1998-03-05 2001-10-12 Alsthom Cge Alkatel Procede et architecture logicielle pour la transmission d'objets au sein d'un environnement distribue, conservant les references entre objets
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

Also Published As

Publication number Publication date
KR20030044902A (ko) 2003-06-09
CA2402298A1 (en) 2001-09-13
EP1269309B1 (en) 2004-05-26
WO2001067236A3 (en) 2002-05-30
WO2001067236A2 (en) 2001-09-13
CN1218245C (zh) 2005-09-07
ATE268023T1 (de) 2004-06-15
US6745386B1 (en) 2004-06-01
CN1427968A (zh) 2003-07-02
DE60103521D1 (de) 2004-07-01
RU2002126996A (ru) 2004-03-10
DE60103521T2 (de) 2005-06-23
EP1269309A2 (en) 2003-01-02
AU4202801A (en) 2001-09-17
AU2001242028B2 (en) 2005-05-26

Similar Documents

Publication Publication Date Title
JP2003526154A (ja) 仮想記憶管理プログラムを有していないデータ処理装置にクラスをプレロードするためのシステム及び方法
US6826750B1 (en) Method of automatically selecting program and data updates based upon versions
US5359721A (en) Non-supervisor mode cross address space dynamic linking
US6330709B1 (en) Virtual machine implementation for shared persistent objects
US8434099B2 (en) Efficient linking and loading for late binding and platform retargeting
US7565665B2 (en) Efficient linking and loading for late binding and platform retargeting
US6260187B1 (en) System for modifying object oriented code
US6321374B1 (en) Application-independent generator to generate a database transaction manager in heterogeneous information systems
US5291601A (en) Shared libraries implemented with linking program loader
AU2001242028A1 (en) System and method for preloading classes in a data processing device that does not have a virtual memory manager
US8176142B2 (en) Shared JAVA jar files
US6823509B2 (en) Virtual machine with reinitialization
AU712005B2 (en) System and method for runtime optimization of private variable function calls in a secure interpreter
US6633892B1 (en) Archiving tool
JP2002508560A (ja) マルチプル・クラスファイルのランタイムイメージへの結合
US6507948B1 (en) Method, system, and program for generating batch files
GB2365553A (en) Trace information in a virtual machine
US20090133042A1 (en) Efficient linking and loading for late binding and platform retargeting
US20050015356A1 (en) Database System Providing Methodology for Prepared Statement Cloning
US7020874B2 (en) Techniques for loading class files into virtual machines
US6901591B1 (en) Frameworks for invoking methods in virtual machines
US6968549B1 (en) Method and system for dynamically loading data structures into memory with global constant pool
US7096466B2 (en) Loading attribute for partial loading of class files into virtual machines
JPH06309204A (ja) データ処理方法及びその装置
US5963955A (en) Bridge for exporting and importing objects between object oriented programming environments