(57)【要約】      （修正有）【課題】孤立したバーチャルマシン間でプログラムモジュールを共用する技術を提供する。【解決手段】マスターＪＶＭプロセス１０４が、プログラムモジュールからのデータをロードし、そのデータのある要素をそのプライベートメモリ領域１０８内に格納し、その他の要素を共用可能なメモリ領域の「リードオンリ」エリア１１２内に格納する。マスターＪＶＭプロセスはロードされたデータをそのプライベートメモリ領域１０８から共用可能なメモリ領域の「リード／ライト」エリア１１４内にコピーする。プログラムモジュールからそのデータを再ローディングする代わりに、その他のＪＶＭプロセス１０６は該リードオンリエリア１１２に対してマッピングし且つロードされたデータをそのリード／ライトエリア１１４からそれら自身のプライベートメモリ領域１１０内にコピーする。ＪＶＭプロセスはより速くスタートアップし、且つ共用可能なデータのメモリが節約される。【選択図】図１
2009059349.tif 000002
【特許請求の範囲】
【請求項１】
孤立したバーチャルマシンの間でプログラムモジュールを共用するための機械により実現される方法において、
複数の孤立したバーチャルマシンによって読取可能な共用可能なメモリ領域から第一バーチャルマシンの第一プライベートメモリ領域内へ、第二バーチャルマシンが（ａ）プログラムモジュールからロードし、（ｂ）第二バーチャルマシンの第二プライベートメモリ領域内へ格納し、且つ（ｃ）第二プライベートメモリ領域から共用可能なメモリ領域内へコピーした第一データをコピーし、
第一バーチャルマシンと、第二バーチャルマシンが（ａ）プログラムモジュールからロードし、（ｂ）共用可能なメモリ領域の特定の区域内へ格納した第二データを包含する共用可能なメモリ領域の特定のエリアとの間のマッピングを確立し、
該マッピングが第一バーチャルマシンのいずれのプライベートメモリ領域内においても第二データのコピーを作成すること無しに第一バーチャルマシンが第二データを読取ることを格納し、且つ
第一プライベートメモリ領域及び第二プライベートメモリ領域の両方が同一のバーチャルアドレスで開始する、
方法。
【請求項２】
請求項１において、第一データが、第二バーチャルマシンがランタイムにおいて第一バーチャルマシンにより使用可能でない第一フォームから、ランタイムにおいて第一バーチャルマシンと第二バーチャルマシンの両方によって使用可能な第二フォームへ処理したデータを有している方法。
【請求項３】
請求項１において、プログラムモジュールがジャバＪＡＲファイルであり、且つ第一データが少なくとも１個のジャバクラスに対応している方法。
【請求項４】
請求項１において、第一データが第一プライベートメモリ領域内にコピーされた後に、第二データが、（ａ）第一プライベートメモリ領域内のバーチャルアドレス及び（ｂ）第二プライベートメモリ領域内の同一のバーチャルアドレスの両方を参照する少なくとも１個の参照を包含している方法。
【請求項５】
請求項１において、更に、
プログラムモジュールから直接的に何等のデータをローディングすること無しに第一バーチャルマシンが第一データ及び第二データを使用してプログラムを実行することを包含している方法。
【請求項６】
請求項１において、
第一データが変更可能なエンティティを表わしており、
第二データが変更不可能なエンティティを表わしているが何等の変更可能なエンティティを表わすものではない方法。
【請求項７】
請求項１において、
第一データが共用可能なメモリ領域内に存在する時間の前に、第二データにおける参照が第二プライベートメモリ領域内における第一データのコピー内の特定のバーチャルメモリアドレスを参照し、
第一データが第一プライベートメモリ領域内に存在する時間の後に、第二データにおける参照が第一プライベートメモリ領域である第一データのコピー内の同一の特定のバーチャルメモリアドレスを参照する方法。
【請求項８】
請求項１において、
プログラムモジュールから第一データをローディングすることの一部として、第二ＪＶＭプロセスが、複数個の異なるファンクションポインターベクトルの中から、（ａ）プログラムモジュールからデータをロードするクラスローダー及び（ｂ）プログラムモジュールのうちの少なくとも１つに対応する特定のファンクションポインターベクトルを選択し、
プログラムモジュールから第一データをローディングすることの一部として、第二ＪＶＭプロセスが該特定のファンクションポインターベクトルが参照する１個又はそれ以上のファンクションをコールする方法。
【請求項９】
請求項１において、
プログラムモジュールから第一データをローディングすることの一部として、第二ＪＶＭプロセスが、複数個の別個の共用可能なメモリ領域の中から、該複数個におけるその他のプログラムモジュールではなく該プログラムモジュールに対応する特定の共用可能なメモリ領域を選択し、且つ
第二ＪＶＭプロセスが第二プライベートメモリ領域からのデータを該特定の共用可能なメモリ領域内へコピーする方法。
【請求項１０】
１個又はそれ以上の命令のシーケンスを担持する機械読取可能な媒体であって、該命令は、１個又はそれ以上のプロセッサによって実行される場合に、該１個又はそれ以上のプロセッサをして以下のステップを実施させ、該ステップは、
複数個の孤立したバーチャルマシンによって読取可能な共用可能なメモリ領域から第一バーチャルマシンの第一プライベートメモリ領域内へ、第二バーチャルマシンが（ａ）プログラムモジュールからロードし、（ｂ）第二バーチャルマシンの第二プライベートメモリ領域内へ格納し、且つ（ｃ）第二プライベートメモリ領域から共用可能なメモリ領域内へコピーした第一データをコピーし、
第一バーチャルマシンと、第二バーチャルマシンが（ａ）プログラムモジュールからロードし且つ（ｂ）共用可能なメモリ領域の特定のエリア内に格納した第二データを包含する共用可能なメモリ領域の特定のエリアとの間のマッピングを確立し、
該マッピングが、第一バーチャルマシンのいずれのプライベートメモリ領域における第二データのコピーを作成すること無しに第一バーチャルマシンが第二データを読取ることを可能とし、
第一プライベートメモリ領域及び第二プライベートメモリ領域の両方が同一のバーチャルアドレスにおいて開始する、
ことを包含している機械読取可能な媒体。
【請求項１１】
請求項１０において、第一データが、第二バーチャルマシンがランタイムにおいて第一バーチャルマシンによって使用不可能な第一フォームからランタイムにおいて第一バーチャルマシンと第二バーチャルマシンの両方によって使用可能な第二フォームへ処理したデータを包含している機械読取可能な媒体。
【請求項１２】
請求項１０において、プログラムモジュールがジャバＪＡＲファイルであり、且つ第一データが少なくとも１個のジャバクラスに対応している機械読取可能な媒体。
【請求項１３】
請求項１０において、第一データが第一プライベートメモリ領域内にコピーされた後に、第二データが、（ａ）第一プライベートメモリ領域内のバーチャルアドレス及び（ｂ）第二プライベートメモリ領域内の同一のバーチャルアドレスの両方を参照する少なくとも１個の参照を包含している機械読取可能な媒体。
【請求項１４】
請求項１０において、該ステップが、更に、
プログラムモジュールから直接的に何等のデータをローディングすること無しに第一バーチャルマシンが第一データ及び第二データを使用してプログラムを実行することを包含している機械読取可能な媒体。
【請求項１５】
請求項１０において、
第一データが変更可能なエンティティを表わしており、
第二データが変更不可能なエンティティを表わしているが何等の変更可能なエンティティを表わすものではない機械読取可能な媒体。
【請求項１６】
請求項１０において、
第一データが共用可能なメモリ領域内に存在する時間の前において、第二データにおける参照が第二プライベートメモリ領域内の第一データのコピー内の特定のバーチャルメモリアドレスを参照し、且つ
第一データが第一プライベートメモリ領域内に存在する時間の後に、第二データにおける該参照が、第一プライベートメモリ領域である第一データのコピー内の同一の特定のバーチャルメモリアドレスを参照する、
機械読取可能な媒体。
【請求項１７】
請求項１０において、
プログラムモジュールから第一データをローディングすることの一部として、第二ＪＶＭプロセスが、複数個の異なるファンクションポインターベクトルの中から、（ａ）プログラムモジュールからデータをロードするクラスローダー、及び（ｂ）プログラムモジュールのうちの少なくとも１つに対応する特定のファンクションポインターベクトルを選択し、
プログラムモジュールから第一データをローディングすることの一部として、第二ＪＶＭプロセスが特定のファンクションポインターベクトルが参照する１個又はそれ以上のファンクションをコールする、
機械読取可能な媒体。
【請求項１８】
請求項１０において、
プログラムモジュールから第一データをローディングすることの一部として、第二ＪＶＭプロセスが、複数個の別個の共用可能なメモリ領域の中から、該プログラムモジュールに対応するが該複数個におけるその他のプログラムモジュールに対応するものではない特定の共用可能なメモリ領域を選択し、
第二ＪＶＭプロセスが第二プライベートメモリ領域から特定の共用可能なメモリ領域内へデータをコピーする、
ことを包含している機械読取可能な媒体。
【請求項１９】
孤立したバーチャルマシン間でデータを共有するための機械により実現される方法において、
バーチャルマシン初期化期間中に、第一バーチャルマシンが初期化している特定のデータが、第二バーチャルマシンが開始する場合に第二バーチャルマシンも初期化することを必要とする変更不可能なデータであるか否かを決定し、
特定のデータが、第二バーチャルマシンが開始する場合に第二バーチャルマシンも初期化することを必要とする変更不可能なデータであることの決定に応答して、該特定のデータを初期化し且つ該特定のデータの初期化したバージョンを第一バーチャルマシンと第二バーチャルマシンの両方がアクセスすることが可能な共用可能なメモリ領域内へ格納し、それにより第二バーチャルマシンが開始する場合に第二バーチャルマシンも独立的に該特定のデータを初期化することの必要性をなくし、
第一バーチャルマシンが第二バーチャルマシンから孤立している、
機械により実現される方法。
【請求項２０】
請求項１９において、
該特定のデータがジャバＪＡＲファイル内に格納されるデータを包含しており、
第一及び第二バーチャルマシンがジャババーチャルマシンである、
機械により読取可能な媒体。
【請求項２１】
システムにおいて、
プログラムモジュール、
（ａ）プログラムモジュールから第一バーチャルマシンの第一プライベートメモリ領域内へ第一データをロードし、（ｂ）プログラムモジュールから共用可能なメモリ領域内へ第二データをロードし、（ｃ）第一データの処理したバージョンを第一プライベートメモリ領域から共用可能なメモリ領域内へコピーする第一バーチャルマシン、
（ａ）共用可能なメモリ領域内の第二データに対してマッピングし、（ｂ）第一データの処理したバージョンを共用可能なメモリ領域から第二バーチャルマシンの第二プライベートメモリ領域内へロードする第二バーチャルマシン、
を有しており、第一バーチャルマシンが第二バーチャルマシンから孤立しているシステム。
【請求項２２】
請求項２１において、
第一プライベートメモリ領域が特定のバーチャルアドレスにおいて開始し、
第二プライベートメモリ領域も該特定のバーチャルアドレスにおいて開始し、
第一及び第二プライベートメモリ領域が異なる物理的アドレスにおいて開始する、システム。
【請求項２３】
請求項２２において、
共用可能なメモリ領域内の第二データが、該特定のバーチャルアドレスにおいて開始するバーチャルアドレス領域内のバーチャルアドレスに対する１個又はそれ以上の参照を包含しているシステム。
【請求項２４】
請求項２２において、更に、
（ａ）共用可能なメモリ領域内の第二データに対してマッピングし、（ｂ）第一データの処理したバージョンを共用可能なメモリ領域から第三バーチャルマシンの第三プライベートメモリ領域内へロードする第三バーチャルマシンを有しており、
第三バーチャルマシンが第一及び第二バーチャルマシンから孤立している、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の同時的に実行する孤立したＪＶＭプロセス間でジャバファイルを共用する技術に関するものであって、更に詳細には、複数個の同時的に実行する孤立したＪＶＭプロセスの間でジャバＪＡＲファイルを共用する方法、システム及びプログラムを記録した機械読取可能な媒体に関するものである。
【背景技術】
【０００２】
複数のジャバ（ＪＡＶＡ）バーチャルマシン（ＪＶＭ）は同一のコンピューティング装置上で同時的に実行する場合がある。このような各ＪＶＭは、同一のコンピューティング装置上で同時的に実行するその他のＪＶＭプロセスから孤立している別個のプロセス（ここでは「ＪＶＭプロセス」と呼称する）内において実行する場合がある。これらのＪＶＭプロセスの各々は、コンピューティング装置のメモリのかなりの量を消費する場合がある。各ＪＶＭプロセスが消費するメモリの量は、コンピューティング装置上で同時的に実行させることが可能なＪＶＭプロセスの数を制限する場合がある。
【０００３】
ＪＶＭプロセスは、そのＪＶＭプロセスがスタートアップ即ち開始する場合にあるクラスをロードすることを必要とする。これらのクラスのローディングはかなりの量の時間を必要とする場合がある。複数個のＪＶＭプログラムが同時的に実行されるべき場合には、これらＪＶＭプロセスの全てがこのようなクラスをロードするのに必要とされる時間の量は法外なものとなる場合がある。
【０００４】
通常、ＪＶＭプロセスが開始する場合には、そのＪＶＭプロセスは参照と関連しているクラスをロードすることを必要とする。その参照は、例えば、「ｊａｖａ．ｌａｎｇ．Ｓｔｒｉｎｇ」のような記号的名称である場合がある。そのＪＶＭプロセスはルックアッププロセスを実施し、そのことはクラスローダーを関与させる。クラスローダーは、ファイルシステムから、そのクラスに対応するバイトをロードさせる。クラスローダーはそのクラスを定義する。ＪＶＭプロセスはこれらのバイトを処理し且つ高速アクセスのためにこれらのバイトをＪＶＭプロセスの内部データ構造（例えば、ルックアップテーブル）内へロードさせる。
【０００５】
これらのデータ構造は、典型的に、ＪＶＭプロセスのプライベートヒープ（即ち、プライベートメモリ領域）内に割当てられているメモリ内に格納される。ＪＶＭプロセスは、例えば、「ｍａｌｌｏｃ」コールを使用してこのメモリの割当てを行うことが可能である。このメモリ領域は共用されることのない書込可能なプライベートメモリである。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は、以上の点に鑑みなされたものであって、上述した如き従来技術の欠点を解消し、孤立したバーチャルマシン間でプログラムモジュールを共有するための改良した技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
ここに記載する技術を使用して、複数の独立し孤立したＪＶＭプロセス（集合的に考える）が繰り返し実施し且つこれらのタスクを繰り返し実施する代わりにこれらのタスクを正確に一度だけ実施し且つＪＶＭプロセス間においてこれらのタスクを実施した結果を共用することによりメモリを節約することが可能である。本発明の１実施例においては、ＪＶＭプロセスの全てが、そうでなければ、ジャバＪＡＲファイル等のプログラムモジュールから独立的にロードするようなクラスが、その代わりに、ＪＶＭプロセスのうちの１つによってＪＶＭプロセスの全てがアクセスすることが可能な共用されるメモリ内に一度だけロードされる。これらのクラスが共用されるメモリ内にロードされると、複数の同時的に実行する孤立したＪＶＭプロセスはこれらのクラスを共用することが可能である。
【発明を実施するための最良の形態】
【０００８】
図１は本発明の１実施例に基づいて複数の同時的に実行する孤立したＪＶＭプロセス間においてジャバ（ＪＡＶＡ）ＪＡＲファイルを共用するためのシステムの論理的コンポーネント及び側面を例示するブロック図である。本発明の１実施例においては、コンピューティング装置のメモリが別個の領域に分離される。１つのこのような領域は「共用可能な領域」１０２である。共用可能な領域１０２は、又、「ライトワンス（ｗｒｉｔｅ  ｏｎｃｅ）」領域と呼ばれる。共用可能な領域１０２は、マスターＪＶＭプロセス１０４が初期化している期間中に「マスター」ＪＶＭプロセス１０４によって書込可能である。然しながら、その後にスタートアップ即ち開始するその他のＪＶＭプロセス１０６は共用可能な領域１０２から単に読取るのみでありそれに対して書込を行うことはない。これらのその他のＪＶＭプロセス１０６は、例えば、「リードオンリ（ｒｅａｄ−ｏｎｌｙ）」モードにおいて共用可能な領域１０２に対してマッピングすることが可能である。更に、各ＪＶＭプロセス１０４及び１０６はそれ自身の別個のプライベートな「リード／ライト（ｒｅａｄ／ｗｒｉｔｅ）」領域（１０８及び１１０）を有しており、その中にそのＪＶＭプロセスのみが書込むことが可能であり且つそれからそのＪＶＭプロセスのみが読取ることが可能である。例えば、各ＪＶＭプロセスのプライベートなリード／ライト領域は、プログラム空間の一部としてビルド時に予め割当てられている別個の静的配列として実現することが可能である。ＵＮＩＸ「ｍｍａｐ」又はリード・ライト領域１０８及び１１０を割当てるために同様のオペレーティングシステム要求を使用することは別の可能性である。
【０００９】
本発明の１実施例においては、共用可能な領域１０２は、更に、「リードオンリ」エリア１１２及び「リード／ライト」エリア１１４の両方を有している。共用可能な領域１０２はリード／ライトエリアと呼ばれるエリアを包含するものであったとしても、マスターＪＶＭプロセス１０４は、実際には、共用可能な領域１０２のリード／ライトエリア１１４に対して書込を行う唯一のＪＶＭプロセスである。
【００１０】
初期化期間中に、マスターＪＶＭプロセス１０４がクラスをローディングしている間に（典型的に、これらのクラスのうちのいずれかがいずれかのアプリケーションにより要求される前に）、マスターＪＶＭプロセス１０４はジャバＪＡＲファイル１１６からのデータをダイジェスト即ち消化し且つダイジェストしたデータのうちの少なくとも幾つかを共用可能な領域１０２内に配置させる。そのデータが対応するエンティティ（例えば、オブジェクト又はバイトコード）が変更可能であるか否かに依存して、マスターＪＶＭプロセス１０４は、そのデータを共用可能な領域１０２のリードオンリエリア１１２か又はマスターＪＶＭプロセス自身のプライベートなリード／ライト領域１０８内のいずれかに配置させることが可能である。マスターＪＶＭプロセス１０４がそれ自身のプライベートなリード／ライト領域１０８内へ格納するデータは、各ＪＶＭプロセス１０６がプログラムを実行することを必要とするデータを包含している。
【００１１】
マスターＪＶＭプロセスのプライベートなリード／ライト領域１０８は、固定されたバーチャルアドレス（図１におけるバーチャルアドレス「Ｙ」）に位置され且つ特定され固定されたバーチャルアドレス領域に対してマッピングされ、その意味については後により詳細に説明する。本発明の１実施例においては、共用可能な領域１０２のリードオンリエリア１１２がリード／ライトデータに対して何等かの参照を行う場合には、これらのアドレスはマスターＪＶＭプロセスの固定されたアドレス領域１０８内のものでなければならない。本発明の１実施例においては、リードオンリエリア１１２におけるメモリ参照／ポインターは、リードオンリエリア１１２又はリード／ライト領域１０８内のアドレスに対してのみ指し示すことが可能である。マスターＪＶＭプロセス１０４がジャバＪＡＲファイル１１６からのデータを完全にダイジェスト即ち消化した後に、マスターＪＶＭプロセス１０４は、共用可能な領域１０２のリード／ライトエリア１１４内に（代替については以下に説明する）、マスターＪＶＭプロセス自身のプライベートなリード／ライト領域１０８内に格納されているデータをコピーする。共用可能な領域１０２のリード／ライトエリア１１４は、基本的に、予め初期化されたリード／ライトメモリである。
【００１２】
ジャバＪＡＲファイル１１６からのデータをダイジェスト即ち消化する場合に、マスターＪＶＭプロセス１０４はジャバＪＡＲファイル１１６内の各クラスのメソッド及びフィールド（集合的に「メンバー」）を認識する。各このようなメンバーに対して、マスターＪＶＭプロセス１０４は、そのマスターのタイプに基づいて、そのメンバーがミュータブル（ｍｕｔａｂｌｅ）即ち変更可能であるか否かを決定する。そのメンバーが変更可能である場合には、マスターＪＶＭプロセス１０４は、初期的に、そのメンバーに対する対応するデータをマスターＪＶＭプロセス自身のプライベートなリード／ライト領域１０８内に格納する。代替的に、そのメンバーが変更不可能である場合には、マスターＪＶＭプロセス１０４はそのメンバーに対する対応するデータを共用可能な領域１０２のリードオンリエリア１１２内に格納する。基本的に、将来プロセスが書込を行うことが可能ないずれかのエンティティに対するデータは初期的にマスターＪＶＭプロセス自身のプライベートなリード／ライト領域１０８内に格納される（且つ後に共用可能な領域１０２のリード／ライトエリア１０４へコピーされる）。対照的に、プロセスが将来書込むことが不可能なエンティティに対するデータは共用可能な領域１０２のリードオンリエリア１１２内に格納される。
【００１３】
例えば、マスターＪＶＭプロセス１０４はリードオンリ「クイックンド（ｑｕｉｃｋｅｎｅｄ）」バイトコードを共用可能な領域１０２のリードオンリエリア１１２内に格納する場合がある。対照的に、マスターＪＶＭプロセス１０４は、マスターＪＶＭプロセス自身のプライベートなリード／ライト領域１０８内に、ストリングオブジェクトに対応するデータを格納する場合があり、そのヘッダープロセスに対してロッキングを実施するために書込むことが可能である。然しながら、マスターＪＶＭプロセス１０４は、共用可能な領域１０２のリードオンリエリア１１２内に、そのストリングオブジェクトのサブオブジェクトであるバイトのアレイ即ち配列に対応するデータを格納する場合があり、というのは、このような配列は変更不可能だからである。
【００１４】
本発明の１実施例においては、マスターＪＶＭプロセス１０４が上述したタスクを実施した後にいずれかその他のＪＶＭプロセス１０６がスタートアップする場合には、そのＪＶＭプロセス１０６は共用可能な領域１０２へアタッチ即ち取付き、且つ共用可能な領域１０２からそのＪＶＭプロセス自身のプライベートなリード／ライト領域１１０内へ、共用可能な領域１０２のリード／ライトエリア１１４内に包含されているデータの全てをコピーする。このデータは以下においては「コピーされたデータ」として言及する。ＪＶＭプロセス１０６は共用可能な領域１０２のリードオンリエリア１１２内に格納されているデータのそれら自身のコピーを作成することは必要ではない、というのは、リードオンリエリア１１２内に格納されているデータの全ては変更不可能だからである。従って、ＪＶＭプロセス１０６の全てはそのデータのプライベートなコピーを作成すること無しにリードオンリエリア１１２内に格納されているデータの単一のコピーから読取ることが可能である。例えば、ＪＶＭプロセスの全ては共用可能な領域１０２のリードオンリエリア１１２に対してメモリを「マップ」することが可能である。
【００１５】
共用可能な領域１０２のリードオンリエリア１１２内に格納されているオブジェクトに対応するデータは、ＪＶＭプロセスのプライベートなリード／ライト領域１１０内に格納されているオブジェクトに対応するデータへの参照を包含している場合があり、且つその逆も又真である。従って、本発明の１実施例においては、同一のコンピューティング装置上で実行するＪＶＭプロセス（マスターＪＶＭプロセス１０４を含む）の全てのプライベートなリード／ライト領域は、同一のバーチャルアドレス領域を占有する。その結果、コピーされたデータは各ＪＶＭプロセスのプライベートなリード／ライト領域１１０内の同一の固定されたバーチャルアドレスにおいて見つけることが可能である。１個のＪＶＭプロセスのリード／ライト領域１１０の内容がその他のＪＶＭプロセスのリード／ライト領域１１０の内容とは異なるものであったとしても、各ＪＶＭプロセスのリード／ライト領域１１０の始めは同一の固定されたバーチャルアドレスにある（図１に示したように固定されたバーチャルアドレス「Ｙ」に位置されている）。その結果、共用可能な領域１０２のリードオンリエリア１１２において、ＪＶＭプロセスのリード／ライト領域１１０におけるバーチャルアドレスへの参照が存在している場合には、その参照が参照するバーチャルアドレスは正しい。
【００１６】
本発明の１実施例によれば、共用可能な領域１０２のリードオンリエリア１１２からコピーされたデータへの全ての参照（例えば、ポインター）は固定されたメモリアドレスを参照する。本発明の１実施例によれば、共用可能な領域１０２のリードオンリエリア１１２がリードオンリエリア１１２内のアドレスへの参照を包含している場合には、リードオンリエリア１１２は、同一のコンピューティング装置上で実行するＪＶＭプロセス１０４及び１０６の全てが認識する固定されたメモリアドレスに位置されていなければならない。本発明の１実施例においては、リード／ライトエリア１１４は、リードオンリエリア１１２内に格納されているデータを参照することが可能である。付加的に、リードオンリエリア１１２は、リードオンリエリア１１２内に格納されているデータへの内部的参照を包含することが可能である。リード・ライトセクション内のアドレスを参照するリード・ライトセクション内のポインターはパッチさせることが可能であり、それにより後者のリード・ライトセクションを再位置決めさせることが可能である。リードオンリセクションを参照するリード・ライトセクションにおけるポインターもパッチさせることが可能であり、それによりリードオンリセクションを再位置決めさせることを可能とする。リード・ライトセクション内のアドレスを参照するリードオンリセクション内のポインターは、パッチさせることは不可能であり、従って、本発明の１実施例においては、このようなポインターが許可される場合には、リード・ライトセクションは固定されたアドレスになければならない。リードオンリセクション内のアドレスを参照するリードオンリセクション内のポインターは、パッチさせることは不可能であり、従って、本発明の１実施例においては、このようなポインターが許可される場合には、後者のリードオンリセクションは固定されたアドレスになければならない。ポインターがパッチされていない本発明の実施例においては、リードオンリエリア及びリード・ライトエリアの両方が固定されたアドレスになければならない。然しながら、ポインターがパッチされるか、又は位置独立性参照が使用される場合の本発明の実施例においては、リードオンリ及び／又はリード・ライトセクションはリロケート即ち再位置決めさせることが可能であり、従って固定されたアドレスにあることは必要ではない。
【００１７】
各ＪＶＭプロセスのプライベートなリード／ライト領域１１０が始まる固定されたバーチャルアドレスは各ＪＶＭプロセスのコードにおいて特定することが可能である。代替的に、各ＪＶＭプロセスのプライベートなリード／ライトエリア１１０が開始する固定されたバーチャルアドレスは、コンフィギュレーションファイルにおいて特定することが可能であり、それから各ＪＶＭプロセス１０６は読取ることが可能である。固定されたバーチャルアドレスはリンク時間定数とすることが可能である。
【００１８】
その他のＪＶＭプロセス１０６は、マスターＪＶＭプロセス１０４が既に「ダイジェスト」即ち消化したデータを使用することが可能である。その他のＪＶＭプロセス１０６は、ある条件下においては、幾つかのＪＡＲファイルをダイジェストすることが必要な場合があるが、既にダイジェストされているＪＡＲファイルではない。マスターＪＶＭプロセス１０４はＪＡＲファイルのうちの幾つかをダイジェストするに過ぎない場合がある。例えそうであったとしても、多くの場合においては、既にダイジェストされているＪＡＲファイルの再度のダイジェスト動作を回避することはその他のＪＶＭプロセス１０６が開始するために必要な時間を著しく減少させる。付加的に、ＪＶＭプロセス１０４及び１０６の全てがそのデータの別個のコピーを作成する代わりに共用可能な領域１０２のリードオンリエリア１１２内のデータの単一のコピーを共用するので、ＪＶＭプロセス１０４及び１０６が実行するコンピューティング装置のメモリは多くの場合において著しく節約される。このメモリの節約は、そのメモリがこのような態様で節約されなかった場合に許容される場合よりもコンピューティング装置上でより多くの数のＪＶＭプロセス１０６を同時的に実行することを可能とする場合がある。
【００１９】
特定のエンティティ（例えば、オブジェクト又はバイトコード）が変更可能であるか否かをマスターＪＶＭプロセス１０４が決定する技術は本発明の種々の実施例において異なる場合がある。本発明の１実施例においては、データの各項目は、そのデータが共用可能な領域１０２のリードオンリエリア１１２内に又はマスターＪＶＭのプライベートなリード／ライト領域１０８内にロードされるべきデータの種類であるか否かを表わす「タグ」と関連している。本発明のこのような実施例においては、データの各項目に対して、マスターＪＶＭプロセス１０４はデータのその項目と関連するタグに少なくとも部分的に基づいて決定を行う。然しながら、本発明の別の実施例においては、マスターＪＶＭプロセス１０４はその他の態様でその決定を行うことが可能である。
【００２０】
隔離された共用可能な領域
本発明の１実施例においては、例えマスターＪＶＭプロセスが別個のジャバＪＡＲファイルからそのデータの異なる部分をロードした場合であっても、マスターＪＶＭプロセスが共用可能な領域内に配置されるデータの全ては同一の共用可能な領域内へ配置される。このことの結果として、別個のジャバＪＡＲファイルからのデータは、マスターＪＶＭプロセスがそのデータを共用可能な領域のリード／ライトエリア内にコピーする場合にＪＡＲファイルにより隔離されることはなく、共用可能な領域のリード／ライトエリアからどのデータがどのジャバＪＡＲファイルから来たものであるかを告げることが可能でない場合がある。その結果、本発明のこのような実施例においては、その他のＪＶＭプロセスが共用可能な領域のリード／ライトエリアからのデータをそれら自身のプライベートなリード／ライト領域内にコピーする場合には、これらのその他のＪＶＭプロセスはその他のジャバＪＡＲファイルから来たデータではなく選択されたジャバＪＡＲファイルから来たデータのみをコピーすることのオプションを有するものではない。その他のＪＶＭプロセスがマスターＪＶＭプロセスがロードしたデータの全てを必要とするものではない条件下においては、その他のＪＶＭプロセスはそれらが実際にコピーすることが必要であったものよりもより多くのデータをコピーすることとなる場合がある。
【００２１】
この潜在的な問題を解決するために、本発明の１実施例においては、マスターＪＶＭプロセスは各別個のジャバＪＡＲファイルに対し別個の共用可能な領域を確立し、そこからマスターＪＶＭプロセスはデータをロードする。各ジャバＪＡＲファイルに対して、マスターＪＶＭプロセスはそのジャバＪＡＲファイルからのデータをそのジャバＪＡＲファイルに対応する共用可能な領域のみにロード／コピーする。
【００２２】
代替的に、本発明の１実施例においては、マスターＪＶＭプロセスは単一の共用可能な領域を確立するものであるが、各別個のジャバＪＡＲファイルに対する共用可能な領域内に別個の対のリードオンリエリア及びリード／ライトエリアを確立し、そこからマスターＪＶＭプロセスがデータをロードする。各ジャバＪＡＲファイルに対して、マスターＪＶＭプロセスは、そのジャバＪＡＲファイルからのそのデータをそのジャバＪＡＲファイルに対応するリードオンリエリア及びリード／ライトエリアのみにロード／コピーする。
【００２３】
従って、本発明の１実施例においては、マスターＪＶＭはその他のＪＶＭプロセスのいずれかが使用する場合のある何等かのデータを包含するジャバＪＡＲファイルの全てからのデータを処理する。後に、これらのその他のＪＶＭプロセスは、それに対してそれらがマッピングするリードオンリエリア及びそれからそれらがそれら自身のプライベートなリード／ライト領域内にデータをコピーするリード／ライトエリアを選択することが可能である。
【００２４】
ファンクションポインターベクトル
クラスパスはクラスがロードされるコンテキストを表示する。時々、これらのコンテキストの幾つかは、これらのコンテキスト内にロードされたクラスが互いに「気が付いている」ように相互にリンクされている。その他の時において、これらのコンテキストの幾つかは相互にリンクされておらず、従って１つのコンテキスト内にロードされたクラスは別のコンテキスト内にロードされているクラスに「気が付いて」いない。
【００２５】
「ブート（ｂｏｏｔ）」クラスパスは、いずれかのＪＶＭプロセスが何等かのプログラムを実行するために必要なシステムクラスを包含している場合がある。特定の「アプリケーション」クラスパスは、あるＪＶＭプロセスが特定のアプリケーションプログラムを実行するのに必要とされるアプリケーションクラスを包含している場合があるが、それはそのＪＶＭプロセスがその他のアプリケーションプログラムを実行するのに必要とされるものでない場合がある。
【００２６】
典型的に、ＪＶＭプロセスはクラスローダーを使用してクラスをロードする（例えば、ジャバＪＡＲファイルから）。異なるクラスローダーにより異なるクラスをロードさせることが可能である。例えば、ブートクラスローダーは、システムクラスの全てをロードするかもしれないが、その他のクラスローダーは特定のアプリケーションに対するアプリケーションクラスをロードする場合がある。本発明の１実施例においては、各クラスローダーはファンクションポインターの別個のベクトルと関連している。
【００２７】
本発明の１実施例においては、マスターＪＶＭプロセス１０４がクラスをロードする場合には（例えば、上述した技術を使用して）、マスターＪＶＭプロセス１０４は、そのクラスがブートクラスローダーにより又は何等かのその他のクラスローダーによりロードされるものであるか否かを決定する。本発明の１実施例においては、そのクラスがブートクラスローダーによりロードされる場合には、マスターＪＶＭプロセス１０４はファンクションポインターの「ブート」ベクトルをブートクラスローダーへ供給する。本発明の１実施例においては、そのクラスが何等かのその他のクラスローダーによりロードされる場合には、マスターＪＶＭプロセス１０４はファンクションポインターの「デフォルト」ベクトルをそのクラスローダーへ供給する。
【００２８】
本発明の１実施例においては、クラスローダーはそのクラスローダーへ供給されるファンクションポインターのベクトルを受取る。そのベクトルはクラスローダーが実施することを必要とする場合のある異なるタイプの動作に対する異なるファンクションに対するポインターを包含している。例えば、各ベクトルは、（ａ）クラスローダーがバイトコードに対するメモリを割当てることが必要である場合にクラスローダーがコールすべきファンクション（ｆｕｎｃｔｉｏｎ）、（ｂ）クラスローダーがインターンされた（ｉｎｔｅｒｎｅｄ）即ち抑留されたストリングに対してメモリを割当てることが必要である場合にクラスローダーがコールすべきファンクション、及び（ｃ）クラスローダーが前に割当てられているメモリを解放することが必要である場合にクラスローダーがコールすべきファンクションに対する少なくとも１個のポインターを包含している場合がある。本発明の１実施例においては、クラスローダーが特定の動作タイプの動作を実施することを必要とする場合には、そのクラスローダーは、そのクラスローダーが使用するファンクションポインターベクトルによって表わされるように、その特定の動作タイプに対してファンクションポインターが指し示すファンクションをコールする。
【００２９】
各ファンクションポインターベクトルはクラスローダーが実施することを必要とする場合のある動作の各タイプに対するファンクションポインターを包含している場合があるが、異なるベクトルにおいては、同一のタイプの動作に対するファンクションポインターが異なるファンクションを指し示す場合がある。例えば、「バイトコード割当て」型の動作に対して「ブート」ベクトルにおけるファンクションポインターが指し示すファンクションは、同一の「バイトコード割当て」型の動作に対して「デフォルト」ベクトルにおけるファンクションポインターが指し示すファンクションと異なる場合がある。より詳細には、「ブート」ベクトルが指し示すファンクションは、クラスローダーをして共用可能な領域１０２のリードオンリエリア１１２においてバイトコードに対するメモリを割当てさせる場合があり、一方「デフォルト」ベクトルが指し示すファンクションは、クラスローダーをして、従来の「ｍａｌｌｏｃ」アプローチを使用してＪＶＭプロセスのヒープ内にそのバイトコードに対してメモリを割当てさせる場合がある。
【００３０】
従って、本発明の１実施例においては、ＪＶＭスタートアッププロセス期間中にジャバＪＡＲファイルからクラスローダーがデータをロードする場合にこれらのクラスローダーが実施する動作を実施するために異なるクラスローダーが異なるファンクションポインターベクトルを使用する。本発明のこのような実施例においては、同一のクラスローダーによりロードされるクラスの全ては、そのクラスローダーと関連している同一のファンクションポインターベクトルを使用してロードされる。
【００３１】
上の説明は容易に理解される例を示すために「ブート」ファンクションポインターベクトルと「デフォルト」ファンクションポインターベクトルとについて言及するものであるが、本発明の種々の実施例は、これらの特に充実したものより一層多数の異なるファンクションポインターベクトルを関与させることが可能である。
【００３２】
本発明の１実施例においては、異なるファンクションポインターベクトルは異なるジャバＪＡＲファイルと関連している。本発明のこのような実施例においては、特定のジャバＪＡＲファイルからのクラスをロードする各クラスローダーは、その特定のジャバＪＡＲファイルからクラスをローディングする場合に、その特定のジャバＪＡＲファイルと関連しているファンクションポインターベクトルを使用する。この特徴は、上述したように、異なるジャバＪＡＲファイルからのデータが異なる共用可能な領域又は同一の共用可能な領域の異なるエリア内にロード及び／又はコピーされるべき実施例において特に有用である。
【００３３】
拡張及び代替
上述したように、本発明の１実施例においては、マスターＪＶＭプロセス１０４は、共用可能な領域１０２のリード／ライトエリア１１４内に、変更可能なエンティティに対応するデータを格納する。然しながら、本発明の代替的実施例においては、マスターＪＶＭプロセス１０４は、共用可能な領域１０２の代わりに、又はそれに加えて、永続的な非揮発性格納部上のファイル内にこのようなデータを格納し、且つその他のＪＶＭプロセス１０６はこのファイルからのそのデータをそれら自身のプライベートなリード／ライト領域１１０内に読込む。従って、その他のＪＶＭプロセス１０６がコピーすることが必要な「プロトタイプ」変更可能データは永続的なものとさせることが可能である。
【００３４】
上述したように、本発明の１実施例においては、マスターＪＶＭプロセス１０４は、その領域のコンテンツを共用可能な領域１０２のリード／ライトエリア１１４へコピーする前に、変更可能なエンティティに対応するデータをマスターＪＶＭプロセス自身のプライベートなリード／ライト領域１０８内に格納する。然しながら、本発明の１実施例においては、変更可能なエンティティに対応するデータの少なくとも幾つかはこのような態様で取扱われるものでない場合がある。その代わりに、本発明の１実施例においては、変更可能なエンティティに対応するデータが共用可能な領域１０２のリードオンリエリア１１２から又はスタチックメモリ（ビルド時にＲＯＭ化した構造を含む）から参照されるものでない場合には、そのデータが格納されるメモリは「ｍａｌｌｏｃ」を使用して通常通りに割当てることが可能である。その他のＪＶＭプロセスは共用可能な領域１０２のリード／ライトエリア１１４からこのような参照されていないデータをコピーすることは必要ではなく、従ってマスターＪＶＭプロセス１０４はこのような参照されていないデータを共用可能な領域１０２のリード／ライトエリア１１４内にコピーすることは必要ではない。本発明の１実施例においては、解放させることが必要な一時的なメモリ、及びクラスローディングと関係していないメモリも「ｍａｌｌｏｃ」を使用して通常通りに割当てられる。
【００３５】
本発明の１実施例においては、スタチックメモリから共用可能な領域１０２のリードオンリエリア１１２又はリード／ライトエリア１１４のいずれかに対する全ての参照が識別される。これらの参照は、次いで、共用可能な領域１０２を使用する各ＪＶＭプロセス内にパッチされる。
【００３６】
本発明の１実施例においては、コンピューティング装置上の「マスター」ＪＶＭプロセスはそのコンピューティング装置上でスタートアップする最初のＪＶＭプロセスである。本発明の１実施例においては、１つのＪＶＭプロセスがスタートアップすると、そのＪＶＭプロセスは、それがスタートアップする最初のＪＶＭプロセスであるか否かを決定する。そのＪＶＭプロセスが、それがスタートアップする最初のＪＶＭプロセスであることを決定すると、そのＪＶＭプロセスは、マスターＪＶＭプロセスの役割を担い、且つ上述した技術を使用してジャバＪＡＲファイルからのデータのローディングを開始する。代替的に、そのＪＶＭプロセスが、それがスタートアップする最初のＪＶＭプロセスではないことを決定すると、ジャバＪＡＲファイルからのデータの再ローディングを行う代わりに、そのＪＶＭプロセスは共用可能な領域１０２の既に確立されているリードオンリエリアに対してマッピングし、且つ共用可能な領域１０２のリード／ライトエリア１１４から、それ自身のプライベートなリード／ライト領域内に、マスターＪＶＭプロセス１０４が以前にそこに配置したデータのコピーをコピーする。ＪＶＭプロセスは、例えば、共用可能な領域が既に存在するか否かを決定することにより、それがスタートアップする最初のＪＶＭプロセスであるか否かを決定することが可能である。共用可能な領域１０２が既に存在する場合には、そのＪＶＭプロセスは、マスターＪＶＭプロセスの役割を既に担っているその他のＪＶＭプロセスが共用可能な領域１０２を作成したものと仮定することが可能である。本発明の１実施例においては、ＪＶＭプロセスが開始する場合に、それはメモリ内に存在するデータが新しいものであるか否か（ＪＶＭの最も最近のバージョンがコンパイルされる前に格納されたものであった場合にはそのデータは新鮮なものでない場合がある）を決定し（例えば、ハッシュコードを使用して）、且つ、そのデータが新鮮なものでない場合には、そのＪＶＭプロセスはそのデータの新たなリフレッシュしたバージョンを作成する。本発明の１実施例においては、各ＪＶＭプロセスはそのデータを使用する手順の前に共用可能な領域１０２内に存在するデータのアドレスに関して「サニティチェック」を実施する。本発明の別の実施例においては、各ＪＶＭプロセスは共用可能な領域１０２の開始アドレスに関してこのような「サニティチェック」を付加的に又は代替的に実施する。
【００３７】
本発明の幾つかの実施例についてＪＶＭ及びジャバＪＡＲファイルに関連して上に説明したが、本発明の別の実施例を、ＪＶＭ以外のバーチャルマシンに関して及び／又はジャバＪＡＲファイル以外のプログラムモジュールに関して適用することが可能である。本発明の実施例は、バーチャルマシンがプログラムモジュールからデータをロードする如何なる文脈においても適用可能なものである。
【００３８】
上述した本発明の実施例は、一般的に、プログラムモジュールからデータをローディングするバーチャルマシンに関連して説明している。然しながら、バーチャルマシンがスタートアップする場合には、プログラムモジュールからデータをローディングする以外のタスクが存在する場合があり、それは、このようなバーチャルマシンが、典型的に、プログラムを実施することが可能となる前に実施することを必要とするものである。本発明の１実施例においては、マスターＪＶＭプロセス１０４がスタートアップする場合に、マスターＪＶＭプロセス１０４はジャバＪＡＲファイルから派生したものではないデータをダイジェストし且つ共用可能な領域内にロードする。典型的に、マスターＪＶＭプロセス１０４の初期的な実行のスレッドはスタックを作成する。これらのスタックはリードオンリでない場合があるが、それらは常に同一であるデータエンティティを参照する場合がある。本発明の１実施例においては、マスターＪＶＭプロセス１０４はこれらのタスクを共用可能な領域１０２のリード／ライトエリア１１４内に格納し、それによりその他のＪＶＭプロセス１０６に対するタスクを「事前初期化」する。本発明の１実施例においては、マスターＪＶＭプロセス１０４が、（ａ）その他のＪＶＭプロセス１０６に対して同一であり、且つ（ｂ）そうでなければその他のＪＶＭプロセス１０６が独立的にそれらを処理することが必要となるデータを共用可能な領域１０２へ格納又はコピーする。幾つかのランタイムで発生されるルックアップテーブルがこのようなデータの例である。
【００３９】
例えば、１つのこうようなテーブルは「ＪＩＴイントリンシックス（ｉｎｔｒｉｎｓｉｃｓ）」に関連するデータを包含している場合がある。マスターＪＶＭプロセス１０４はこのテーブルを共用可能な領域１０２内に格納する場合がある。このようなテーブルは、初期的には、圧縮された形式で存在する場合があるが、ランタイムでアクセスするのにより便利であるデータ構造へ圧縮解除される場合がある。従って、テーブルに対する以下の参照は、代替的に、そのテーブルが圧縮解除されたデータ構造へ参照する場合がある。別のＪＶＭプロセス１０６はこのテーブルへアクセスすることを必要とする場合がある。マスターＪＶＭプロセス１０４がそのテーブルをリードオンリエリア１１２内に格納した場合にマスターＪＶＭプロセス１０４はそのテーブルのアクセスを採取する。従って、マスターＪＶＭプロセス１０４はそのテーブルへのポインターを有している。本発明の１実施例においては、共用可能な領域１０２は、付加的に、リードオンリエリア及びリード・ライトエリア１１２及び１１４内のデータをその他のＪＶＭプロセス１０６に対して可視的なものとさせるためにパッチさせることが必要なアドレスのリストを包含している（例えば、リード／ライトエリア１１４において又は別個の専用のエリアにおいて）。このリストが読取られ且つＪＶＭプロセスのプライベートなリード／ライト領域１１０内のアドレスが、そのリストにおいて示されるように、パッチされ、共用可能な領域１０２内の正しいメモリ位置を参照する。パッチレコードは、通常、アドレスとデータとを有している。パッチング（ｐａｔｃｈｉｎｇ）の結果として、その他のＪＶＭプロセス１０６も、それらのプライベートなリード／ライト領域１１０内において、共用可能な領域１０２内のテーブルに対するポインターを有している。本発明の１実施例においては、マスターＪＶＭプロセス１０４はこのアドレスのリストを作成し、且つその他のＪＶＭプロセス１０６は、それらがマスターＪＶＭプロセスではないことを決定した場合に、そのリストを読取り且つそれをそれらのアドレス空間へ適用する。通常、そのリストはリロケートさせることが不便であったポインターに対応するアドレスを包含している。
【００４０】
ＪＶＭプロセスのスタートアップ動作の幾つかは、特定のジャバＪＡＲファイルからのクラスローディングが終了した後まで延期させることが最善である場合があり、その時に、これらの動作は「後処理」パスの一部として実施される場合がある。例えば、本発明の１実施例においては、特定のジャバＪＡＲファイルからのクラスの全てがロードされた後であるが、ＪＶＭプロセスがスタートアッププロセスを終結する前に、そのＪＶＭプロセスは該クラスの全てを検査し且つバイトコードの全てがクイックン（ｑｕｉｃｋｅｎ）されているか否か、シンボルの全てが解決されているか否か、及びコンスタントプール（ｃｏｎｓｔａｎｔ  ｐｏｏｌ）エントリの全てが解決されているか否かを決定する。別の例の場合には、本発明の１実施例においては、後処理は、そのデータがリードオンリであることが意図されていた場合には、そのデータがＪＶＭプロセスの全てに対してリードオンリのままであることを確保するために、既にメモリに書込まれたデータを保護することが関与する。ＪＶＭプロセスが複数の別個のジャバＪＡＲファイルからのクラスをロードする本発明の１実施例においては、ＪＶＭプロセスは、１個のＪＡＲファイルからデータをローディングした後で且つ別のＪＡＲファイルからのデータのローディングを開始する前にこれらの後処理動作を実施する。
【００４１】
Ｔｉｍ  Ｌｉｎｄｈｏｌｍ及びＦｒａｎｋ  Ｋｅｌｌｉｎ共著の「ザ・ジャバ・バーチャル・マシン仕様（Ｔｈｅ  ＪＡＶＡ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｉｃｉｆｉｃａｔｉｏｎ）」、第二版を引用によりここに取込む。以下の特許、即ち１９９６年５月３０日付で出願された米国特許第５，８１５，７１８号、１９９８年８月１０日付で出願された米国特許第５，９６６，５４２号、及び１９９９年１０月１２日付で出願された米国特許第６，２２３，３４６号も引用によりここに取込む。
【００４２】
ハードウエア概観
図２は本発明の１実施例を実現することが可能なコンピュータシステム２００を例示したブロック図である。コンピュータシステム２００は、情報交換を容易とするためのバス２０２、情報を処理するためにバス２０２と結合されている１個又はそれ以上のプロセッサ２０４を包含している。コンピュータシステム２００は、又、プロセッサ２０４によって実行されるべき情報及び命令を格納するためにバス２０２へ結合されているランダムアクセスメモリ（ＲＡＭ）又はその他のダイナミック記憶装置等のメインメモリ２０６を包含している。メインメモリ２０６は、又、プロセッサ２０４による命令の実行期間中に一時的な変数又はその他の中間的な情報を格納するために使用することが可能である。コンピュータシステム２００は、更に、プロセッサ２０４に対するスタチックな情報及び命令を格納するためにバス２０２に結合されているリードオンリメモリ（ＲＯＭ）２０８又はその他のスタチック記憶装置を包含することが可能である。磁気ディスク又は光学的ディスク等の記憶装置２１０が情報及び命令を格納するために設けられており且つバス２０２へ結合されている。
【００４３】
コンピュータシステム２００は、コンピュータユーザに対し情報を表示するために陰極線管（ＣＲＴ）等のディスプレイ２１２へバス２０２を介して結合させることが可能である。英文字及びその他のキーを包含する入力装置２１４が情報及びコマンド選択をプロセッサ２０４へ通信するためにバス２０２へ結合されている。別のタイプのユーザ入力装置はマウス、トラックボール、又は方向情報及びコマンド選択をプロセッサ２０４へ通信し且つディスプレイ２１２上のカーソルの運動を制御するカーソル方向器等のカーソル制御器部２１６である。この入力装置は、典型的に、２つの軸、即ち第一軸（例えば、ｘ）及び第二軸（例えばｙ）において２つの自由度を有しており、そのことは該装置が面内における位置を特定することを可能とする。
【００４４】
コンピュータシステム２００において、バス２０２は情報、信号、データ等を種々のコンポーネント間で交換させることを可能とする任意のメカニズム及び／又は媒体とすることが可能である。例えば、バス２０２は電気信号を担持する１組の導体とすることが可能である。バス２０２は、又、コンポーネントのうちの１つ又はそれ以上の間でワイヤレス信号を担持するワイヤレス媒体とすることが可能である。バス２０２は、又、コンポーネントのうちの１つ又はそれ以上の間で容量的に信号を交換することを可能とする媒体とすることが可能である。バス２０２は、更に、コンポーネントのうちの１つ又はそれ以上を接続するネットワーク接続とすることが可能である。総括的に、情報、信号、データ等を種々のコンポーネント間において交換させることを可能とする任意のメカニズム及び／又は媒体をバス２０２として使用することが可能である。
【００４５】
バス２０２は、又、これらのメカニズム／媒体の結合とすることも可能である。例えば、プロセッサ２０４はワイヤレスによって記憶装置２１０と通信することが可能である。このような場合において、バス２０２は、プロセッサ２０４及び記憶装置２１０の観点からは、電磁波等のワイヤレス媒体である。更に、プロセッサ２０４は容量的にＲＯＭ２０８と通信することが可能である。この例においては、バス２０２は容量的通信を行うことを可能とする媒体である。更に、プロセッサ２０４は、ネットワーク接続を介してメインメモリ２０６と通信を行うことが可能である。この場合には、バス２０２はネットワーク接続である。更に、プロセッサ２０４は１組の導体を介してディスプレイ２１２と通信することが可能である。この場合には、バス２０２は１組の導体である。従って、どのようにして種々のコンポーネントが互いに通信を行うかに依存して、バス２０２は異なる形態をとることが可能である。バス２０２は、図２に示したように、情報、信号、データ等を種々のコンポーネント間において交換することを可能とさせるメカニズム及び／又は媒体の全てを機能的に表わしている。
【００４６】
本発明はここに記載した技術を実現するためにコンピュータシステム２００の使用に関連している。本発明の１実施例によれば、これらの技術は、メインメモリ２０６内に包含されている１個又はそれ以上の命令からなる１個又はそれ以上のシーケンスを実行するプロセッサ２０４に応答してコンピュータシステム２００によって実施される。このような命令は、記憶装置２１０等の別の機械読取可能な媒体からメインメモリ２０６内に読込むことが可能である。メインメモリ２０６内に包含されている命令からなるシーケンスの実行は、プロセッサ２０４をしてここに記載した処理ステップを実施させる。別の実施例においては、本発明を実現するためにソフトウエア命令の代わりに又はそれと結合してハードワイヤード回路を使用することが可能である。従って、本発明の実施例はハードウエア回路とソフトウエアの特定の組合わせに制限されるものではない。
【００４７】
ここにおいて使用されているような「機械読取可能な媒体」という用語は、マシン即ち機械をして特定の態様で動作させるデータを供給することに関与する任意の媒体のことを意味している。コンピュータシステム２００を使用して実現される実施例においては、種々の機械読取可能な媒体が、例えば、実行のためにプロセッサ２０４へ命令を供給する場合に関与する。このような媒体は、これらに制限されるものではないが、非揮発性媒体、揮発性媒体、伝送媒体等の多くの形態をとることが可能である。非揮発性媒体は、例えば、記憶装置２１０等の光学又は磁気ディスクを包含している。揮発性媒体は、メインメモリ２０６等のダイナミックメモリを包含している。伝送媒体は、同軸ケーブル、銅ワイヤ及びオプチカルファイバーを包含しており、バス２０２を有するワイヤを包含している。伝送媒体は、又、電波又は赤外線データ通信期間中に発生されるものを含む音響又は光波の形態をとることが可能である。
【００４８】
機械読取可能な媒体の一般的な形態は、例えば、フロッピィディスク、フレキシブルディスク、ハードディスク、磁気ディスク、又は何等かのその他の磁気媒体、ＣＤ−ＲＯＭ、何等かのその他の光学的媒体、パンチカード、ペーパーテープ、穴からなるパターンを具備する何等かのその他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、フラッシュＥＰＲＯＭ、何等かのその他のメモリチップ又はカートリッジ、以下に説明するような搬送波、又はそれからコンピュータが読取ることが可能な何等かのその他の媒体を包含している。
【００４９】
機械読取可能な媒体の種々の形態は、実行のためにプロセッサ２０４に対して１個又はそれ以上の命令からなる１個又はそれ以上のシーケンスを搬送することに関与する場合がある。例えば、命令は初期的には遠隔コンピュータの磁気ディスク上に担持されている場合がある。その遠隔コンピュータはその命令をダイナミックメモリ内にロードし且つその命令をモデムを使用して電話線を介して送信することが可能である。コンピュータシステム２００に対してローカルなモデムは電話線を介してそのデータを受取り且つ赤外線送信器を使用してそのデータを赤外線信号へ変換することが可能である。赤外線検知器は、赤外線信号内に担持されるデータを受取ることが可能であり且つ適宜の回路がそのデータをバス２０２上に配置させることが可能である。ガス２０２はそのデータをメインメモリ２０６へ運び、そこからプロセッサ２０４が命令を検索し且つ実行する。メインメモリ２０６により受取られる命令は、オプションとして、プロセッサ２０４による実行の前又は後のいずれかにおいて記憶装置２１０上に格納即ち記憶させることが可能である。
【００５０】
コンピュータシステム２００は、又、バス２０２へ結合されている通信インターフェース２１８を包含している。通信インターフェース２１８はローカルネットワーク２２２へ接続されているネットワークリンク２２０への二方向データ通信カップリングを与えている。例えば、通信インターフェース２１８は統合サービスデジタルネットワーク（ＩＳＤＮ）カード又はモデムとして対応するタイプの電話線へのデータ通信接続を与えることが可能である。別の例として、通信インターフェース２１８は互換性のあるＬＡＮへのデータ通信接続を与えるためのローカルエリアネットワーク（ＬＡＮ）カードとすることが可能である。ワイヤレスリンクを実現することも可能である。いずれかのこのような実現例において、通信インターフェース２１８は種々のタイプの情報を表わすデジタルデータストリームを担持する電気的、電磁的、又は光学的信号を送信し且つ受信する。
【００５１】
ネットワークリンク２２０は、典型的に、１個又はそれ以上のネットワークを介してその他のデータ装置へのデータ通信を与える。例えば、ネットワークリンク２２０はローカルネットワーク２２２を介してホストコンピュータ２２４への又はインターネットサービスプロバイダー（ＩＳＰ）２２６により運用されるデータ装置への接続を与えることが可能である。ＩＳＰ２２６は今や「インターネット」２２８として一般的に呼ばれるワールドワイドパケット通信ネットワークを介してのデータ通信サービスを提供する。ローカルネットワーク２２２及びインターネット２２８の両方は、デジタルデータストリームを担持する電気的、電磁的、又は光学的信号を使用する。コンピュータシステム２００へ及びそらからのデジタルデータを担持する種々のネットワークを介しての信号及びネットワークリンク２２０上及び通信インターフェース２１８を介しての信号は情報を輸送する搬送波の例示的な形態である。
【００５２】
コンピュータシステム２００はネットワーク、ネットワークリンク２２０及び通信インターフェース２１８を介して、メッセージを送信し且つプログラムコードを含むデータを受信することが可能である。インターネットの例においては、サーバー２３０はインターネット２２８、ＩＳＰ２２６、ローカルネットワーク２２２、通信インターフェース２１８を介してアプリケーションプログラム用の要求されたコードを送信する場合がある。
【００５３】
プロセッサ２０４は、コードが受取られる場合に及び／又は後に実行するために記憶装置２１０又はその他の非揮発性格納部内に格納され受取ったコードを実行することが可能である。このように、コンピュータシステム２００は搬送波の形態においてアプリケーションコードを得ることが可能である。
【００５４】
前述した説明において、本発明の実施例を実現例毎に異なる場合のある多数の特定の詳細を参照して説明した。従って、何が発明であるか及び出願人によって発明であると意図されているものが何であるかの唯一且つ排他的な指標は本願から発行される特許請求の範囲及び事後の補正を含めこのような特許請求の範囲が発行される特定の形態にあるものである。このような特許請求の範囲内に含まれる用語に対してここにおいて明示的に記載した如何なる定義も特許請求の範囲において使用されているこのような用語の意味を支配すべきものである。従って、特許請求の範囲において明示的に記載されていない制限、要素、特性、特徴、利点又は属性はこのような特許請求の範囲を何等制限すべきものではない。従って、本明細書及び図面は制限的な意味ではなく例示的なものとしてみなされるべきである。
【図面の簡単な説明】
【００５５】
【図１】本発明の１実施例に基づいて複数個の同時的に実行する孤立したＪＶＭプロセス間でジャバＪＡＲファイルを共用するシステムの論理的コンポーネント及び側面を例示したブロック図。
【図２】本発明のある実施例を実現することが可能な例示的コンピュータエンティティのハードウエアブロック図。
【符号の説明】
【００５６】
１０２  共用可能な領域
１０４  マスターＪＶＭプロセス
１０６  その他のＪＶＭプロセス
１０８，１１０  プライベートリード／ライト領域
１１２  リードオンリエリア
１１４  リード／ライトエリア
１１６  ジャバ（ＪＡＶＡ）ＪＡＲファイル
１２０，１２２  リードオンリエリアに対してマッピングされており且つ固定されたバーチャルアドレス「Ｘ」に位置されているメモリ
２００  コンピュータシステム
２０２  バス
２０４  プロセッサ
２０６  メインメモリ
２０８  ＲＯＭ
２１０  記憶装置
２１２  ディスプレイ
２１４  入力装置
２１６  カーソル制御部
２１８  通信インターフェース
２２０  ネットワークリンク
２２２  ローカルネットワーク
２２４  ホスト
２２６  ＩＳＰ
２２８  インターネット
２３０  サーバー
【図１】
2009059349.tif 000003
【図２】
2009059349.tif 000004