(57)【特許請求の範囲】
【請求項１】
コンピュータで実行される複数のアプリケーション・プログラム夫々によって再使用可能な複数のバーチャル・マシンを前記コンピュータのメモリ内に実装する方法であって、前記バーチャル・マシンは、該バーチャル・マシンに関連付けられたアプリケーションをロードおよび実行し、
前記方法は、
前記複数のアプリケーション・プログラムがそれにデータを書き込むところの共用ヒープを前記メモリの第１の領域内に確保するステップと、
前記バーチャル・マシンを作動可能（ready）モードにし且つ前記コンピュータのランタイム・オペレーションを制御するために使用される、アプリケーション・プログラムに特有ではないコードを、前記共用ヒープ内に格納するステップと、
前記複数のアプリケーション・プログラム夫々に関連付けられた複数の専用ヒープを前記メモリの第２の領域内に確保するステップであって、前記専用ヒープが、それぞれのアプリケーション・プログラムが排他的に使用するために予約されるメモリ区域であり、及び前記専用ヒープのそれぞれが、初期状態がアプリケーション・プログラムを初期設定状態にするための事前定義された値（以下、静的イニシアライザ値）である持続部分と初期状態が共通値であり且つアプリケーション・プログラムに特有のコードをそれに格納するリセット可能部分とを含む、前記確保するステップと、
前記各専用ヒープがそれに関連付けられているところのそれぞれの各アプリケーション・プログラムのためのアプリケーション・プログラムに特有のデータを、前記専用ヒープのそれぞれに格納するステップと、
アプリケーション・プログラムの実行が完了したら、関連する専用ヒープに格納された値を初期状態にリセットし、該リセットにおいて前記関連する専用ヒープの前記持続部分に前記静的イニシアライザ値を入力し且つ前記リセット可能部分に共通値を設定することにより、初期状態を再生成し、かつ以降のアプリケーション・プログラムで使用できるように前記共用ヒープの前記特有ではないコードを前記メモリの第１の領域内にそのまま保持するステップと
を含み、それにより、前記共用ヒープに格納された前記アプリケーション・プログラムに特有ではないコードを再リンク、再検証、再コンパイルまたは再ロードを行う必要なく、再使用可能にされ、且つ専用ヒープ上でガーベッジ収集が必要とされないことを可能にする、前記方法。
【請求項２】
アプリケーション・データ間の分離を行えるように、各アプリケーション・プログラムを制御して、アプリケーション・プログラム関連コードを関連付けられた専用ヒープに格納するステップをさらに含む、請求項１に記載の方法。
【請求項３】
アプリケーションの実行を成功させるために、前記コンピュータのランタイム・オペレーションの修正に必要とされる、アプリケーション・プログラムに特有ではないコードを前記専用ヒープに格納するステップをさらに含む、請求項１に記載の方法。
【請求項４】
ランタイム・オペレーションの修正に必要とされる、前記アプリケーション・プログラムに特有ではないコードを前記リセット可能部分に格納するステップをさらに含む、請求項３に記載の方法。
【請求項５】
コンピュータで実行される複数のアプリケーション・プログラム夫々によって再使用可能な複数のバーチャル・マシンを前記コンピュータのメモリ内に実装するシステムであって、中央演算処理装置（ＣＰＵ）、ランダム・アクセス・メモリ（ＲＡＭ）、および前記ＣＰＵの動作を制御するための、前記ＲＡＭに格納されたコードを含み、前記バーチャル・マシンは、該バーチャル・マシンに関連付けられたアプリケーションをロードおよび実行し、
前記システムは、
前記複数のアプリケーション・プログラムがそれにデータを書き込むところの共用ヒープを前記メモリの第１の領域内に確保する手段と、
前記バーチャル・マシンを作動可能（ready）モードにし且つ前記コンピュータのランタイム・オペレーションを制御するために使用される、アプリケーション・プログラムに特有ではないコードを、前記共用ヒープ内に格納する手段と、
前記複数のアプリケーション・プログラム夫々に関連付けられた複数の専用ヒープを前記メモリの第２の領域内に確保する手段であって、前記専用ヒープが、それぞれのアプリケーション・プログラムが排他的に使用するために予約されるメモリ区域であり、前記専用ヒープのそれぞれが、初期状態がアプリケーション・プログラムを初期設定状態にするための事前定義された値（以下、静的イニシアライザ値）である持続部分と初期状態が共通値であり且つアプリケーション・プログラムに特有のコードをそれに格納するリセット可能部分とを含む、前記確保する手段と、
前記各専用ヒープがそれに関連付けられているところのそれぞれの各アプリケーション・プログラムのためのアプリケーション・プログラムに特有のデータを、前記専用ヒープのそれぞれに格納する手段と、
アプリケーション・プログラムの実行が完了したら、関連する専用ヒープに格納された値を初期状態にリセットし、該リセットにおいて前記関連する専用ヒープの前記持続部分に前記静的イニシアライザ値を入力し且つ前記リセット可能部分に共通値を設定することにより、初期状態を再生成し、かつ以降のアプリケーション・プログラムで使用できるように前記共用ヒープの前記特有ではないコードを前記メモリの第１の領域内にそのまま保持する手段と
を含み、それにより、前記共用ヒープに格納された前記アプリケーション・プログラムに特有ではないコードを再リンク、再検証、再コンパイルまたは再ロードを行う必要なく、再使用可能にされ、且つ専用ヒープ上でガーベッジ収集が必要とされないことを可能にする、前記システム。
【請求項６】
アプリケーション・データ間の分離を行えるように、各アプリケーション・プログラムを制御して、アプリケーション・プログラム関連コードを関連付けられた専用ヒープに格納する手段をさらに含む、請求項５に記載のシステム。
【請求項７】
アプリケーションの実行を成功させるために、前記コンピュータのランタイム・オペレーションの修正に必要とされる、アプリケーション・プログラムに特有ではないコードを前記専用ヒープに格納する手段をさらに含む、請求項５に記載のシステム。
【請求項８】
ランタイム・オペレーションの修正に必要とされる、前記アプリケーション・プログラムに特有ではないコードが前記リセット可能部分に格納される、請求項７に記載のシステム。
【請求項９】
コンピュータで実行される複数のアプリケーション・プログラム夫々によって再使用可能な複数のバーチャル・マシンを前記コンピュータのメモリ内に実装するプログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記バーチャル・マシンは、該バーチャル・マシンに関連付けられたアプリケーションをロードおよび実行し、前記コンピュータ読み取り可能な記録媒体は、前記コンピュータに請求項１〜４のいずれか一項に記載の方法の各ステップを実行させるプログラムを記録し、該各ステップの実行により、共用ヒープに格納された前記アプリケーション・プログラムに特有ではないコードを再リンク、再検証、再コンパイルまたは再ロードを行う必要なく、再使用可能にされ、且つ専用ヒープ上でガーベッジ収集が必要とされないことを可能にする、前記コンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、バーチャル・データ処理マシンに関し、詳細にはそのようなバーチャル・データ処理マシンが呼び出し中にその状態を保持できるようにし、初期設定およびランタイムのコストを削減し、ガーベッジの収集およびプロセスの終了を避け、アプリケーションのセキュリティ、分離および可用性の向上をもたらす方法および装置に関する。
【０００２】
【従来の技術】
バーチャル・マシンは、アプリケーションをロードおよび実行する目的でプロセス内で作成される。周知のように、プロセスは特定のプログラムに割り振られているリソースを実行時に分離し、複数のプログラムが互いに実行を妨害しないようにする。アプリケーション・プログラムの実行終了時に、プロセス全体が破壊（tear down）される。
【０００３】
バーチャル・マシン・アプリケーションの増加にともない、次のアプリケーション・プログラムの実行ができるようにバーチャル・マシンを維持することが望まれるようになっている。これにより、プロセスの破壊（tear down）および起動の高いコストを節減することができる。例えば、従来の技術によるコンピュータ・システムは、バーチャル・マシンおよびプロセスを再確立するために５００万行ないし４，０００万行のコードの実行を必要とすることがある。長期間使用でき再使用可能なバーチャル・マシンを使用することによって、コンピューティング機能の使用に関して費用のかかる、クラス・リンク、ロード、初期設定のコストも節減される。アプリケーションごとのバーチャル・マシン環境の生成を避けると、システムが管理できるアプリケーションの量とスループットも増加する。
【０００４】
現在、バーチャル・マシンは単一プロセスであり、アプリケーションの完了時に開始し終了する。存在するバーチャル・マシンの状態を保持する様々な方法が、従来の技術によって提案されてきた。提案された１つの解決策は、バーチャル・マシン・プロセスのプールを維持することである。もう１つの方法は、バーチャル・マシンの状態に「チェック・ポイント」を設ける（すなわち、マシンが設定したすべてのマシン値のコピーを、後で使用できるように維持する）ことである。もう１つの解決方法は、バーチャル・マシンのプールを維持し、あるバーチャル・マシン内で作成されたオブジェクトを別のバーチャル・マシンの「ヒープ」（すなわちメモリの確保された区域）に送ることである。
【０００５】
バーチャル・マシンのプールを維持することは、バーチャル・マシンの初期設定パスの長さを減少させるものではない。以前に作成されたバーチャル・マシンにおけるアプリケーション・プログラムのスケジューリングによって、クライアント要求のパスの長さは隠れるが、クラス・リンク、ロード、または初期設定要件は軽減されず、また各アプリケーションごとにプロセスを生成（bring up）および破壊（tear down）する必要もなくならない。
【０００６】
バーチャル・マシンの状態にチェック・ポイントを設け、それを新たなプロセスに適用するには、ポインタおよびオフセットの再調整が必要となるが、それはパスの長さにおいてコストがかかり、またプロセスが管理（command）するアドレスの範囲が保証できないシステムでは不可能となりうる。
【０００７】
同じバーチャル・マシン・プロセスを複数のアプリケーションに再使用して、バーチャル・マシン内で続いて実行される各アプリケーションのクリーン・ヒープおよびメモリの書込み可能区域（すなわち、割り当てられた整数値で事前定義されたフィールド）は保証されない。
【０００８】
バーチャル・マシンのプールを維持し、アプリケーション・プログラムを正しいバーチャル・マシンに「機能発送（function shipping）する」、または正しいオブジェクトを（アプリケーションが実行されている）バーチャル・マシンに送るには、キャッシュ・コヒーレンシ・スキーム（cache coherency scheme）が必要であり、余分なオーバヘッドと、おそらくはアプリケーションまたはオブジェクトをパスするためのネットワーク・フローが生じる。さらに、このプロシージャは、各バーチャル・マシンのメモリ・スペースに前のアプリケーションによる値が残っていないことを保証するものではない。
【発明が解決しようとする課題】
【０００９】
したがって、本発明の一目的は、アプリケーション・プログラムを実行するための、長期間使用でき、再使用可能で、拡張可能なバーチャル・マシンを提供することである。
【００１０】
本発明のもう１つの目的は、前のアプリケーション・プログラムによって設定された動的または静的なメモリの値が残らないようにするために、バーチャル・マシンを破壊（tear down）し、新たなバーチャル・マシンを生成（bring up）する必要をなくすることである。
【００１１】
本発明のもう１つの目的は、バーチャル・マシンを一度初期設定し、以降のバーチャル・マシン・プロセス全体でこの初期設定状態を再使用することである。
【００１２】
本発明の他の目的は、クラスを一度ロード、リンク、検証、コンパイルし、このクラス・データを以降のバーチャル・マシン・プロセス全体で再使用することである。
【００１３】
本発明の他の目的は、クラスの初期設定メソッドを一度起動し、このクラス・データを以降のバーチャル・マシン・プロセス全体で再使用することである。
【００１４】
本発明のもう１つの目的は、長期間使用できるバーチャル・マシン内で複数のアプリケーションを実行でき、各アプリケーションを相互に分離させて、バーチャル・マシンの可用性を高めることである。
【００１５】
本発明のもう１つの目的は、バーチャル・マシンの状態を専用と共用という別々のヒープに分離し、これによりアプリケーションの分離、より効率的なガーベッジ収集およびバーチャル・マシンのランタイムの拡張を可能にすることである。
【００１６】
本発明の他の目的は、バーチャル・マシンの専用状態でガーベッジ収集の必要をなくすることである。
【課題を解決するための手段】
【００１７】
複数のアプリケーションを通して持続性を有することのできるバーチャル・マシンのアーキテクチャは、バーチャル・マシンを「作動可能（ready）」モードにするために必要なランタイム・クラスがロード、リンク、検証、初期設定およびコンパイルされる共用ヒープを含む。それ以降のバーチャル・マシンは起動され、必要なシステム・クラスがすでにロードされ初期設定されている共用ヒープの内容を使用する。アプリケーション・クラスは共用ヒープ内にロードされ、それ以降のアプリケーションは、クラスを再ロード、再リンク、再検証、再コンパイルするコストなしに、これらのクラスを再使用できるようになる。アプリケーション・プログラムはそのオブジェクトを「専用ヒープ」内に生成する。アプリケーションの実行終了時に、専用ヒープが再初期設定される。専用ヒープ上でガーベッジ収集（すなわち、使用されていないメモリを見つける方法）を行う必要がない。
【００１８】
静的イニシアライザとは、専用ヒープの持続区域に維持される事前定義された値（以降「静的値」或いは「静的イニシアライザ値」と呼ぶ）を生成するメソッドである。各アプリケーションの実行ごとに、この持続区域は共通値にリセットされず、その初期値にリセットされる。この動作により、バーチャル・マシン・プロセスを終了する必要がなくなる。アプリケーションが「誤挙動」した（すなわち、スレッド、ファイル・ディスクリプタなど、外部プロセスに関係するリソースを開くまたは生成する）場合には、これらのリソースの完全なクリーンアップを確実に行うため、バーチャル・マシン・プロセスは終了する。しかし、共用ヒープは削除されず、それ以降のバーチャル・マシンによって使用することができる。以降のこれらのバーチャル・マシンでは、ランタイム初期設定に必要なあらゆるクラス、または前に使用されたあらゆるアプリケーション・クラスの再ロード、再リンク、再コンパイル、再検証のオーバヘッドが節減される。
【００１９】
このアーキテクチャは、クラスが一度ロードされると再びロードまたは初期設定する必要がないので、長期間使用でき再使用可能なバーチャル・マシンが得られるという効果を有する。
【発明の実施の形態】
【００２０】
本発明は、バーチャル・マシンが稼働するハードウェアまたはオペレーティング・システムの如何に関わらず一貫した挙動を示す１組の関数を含むバーチャル・マシンに関するものである。したがって、バーチャル・マシンで実行されるアプリケーションは、オペレーティング・システムまたはプラットフォームの不整合、あるいは特有の機能を知っている必要はない。共用関数（すなわちバーチャル・マシンのランタイム）およびアプリケーションによってロードされる新たな関数を共用するために、メモリは、共用ヒープと専用ヒープに明確に区分される。専用ヒープは１つのアプリケーションに排他的に確保されたメモリ区域である。共用ヒープは、２つ以上のアプリケーションからアクセスできるメモリ区域である。
【００２１】
図１は、従来の技術のバーチャル・マシン２を示す概略図である。１つのヒープ４があり、すべてのアプリケーションが同じプロセスで稼働する（すなわち、一時に１つのアプリケーションのみがプロセスで稼働できる）。この設計の欠点は、プロセス全体を終了し新たなプロセスを生成（bring up）する以外に、現状ではヒープを再初期設定するすべがない点である。プロセスで稼働しているどのユーザ・スレッド（例えば、プロシージャの現在の状態）も、他のユーザ・スレッドまたは他のユーザ・スレッド・データを破壊したり、または障害を起こしたりする可能性がある。ランタイム・オブジェクトを割り振るための、シングル・ヒープ４の空きスペースを回復するためにガーベッジ収集が必要とされる。複数のバーチャル・マシンのプロセス間での、クラス・ロードおよびリンクの共用またはアモタイズ（amortizatin）はない。複数のバーチャル・マシンのプロセス間でのバーチャル・マシン初期設定の共用またはアモタイズもない。
【００２２】
図２は、本発明を実施するためのコンピュータ・システム１０を示すブロック図である。中央演算処理装置（ＣＰＵ）１２は、バス・システム１４を介して、システム１０の動作全体ならびにディスク・ドライブ１６に格納されているデータおよびプログラムとメモリ１８に格納されているデータおよびプログラムを制御する。オペレーティング・システム２０はＣＰＵ１２の動作を制御し、以下で説明する様々なプロシージャを実行する。
【００２３】
２つのアプリケーション２２および２４並びにそれぞれに関連するプロセス２６および２８は、メモリ１８内にある。各プロセスは、専用ヒープとして使用するためのメモリ１８の領域を確保する。こうして、アプリケーション２２は専用ヒープ３０に関連付けられ、専用ヒープ３０は、リセット可能部分３２および持続部分３４からなる。リセット可能部分３２は、アプリケーション特有のコードを格納するために使用され、持続部分３４は静的値、すなわちアプリケーション・プログラムを初期設定状態にするための事前定義された値を格納する。同様に、アプリケーション２４は、リセット可能部分３８および持続部分４０を含む専用ヒープ３６に関連付けられる。
【００２４】
読取り専用部分４４および読取り／書込み部分４６を含む共用ヒープ４２もまたメモリ１８内にある。読取り専用部分４４は、アプリケーション・プログラムに特有ではないコード（例えば、ランタイム・クラス）を格納するために使用され、読取り／書込み部分は、競合を避けるために適切なロック・プロテクションを使用して、アプリケーション２２または２４が読取りまたは書込みをするためのメモリの区域を提供する。専用ヒープ３０はアプリケーション２２からのみアクセスでき、専用ヒープ３６はアプリケーション２４からのみアクセスできるが、共用ヒープ４２はアプリケーション２２および２４の両方からアクセスすることができる。
【００２５】
以下では、すべての必要なプログラムがメモリにロードされ、実行の準備ができているものと仮定する。ただ、必要に応じて選択的にシステム１０にロードすることのできるこのようなプログラムをメモリ装置４７に組み込むことができることを理解されたい。
【００２６】
図３は、共用ヒープ４２、および専用ヒープ３０、３６を有するバーチャル・マシン５０および５２を示している。ランタイム・クラスは共用ヒープ４２にロードおよびリンクされ、したがってバーチャル・マシン５０および５２がそれを使用することができる。これにより、それ以降のバーチャル・マシンのために、初期設定に必要なシステム・クラスおよびアプリケーションに必要なクラスを再ロード、再リンク、再検証、および再初期設定する必要がなくなる。専用ヒープ３０および３６はそれぞれ、バーチャル・マシンにより実行されるアプリケーション特有のオブジェクト・インスタンスを格納するために使用される。専用ヒープの分離により、可用性が向上し、異なるアプリケーションによって生成され使用されるデータ間の分離が可能となる。
【００２７】
ガーベッジ収集は、専用ヒープで起動する必要はない。アプリケーションの実行終了時に、関連する専用ヒープがその初期状態にリセットされる。アプリケーションの「誤挙動」により、バーチャル・マシンが終了することもあるが（すなわち、外部リソースに関連するもの）、共用ヒープ４２は引き続きそれ以降のバーチャル・マシンに使用可能である。これにより、長期間使用でき再使用可能なバーチャル・マシンの機能が提供される。
【００２８】
アプリケーションはさらにプロセスの境界で相互に分離される。それらのデータが分離された専用ヒープに格納されるのみならず、静的値およびプロセス関連リソース（例えば、ファイル・ディスクリプタ、データベース接続）を保持する書込み可能区域も分離される。このプロセス分離により、可用性およびスケーラビリティが向上する。
【００２９】
図４は、バーチャル・マシン５０（例）の専用ヒープ区域３０をより詳細に示している。アプリケーションにより生成されるランタイム・オブジェクト、並びに静的初期設定メソッドにより生成されるオブジェクトおよび静的値が専用ヒープ３０に格納される。専用ヒープ３０は、静的初期設定メソッドにより生成されるオブジェクトおよび静的値を保持する持続区域３４と、アプリケーション・オブジェクト（すなわち、非静的イニシアライザ・メソッドにより生成されるオブジェクト）が生成されるリセット可能区域３２の２つの領域に分けられる。
【００３０】
通常のバーチャル・マシンでは、所与のクラスに対する静的イニシアライザ・メソッドは一度だけ実行される。静的イニシアライザ・メソッドは、アプリケーション・プログラムを表しているため、アプリケーション・プログラムが行えることはほとんど行うことができる。例えば、他のクラスのメソッドを起動すること、オブジェクトを作成すること、そのクラス（また適切なアクセス権限がある場合には他のクラス）の静的変数を設定することができる。作業要求の実行が開始されると、静的変数を更新し、あるいは静的変数によって固定（anchor）されたオブジェクト・フィールドを更新することもできる。
【００３１】
アプリケーション・プログラムを実行している他のバーチャル・マシン・インスタンスは、それらがそれ自体の専用のバーチャル・マシン内で稼働しており、他のバーチャル・マシン・インスタンスによる影響を受けない。この影響を受けないことを保持するために、各バーチャル・マシンは、それ自体の静的値の「コピー」を論理的に与えられなければならない。バーチャル・マシンが静的値を更新した後は、それ自体で使用するための別の物理的コピーを有さなければならない。
【００３２】
したがって、バーチャル・マシンが（すでにロードされているクラスに対して）初期設定するとき、または作業要求の実行が開始され、新たなクラスがバーチャル・マシン・インスタンスによってロードされた後、別の物理的コピーが割り当てられる。したがって、適切と判断されるときに更新を行うために、各バーチャル・マシンはそれぞれの非最終的な静的変数のそれ自体のコピーを有する。しかし、そのような各静的変数の「初期」値は、静的イニシアライザ・ルーチンからの戻りに応じて複製され、従って、次の作業要求は、上記「初期」値に設定された静的変数で開始することができる。
【００３３】
整数（または類似のフルワード・タイプ）である静的変数については、これは簡単である。しかし、静的変数がオブジェクトまたはアレイ参照であることもあり、その場合には、オブジェクトまたはアレイ自体に対するデータの初期値を取り込まなければならない。静的イニシアライザ・ルーチンによって割り振られたオブジェクトまたはアレイが実際に静的変数によって参照されるかどうかを、ランタイム・ルーチンは知らないため、最悪のケースを想定しそれが起こるものと仮定しなければならない。したがって、静的イニシアライザ・ルーチンによって割り振られたすべてのオブジェクトまたはアレイは専用ヒープ３０内の静的値に対する持続部分３４から割り振られる（スペースがある場合）。
【００３４】
静的イニシアライザ・ルーチンの完了時に、新たな静的値がバックアップ区域にコピーされる。各作業要求が完了するとき、このバックアップ区域が、専用ヒープの持続データ区域内のオブジェクトおよびアレイをリフレッシュするために使用される。
【００３５】
しかしこれによる問題は、アプリケーション・クラスに関係する静的値のためにどれだけのスペースが必要とされるかを前もって知ることができないことである。共用ヒープ４２内にロードされるシステム・クラスについてはこれは知ることができることに留意されたい。その解決策は、バーチャル・マシン・ランタイム・ルーチンのための持続記憶域３４を使用して、所与の時点でどれだけの静的値が使用されているかを追跡することである。
【００３６】
タスクがその専用ヒープを最初に作成するときに、専用ヒープ３４に割り振られた記憶域がクリアされ、その記憶域のサイズがバーチャル・マシン生成メソッドに入力として渡される。作業要求によりプロセスが終了するときは常に、サブシステムがバーチャル・マシンを再生成し、持続記憶域のサイズを渡す。アプリケーションがリソース（例えば、スレッド、オープン・ファイル、ストーレッジ）を残している可能性があるときには、バーチャル・マシン・ランタイム・プロセスはプロセスを強制的に終了させる。
【００３７】
専用ヒープ３０内の持続区域３４により、静的イニシアライザを再実行する必要がなくなる。専用ヒープ３０内の区域３２は非持続性である。非持続区域３２は、アプリケーションの存続時間を越えては必要とされないアプリケーション・データ・オブジェクトを保持する。アプリケーションの終了時に、プロセス終了が必要でない（すなわち、アプリケーションが正しく挙動している）場合、専用ヒープ３０全体が再初期設定される。リセット可能区域３２は「クリーン」値に設定され（例えば、＝０）、持続区域３４は静的イニシアライザ値に設定される。この一般的なケースの場合、これによりアプリケーションの専用データのためのガーベッジ収集は必要でなくなる。正しく挙動するアプリケーションでは、専用ヒープ３０の使用により、プロセス終了の必要がなくなり、前のアプリケーションから残されている値がないことが保証され、各アプリケーションごとに静的イニシアライザを再実行する必要がなくなる。
【００３８】
図５は、アプリケーションのバーチャル・マシン環境を拡張するために使用される専用ヒープ６０を、より詳細に示している。特定のアプリケーション、プラットフォームまたは機能に適合するように修正されたシステムまたはアプリケーション・クラスでは、専用ヒープ６０へのそれらのクラスのロード、リンク、検証およびコンパイルにより、その１つのアプリケーションのためのバーチャル・マシン環境が拡張される。修正されたクラスを専用ヒープ６０に挿入することにより、ランタイムの調整が可能になる。さらにそれにより、バーチャル・マシンのランタイム・ルーチン（共用ヒープに格納されている）を構成するクラスのセットを丸ごと再構築、再ロード、再リンク、再コンパイルする必要がなくなる。ただ、１つ（または複数）のクラスを修正し、専用ヒープに入れるだけでよい。
【００３９】
図６および図７は、上記の本発明のステップおよび方法を示す流れ図である。
【００４０】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００４１】
（１）  コンピュータで実行される複数のアプリケーション・プログラム夫々によって再使用可能な複数のバーチャル・マシンを前記コンピュータのメモリ内に実装する方法であって、前記バーチャル・マシンは、該バーチャル・マシンに関連付けられたアプリケーションをロードおよび実行し、
前記方法は、
前記複数のアプリケーション・プログラムがそれにデータを書き込むところの共用ヒープを前記メモリの第１の領域内に確保するステップと、
前記バーチャル・マシンを作動可能（ready）モードにし且つ前記コンピュータのランタイム・オペレーションを制御するために使用される、アプリケーション・プログラムに特有ではないコードを、前記共用ヒープ内に格納するステップと、
前記複数のアプリケーション・プログラム夫々に関連付けられた複数の専用ヒープを前記メモリの第２の領域内に確保するステップであって、前記専用ヒープが、それぞれのアプリケーション・プログラムが排他的に使用するために予約されるメモリ区域であり、及び前記専用ヒープのそれぞれが、初期状態がアプリケーション・プログラムを初期設定状態にするための事前定義された値（以下、静的イニシアライザ値）である持続部分と初期状態が共通値であり且つアプリケーション・プログラムに特有のコードをそれに格納するリセット可能部分とを含む、前記確保するステップと、
前記各専用ヒープがそれに関連付けられているところのそれぞれの各アプリケーション・プログラムのためのアプリケーション・プログラムに特有のデータを、前記専用ヒープのそれぞれに格納するステップと、
アプリケーション・プログラムの実行が完了したら、関連する専用ヒープに格納された値を初期状態にリセットし、該リセットにおいて前記関連する専用ヒープの前記持続部分に前記静的イニシアライザ値を入力し且つ前記リセット可能部分に共通値を設定することにより、初期状態を再生成し、かつ以降のアプリケーション・プログラムで使用できるように前記共用ヒープの前記特有ではないコードを前記メモリの第１の領域内にそのまま保持するステップと
を含み、それにより、前記共用ヒープに格納された前記アプリケーション・プログラムに特有ではないコードを再リンク、再検証、再コンパイルまたは再ロードを行う必要なく、再使用可能にされ、且つ専用ヒープ上でガーベッジ収集が必要とされないことを可能にする、前記方法。
（２）  アプリケーション・データ間の分離を行えるように、各アプリケーション・プログラムを制御して、アプリケーション・プログラム関連コードを関連付けられた専用ヒープに格納するステップをさらに含む、（１）に記載の方法。
（３）  アプリケーションの実行を成功させるために、前記コンピュータのランタイム・オペレーションの修正に必要とされる、アプリケーション・プログラムに特有ではないコードを前記専用ヒープに格納するステップをさらに含む、（１）に記載の方法。
（４）  ランタイム・オペレーションの修正に必要とされる、前記アプリケーション・プログラムに特有ではないコードを前記リセット可能部分に格納するステップをさらに含む、（３）に記載の方法。
（５）  コンピュータで実行される複数のアプリケーション・プログラム夫々によって再使用可能な複数のバーチャル・マシンを前記コンピュータのメモリ内に実装するシステムであって、中央演算処理装置（ＣＰＵ）、ランダム・アクセス・メモリ（ＲＡＭ）、および前記ＣＰＵの動作を制御するための、前記ＲＡＭに格納されたコードを含み、前記バーチャル・マシンは、該バーチャル・マシンに関連付けられたアプリケーションをロードおよび実行し、
前記システムは、
前記複数のアプリケーション・プログラムがそれにデータを書き込むところの共用ヒープを前記メモリの第１の領域内に確保する手段と、
前記バーチャル・マシンを作動可能（ready）モードにし且つ前記コンピュータのランタイム・オペレーションを制御するために使用される、アプリケーション・プログラムに特有ではないコードを、前記共用ヒープ内に格納する手段と、
前記複数のアプリケーション・プログラム夫々に関連付けられた複数の専用ヒープを前記メモリの第２の領域内に確保する手段であって、前記専用ヒープが、それぞれのアプリケーション・プログラムが排他的に使用するために予約されるメモリ区域であり、前記専用ヒープのそれぞれが、初期状態がアプリケーション・プログラムを初期設定状態にするための事前定義された値（以下、静的イニシアライザ値）である持続部分と初期状態が共通値であり且つアプリケーション・プログラムに特有のコードをそれに格納するリセット可能部分とを含む、前記確保する手段と、
前記各専用ヒープがそれに関連付けられているところのそれぞれの各アプリケーション・プログラムのためのアプリケーション・プログラムに特有のデータを、前記専用ヒープのそれぞれに格納する手段と、
アプリケーション・プログラムの実行が完了したら、関連する専用ヒープに格納された値を初期状態にリセットし、該リセットにおいて前記関連する専用ヒープの前記持続部分に前記静的イニシアライザ値を入力し且つ前記リセット可能部分に共通値を設定することにより、初期状態を再生成し、かつ以降のアプリケーション・プログラムで使用できるように前記共用ヒープの前記特有ではないコードを前記メモリの第１の領域内にそのまま保持する手段と
を含み、それにより、前記共用ヒープに格納された前記アプリケーション・プログラムに特有ではないコードを再リンク、再検証、再コンパイルまたは再ロードを行う必要なく、再使用可能にされ、且つ専用ヒープ上でガーベッジ収集が必要とされないことを可能にする、前記システム。
（６）  アプリケーション・データ間の分離を行えるように、各アプリケーション・プログラムを制御して、アプリケーション・プログラム関連コードを関連付けられた専用ヒープに格納する手段をさらに含む、（５）に記載のシステム。
（７）  アプリケーションの実行を成功させるために、前記コンピュータのランタイム・オペレーションの修正に必要とされる、アプリケーション・プログラムに特有ではないコードを前記専用ヒープに格納する手段をさらに含む、（５）に記載のシステム。
（８）  ランタイム・オペレーションの修正に必要とされる、前記アプリケーション・プログラムに特有ではないコードが前記リセット可能部分に格納される、（７）に記載のシステム。
（９）  コンピュータで実行される複数のアプリケーション・プログラム夫々によって再使用可能な複数のバーチャル・マシンを前記コンピュータのメモリ内に実装するプログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記バーチャル・マシンは、該バーチャル・マシンに関連付けられたアプリケーションをロードおよび実行し、前記コンピュータ読み取り可能な記録媒体は、前記コンピュータに請求項１〜４のいずれか一項に記載の方法の各ステップを実行させるプログラムを記録し、該各ステップの実行により、共用ヒープに格納された前記アプリケーション・プログラムに特有ではないコードを再リンク、再検証、再コンパイルまたは再ロードを行う必要なく、再使用可能にされ、且つ専用ヒープ上でガーベッジ収集が必要とされないことを可能にする、前記コンピュータ読み取り可能な記録媒体。
【図面の簡単な説明】
【図１】従来の技術によるバーチャル・マシンを示す図である。
【図２】本発明を実施するためのコンピュータ・システムを示すブロック図である。
【図３】プライベートおよび共用ヒープを有する、図２のシステムによって構成されるバーチャル・マシンを示す図である。
【図４】クラス初期設定中に生成される値の再使用を説明するための、専用ヒープをより詳細に示す図である。
【図５】ロード・システムまたは修正されたアプリケーション・クラスを説明するための、専用ヒープをより詳細に示す図である。
【図６】本発明の動作を示す流れ図である。
【図７】本発明の動作を示す流れ図である。
【符号の説明】
１０  コンピュータ・システム
１２  ＣＰＵ
１４  バス・システム
１６  ディスク・ドライブ
１８  メモリ
２０  オペレーティング・システム
２２  アプリケーション
２４  アプリケーション
２６  プロセス１
２８  プロセス２
３０  専用ヒープ
３２  リセット可能
３４  持続
３６  専用ヒープ
３８  リセット可能
４０  持続
４２  共用ヒープ
４４  読取り専用
４６  読取り／書込み
４７  メモリ装置
【図１】
0004107630.tif 000002
【図２】
0004107630.tif 000003
【図３】
0004107630.tif 000004
【図４】
0004107630.tif 000005
【図５】
0004107630.tif 000006
【図６】
0004107630.tif 000007
【図７】
0004107630.tif 000008