(57)【特許請求の範囲】
【請求項１】
分散型コンピュータ・システムにおいてコンピュータを動作させる方法において、
プロセッサにより、複数のクラスをメモリに記憶する段階であって、
各クラスは、データ及び少なくとも一つのメソッドを含み、
各メソッドは、複数のバイトコードを含み、
該バイトコードのサブセットは、前記コンピュータによってアクセス可能なメソッドへの記号参照を含む段階と；
前記プロセッサにより、各前記クラスに対して、該クラスのデータが当該クラスのメソッドの一つによって変更可能であるときに該クラスのデータに特別のインジケータを挿入することによってフラグを立てる段階と；
前記プロセッサにより、前記メモリに記憶された特定のメソッドへの各前記記号参照を前記特定のメソッドのメモリ位置で置換する段階と；
前記プロセッサにより、各前記クラスの各前記メソッドに対して、前記メソッドのバイトコードの一つが前記メモリに記憶されていないメソッドへの記号参照を含むときに前記メソッドに特別のインジケータを挿入することによってフラグを立てる段階と；
前記プロセッサにより、必要に応じ特別のインジケータを挿入することによってフラグを立てられた各前記クラスを含んでいる実行可能モジュールを記憶する段階であって、各フラグが立っていないメソッド及び各フラグが立っていないデータは、前記実行可能モジュールが実行されるときには読み出し専用記憶媒体に記憶されている状態であり、かつ各前記フラグが立てられたメソッド及び各フラグが立てられたデータは、前記実行可能モジュールが実行されるときには読み取り及び書き込み許可型記憶媒体に記憶されている状態であるような段階と、を具備することを特徴とする方法。
【請求項２】
コンピュータ・システムを動作させる方法において、
プロセッサにより、第１のサブモジュール及び第２のサブモジュールに分割されたブラウザ・モジュールを読み出し専用メモリ・デバイスにプリロードすることにより記憶する段階であって、
各サブモジュールは、複数の命令及びデータを含み、
前記第２のサブモジュールは、前記命令のサブセット及び前記データのサブセットを有し、
前記命令のサブセット及び前記データのサブセットは、前記複数の命令の実行中に変更可能である命令及びデータを含む段階と；
前記プロセッサにより、前記コンピュータ・システムの起動により、ランダム・アクセス・メモリ・デバイスに前記第２のサブモジュールを記憶する段階と；
内容情報データ及びコンピュータ−実行可能モジュールをインポートすべく前記ブラウザ・モジュールを実行する段階であって、
前記インポートされたデータ及び前記コンピュータ−実行可能モジュールは、前記ランダム・アクセス・メモリ・デバイスに記憶される段階と、を具備することを特徴とする方法。
【請求項３】
通信リンクによって接続された複数のコンピュータを有する分散型データ処理システムにおける、一つの該コンピュータにおいて、
複数のクラスを記憶するメモリであって、
各前記クラスは、複数のデータ及び少なくとも一つのメソッドを含み、各前記メソッドは、複数のバイトコードを含み、
前記バイトコードの第１のセットは、前記メモリに記憶されたメソッドを参照し、
前記バイトコードの第２のセットは、前記通信リンクによってアクセス可能なメソッドを参照するメモリと；
各前記クラスに対して、前記クラスのデータが前記クラスのメソッドの一つによって変更可能であるときに前記クラスのデータに特別のインジケータを挿入することによってフラグを立て、かつ各前記クラスの各前記メソッドに対して、前記メソッドのバイトコードの一つが前記メモリに記憶されていないメソッドへの記号参照を含むときに前記メソッドに特別のインジケータを挿入することによってフラグを立てるオフライン・クラス・ローダーと；
第１の部分及び第２の部分を有する実行可能モジュールを生成するリンカであって、
前記第１の部分は、前記オフライン・ローダーによってフラグが立てられた前記データ及び前記クラスのメソッドのそれぞれを含み、かつ
前記第２の部分は、前記第１の部分にない前記データ及び前記クラスのメソッドのそれぞれを含むリンカと、
を備えていることを特徴とするコンピュータ。
【請求項４】
前記実行可能モジュールの前記第１の部分は、前記実行可能モジュールが実行されるときには読み取り及び書き込み許可媒体に記憶されている状態となるように構成され、かつ前記第２の部分は、前記実行可能モジュールが実行されるときには読み取り専用記憶媒体に記憶されている状態となるように構成されることを特徴とする請求項３に記載のコンピュータ。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、一般に、ランタイムに動的にロードされるクラスを有しているオブジェクト指向型コンピュータ・システムに関し、特に、読み出し専用メモリにクラスのサブセットをプリロードするシステム及び方法に関する。
【０００２】
【従来の技術】
オブジェクト指向型プログラミング言語における現在の傾向は、分散型コンピューティング環境にダイナミック・コンテント（動的内容）の分散を収容すべく言語の機能性を拡張することである。一つのそのような言語では、これは、ランタイムでクラスを動的にロードすることによって達成される。クラスは、オブジェクトの挙動をモデル化する変数及びメソッドの収集である。ランタイムでクラスを動的にロードすることによって、既存のアプリケーションは、分散型コンピューティング環境内のコンピュータ・システムに存在する新しいクラスにおいて結合することによって機能性を追加することができる。
【０００３】
【発明が解決しようとする課題】
そのような言語では、記号参照は、クラス・メンバー（即ち、クラスのメソッド及び変数）を参照するために用いられる。クラスが呼び出されるとき、動的ローダーは、クラスに対する記憶スキーマを決定しかつ記号参照を解く。そのようなローディング・スキームは、しばしば更新されるクラスをアクセスするときに利益がある。しかしながら、そのようなローディング・スキームの限界は、ランダム・アクセス・メモリ（ＲＡＭ）のような読み取り／書き込みメモリ・デバイスへのその依存（従属）である。二次記憶装置（例えば、不揮発性磁気ディスク記憶装置）がほとんどまたは全くないコンピューティング環境では、この方法におけるクラスの動的ローディグは、ＲＡＭの記憶容量を素早く使い果たすことができる。ＲＡＭの容量が限られていると、アプリケーションによって用いられるＲＡＭの量を最小化することが望ましい。従って、動的ロード可能クラスを有するオブジェクト指向型プログラム・コードを実行するために利用されるＲＡＭの量を制限する必要性が存在する。
【０００４】
従来技術の欠陥を克服する方法及びシステムを供給することは利益がある。
本発明の目的は、上記従来技術における問題点に鑑み、動的ロード可能クラスを有するオブジェクト指向型プログラム・コードを実行するために利用されるＲＡＭの量を制限する方法及びシステムを提供することである。
【０００５】
【課題を解決するための手段】
本発明の上記目的は、分散型コンピュータ・システムのコンピュータを動作する方法であって、複数のクラスをメモリに記憶し、各クラスは、データ及び少なくとも一つのメソッドを含み、各メソッドは、複数のバイトコードを含み、バイトコードのサブセットは、コンピュータによってアクセス可能なメソッドへの記号参照を含み；各クラスに対して、クラスのデータがクラスのメソッドの一つによって変更可能であるときにクラスのデータにフラグを立て；メモリに記憶された特定のメソッドへの各記号参照に対して、特定のメソッドのメモリ位置を置換し；各クラスの各メソッドに対して、メソッドのバイトコードの一つがメモリに記憶されていないメソッドへの記号参照を含むときにメソッドにフラグを立て；かつ各クラスを含んでいる実行可能モジュールを供給する段階を具備し、各フラグが立っていないメソッド及び各フラグが立っていないデータは、実行可能モジュールを実行するときに読み出し専用記憶媒体に記憶され、かつ各フラグが立てられたメソッド及び各フラグが立てられたデータは、実行可能モジュールを実行するときに読み取り及び書き込み許可型記憶媒体に記憶される方法によって達成される。
【０００６】
また、本発明の上記目的は、コンピュータ・システムを動作する方法であって、第１のサブモジュール及び第２のサブモジュールに分割されたブラウザ・モジュールを読み出し専用メモリ・デバイスに記憶し、各サブモジュールは、複数の命令及びデータを含み、第２のサブモジュールは、命令のサブセット及びデータのサブセットを有し、命令のサブセット及びデータのサブセットは、複数の命令の実行中に変更可能である命令及びデータを含み；コンピュータ・システムの起動により、ランダム・アクセス・メモリ・デバイスに第２のサブモジュールを記憶し；かつ情報−内容データ及びコンピュータ−実行可能モジュールをインポートすべくブラウザ・モジュールを実行し、インポートされたデータ及びコンピュータ−実行可能モジュールは、ランダム・アクセス・メモリ・デバイスに記憶される段階を具備する方法によって達成される。
【０００７】
更に、本発明の上記目的は、通信リンクによって接続された複数のコンピュータを有する分散型データ処理システムにおける、一つのコンピュータであって、複数のクラスを記憶するメモリ、各クラスは、複数のデータ及び少なくとも一つのメソッドを含み、各メソッドは、複数のバイトコードを含み、バイトコードの第１のセットは、メモリに記憶されたメソッドを参照し、バイトコードの第２のセットは、通信リンクによってアクセス可能なメソッドを参照し；各クラスに対して、クラスのデータがクラスのメソッドの一つによって変更可能であるときにクラスのデータにフラグを立て、かつ各クラスの各メソッドに対して、メソッドのバイトコードの一つがメモリに記憶されていないメソッドへの記号参照を含むときにメソッドにフラグを立てるオフライン・クラス・ローダー；及び第１の部分及び第２の部分を有する実行可能モジュールを生成するリンカ、第１の部分は、オフライン・ローダーによってフラグが立てられたデータ及びクラスのメソッドのそれぞれを含み、かつ第２の部分は、第１の部分にないデータ及びクラスのメソッドのぞれぞれを含む、を備えているコンピュータによって達成される。
【０００８】
本発明のコンピュータでは、実行可能モジュールの第１の部分は、実行可能モジュールが実行されるときに読み取り及び書き込み許可媒体に記憶されるべく構成され、かつ第２の部分は、実行可能モジュールが実行されるときに読み取り専用記憶媒体に記憶されるべく構成されるようにしてもよい。
【０００９】
【作用】
纏めると、この開示は、ランタイム・ダイナミック・ローディングを必要とせずにメモリにそのクラスがプリロードされる実行可能モジュールを生成するために用いられるオフライン・クラス・ローダーに関する。実行可能モジュールは、しかしながら、ランタイム・ダイナミック・ローディングに合わせられるクラス構造を含む。それゆえに、オフライン・クラス・ローダーは、静的ローディングを収容すべく既存のクラス構造を変更する。しかしながら、クラス構造は、未解決参照を含むメソッド及びデータを変えることを許容する。オフライン・クラス・ローダーは、それらがランダム・アクセス・メモリに記憶されるべきであることを特定するこれらのメソッド及びデータにタグを付ける。全ての他のデータは、読み取り専用メモリに記憶される。静的ローディング処理の終了で、二つのアドレス空間を含む、プリロード可能な実行可能モジュールが生成される。モジュールの実行中に変化するデータ及び未解決参照を有するメソッドを含む第１のアドレス空間は、ランダム・アクセス・メモリにロードされる。第２のアドレス空間は、読み取り専用メモリにロードされる定数データ及び静的ロードされたクラスを有するメソッドを含む。
【００１０】
このファッションのプリロード可能な実行可能モジュールは、二次記憶装置がほとんどないかまたは全くないクライアント・コンピュータを有する分散型コンピュータ・システムにおいて有利である。そのようなクライアント・コンピュータは、限定的資源に素早く変わるランダム・アクセス・メモリで全面的に走るべくアプリケーションに要求する。アプリケーションを二つのアドレス空間に分割するためにオフライン・クラス・ローダーを用いることにより、プリロード可能モジュールによって用いられるＲＡＭの量は、最小化される。実施例では、最小二次記憶装置を有しているクライアント・コンピュータは、クライアントの読み取り専用メモリにブラウザをプリロードするためにオフライン・クラス・ローダーを用いる。ブラウザは、上記二つのアドレス空間に分割される。システム初期化またはパワーアップで、ブラウザのランダム・アクセス・メモリ部分は、読み取り専用メモリからランダム・アクセス・メモリにロードされる。読み取り専用メモリからのブラウザの大きな部分を実行することによって、ブラウザは、クライアントが連通する他のサーバ・コンピュータから（それが）取得することができる情報−内容及び実行可能モジュールを記憶すべくさらなるＲＡＭ記憶装置を有する。
【００１１】
本発明のさらなる目的及び特徴は、図面と共に以下の詳細な説明及び特許請求の範囲からより容易に明らかであろう。
【００１２】
【実施例】
ここに記載された方法及びシステムは、少なくとも一つのサーバ・コンピュータ及び多数のクライアント・コンピュータを接続する通信リンクを有する分散型コンピューティング環境を用いる。クライアント・コンピュータのあるものは、二次記憶装置（例えば、不揮発性磁気ディスク記憶装置）をほとんどまたは全く有さずそれによりランダム・アクセス・メモリから全面的に走ることをアプリケーションに要求する。Ｊａｖａ（ジャワ）プログラミング言語で開発されたアプリケーションは、そのようなクライアント・コンピュータで実行される。アプリケーションは、一つ以上のサーバ・コンピュータから、Ｊａｖａアプレットのような、Ｊａｖａコンテントをインポートするために用いられるブラウザであるのが好ましい。一般的に、ブラウザは、Ｗｅｂサイトとして作用（作動）するサーバからハイパー・テキスト・マークアップ言語（ＨＴＭＬ）文書としてフォーマットされた一つ以上のＷｅｂページをアクセスすべくハイパー・テキスト・トランスファー・プロトコル（ＨＴＴＰ）を用いてＷｅｂ文書（ドキュメント）を検索する翻訳（変換）されたプログラム・モジュールである。ＨＴＭＬ文書は、翻訳（変換）されかつクライアント・コンピュータに関連付けられたユーザへ与えられる。しばしば、ＨＴＭＬ文書は、アプレットを組み込む。アプレットは、Ｊａｖａクラスとして表される実行可能モジュールである。ブラウザは、アプレットを実行するためにアプレット及びその関連クラスにロードする。
【００１３】
ブラウザ、ＨＭＴＬ文書、及びアプレットは、全てコンピュータのＲＡＭにある。時として、ＲＡＭにロードされるデータの量は、その容量を超えうる。クライアント・コンピュータが二次記憶装置を有さないときに、読み取り専用メモリにブラウザ及び他の基本支援クラス(basic support classes) を設置することは、有利である。この方法で、ＲＡＭ記憶装置は、インポートされたアプレットに対して特に保存される。ブラウザ及び他の基本支援クラス（例えば、Ｉ／Ｏ及びユーティリティ・クラス）は、読み取り専用メモリにプリロードされるのが好ましい。
【００１４】
オフライン・クラス・ローダーは、ブラウザ及び基本支援クラスのような、Ｊａｖａアプリケーションを、少なくとも二つの個別アドレス空間に分割する。第１のアドレス空間は、読み取り専用メモリ・デバイスにありかつダイナミック（動的）ローディングを必要としないメソッド及び定数のままであるデータを含む。第２のアドレス空間は、ランダム・アクセス・メモリのような、読み取り／書き込みメモリ・デバイスにあり、かつダイナミック（動的）ローディングを必要とするメソッド及び実行中に変更されるデータを含む。
この方法で分割されたブラウザは、クライアント・コンピュータの読み取り専用メモリに最初に記憶することができる。システムがパワー・オンしたとき、第２のアドレス空間は、ＲＡＭにプリロードされる。これは、ＨＴＭＬ文書、アプレット、他の情報−コンテキスト、及び通信リンクを通してアクセス可能である実行可能モジュールをインポートすべくブラウザによる使用に対して大量のＲＡＭ記憶装置を残す。
【００１５】
この開示は、Ｊａｖａプログラミング言語に関して説明されるということに注目すべきである。この理由で、この説明は、Ｊａｖａの名称集(nomenclature)を用いる。次のＪａｖａ名称集は、説明全体を通してよく用いられかつここで簡単に説明される。クラスは、オブジェクトの挙動(behavior)を説明するために用いられるインスタンス変数及びメソッドのグループ化である。オブジェクトは、クラスのインスタンスである。インスタンス変数は、クラスからインスタンス生成されるオブジェクトのデータである。静的インスタンス変数は、クラスの全インスタンスに対して同じであるというものである。非静的インスタンス変数は、クラスの各インスタンスに対して変化する。定数データは、プログラム実行中に変更されないデータである。
メソッドは、明確に規定された一連の動作を実行するプログラム・セグメントである。Ｊａｖａでは、メソッドは、バイトコードのストリームとして表される命令によって実行される。バイトコードは、８ビット・オペランドまたはオプコードのような命令の一部でありうる８ビット・コードである。インターフェイスは、方法を実行するバイトコードがランタイムで画定されるアブストラクト・クラスである。Ｊａｖａアプリケーションは、ＪａｖａインタープリタまたはＪａｖａジャスト−イン−タイム・コンパイラを用いて実行することができるバイトコードからなる実行可能モジュールである。Ｊａｖａプログラミング言語の特徴のより詳細な説明は、Tim Ritchey, Programming with Java Beta 2.0, New Riders Publishing (1995) に記載されている。
【００１６】
図１を参照すると、複数のクライアント・コンピュータ１０２及び複数のサーバ・コンピュータ１０４を有する分散型コンピュータ・システム１００が示されている。実施例では、各クライアント・コンピュータ１０２は、他の型の通信接続を用いることができるけれども、インターネット１０６を介してサーバ１０４に接続される。サーバ及びクライアント・コンピュータは、サン（Ｓｕｎ）ワークステーション、ＩＢＭコンパチブル・コンピュータ及びマッキントッシュ（Ｍａｃｉｎｔｏｓｈ）コンピュータのような、デスクトップ・コンピュータでありうるのが好ましいが、実際にはあらゆる型のコンピュータがサーバまたはクライアント・コンピュータでありうる。更に、システムは、分散型コンピュータ・システムに限定されない。特定の詳細なしで実用化されうるしかつ種々のコンピュータ・システム及び種々の構成、或いはしっかり結合された(tightly-coupled) プロセッサのメークまたはモデル、または弛く結合された(loosely-coupled) マイクロプロセッサ・システムの種々の構成で実施されうる。
【００１７】
実施例では、一つ以上のサーバ・コンピュータが、Ｊａｖａコンテントまたはアプレットを含むＨＴＭＬ文書のリポジトリを含むＷｅｂサイトとして作動する。クライアント・コンピュータは、クライアント・コンピュータに関連付けられたユーザに、サーバ・コンピュータから利用可能であるＨＴＭＬ文書へのアクセスを供給するブラウザを実行する。図１を参照すると、サーバ・コンピュータは、一つ以上のプロセッサ１１２、通信インターフェイス１１６、ユーザ・インターフェイス１１４、及びメモリ１１０を一般的に含む。メモリ１１０は、次のものを記憶する：
・  オペレーティング・システム１１８；
・  インターネット通信マネージャ・プログラムまたは他の型のネットワーク・アクセス手順１２０；
・  Ｊａｖａプログラミング言語で書かれたソース・コードをバイトコードのストリームに翻訳（変換）するためのコンパイラ１２２；
・  Ｊａｖａソース・コードを含む一つ以上のソース・コード・ファイル１２６を含むソース・コード・リポジトリ１２４；
・  一つ以上のクラス・ファイル１３０、及びそれぞれが特定のクラスを表すデータを含むクラス・ファイルを含む一つ以上のクラス・ライブラリ１３１を含むクラス・ファイル・リポジトリ１２８；
・  クラスのある一定のセットをプリロードするために用いられるオフライン・クラス・ローダー１３２；オフライン・クラス・ローダーは、静的クラス・ローダーと呼ぶこともできる；
・  リンカに対して認識可能であるフォーマットでクラス・メンバー、クラス・データ構造、及びメモリ記憶インジケータを表すオブジェクト・ファイルを生成するアセンブラ１３４；
・  一セットのプリロードされたクラスに対するメモリ・レイアウトを決定しかつ全記号参照を解くためのリンカ１３６；
・  ＨＴＭＬ文書をアクセスすることに使用するブラウザ１３８；及び
・  サーバによる使用のための一つ以上のデータ・ファイル１４６ブラウザは、次のものを含むことができる：
・  クラスをユーザのアドレス空間にロードしかつ各ロードされたクラスに関連付けられた方法の保全性を確認すべくバイトコード・プログラム・バリファイヤを用いる、ランタイム・タイム・クラス・ローダー・モジュール１４０；
・  特定のプログラムがある所定の保全性基準を満足するかどうかを確認するためのバイトコード・プログラム・バリファイヤ・モジュール１４２；及び
・  ＨＴＭＬ文書をロードするためのＨＴＭＬローダー１４４；
並びに他のモジュール。
【００１８】
図２は、一つ以上のプロセッサ２０２、通信インターフェイス２０６、ユーザ・インターフェイス２０４、読み取り専用メモリ２０８及びランダム・アクセス・メモリ２１０を含むクライアント・コンピュータを示す。読み取り専用メモリ２０８は、定数のままであるデータ及び未解決参照を有していない方法を含む支援手順（オペレーティング・システム２１３及びネットワーク・アクセス手順２１４を含む）及びブラウザ２１２の一部を記憶する。ランダム・アクセス・メモリ２１０は、次のものを記憶する：
・  アプリケーションの実行中に変更されるデータ及び未解決参照を有する方法を含む支援手順２１６、２１７及びブラウザ２１５の第２の部分；
・  ユーザ・インターフェイス２０４を介してユーザの要求でブラウザによって得られた一つ以上のＨＴＭＬ文書２２２を含むＨＴＭＬ文書リポジトリ２２０；
・  一つ以上のクラス・ファイルまたはアプレット２２６を含むクラス・ファイル・リポジトリ２２４；及び
・  その処理中にクライアントが用いうる一つ以上のデータ・ファイル２２８。
【００１９】
図３は、プリロード可能な実行可能モジュールを生成するために用いられる一連のステップを示すオーバービューである。ここに記載した方法及びシステムは、ブラウザ及び他の支援手順をプリロードすることに関するものであるということに注目すべきである。しかしながら、ここに記載した方法及びシステムは、これら特定のＪａｖａアプリケーションに限定されない。あらゆるＪａｖａアプリケーション、またはランタイムで通常リンクされる方法の他のセットは、ここに記載した方法及びシステムを用いてプリロードすることができる。
Ｊａｖａアプリケーションを含む各クラスに対するソース・コード１２６は、クラス・ファイル１３０にコンパイラ１２２によってコンパイルされる。クラス・ファイルは、クラスを表しているクラス・データ構造、各方法のバイトコード、定数データ、並びに他の情報を含む。クラス・ファイルのより詳細な説明は、以下に示す。代替的に、アプリケーションに対応しているクラス・ファイルは、一つ以上のクラス・ライブラリ１３１に既に存在することができる。一度クラス・ファイルが利用可能であれば、プリロードされるべきアプリケーションを構成するクラス・ファイル１２８のセット全体は、オフライン・クラス・ローダー１３２へ伝送される。
【００２０】
オフライン・クラス・ローダー１３２の目標は、各クラスに関連付けられた方法及び変数のどれが読み取り専用メモリに記憶することができかつどれがランダム・アクセス・メモリ・デバイスに記憶されるべきるかを決定することである。Ｊａｖａインターフェイスを呼出すかまたは非静的インスタンス変数を用いる方法は、ランダム・アクセス・メモリに存在することが必要である。これは、インターフェイスを実行するバイトコードがランタイムで決定されかつ非静的インスタンス変数が関連クラスの各インスタンス生成に対して変更されるからである。オフライン・クラス・ローダー１３２は、これらの方法及び変数を見出しかつそれらがランダム・アクセス・メモリ・デバイスにロードされるべきであることを特定する特別のインジケータを挿入することによってそれらにフラグを立てる。オフライン・クラス・ローダーは、また、実行可能コードの更なるコンパクト表現を生成するために多数の最適化を実行する。例えば、各クラスに関係付けられる定数プールは、アプリケーションにある全てのクラスに対して組み合わされる。更に、オフライン・クラス・ローダーは、プリロードされたクラス環境に対するダイナミック・ローディングのために当初は構成されたクラス・ファイルを適合させるべく更なる処理を実行する。
【００２１】
オフライン・クラス・ローダー３０２の出力は、二つのファイルからなることができる：アプリケーション全体に対する定数データを含む定数プール・ファイル；及びクラス・データ構造及びクラス・メンバーを含む更新されたクラス・ファイル。これらファイルの両方におけるデータは、データ定義としてフォーマットされ、各定義は、メモリ位置を示しているオフセット及びバイトコードを特定する。更新されたクラス・ファイルは、特定のセットのバイトコードが存在するメモリ記憶デバイスの型を示すメモリ記憶インジケータを含む。しかしながら、ここで説明した方法及びシステムは、これら二つのファイルを生成することに限定されない。全ての関連クラス・データを含む単一ファイルを含むが、それに限定されない、他のファイル構成を用いることができる。
【００２２】
ファイルは、次いで、適切なアドレス空間にデータをマップすべくリンカに対して要求されたフォーマットを有するオブジェクト・モジュールを生成するアセンブラ１３４へ伝送される。一つがランダム・アクセス・メモリ・デバイスに対してかつ第２のものが読み取り専用メモリ・デバイスの対するような、二つのアドレス空間があるのが好ましい。オブジェクト・モジュールは、次いで、アプリケーションにおけるクラスに対するメモリ・レイアウトを生成するリンカ１３６へ伝送される。一度メモリ・レイアウトが決定されたならば、リンカ１３６は、全ての記号的参照を解きかつそれらを直接アドレスで置換する。メモリ・レイアウトは、二つのアドレス空間に分割される。読み取り専用メモリに対してフラグが立てられたメソッド及びデータは、第１のアドレス空間に含まれかつランダム・アクセス・メモリにおける記憶を必要とするようにフラグが立てられたメソッド及びデータは、第２のアドレス空間に含まれる。リンカ１３６からの出力は、これら二つのアドレス空間に対するメソッド及びデータを含むプリロード可能な実行可能モジュール３０６である。
【００２３】
上記したようなオフライン・クラス・ローダーの主機能(main function) は、読み取り専用メモリに記憶されるべきメソッド及びデータ、及びランダム・アクセス・メモリに記憶されるべきメソッド及びデータを決定することである。更に、全てのプリロードされたクラスに対する定数プールは、オフライン・クラス・ローダーによって組み合わされるのが好ましく、それにより用いる読み取り専用記憶の量を最小化する。定数プールを組み合わせるために、用いられる記憶の量を低減すべくある一定の最適化が実行される。特定的には、重複表現(duplicate expressions) は、削除されかつより長いストリングスの部分であるストリングスは、より長いストリングの適切なサブストリング位置へのポインタで置換される。
【００２４】
全てのクラスを含んでいる、汎用定数プールは、二つのセグメントに分割され、第１のセグメントは、２５６バイトをスパンしかつ第２のセグメントは、６４ｋマイナス２５６バイトをスパンする。第１のセグメントは、最大２５６定数を含むことができかつ第２のセグメントは、残りの定数を含む。定数プールは、最も頻繁に参照される定数がプールの第１のセグメントに記憶されかつ最も少なく参照される定数が第２のセグメントに記憶されるように順序付けられる。一度定数プールが結合されたならば、定数を参照するバイトコードは、調整されることが必要でありうる。第１のセグメントの定数は、８ビット・オペランドによって参照され第２のセグメントの定数は、二つの８ビット・オペランドによって参照される（オペランド７０２が８ビット・オペランドでありオペランド７０４及び７０６が一緒に１６ビット・オペランドを形成する図７を参照のこと）。８ビット・オペランドから１６ビット・オペランドへの拡張は、汎用定数プールの第２のセグメントの定数を参照するそれらのバイトコードを調整すること、並びにそれらのメソッドにおけるバイトコードの変化した相対位置の原因となるべきメソッドにおける（例えば、分枝命令の）バイトコード・オフセット値の調整を必要とする。更に、バイトコードの変更は、種々の例外ハンドラーが割り当てられるメソッド内の変化したバイトコード開始及び終了位置を反映すべく例外テーブルに記憶されたオフセットを更新することを必要とする。
【００２５】
更に、オフライン・クラス・ローダーは、クラスをプリロードするために適するものにクラス構造を適合させるために二つの他の変形を実行する。プリロードされたクラスに対するクラス初期化を実行する、静的クラス・イニシャライザが生成される。また、メソッドを記号的に参照するノン・クィック命令フォーマットを用いているバイトコードは、直接的にメソッドを参照するクィック命令フォーマットで記録される。
図８及び図９は、オフライン・クラス・ローダー１３２によって用いられるステップを更に詳細に示す。最初オフライン・クラス・ローダーは、そのクラスがプリロードされるべきアプリケーションの一部である。各クラスに対するクラス・ファイルを受け取る。図４は、クラス・ファイルに対するフォーマットを示す。クラス・ファイルは、一つ以上のヘッダ・レコード４０２、定数プール４０４、一つ以上のメソッド４０６、及び例外テーブル４０８を含む。ヘッダ・レコード４０２は、定数プールの大きさ、メソッドの数、及び例外テーブルの大きさを表すことができる。定数プール４０４は、アプリケーションの実行中、変更されないままであるデータを含む。そのようなデータの例は、ストリング定数、静的ファイナル整数、メソッドへの参照、クラスへの参照、及びインターフェイスへの参照を含むことができる。メソッド・データ４０６は、各メソッドをインプリメント（実現）するバイトコードのストリームからなる。例外テーブルの各エントリは、バイトコードにスタート及びエンド・オフセット、例外型、及び例外に対するハンドラーのオフセットを与える。エントリは、示された型の例外がスターティング及びエンディング・オフセットによって示されたコード内で生ずるときに、例外に対するハンドラーが所与のハンドラー・オフセットで見出されるということを示す。
【００２６】
各クラス・ファイルは、オフライン・クラス・ローダーによって読み取られ（ステップ８０２）かつ各クラスに対する適切なクラス・データ構造は、構築され（ステップ８０４）、それは、アプリケーションをプリプロセスするためにもちいられるコンピュータのメモリに記憶される。図６は、クラス・データ構造６００を示す。各クラスに対して、クラス・ブロック６０２、一つ以上のメソッド・ブロック６０４、各メソッドに対するバイトコード６０８、一つ以上のフィールド・ブロック６１４、フィールドに対する個別データ・エリア６１８、定数プール６２４、マップ・テーブル６２６及び例外テーブル６２８が存在する。
クラス・ブロックは、次のデータを含むことができる固定サイズ・データ構造である：
・  クラス名６３０；
・  現行クラスの即上部クラスのクラス・ブロックへのポインタ６３２；
・  各ポインタがメソッド・ブロックを参照している、一つ以上のポインタ６３４のアレー；
・  各ポインタがフィールド・ブロックを参照している、一つ以上のポインタ６３６のアレー；
・  クラスの定数プールへのポインタ６３８；及び
・  クラスの例外テーブルへのポインタ６４０。
【００２７】
メソッド・ブロック６０４は、所定数のメソッドを含む固定サイズ・データ構造である。一つ以上のメソッド・ブロックは、クラスの全てのメソッドを含むべく割り当てられる。メソッド・ブロック６０４は、メソッド名６１２及び対応バイトコード６０８へのポインタ６１０を含む。
フィールド・ブロック６１４は、インスタンス変数またはフィールドを含む固定サイズ・データ構造である。Ｊａｖａに供給されたインスタンス変数の二つの異なる型のそれぞれに対して異なるフィールド・ブロック・フォーマットがある第１のフォーマット６１６は、整数または浮動小数点インスタンス変数のために用いられる。このフォーマット６１６は、インスタンス変数の名前、型（例えば、整数または浮動小数点）、及びその値を含む。第２のフォーマット６２０は、ダブルまたはロング型インスタンス変数に対して用いられる。このフォーマット６２０は、インスタンス変数の名前、型（例えば、ダブルまたはロング）及びインスタンス変数６１８の値の位置へのポインタを含む。
【００２８】
図１０は、クラス・データ構造を構築するために用いられるステップを示す。ヘッダ・レコードにおける情報は、クラス・データ構造のそれぞれに対する空間を割り当てるために用いられる（ステップ１００２）。一度クラス・データ構造が割り当てられたならば、これらの構造のそれぞれの位置へのポインタは、クラス・ブロックに含まれる（ステップ１００４）。
次に、オフライン・クラス・ローダーは、定数プールで読み取る。これらのステップを説明する前に、定数プールの内容をまず説明する。図５は、各クラス・ファイルに記憶される定数プールの構造を示す。第１のエントリは、クラスの名前及びスーパークラス５０２の名前を含む。これらの名前は、ストリング定数として記憶されかつ第１のエントリは、定数プールにおけるこれらのストリングの位置へのポインタを含む。次のエントリは、フィールドまたはインスタンス変数に属する。ヘッダ５０４は、定数プールにおけるフィールドの数を示すために用いられる。種々のフィールド５０６は、ヘッダに続く。
【００２９】
同様に、ストリング定数は、定数プールにおけるストリング定数の数を示すヘッダ５０８により先行される。種々のストリング定数５１０が続く。ストリング定数は、メソッド名、クラス名、及びインターフェイス名を示すために用いられる。次に、メソッド参照は、メソッド５１２の数を示しているヘッダによって先行される定数プールに記憶される。定数プールは、メソッド名５１４及びメソッドのクラス名５１６へのポインタを含むメソッド・ポインタ５１１を各メソッドに対して含む。これらの名前は、定数プールにストリング定数として記憶される。メソッド・ポインタ５１１は、メソッドを記号的に参照するために用いられる。これは、呼出しメソッド命令のノン−クィック・フォーマットで用いられる。メソッドは、メソッドを呼出すための命令を含むことができる。ノン−クィック・フォーマットの命令は、次のようでありうる：
ｉｎｖｏｋｅ  ｍｅｔｈｏｄ“ｃｌａｓｓ”．“ｍｅｔｈｏｄ”    （１）
ここで、“ｃｌａｓｓ”は、クラス名を含んでいるストリング定数を参照しかつ“ｍｅｔｈｏｄ”は、メソッド名を含んでいるストリング定数を参照する。呼出しメソッド命令は、メソッドのポインタ５１１へのポインタを含む。オフライン・クラス・ローダーは、メソッドのブロックへのポインタをメソッドの名前に加えることによってこの記号参照を解くことを試みる。一度リンカがクラスに対するメモリ・レイアウトを決定したならば、リンカは、メソッドを直接的に参照する（即ち、メソッドのアドレスを記憶することによって）クィック・フォーマットにより呼出しメソッド命令のノン−クィック・フォーマットを置換する。記号参照を解くことによって、メソッドは、プリロードすることができる。
【００３０】
図１０を再び参照すると、記憶（装置）は、定数が汎用定数プールに記憶されるまでクラス・ファイルの定数プールにおけるそれらの最初の位置から種々の一時的位置まで定数の動きを追跡するマップ・テーブル６２６に対して割り当てられる。マップ・テーブル６２６は、各クラスに対して生成されかつ定数プールにおける各インスタンスの最初のアドレスをその現行位置へマップする（ステップ１００６）。フィールド以外の定数プールに含まれた全てのデータは、クラス・ファイルから読み取られかつ定数プールに記憶される（ステップ１００８）。定数がクラス・ファイルから定数プールへ転送されるときに、マップ・テーブル６２６は、定数プールにおける最初のアドレス及び現行位置を反映すべく更新される（ステップ１００８）。しかしながら、定数プールから読み取られるフィールドは、一つ以上のフィールド・ブロックにロードされかつマップ・テーブルにおいてそれらに対するエントリは、行われない（ステップ１００８）。
【００３１】
メソッド・データは、クラス・ファイルから読み取られかつ一つ以上のメソッド・ブロックに記憶される。更なる記憶（装置）は、各メソッドに関連付けられたバイトコードに対して割り当てられる。メソッドの名前は、バイトコードの位置へのポインタと共にメソッド・ブロックに設置される（ステップ１０１０）。同様に、例外テーブルは、クラス・ファイルからその対応例外テーブル・データ構造へロードされる（ステップ１０１２）。
図８及び図９を再び参照すると、クラス・データ構造が構築された後、ハッシュ・テーブル１８０（図３参照）は、全ての定数プールの合計サイズに従って割り当てられかつ重複定数の除去において後で用いられる（ステップ８０５）。
次に、オフライン・クラス・ローダーは、重複定数を除去すべく進行する。これは、空間効率的方法で全てのクラスの定数プールを組み合わせるために実行される。各クラス・ファイルに対して（ステップ８０６）、クラスの定数プールにおける各エントリは、重複定数に対してスキャン（走査）される（ステップ８１２）。図１１を参照すると、重複定数は、ハッシュ・テーブルを用いて検出される。定数のハッシュ値は、適切なハッシング機能によって決定される（ステップ１１０２）。検査は、ハッシュ値がハッシュ・テーブルに含まれるかどうかを決定すべく行われる（ステップ１１０４）。ハッシュ値がハッシュ・テーブルに存在するならば、定数は、重複でありかつエントリは、既存の定数のメモリ位置を反映すべくマップ・テーブルにおける定数のエントリを変更することによって定数プールから検出される（ステップ１１０６）。さもなければ、定数のハッシュ値及びメモリ位置は、ハッシュ・テーブルに記憶される（ステップ１１０８）。
【００３２】
図８及び図９を再び参照すると、オフライン・クラス・ローダーは、共通サブストリングスを決定すべく進行する。共通サブストリングは、定数プールに既に記憶されたより長いストリングの一部として含まれるものである。各クラス・ファイルに対して（ステップ８１４）各ストリング定数は、それが定数プールに含まれるより長いストリングの一部であるかどうかを決定すべく走査される（ステップ８１６）。これは、多数の周知のストリング・マッチング・アルゴリズムの一つを用いて達成することができる。そのようなサブストリングが見出されたときに、それは、より大きなストリングにおけるサブストリングの位置へのポインタで置換される（ステップ８１８）。
次に、オフライン・クラス・ローダーは、クラス・ファイルのそれぞれに含まれる全てのメソッドのバイトコードを走査すべく進行する（ステップ８２０〜８２４）。図１２を参照すると、バイトコードは、呼出しインターフェイス命令に対して検査される（ステップ１２０２）。呼出しインターフェイス命令を有するメソッドは、そのような命令によって呼び出されるメソッドがランタイムまでインプリメントされないので、ＲＡＭ記憶装置に対して印が付けられる（ステップ１２０４）。さもなければ、バイトコードは、呼出しメソッド命令に対して検査される（ステップ１２０６）。この情況では、呼び出されるべきメソッドを含むメソッド・ブロックへのポインタ５１８（図５参照）は、定数プールに記憶されるメソッドの名前に加えられる（ステップ１２０８）。後でリンカが全てのクラスのメモリ・レイアウトを決定したときに、リンカは、メソッドへの記号参照をメソッドへの直接アドレスで置換する。これは、メソッドへのポインタを含むメソッド・ブロックへのメソッドの名前ポインタを追跡することによって決定される。
【００３３】
各バイトコードが走査されるときに、参照カウントは、バイトコードによってアクセスされる各定数に対して行われる（ステップ８２８）。参照カウントは、は、マップ・テーブルに含まれるエキストラ・フィールドである。これは、定数プールをリオーダ(reorder) するために最も頻繁に用いられる定数を決定すべく後で用いられうる。更に、各バイトコードは、バイトコードによって変更されるフィールドに対して走査される。これは、フィールドが割当てステートメント(assignment statement)の左側で用いられるかどうかをチェックすることによって決定することができる。この場合には、フィールドは、新しい値を受け容れる。変更されたフィールドがその値がフィールド・ブロックに記憶されたものであれば、フィールド・ブロック全体は、ＲＡＭ記憶装置に対して印が付けられる（ステップ８３０）。
【００３４】
一度空間が汎用定数プールに対して割り当てられたならば、種々のクラス定数プールからの各エントリは、汎用定数プールに併合される（ステップ９０２）。先に示したように、定数プールは、二つのセグメント（区分）に分割される。第１のセグメントは、最も頻繁に参照された定数の２５６までを含む。第２のセグメントは、残りの定数を含む。決して参照されたことがない定数は、除去されかつ汎用定数プールに記憶されない。マップ・テーブルが参照カウントを有し、重複エントリを除去し、かつ共通サブストリングスへのポインタを有するので、定数プール・エントリは、各クラスのマップ・テーブルから読み取られる。
一度汎用定数プールが形成されたならば、汎用定数プールの第２のセグメントに記憶された定数を参照するバイトコードは、定数を参照するために、１バイトの代わりに２バイトを占有する、２倍長オフセット値を必要とする。これは、各クラスのメソッドに対して各バイトコードにわたり走査すること（スキャニング）（ステップ９０６〜９０８）及び、各バイトコードに対して汎用定数プールの第２のセグメントにおける定数を参照すること、定数をアドレス指定するために１バイト・オフセットを２バイト・オフセットで置換することを必要とする（ステップ９１０）。これは、バイトコードを記憶するために別のデータ・エリアを割り当てることによって達成することができる。バイトコードが走査されたときに、それらは、新しいデータ・エリアに読み取られかつ２バイト・オフセットでの置換を必要とする１バイト・オフセットは、この複写処理中に置換される。メソッド・ブロックは、次いで、バイトコードに対する新しい記憶位置を反映すべく更新される。分枝命令を表しているバイトコードに対するオフセット・オペランドは、分枝バイトコードと分枝ターゲット・バイトコードの位置の間に加えられたバイトの数（もしあれば）に従って調整される。
【００３５】
同様に、各クラス・ファイルに対する例外テーブルは、クラス・ファイルのメソッドのいずれかが定数プールの第２のセグメントの定数を参照するならば、調整を必要とする。定数プールの第２のセグメントの定数を参照する調整された命令は、以前よりも多くの空間を占有し、それにより例外テーブルのオフセットに影響を及ぼす。逆スタート及びエンド・オフセット並びに２倍長定数プール・オフセットの挿入によって影響を及ぼされるハンドラ・オフセットは、計算されかつ例外テーブルに記憶される（ステップ９１６〜９１８）。
次に、新しい方法は、静的クラス初期化を処理すべく生成される。通常、クラスが動的にロードされるときには、クラス・イニシャライザは、クラスに関連付けられたある一定の変数、等を初期化すべく同じ時間で走らされる。クラスは、ここに記載された方法及びシステムでプリロードされるので、クラス初期化は、実行されない。従って、オフライン・クラス・ローダーは、プリロードされたクラスに対するクラス初期化を実行するメソッドを生成しなければならない。しかしながら、データフロー分析は、各クラス・イニシャライザを実行するための実行シーケンスを決定するためにまず実行される（ステップ９２０〜９２４）。シーケンスは、一つのクラスが別のクラスで初期化されるデータを利用しうるなので重要である。正しいシーケンスが維持されないならば、静的クラス・イニシャライザは、正しくない結果を生ずる。一度シーケンスが決定されると、プリロードされるべきそれらのクラスに対してシーケンスで各クラスを初期化する新しい方法が生成される（ステップ９２６）。
【００３６】
結合インジケータは、次いで、ランダム・アクセス・メモリに記憶されるべきメソッド及びフィールド・ブロックにフラグを立てるためにクラス・ブロック構造に挿入される。リンカは、ランダム・アクセス・メモリに記憶されるべきメソッド及びフィールド・ブロックに対する個別のアドレス空間を生成するためにこの情報を用いる。リンカは、インジケータの欠如がメソッド及びフィールドが読み取り専用メモリに記憶されるべきであるということを示すと想定することができる。代替的に、読み取り専用メモリに記憶されるべきそれらのメソッド、クラス・データ構造、及びフィールドを明示的に示すために更なるインジケータを用いることができる（ステップ９２８）。
そして、オフライン・クラス・ローダーは、汎用定数プール、クラス・データ構造を含んでいる更新されたクラス・ファイル及び、メモリ記憶必要事項を特定しているインジケータ、並びに特別ブート時間インジケータを出力する（ステップ９３０）。
【００３７】
図１３を参照すると、プリロード可能な実行可能モジュール及びブート時間インジケータ１２２０は、クライアント・コンピュータの読み取り専用メモリに永続的に記憶される。クライアント・コンピュータがパワー・オンされリブートされるごとに、ブート時間インジケータ１２２０は、自動的に実行される。他のタスクの中で、ブート時間インジケータは、実行中にランダム・アクセス・メモリに存在しなければならない全てのメソッド及びデータを、リンカによってそれらに割り当てられたランダム・アクセス・メモリ位置にコピーする。
上記システム及び方法は、インターネットを通してＨＴＭＬ文書をアクセスすることに使用するＪａｖａブラウザ及び支援手順を実行することに関して説明されたけれども、ここに記載した方法及びシステムは、あらゆるＪａｖａアプリケーションに適用可能である。更に、Ｊａｖａアプリケーションは、分散型環境で走ることを必要とせず、それは、外部システムから新しいクラスをインポートすることなくクライアントまたはサーバ・コンピュータで実行されるスタンド−アロン・モードで走ることができる。スタンド−アロン・モードでは、アプリケーションは、特定のコンピューティング環境のメモリ・コンストレインツ（拘束）を満たすために二つのアドレス空間に分割される。
【００３８】
ここに記載された方法及びシステムは、Ｊａｖａプログラミング言語により記載されたけれども、それは、クラスのダイナミック・ランタイム・ローディングを利用する他のオブジェクト指向型クラスを用いているコンピュータ・システムに適用可能である。
更に、上記に記載された方法及びシステムは、ランダム・アクセス・メモリのようなメモリ・デバイス以外の種々の型の実行可能媒体上の実行に従順である。それに限定されないが、メモリ・デバイス、コンパクト・ディスク、またはフロッピ・ディスクでありうるコンピュータ読取り可能記憶媒体のような、他の型の実行可能な媒体を用いることができる。
本発明は、それらの同等物の完全な範疇に鑑みて特許請求の範囲によって定義される。
【００３９】
【発明の効果】
本発明の方法は、分散型コンピュータ・システムのコンピュータを動作する方法であって、複数のクラスをメモリに記憶し、各クラスは、データ及び少なくとも一つのメソッドを含み、各メソッドは、複数のバイトコードを含み、バイトコードのサブセットは、コンピュータによってアクセス可能なメソッドへの記号参照を含み；各クラスに対して、クラスのデータがクラスのメソッドの一つによって変更可能であるときにクラスのデータにフラグを立て；メモリに記憶された特定のメソッドへの各記号参照に対して、特定のメソッドのメモリ位置を置換し；各クラスの各メソッドに対して、メソッドのバイトコードの一つがメモリに記憶されていないメソッドへの記号参照を含むときにメソッドにフラグを立て；かつ各クラスを含んでいる実行可能モジュールを供給する段階を具備し、各フラグが立っていないメソッド及び各フラグが立っていないデータは、実行可能モジュールを実行するときに読み出し専用記憶媒体に記憶され、かつ各フラグが立てられたメソッド及び各フラグが立てられたデータは、実行可能モジュールを実行するときに読み取り及び書き込み許可型記憶媒体に記憶されるので、動的ロード可能クラスを有するオブジェクト指向型プログラム・コードを実行するために用いられるＲＡＭの量を制限できる。
【００４０】
また、本発明の方法は、コンピュータ・システムを動作する方法であって、第１のサブモジュール及び第２のサブモジュールに分割されたブラウザ・モジュールを読み出し専用メモリ・デバイスに記憶し、各サブモジュールは、複数の命令及びデータを含み、第２のサブモジュールは、命令のサブセット及びデータのサブセットを有し、命令のサブセット及びデータのサブセットは、複数の命令の実行中に変更可能である命令及びデータを含み；コンピュータ・システムの起動により、ランダム・アクセス・メモリ・デバイスに第２のサブモジュールを記憶し；かつ情報−内容データ及びコンピュータ−実行可能モジュールをインポートすべくブラウザ・モジュールを実行し、インポートされたデータ及びコンピュータ−実行可能モジュールは、ランダム・アクセス・メモリ・デバイスに記憶される段階を具備するので、動的ロード可能クラスを有するオブジェクト指向型プログラム・コードを実行するために用いられるＲＡＭの量を制限できる。
【００４１】
本発明のコンピュータは、通信リンクによって接続された複数のコンピュータを有する分散型データ処理システムにおける、一つのコンピュータであって、複数のクラスを記憶するメモリ、各クラスは、複数のデータ及び少なくとも一つのメソッドを含み、各メソッドは、複数のバイトコードを含み、バイトコードの第１のセットは、メモリに記憶されたメソッドを参照し、バイトコードの第２のセットは、通信リンクによってアクセス可能なメソッドを参照し；各クラスに対して、クラスのデータがクラスのメソッドの一つによって変更可能であるときにクラスのデータにフラグを立て、かつ各クラスの各メソッドに対して、メソッドのバイトコードの一つがメモリに記憶されていないメソッドへの記号参照を含むときにメソッドにフラグを立てるオフライン・クラス・ローダー；及び第１の部分及び第２の部分を有する実行可能モジュールを生成するリンカ、第１の部分は、オフライン・ローダーによってフラグが立てられたデータ及びクラスのメソッドのそれぞれを含み、かつ第２の部分は、第１の部分にないデータ及びクラスのメソッドのぞれぞれを含むので、動的ロード可能クラスを有するオブジェクト指向型プログラム・コードを実行するために用いられるＲＡＭの量を制限できる。
【図面の簡単な説明】
【図１】分散型コンピュータ・システムのブロック図である。
【図２】図１の分散型コンピュータ・システムにおけるクライアント・コンピュータのブロック図である。
【図３】プリロード可能な実行可能モジュールを生成するために用いられる処理コンポーネントを示しているフロー図である。
【図４】クラス・ファイルに対するファイル・レイアウトを示す図である。
【図５】定数プールに対するファイル・レイアウトを示す図である。
【図６】クラス・ブロック・データ構造を示す図である。
【図７】命令バイトコード・ストリームを示す図である。
【図８】オフライン・クラス・ローダーによって用いられる方法のフローチャートの一部である。
【図９】オフライン・クラス・ローダーによって用いられる方法のフローチャートの他の一部である。
【図１０】クラス・ブロック・データ構造を構築するための方法のフローチャートである。
【図１１】重複定数を除去するための方法のフローチャートである。
【図１２】ノン・クイック命令フォーマットをクイック命令フォーマットに変換するための方法のフローチャートである。
【図１３】読み取り専用メモリ及びランダム・アクセス・メモリへのプリロードされたアプリケーションのマッピングを示しかつ静的クラス・イニシャライザによってランダム・アクセス・メモリにマップされた方法及びデータの一部のローディングを示すブロック図である。
【符号の説明】
１００  分散型コンピュータ・システム
１０２  クライアント・コンピュータ
１０４  サーバ・コンピュータ
１０６  インターネット
１０８  サーバ
１１０  メモリ
１１２  プロセッサ
１１４  ユーザ・インターフェイス
１１６  通信インターフェイス
１１８  オペレーティング・システム
１２０  ネットワーク・アクセス手順
１２２  コンパイラ
１２４  ソース・コード・リポジトリ
１２６  ソース・コード・ファイル
１２８  クラス・ファイル・リポジトリ
１３０  クラス・ファイル
１３１  クラス・ライブラリ
１３２  オフライン・クラス・ローダー
１３４  アセンブラ
１３６  リンカ
１３８  ブラウザ
１４０  ランタイム・タイム・クラス・ローダー・モジュール
１４２  バイトコード・プログラム・バリファイヤ・モジュール
１４４  ＨＴＭＬローダー
１４６  データ・ファイル
【図１】
0004021520.tif 000002
【図２】
0004021520.tif 000003
【図３】
0004021520.tif 000004
【図４】
0004021520.tif 000005
【図５】
0004021520.tif 000006
【図６】
0004021520.tif 000007
【図７】
0004021520.tif 000008
【図８】
0004021520.tif 000009
【図９】
0004021520.tif 000010
【図１０】
0004021520.tif 000011
【図１１】
0004021520.tif 000012
【図１２】
0004021520.tif 000013
【図１３】
0004021520.tif 000014