(57)【要約】マルチタスク仮想マシンのためのヒープ組織が記載される。ヒープ組織は、複数のタスクを並行して実行する実行エンジンと、前記実行エンジンに結合された複数のヒープを有しうる。いくつかの実施形態では、前記複数のヒープはシステム・ヒープおよび該システム・ヒープとは分離されたタスク・ヒープを含みうる。システム・ヒープは、前記複数のタスクによってアクセス可能なシステム・データを記憶しうる。タスク・ヒープは、前記複数のタスクのうちの一つのタスクによってのみアクセス可能なタスク・データを記憶しうる。
2009543236.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクを並行して実行する実行エンジンと；
前記実行エンジンに結合された複数のヒープとを有するマルチタスク仮想マシンであって、前記複数のヒープは：
前記複数のタスクによってアクセス可能なシステム・データを記憶するシステム・ヒープと；
前記複数のタスクのうちの一つのタスクに割り当てられ、割り当てられたタスクによってのみアクセス可能なタスク・データを記憶するタスク・ヒープとを有する、
マルチタスク仮想マシン。
【請求項２】
前記システム・データがグローバルに共有されたライブラリおよびグローバルに共有されたランタイム環境変数のシステム・メタデータを含む、請求項１記載のマルチタスク仮想マシン。
【請求項３】
前記システム・データが、当該マルチタスク仮想マシンの寿命と等しい寿命をもつプログラム・オブジェクトを含む、請求項１記載のマルチタスク仮想マシン。
【請求項４】
前記タスク・データが、割り当てられたタスクの寿命に等しい寿命をもつプログラム・オブジェクトを含む、請求項１記載のマルチタスク仮想マシン。
【請求項５】
前記複数のヒープがさらに：
アプリケーションに割り当てられ、該アプリケーションのアプリケーション・データを記憶するアプリケーション・ヒープを有しており、前記アプリケーション・データは前記複数のタスクのうち前記アプリケーションに関連付けられた少なくとも一つのタスクによってのみアクセス可能である、
請求項１記載のマルチタスク仮想マシン。
【請求項６】
前記アプリケーション・データが、アプリケーション・クラス・ファイル、アプリケーション・ライブラリおよびアプリケーション・ランタイム環境変数のアプリケーション・メタデータを含む、請求項５記載のマルチタスク仮想マシン。
【請求項７】
前記アプリケーション・データが、前記アプリケーションの寿命に等しい寿命をもつプログラム・オブジェクトを有する、請求項５記載のマルチタスク仮想マシン。
【請求項８】
割り当てられたタスクが終了される場合に前記タスク・ヒープを再利用するためのヒープ・マネージャをさらに有する、請求項１記載のマルチタスク仮想マシン。
【請求項９】
前記アプリケーションに関連付けられた割り当てられた前記少なくとも一つのタスクが終了される場合に前記アプリケーション・ヒープを再利用するためのヒープ・マネージャをさらに有する、請求項５記載のマルチタスク仮想マシン。
【請求項１０】
複数のタスクを並行して実行する実行エンジンと；
前記実行エンジンに結合された複数のヒープとを有するマルチタスク仮想マシンであって、前記複数のヒープは：
前記複数のタスクのうちの一つのタスクに割り当てられ、割り当てられたタスクによってのみアクセス可能なタスク・データを記憶するタスク・ヒープと；
アプリケーションに割り当てられ、前記複数のタスクのうち少なくとも一つのタスクによってのみアクセス可能なアプリケーション・データを記憶するアプリケーション・ヒープとを有しており、前記少なくとも一つのタスクは、前記アプリケーションに関連付けられており、前記割り当てられたタスクを含む、
マルチタスク仮想マシン。
【請求項１１】
前記アプリケーション・データが、グローバルに共有されたライブラリおよびグローバルに共有されたランタイム環境変数のシステム・メタデータならびにアプリケーション・クラス・ファイル、アプリケーション・ライブラリおよびアプリケーション・ランタイム環境変数のアプリケーション・メタデータを含む、請求項１０記載のマルチタスク仮想マシン。
【請求項１２】
前記アプリケーション・データが、アプリケーション・クラス・ファイル、アプリケーション・ライブラリおよびアプリケーション・ランタイム環境変数のアプリケーション・メタデータを含み、前記タスク・データがグローバルに共有されたライブラリおよびグローバルに共有されたランタイム環境変数のシステム・メタデータを含む、請求項１０記載のマルチタスク仮想マシン。
【請求項１３】
前記アプリケーション・データが、前記アプリケーションの寿命に等しい寿命をもつプログラム・オブジェクトを含む、請求項１０記載のマルチタスク仮想マシン。
【請求項１４】
前記タスク・データが、前記タスクの寿命に等しい寿命をもつプログラム・オブジェクトを含む、請求項１０記載のマルチタスク仮想マシン。
【請求項１５】
前記タスクが終了される場合に前記タスク・ヒープを再利用するためのヒープ・マネージャをさらに有する、請求項１０記載のマルチタスク仮想マシン。
【請求項１６】
前記アプリケーションに関連付けられた割り当てられた前記少なくとも一つのタスクが終了される場合に前記アプリケーション・ヒープを再利用するためのヒープ・マネージャをさらに有する、請求項１０記載のマルチタスク仮想マシン。
【請求項１７】
マルチタスク仮想マシンの方法であって：
複数のタスクのうちの一つのタスクに割り当てられたタスク・ヒープを設ける段階を含み、ここで、前記タスク・ヒープは割り当てられたタスクによってのみアクセス可能なタスク・データを記憶するものであり、
アプリケーションに割り当てられたアプリケーション・ヒープが存在するかどうかを判別する段階とを含み、ここで、前記アプリケーション・ヒープは、前記複数のタスクのうちの少なくとも一つのタスクによってのみアクセス可能なアプリケーション・データを記憶し、前記少なくとも一つのタスクは前記アプリケーションに関連付けられており、割り当てられたタスクを含む、
方法。
【請求項１８】
前記判別する段階がさらに：
前記割り当てられたタスクに関連付けられた前記アプリケーションを判別する段階と；
前記アプリケーションが、前記複数のタスクのうち前記マルチタスク仮想マシンによって実行されている少なくとも一つのタスクをもつ各アプリケーションを記録するライブ・アプリケーション・テーブル中に存在するかどうかを判別する段階とをさらに含む、
請求項１７記載の方法。
【請求項１９】
前記マルチタスク仮想マシン中に前記アプリケーション・ヒープが存在しない場合、前記アプリケーション・ヒープを設ける段階をさらに有する、請求項１７記載の方法。
【請求項２０】
前記アプリケーション・ヒープの存在をマークする段階をさらに有する、請求項１７記載の方法。
【請求項２１】
前記マークする段階がさらに、前記アプリケーションを、前記複数のタスクのうち前記マルチタスク仮想マシンによって実行されている少なくとも一つのタスクをもつ各アプリケーションを記録するライブ・アプリケーション・テーブル中に追加する段階をさらに有する、請求項２０記載の方法。
【請求項２２】
割り当てられたタスクを前記アプリケーション・ヒープに結び付け、それにより割り当てられたタスクが前記アプリケーション・ヒープに記憶されているアプリケーション・データにアクセスできるようにする段階をさらに有する、請求項１７記載の方法。
【請求項２３】
前記結び付けることがさらに、前記割り当てられたタスクを前記アプリケーションのためのライブ・タスク・テーブル中に追加することを含み、ここで、前記ライブ・タスク・テーブルは、前記アプリケーションに関連付けられ、前記マルチタスク仮想マシンによって実行される各タスクを記録する、請求項２２記載の方法。
【請求項２４】
複数の命令を有する機械可読媒体であって、該複数の命令は、実行されると、マルチタスク仮想マシンをして：
前記マルチタスク仮想マシンから、複数のタスクのうちの一つのタスクに割り当てられたタスク・ヒープを再利用し、ここで、前記タスク・ヒープは割り当てられたタスクによってのみアクセス可能なタスク・データを記憶するものであり；
前記マルチタスク仮想マシンから、あるアプリケーションに割り当てられたアプリケーション・ヒープを再利用するかどうかを決定することを実行させ、ここで、前記アプリケーション・ヒープは、前記複数のタスクのうち少なくとも一つのタスクによってのみアクセス可能なアプリケーション・データを記憶し、前記少なくとも一つのタスクは前記アプリケーションに関連付けられており、前記の割り当てられたタスクを含む、
機械可読媒体。
【請求項２５】
マルチタスク仮想マシンをして前記アプリケーション・ヒープを再利用するかどうかを決定することを実行させる前記複数の命令がさらに、前記マルチタスク仮想マシンをして：
割り当てられたタスクが、前記アプリケーションに関連付けられており前記マルチタスク仮想マシンによって実行される各タスクを記録するライブ・タスク・リスト中にリストされている最後のタスクかどうかを判別し；
前記割り当てられたタスクが前記ライブ・タスク・リスト中の最後のタスクである場合に前記アプリケーション・ヒープを再利用することを決定することを実行させる、
請求項２４記載の機械可読媒体。
【請求項２６】
前記複数の命令がさらに、前記マルチタスク仮想マシンをして：
前記アプリケーション・ヒープを再利用しないと決定するのに応答して、割り当てられたタスクを前記アプリケーション・ヒープから結び付き解除することを実行させる、請求項２４記載の方法。
【請求項２７】
前記マルチタスク仮想マシンをして前記タスクを結び付き解除することを実行させる前記複数の命令がさらに、前記マルチタスク仮想マシンをして：
割り当てられたタスクを、前記アプリケーションに関連付けられており前記マルチタスク仮想マシンによって実行される各タスクを記録するライブ・タスク・リストから削除することを実行させる、請求項２６記載の方法。
【請求項２８】
前記複数の命令がさらに、前記マルチタスク仮想マシンをして：
前記マルチタスク仮想マシンから前記アプリケーション・ヒープを再利用し；
前記アプリケーション・ヒープの再利用をマークすることを実行させる、
請求項２４記載の方法。
【請求項２９】
前記マルチタスク仮想マシンをして再利用をマークすることを実行させる前記複数の命令がさらに、前記マルチタスク仮想マシンをして：
前記アプリケーションを、前記複数のタスクのうちの前記マルチタスク仮想マシンによって実行されている少なくとも一つのタスクをもつ各アプリケーションを記録するライブ・アプリケーション・テーブルから削除することを実行させる、請求項２８記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は仮想マシンのヒープに関する。
【背景技術】
【０００２】
ヒープ組織（heap  organization）は、マルチタスク仮想マシンによって並行して実行される複数のタスクのためのデータを記憶するために使われうるメモリ領域である。データはタスクすべてのためのプログラム・オブジェクトおよびメタデータを含みうる。
【０００３】
通常、ヒープ組織には共有ヒープ（shared  heap）と分離ヒープ（separated  heap）の二つのクラスがある。共有ヒープ・クラスについては、マルチタスク仮想マシンはタスクすべてによってアクセス可能なデータを記憶するために単一のヒープを使用しうる。分離ヒープ・クラスについては、マルチタスク仮想マシンは論理的に分離されたいくつかのヒープを使用しうる。分離された各ヒープは単一のタスクによってのみアクセス可能なデータを記憶するために割り当てられうる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本願は従来技術の欠点を克服しようとするものである。
【課題を解決するための手段】
【０００５】
本願は請求項記載の発明によって従来技術の欠点を克服する。
【０００６】
本稿で記載される発明は限定ではなく例として付属の図面で例示される。例示の簡明のため、図面に例示される要素は必ずしも縮尺通りに描かれてはいない。たとえば、いくつかの要素の大きさは明快のため他の要素に対して誇張されていることがありうる。さらに、適切と思われる場合には、対応するまたは類似する要素を示すために複数の図面の間で参照符号が繰り返し用いられる。
【図面の簡単な説明】
【０００７】
【図１】マルチタスク仮想マシンを含むコンピューティング・プラットフォームのある実施形態を示す図である。
【図２】マルチタスク仮想マシンのある実施形態を示す図である。
【図３】図２のマルチタスク仮想マシンにおけるヒープ組織のある実施形態を示す図である。
【図４】図３のヒープ組織にタスク・ヒープを追加する方法のある実施形態を示す図である。
【図５】図３のヒープ組織からタスク・ヒープを再利用する（reclaim）方法のある実施形態を示す図である。
【図６】図２のマルチタスク仮想マシンにおけるヒープ組織のもう一つの実施形態を示す図である。
【図７】図２のマルチタスク仮想マシンにおけるヒープ組織のさらにもう一つの実施形態を示す図である。
【発明を実施するための形態】
【０００８】
以下の記述はマルチタスク仮想マシンのためのヒープ組織のための技法を記載する。以下の記述では、本発明のより十全な理解を与えるために、論理的な実装、擬似コード、オペランド指定方法、資源分配／共有／重複実装、システム構成要素の型および相互関係ならびに論理的な分配／統合の選択といった数多の個別的な詳細が述べられるが、本発明はそのような個別的詳細なしでも実施されうる。その一方、本発明を埋没させないため、制御構造、ゲート・レベルの回路および完全なソフトウェア命令シーケンスは詳細には示していない。含まれている記述で、当業者は過度な試行をすることなく適切な機能性を実装できるであろう。
【０００９】
明細書における「一つの実施形態」「ある実施形態」「例示的な実施形態」への言及は、記述される実施形態が特定の機能、構造または特性を含みうることを示すが、必ずしもすべての実施形態がその特定の特徴、構造または特性を含むとは限らない。さらに、そのような表現は必ずしも同じ実施形態を指すのではない。さらに、特定の機能、特徴または特性がある実施形態との関連で記載されるとき、明示的に記載されているか否かによらず、他の実施形態との関連でそのような特徴、構造または特性を実施することは当業者の知識の範囲内であることを述べておく。
【００１０】
本発明の実施形態はハードウェア、ファームウェア、ソフトウェアまたはそれらの任意の組み合わせにおいて実装されうる。本発明の実施形態はまた、一つまたは複数のプロセッサによって読まれ、実行されうる機械可読媒体上に記憶されている命令として実装されてもよい。機械可読媒体は、機械（たとえばコンピューティング装置）によって読み取り可能な形で情報を記憶または伝達するいかなる機構をも含みうる。たとえば、機械可読媒体は読み出し専用メモリ（ROM）；ランダム・アクセス・メモリ（RAM）；磁気ディスク記憶媒体；光記憶媒体；フラッシュ・メモリ・デバイス；電気的、光学的、音響的または他の形の伝搬信号（たとえば搬送波、赤外線信号、デジタル信号など）およびその他を含みうる。
【００１１】
図１は、マルチタスク仮想マシンを有するコンピューティング・プラットフォーム１０のある実施形態を示している。コンピューティング・プラットフォーム１０についての例は、パーソナル・コンピュータ、ワークステーション、サーバー・コンピュータ、携帯情報端末（PDA）、携帯電話およびゲーム・コンソールを含みうる。
【００１２】
コンピューティング・プラットフォーム１０は、一つまたは複数のプロセッサ１０１、メモリ１０２、チップセット１０３、I/O装置１０４、ファームウェア１０５および可能性としては他の構成要素を有しうる。前記一つまたは複数のプロセッサ１０１はさまざまな構成要素（たとえばチップセット１０３）と、プロセッサ・バスのような一つまたは複数のバスを介して通信上結合されていてもよい。プロセッサ１０１は、たとえば、米国カリフォルニア州サンタクララのインテル・コーポーレーションから入手可能なインテル（登録商標）ジーオン（登録商標）、インテル（登録商標）ペンティアム（登録商標）、インテル（登録商標）アイテニアム（登録商標）・アーキテクチャを含む好適なアーキテクチャのもとでコードを実行しうる、一つまたは複数の処理コアをもつ集積回路（IC）として実装されてもよい。
【００１３】
メモリ１０２は、複数のソフトウェア・アプリケーション１０２１、マルチタスク仮想マシン１０２２およびオペレーション・システム１０２３の形の命令およびデータを記憶しうる。メモリ１０２の例は、同期的動的ランダム・アクセス・メモリ（SDRAM:  synchronous  dynamic  random  access  memory）、RAMBUS動的ランダム・アクセス・メモリ（RDRAM:  RAMBUS  dynamic  random  access  memory）、倍速データレート（DDR:  double  data  rate）・メモリ・デバイス、静的ランダム・アクセス・メモリ（SRAM:  static  random  access  memory）およびフラッシュ・メモリ・デバイスといった半導体デバイスの一つまたは任意の組み合わせを含みうる。
【００１４】
複数のソフトウェア・アプリケーション１０２１は、I/O装置１０６のようないかなる好適な装置から入力されてもよい。他の実施形態では、ソフトウェア・アプリケーションはコンピューティング・プラットフォーム１０内の他の構成要素によって生成されてもよい。ソフトウェア・アプリケーション１０２１の例はジャバ・アプリケーション（たとえばJAVA（登録商標）.クラス・ファイル）、.NETアプリケーション（たとえば.NETコード）または可能性としては他のプログラミング言語のアプリケーションを含みうる。
【００１５】
マルチタスク仮想マシン１０２２は、複数のソフトウェア・アプリケーション１０２１を並行して実行するようオペレーティング・システム１０２３の上で走りうる。各ソフトウェア・アプリケーション１０２１は一つまたは複数のタスクを含みうる。各タスクは単一のソフトウェア・アプリケーション１０２１のインスタンス化（instantiation）を表しうる。ジャバ仮想マシンでは、二つの「タスク」が同じクラス・パス（class  path）（すなわち、クラス・ファイルの同じ順序付けされたテーブル）を共有する場合、二つの「タスク」は一つのアプリケーションに属しうる。
【００１６】
マルチタスク仮想マシン１０２２についての例は、米国カリフォルニア州サンタクララのサン・マイクロシステムズ社から入手可能なマルチタスク・ジャバ仮想マシンおよび米国ワシントン州レドモンドのマイクロソフト（登録商標）コーポレーションから入手可能なマルチタスク.NET仮想マシンを含みうる。オペレーション・システム１０２３は、これに限られないが、リナックス（登録商標）、マイクロソフト（登録商標）ウィンドウズ（登録商標）の種々のバージョンおよびVxWorks（登録商標）のようなリアルタイム・オペレーティング・システムなどを含みうる。
【００１７】
ある実施形態では、チップセット１０３は、一つまたは複数のプロセッサ１０１、メモリ１０２ならびにI/O装置１０４およびファームウェア１０５のような他の構成要素の間で一つまたは複数の通信経路を提供しうる。チップセット１０３はメモリ・コントローラ・ハブ１０３１、入出力コントローラ・ハブ１０３２およびファームウェア・ハブ１０３３を含みうる。
【００１８】
ある実施形態では、メモリ・コントローラ・ハブ１０３１は、プロセッサ１０１と接続しうるプロセッサ・バスへの、およびメモリ１０２のような好適な装置への通信リンクを提供しうる。メモリ・コントローラ・ハブ１０２はI/Oコントローラ・ハブ１０３２と結合して、コンピューティング・プラットフォームのためのI/O装置１０４へのインターフェースを提供しうる。I/O装置１０４の例はキーボード、マウス、ネットワーク・インターフェース、記憶装置、カメラ、ブルートゥース装置およびアンテナを含みうる。
【００１９】
ある実施形態では、メモリ・コントローラ・ハブ１０３１は、入出力コントローラ・ハブ１０３２を介してファームウェア・ハブ１０３３と通信上結合しうる。ファームウェア・ハブ１０３３は、プロセッサ１０１、チップセット１０３およびコンピューティング・プラットフォームの他の構成要素を初期化するためにシステム・スタートアップの間にコンピューティング・プラットフォームが実行するBIOSルーチンおよび／またはファームウェア１０５をコンピュータ・プラットフォームのオペレーティング・システムとインターフェースさせるためのEFIルーチンを記憶しうるファームウェア１０５と結合し、オペレーティング・システムをブートするための標準的な環境を提供しうる。
【００２０】
コンピューティング・プラットフォーム１０の構造について、他の実施形態は他の技術を実装してもよい。たとえば、マルチタスク仮想マシン１０２２は一つのソフトウェア・アプリケーション１０２１を仮想マシンの一つのインスタンス化において実行してもよい。換言すれば、マルチタスク仮想マシン１０２２は一つのアプリケーションに属する複数のタスクを、仮想マシンの一つのインスタンス化において並行して実行してもよく、前記複数のタスクはそれぞれ前記アプリケーションのインスタンス化である。
【００２１】
図２は、図１のマルチタスク仮想マシン１０２２のある実施形態を示している。この実施形態によれば、マルチタスク仮想マシン１０２２はローダ２０１、実行エンジン２０２、ヒープ組織２０３、ヒープ・マネージャ２０４および可能性としては他の構成要素を有しうる。
【００２２】
ローダ２０１は、さまざまな資源からファイル（クラス、インターフェース、ネイティブ・メソッドを含む）をロードしうる。たとえば、ローダ２０１は、マルチタスク仮想マシン・ベンダー、プログラマおよび任意のサードパーティーからの複数のソフトウェア・アプリケーション１０２１、ライブラリ、ランタイム環境変数および可能性としては他のファイルをロードしうる。ライブラリは、ブートストラップ・クラス・ライブラリおよび非ブートストラップ・クラス・ライブラリといった、ユーザー・プログラムに基本的な機能を提供するためのさまざまな関数またはルーチンを含みうる。ランタイム環境変数は、マルチタスク仮想マシンがアプリケーション資源を発見するのを助けるための構成設定（configurations）を含みうる。ローダの例は、クラス・ローダ、ネイティブ・メソッド・インターフェースおよび可能性としては他のロード手段を含みうる。
【００２３】
実行エンジン２０２は、ソフトウェア・アプリケーション１０２１に関連する複数のタスクを並行して実行しうる。より特定的には、実行エンジン２０２は、並行して、前記ソフトウェア・アプリケーションを変換し（translate）、変換されたコードを実行しうる。
【００２４】
ヒープ組織２０３は、メタデータおよびプログラム・オブジェクトといったマルチタスク仮想マシン１０２２についてのデータを記憶しうる。メタデータは、ローダ２０１または他のコンポーネントからロードされたファイル（たとえばソフトウェア・アプリケーション、ライブラリ、ランタイム環境変数など）についての情報、実行エンジン２０２からの前記ファイルの変換されたコードおよび可能性としては他のデータを含みうる。メタデータの例は、ジャバ・クラス、メソッド、フィールド、バイトコード、JITされた（Just-in-time［ジャスト・イン・タイム］）コードなどの仮想マシン内部表現を含みうる。プログラム・オブジェクトは、ロードされたファイルを実行するときに生成されるオブジェクトを含みうる。プログラム・オブジェクトの例は、ユーザー定義されたクラス・ローダおよびクラス・ファイルのインスタンスを含みうる。
【００２５】
ヒープ・マネージャ２０４は、たとえばローダ２０１からの助けで、ヒープ組織２０３を管理しうる。
【００２６】
図３は、図２のヒープ組織２０３のある実施形態を示している。
【００２７】
ヒープ組織２０３は複数の論理的に別個のヒープを有しうる。ここで、各ヒープは複数の論理的に連続しているメモリ・ブロックを含みうる。二つのヒープの間でいかなるブロックも重複してはならない。
【００２８】
図３の実施形態では、ヒープ組織２０３はシステム・ヒープ３０１、複数のアプリケーション・ヒープ３０２1-Nおよび複数のタスク・ヒープ３０３1-Nを有しうる。
【００２９】
システム・ヒープは、マルチタスク仮想マシン１０２２によって実行されるタスクのすべてについて共有可能なシステム・データを記憶しうる。システム・ヒープに記憶されたデータの寿命は、マルチタスク仮想マシン１０２２の一つのインスタンス化に等しくてもよい。システム・データの例は、グローバルに共有されるライブラリ（たとえばブートストラップ・クラス・ライブラリ、グローバルに共有されるランタイム環境、プラットフォーム定義情報）のメタデータ、マルチタスク仮想マシンのインスタンス化に等しい寿命をもつプログラム・オブジェクト（たとえばブートストラップ・クラス・プログラムを実行するときに生成されるオブジェクト）および可能性としてはシステムのための他のデータを含みうる。図３の実施形態では、システム・ヒープ３０１は単一物（singleton）であり、再利用（reclamation）またはさらには圧縮（compaction）にかけられなくてもよい。
【００３０】
アプリケーション・ヒープ３０２1-Nのそれぞれは、複数のソフトウェア・アプリケーション１０２１の各「ライブな（live）」アプリケーションに割り当てられうる。ここで、「ライブな」アプリケーションはマルチタスク仮想マシン１０２２によって実行される少なくとも一つのタスクを有しうる。タスクはそのアプリケーションのインスタンス化でありうる。アプリケーション・ヒープ３０２1-Nのそれぞれは、そのアプリケーションに属するタスクすべてによってアクセス可能であり、そのアプリケーションと同じだけ長く持続するアプリケーション・データを記憶しうる。ジャバ仮想マシン仕様については、二つの「タスク」が一つのアプリケーションに属する場合、その二つの「タスク」は同じクラス・パスを共有しうる。すなわち、それらのタスクはクラス・ファイルの同じ順序付けされたテーブルを共有しうる。この観点で、アプリケーションはそのタスクのための実行可能バイナリーデータ（動的にロードされるバイナリーデータを含む）およびランタイム環境を表しうる。
【００３１】
アプリケーション・ヒープ３０２1-Nのそれぞれに記憶されるアプリケーション・データは、そのアプリケーションについてのメタデータおよびそのアプリケーションと同じ寿命をもちうるプログラム・オブジェクトを含みうる。アプリケーションについてのメタデータの例は、アプリケーション・クラス・ファイルについての情報、アプリケーション・クラス・ファイルの変換済みコード、アプリケーション・クラス・ファイルを変換および実行するためのアプリケーション・ライブラリおよびランタイム環境変数ならびに可能性としてはアプリケーションのための他のデータを含みうる。プログラム・オブジェクトの例は、アプリケーション・クラス・ファイルを初期化するときに生成されるオブジェクトを含みうる。図３の実施形態では、アプリケーション・ヒープは、アプリケーションの最後のタスクが終了されれば再利用されうる。
【００３２】
タスク・ヒープ３０３1-Nのそれぞれは、マルチタスク仮想マシン１０２２によって実行される各「ライブな」タスクに割り当てられうる。タスク・ヒープ３０３1-Nのそれぞれは、関連するタスクによってのみアクセス可能なタスク・データを記憶しうる。これは、そのタスク・データへの他のタスクによるアクセスは禁止されうるということである。タスク・データは関連するタスクと同じ寿命をもちうる。タスク・データの例は、タスクを実行するときに生成されるプログラム・オブジェクトおよびタスクを実行するためのランタイム環境変数を含みうる。図３の実施形態では、タスク・ヒープは、関連するタスクが終了されれば再利用されうる。
【００３３】
図３に示されるように、タスクは、そのタスク・ヒープに記憶されているタスク・データおよびシステム・ヒープに記憶されているシステム・データにアクセスしうる。タスクはさらに、そのタスクが属しうるアプリケーションのためのアプリケーション・ヒープに記憶されているアプリケーション・データにもアクセスしうる。一つのアプリケーションがマルチタスク仮想マシン１０２２によって実行されている二つ以上のタスクをもちうるので、一つのアプリケーション・ヒープに、二つ以上のタスクが結び付けられていてもよい。たとえば、アプリケーション・ヒープ３０２1には二つのタスク・ヒープ３０３1〜３０３2が結び付けられていてもよい。しかしながら、タスクは、そのタスクが属さないかもしれない他のアプリケーションのための他のアプリケーション・ヒープに記憶されている他のアプリケーション・データにはアクセスできない。
【００３４】
図３のヒープ組織２０３の構造について、他の実施形態は他の技術を実装してもよい。たとえば、マルチタスク仮想マシン１０２２が一つのインスタンスの間に一つのアプリケーション１０２３を実行する場合、ヒープ組織２０３は、システム・データおよびアプリケーション・データを記憶するためのシステム・ヒープと、タスク・データを記憶するための複数のタスク・ヒープとを有していてもよい。
【００３５】
図４は、図３に示されたヒープ組織２０３にタスク・ヒープを追加する方法の実施形態を示している。
【００３６】
ブロック４０１において、ヒープ・マネージャ２０４または他の好適な装置は、マルチタスク仮想マシン１０２２によって実行されうるあるタスクのためのタスク・ヒープを生成することを決定しうる。ブロック４０２では、ヒープ・マネージャ２０４または他の好適な装置は、そのタスクが属するアプリケーションを決定しうる。上述したように、アプリケーションはそのタスクについての実行可能なバイナリーデータ（動的にロードされるバイナリーデータを含む）およびランタイム環境を表していてもよく、したがって、ヒープ・マネージャ２０４または他の好適な装置は、そのタスクの実行可能なバイナリーデータおよびランタイム環境を調べることによって前記アプリケーションを決定しうる。
【００３７】
ブロック４０３において、ヒープ・マネージャ２０４または他の好適な装置は、そのアプリケーションにアプリケーション・ヒープが割り当てられているかどうかを判別しうる。ブロック４０３のある実施形態では、ヒープ・マネージャ２０４または他の好適な装置は、「ライブな」アプリケーションのすべてを記録する「ライブ」アプリケーション・テーブルを維持していてもよい。各「ライブ」アプリケーションは、マルチタスク仮想マシン１０２２によって実行されうる少なくとも一つのタスクをもちえ、したがって、アプリケーション・ヒープを割り当てられうる。このようにして、ヒープ・マネージャ２０４または他の好適な装置は、そのアプリケーションが「ライブ」アプリケーション・テーブルにリストされていれば、アプリケーション・ヒープがそのアプリケーションに割り当てられていると判別し、リストされていなければ、アプリケーション・ヒープがそのアプリケーションに割り当てられていないと判別しうる。
【００３８】
そのアプリケーションがアプリケーション・ヒープを割り当てられていない場合、ヒープ・マネージャ２０４または他の好適な装置は、ブロック４０４で、そのアプリケーションのためのアプリケーション・ヒープを生成しうる。ブロック４０５では、ヒープ・マネージャ２０３または他の好適な装置は、アプリケーション・データをアプリケーション・ヒープにロードしうる。アプリケーション・データは、そのアプリケーションのためのメタデータおよびそのアプリケーションに等しい寿命をもつプログラム・オブジェクトを有しうる。
【００３９】
ブロック４０６では、ヒープ・マネージャ２０３または他の好適な装置は、生成されたアプリケーション・ヒープの存在をマークしうる。ブロック４０８のある実施形態では、ヒープ・マネージャ２０３または他の好適な装置は、アプリケーション・ヒープに対応するアプリケーションを、「ライブ」アプリケーション・テーブルに加えてもよい。
【００４０】
ブロック４０７では、ヒープ・マネージャ２０３または他の好適な装置は、そのタスクをブロック４０４で生成されたアプリケーション・ヒープに結び付け（bind）、それによりタスクがアプリケーション・ヒープ中のアプリケーション・データにアクセスできるようにする。ブロック４０７のある実施形態では、ヒープ・マネージャ２０３または他の好適な装置は、そのタスクを、そのアプリケーションについて維持されている「ライブ」タスク・テーブルに追加してもよい。前記「ライブ」タスク・テーブルは、そのアプリケーションに属し、マルチタスク仮想マシン１０２２によって実行される各タスクを記録するものである。
【００４１】
次いで、ブロック４０８において、ヒープ・マネージャ２０３または他の好適な装置は、マルチタスク仮想マシン１０２２によって実行されうるタスクのためのタスク・ヒープを生成しうる。タスク・ヒープの生成は、タスク・ヒープ・アドレス、アプリケーション・ヒープ・アドレスおよびシステム・ヒープ・アドレスを、そのタスクの諸スタックに追加し、それによりタスクがそれらのヒープ中のデータにアクセスしうるようにすることによって行われうる。最後に、ブロック４０９において、マルチタスク仮想マシン１０２２の実行エンジン２０２は、前記タスクをそのタスク・ヒープ上で走らせうる。
【００４２】
ブロック４０３に戻って参照すると、そのタスクに対応するアプリケーションにアプリケーション・ヒープが割り当てられている場合、ヒープ・マネージャ２０３または他の好適な装置は、ブロック４０７で、そのタスクをそのアプリケーション・ヒープに結び付け、ブロック４０８でそのタスクのためのタスク・ヒープを生成し、それによりブロック４０９で実行エンジン２０２が前記タスクをそのタスク・ヒープ上で走らせうるようにする。
【００４３】
図５は、ヒープ組織２０３からタスク・ヒープを再利用する方法のある実施形態を示している。
【００４４】
ブロック５０１において、たとえば実行エンジン２０２がタスクの実行を完了するとき、タスクは終了され（terminated）うる。ブロック５０２において、ヒープ・マネージャ２０３または他の好適な装置は、そのタスクに割り当てられていたタスク・ヒープを解放しうる。ブロック５０２のある実施形態では、ヒープ・マネージャ２０３は、前記タスク・ヒープのメモリ領域をオペレーティング・システムにそっくり返しうる。次いで、ブロック５０３において、ヒープ・マネージャ２０３または他の好適な装置は、そのタスクが、そのタスクが属するアプリケーションの最後のタスクであるかどうかを判別しうる。ヒープ・マネージャ２０３または他の好適な装置は、ブロック２０３をさまざまな方法で、たとえばそのアプリケーションについて維持されている上記の「ライブ」タスク・テーブルを検査してそのタスクが「ライブ」タスク・テーブルの最後のものかどうかを判別することによって、実装しうる。
【００４５】
そのタスクがそのアプリケーションの最後のタスクでない場合、ヒープ・マネージャ２０３または他の好適な装置は、ブロック５０６で、そのタスクを、前記アプリケーションに割り当てられたアプリケーション・ヒープとの結び付きを解除する（unbind）。結び付き解除は、そのアプリケーションについて維持されている「ライブ」タスク・テーブルからそのタスクを削除することによって実装されてもよい。しかしながら、そのタスクがそのアプリケーションの最後のタスクである場合には、ヒープ・マネージャ２０３または他の好適な装置は、ブロック５０４で、そのアプリケーションのためのアプリケーション・ヒープを再利用しうる。ヒープ・マネージャ２０３または他の好適な装置は、ブロック５０４をさまざまな仕方で、たとえばそのアプリケーション・ヒープのメモリ領域をそっくりオペレーション・システムに返すことによって、実装しうる。次いでブロック５０５で、ヒープ・マネージャ２０３または他の好適な装置は、アプリケーション・ヒープの再利用〔再生〕をマークしうる。これはたとえば、上記の「ライブ」アプリケーション・テーブルから対応するアプリケーションを削除することによる。
【００４６】
図６は、図２のヒープ組織２０３のもう一つの実施形態を示している。
【００４７】
ヒープ組織２０３は、複数のアプリケーション・ヒープ６０１1-Nおよび複数のタスク・ヒープ６０２1-Nを含みうる。アプリケーション・ヒープ６０１1-Nのそれぞれは、アプリケーション１０２１の一つに割り当てられうる。各アプリケーション・ヒープは、システム・データと、そのアプリケーションに属するタスク（単数または複数）によってのみアクセス可能であり、そのアプリケーションと同じだけ長く持続するアプリケーション・データとを含みうる。システム・データは、グローバルに共有されたライブラリおよびグローバルに共有されたランタイム環境のメタデータおよびプログラム・オブジェクトを含みうる。アプリケーション・データは、アプリケーション・クラス、アプリケーション・ライブラリおよびアプリケーション・ランタイム環境のメタデータおよびプログラム・オブジェクトを含みうる。
【００４８】
タスク・ヒープ６０２1-Nのそれぞれは、マルチタスク仮想マシンによって実行される各タスクに割り当てられうる。各タスク・ヒープは、関連するタスクによってのみアクセス可能であり、関連するタスクと同じだけ長く持続するタスク・データを記憶しうる。タスク・データは、そのタスクについてのプログラム・オブジェクトおよびランタイム環境を含みうる。タスク・ヒープ６０２1-Nのそれぞれは、アプリケーション・ヒープ６０１1-Nの一つに結び付けられうる。それにより、タスクは、タスク・ヒープならびにアプリケーション・タスク内のデータにアクセスできる。
【００４９】
図６のヒープ組織の構造について、他の実施形態は他の技術を実装してもよい。たとえば、システム・データは、各タスク・ヒープ６０２1-Nにはコピーされるが各アプリケーション・ヒープ６０２1-Nにはコピーされないのでもよい。
【００５０】
図７は、図２のヒープ組織２０３のさらにもう一つの実施形態を示している。
【００５１】
図のように、ヒープ組織２０３は、システム・ヒープ７０１および複数のタスク・ヒープ７０２1-Nを含みうる。システム・ヒープ７０１は、マルチタスク仮想マシン１０２２によって実行されるタスクすべてによってアクセス可能であり、マルチタスク仮想マシン１０２２のインスタンス化と同じだけ長く持続するシステム・データを記憶しうる。システム・データは、グローバルに共有されたライブラリおよびグローバルに共有されたランタイム環境変数についてのメタデータおよびマルチタスク仮想マシンのインスタンス化と同じだけ長く持続しうるプログラム・オブジェクトならびに可能性としては他のシステム・データを含みうる。
【００５２】
タスク・ヒープ７０２1-Nのそれぞれは、マルチタスク仮想マシン１０２２によって実行される各タスクに割り当てられうる。各タスク・ヒープは、関連するタスクによってのみアクセス可能なアプリケーション・データおよびタスク・データを記憶しうる。アプリケーション・データは、そのアプリケーション・クラス、アプリケーション・ライブラリおよびランタイム環境についてのメタデータおよびプログラム・オブジェクトならびに可能性としてはそのアプリケーションのための他のデータを含みうる。タスク・データは、そのタスクについてのプログラム・オブジェクトおよびランタイム環境を含みうる。
【００５３】
本発明はある種の実施形態との関連で記載されてきたが、当業者はすぐ理解するように、本発明の精神および範囲から外れることなく修正および変形が用いられてもよいことは理解されるものとする。そのような修正および変形は、本発明および付属の請求項の範囲内であると考えられる。
【図１】
2009543236.tif 000003
【図２】
2009543236.tif 000004
【図３】
2009543236.tif 000005
【図４】
2009543236.tif 000006
【図５】
2009543236.tif 000007
【図６】
2009543236.tif 000008
【図７】
2009543236.tif 000009
【国際調査報告】
2009543236.tif 000010
2009543236.tif 000011