(57)【特許請求の範囲】
【請求項１】
アプリケーションをクローニングするための環境において作成されるランタイムシステムプロセスからのインクリメンタルプロファイリングデータをダイナミックかつ持続的にトラッキングするシステムであって、該ランタイムシステムプロセスは、アプリケーションを実行するためのバーチャルマシンプロセスであり、該環境は、アプリケーションを実行するためのオペレーティング環境であり、
該システムは、
アプリケーションをクローニングするためのランタイム環境であって、該ランタイム環境は、実行しているマスタランタイムシステムプロセスの初期メモリ空間を、第１の子ランタイムシステムプロセスのクローニングされたメモリ空間としてクローニングし、該第１の子ランタイムシステムプロセスは、該第１の子ランタイムシステムプロセスを実行させるリクエストに応答する、ランタイム環境と、
該実行しているマスタランタイムシステムプロセスの該メモリ空間を格納する格納デバイスと、
プロファイリングデータをダイナミックに収集することによって、該第１の子ランタイムシステムプロセスの実行をプロファイリングするコレクタであって、該プロファイリングデータは、複数のコードセグメントのうち、子ランタイムプロセスによって特定のコードセグメントが呼び出されたというイベントを含み、当該イベントは、該コレクタにより収集され、格納される、コレクタと
を備え、
該プロファイリングデータは、第２のクローニングされた子ランタイムシステムプロセスの起動をリクエストし、該第２のクローニングされた子ランタイムシステムプロセスの初期化および実行時間を低減するために用いられ、
該第２のクローニングされた子ランタイムシステムプロセスは、該マスタランタイムシステムプロセスの該初期メモリ空間のクローニングされたメモリ空間を含み、該プロファイリングデータは、初期化されて該マスタランタイムシステムプロセスの該初期メモリ空間に格納される前記コードセグメントを特定する情報を含み、
該第２のクローニングされた子ランタイムシステムプロセスは、該第１の子ランタイムシステムプロセスと異なるアプリケーションに関連付け可能であり、
該システムは、
該プロファイリングデータを統合するためのマスタウォームアッププログラムと、
該マスタウォームアッププログラムを格納するファイルマネージャと
をさらに備え、
該ランタイム環境は、該マスタウォームアッププログラムを取り出し、該マスタウォームアッププログラムを実行することにより、該マスタランタイムシステムプロセスの該初期メモリ空間をウォームアップし、該マスタランタイムシステムプロセスの該ウォームアップされた初期メモリ空間を該マスタランタイムシステムプロセスのメモリ空間として該格納デバイスに格納する、システム。
【請求項２】
前記第１の子ランタイムシステムプロセスのメモリ空間に規定されるメモリバッファであって、前記プロファイリングデータを一時的に格納するメモリバッファをさらに備える、請求項１に記載のシステム。
【請求項３】
前記ランタイム環境は、前記ランタイムシステムプロセスの前記メモリバッファから、実行しているアプリケーションマネージャプロセスへと、前記プロファイリングデータを周期的に通信する、請求項２に記載のシステム。
【請求項４】
前記アプリケーションマネージャプロセスを前記第１の子ランタイムシステムプロセスとつなぐプロファイリング実行スレッドと、
該アプリケーションマネージャプロセスからのデータリクエストに応答して、該プロファイリング実行スレッドを介して前記プロファイリングデータを提供する応答と
をさらに備える、請求項３に記載のシステム。
【請求項５】
前記プロファイリング実行スレッドは、プロセス間通信メカニズムを含む、請求項４に記載のシステム。
【請求項６】
前記プロファイリングデータは、前記アプリケーションマネージャプロセスへの通信が完了するときにリセットされる、請求項３に記載のシステム。
【請求項７】
前記格納されたプロファイリングデータを含むファイルをさらに備え、該ファイルは、該プロファイリングデータを、デバイスがシャットダウンされるときに自動的に格納するか、該デバイスの実行の開始からシャットダウンまでの期間中に周期的に格納する、請求項１に記載のシステム。
【請求項８】
前記ランタイム環境は、前記ファイルから、実行しているアプリケーションマネージャプロセスへと、前記プロファイリングデータを通信する、請求項７に記載のシステム。
【請求項９】
オブジェクト指向プログラムコードとして提供されたソース定義として定義される前記マスタウォームアッププログラムをさらに備える、請求項１に記載のシステム。
【請求項１０】
実行しているアプリケーションマネージャプロセスの実行が終了するときに、前記マスタウォームアッププログラムをファイルに持続的に格納する前記ファイルマネージャをさらに備える、請求項９に記載のシステム。
【請求項１１】
前記ランタイム環境は、さらなるマスタランタイムシステムプロセスのメモリ空間を、さらなる子ランタイムシステムプロセスとしてクローニングし、該さらなる子ランタイムシステムプロセスは、該さらなる子ランタイムシステムプロセスを実行させるリクエストに応答する、請求項１０に記載のシステム。
【請求項１２】
前記プロファイリングデータは、クラス初期化と、ダイナミックにコンパイルされるように選択されたメソッドを含む群から選択されるデータを含む、請求項１に記載のシステム。
【請求項１３】
前記マスタランタイムシステムプロセスのメモリ空間を前記子ランタイムシステムプロセスの別のメモリ空間にコピーすることによって、該子ランタイムシステムプロセスをインスタンス化するプロセスクローニングメカニズムをさらに備える、請求項１に記載のシステム。
【請求項１４】
前記マスタランタイムシステムプロセスのメモリ空間への参照を前記子ランタイムシステムプロセスの別のメモリ空間にコピーすることによって、該子ランタイムシステムプロセスをインスタンス化し、該マスタランタイムシステムプロセスのメモリ空間のコピーを、該子ランタイムシステムプロセスが該マスタランタイムシステムプロセスの該参照されたメモリ空間を変更することを必要とするまで遅らせる、書き込み時コピープロセスクローニングメカニズムをさらに備える、請求項１に記載のシステム。
【請求項１５】
前記マスタランタイムシステムプロセスは、前記リクエストを受け取ることに対してスリープ状態にされる、請求項１に記載のシステム。
【請求項１６】
前記子ランタイムシステムプロセス上のオペレーティングシステムレベルリソース管理パラメータを設定する手段をさらに備え、該オペレーティングシステムレベルリソース管理パラメータは、スケジューリングの優先度、プロセッサの消費およびメモリの消費を含む、請求項１に記載のシステム。
【請求項１７】
オブジェクト指向プログラムコードは、オブジェクト指向プログラミング言語で書かれている、請求項１に記載のシステム。
【請求項１８】
前記マスタランタイムシステムプロセスおよび前記子ランタイムシステムプロセスは、バーチャルマシンである、請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、プロファイリングデータのトラッキングに関し、具体的には、アプリケーション環境をクローニングするプロセスにおけるインクリメンタルプロファイリングデータを、ダイナミックかつ持続的にトラッキングするシステムおよび方法に関する。
【背景技術】
【０００２】
マイクロプロセッサ設計およびコンポーネント統合における最近の進歩は、より幅広い範囲のデバイスが、複雑さを増す機能性および「ソフト」機能を提供することを可能にしている。ソフト機能は、デバイスの動作を向上させ、カスタム化するソフトウェアアプリケーションを含む。これらのデバイスには、デスクトップコンピュータおよびラップトップコンピュータなどの標準的なコンピュータデバイス、携帯情報端末などの携帯用コンピュータデバイス、ならびに、携帯電話、メッセージ機能付きポケベル、ゲーム機、およびセットトップボックスなどの民生用デバイスが含まれる。殆どのデバイスが、現在では、ソフト機能および他の拡張機能をサポートするオペレーティングシステムを含む。
【０００３】
このようなソフトウェアのアップグレートが可能なデバイスによって提供される、強化された能力はまた、ある特定のユーザの期待を生み出す。ユーザは、技術に精通していないことが多く、アーキテクチャにおける挑戦が原因で性能が損なわれること、例えば、遅いか、またはむらがあるアプリケーション性能に我慢ができないことが多い。同様に、ユーザは、概して、マルチタスキングを通じてシステムレベルで実行される、多くの別個のアプリケーションにアクセスできることを期待する。ユーザにとって、広く利用可能なソフトウェアアプリケーションは、複数のプラットフォームにわたって、一貫性および強化されたエクスポージャを介する、プラスの経験を保証するものである。しかし、ソフトウェア開発者にとっては、異なるコンピュータプラットフォームに対してソフトウェアアプリケーションを設計することには、開発費の増大と、サポートされたアーキテクチャのそれぞれに対する継続的なサポートおよびアップグレードの責任とが伴う。
【０００４】
マネージドコードプラットフォームは、マシンに依存しない、アーキテクチャ中立型の動作環境を提示することによって、複数のプラットフォームをサポートしようとしているソフトウェア開発者に１つの解決策を提供する。マネージドコードプラットフォームは、ユーザアプリケーションとしてオペレーティングシステムによって実行されるが、互換性があるアプリケーションが動作できるバーチャルランタイム環境を提供する、プログラミング言語コンパイラおよびインタープリタを含む。例えば、Ｊａｖａ（登録商標）プログラミング言語で書かれたアプリケーションは、Ｊａｖａ（登録商標）バーチャルマシン（ＪＶＭ）ランタイム環境と組み合わされる場合、マシン特有の環境および設定状況に依存しない異機種コンピュータシステム上で動作し得る。Ｊａｖａ（登録商標）プログラミング言語の概要は、Ｐ．ｖａｎ  ｄｅｒ  Ｌｉｎｄｅｎによる「Ｊｕｓｔ  Ｊａｖａ（登録商標）」（Ｃｈ．１、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．、２ｄ  ｅｄ．  １９９７）に記載されている。この文献の開示内容は、本明細書中、参考のため援用される。ＪＶＭは、メモリが制約された民生用デバイスを含む、あらゆるコンピュータデバイスにポートされ得る、Ｊａｖａ（登録商標）動作環境全体にとって重要なコンポーネントである。
【０００５】
マネージドコードプラットフォームは、概して、単一のアプリケーションインスタンスの単調な実行向けに設計される。マネージドコードプラットフォームの複数のインスタンスは、マルチタスキング動作をシミュレートするように実行される。しかし、このように同時性を強制することによって、いくつかの性能の問題点が発生する。第１に、それぞれのインスタンスは、起動遷移を招く。実行可能な起動時のデータは、遅い持続性格納装置から読み出される必要があり、遅い初期アプリケーション性能につながる。同様に、メモリは、インスタンス間で共有されず、追加されるインスタンスが、それぞれ、クラスを別々にローディングし、インスタンス作成することによって、プラットフォームのメモリフットプリント全体を増大させる。さらに、データ依存性および遅れたシステム状態の初期化は、非決定性実行パターンにつながり得る。最後に、それぞれのインスタンスは、独立して、実行方法の相対的な重要性を決定し、その場その場でマシンコードをコンパイルするが、これにより、むらがあるアプリケーション性能が引き起こされることが多い。
【０００６】
同時に実行可能なマネージドコードプラットフォームの提供に対する解決策の１つには、マスタプロセスとして実行するマネージドコードプラットフォームの指定が含まれる。個々の子マネージドコードプラットフォームプロセスは、プロセスクローニングを用いて、マスタプロセスから生じ、ランタイム状態をマスタマネージドコードプラットフォームから受け継ぐ。結果として、それぞれの子プロセスは、マスタプロセスによって完了される初期化動作の恩恵を受ける。
【０００７】
初期化動作の正確な選択は、受け継いだランタイム状態がメモリ共有および節約の質、それぞれの子プロセスによって節約される起動およびウォームアップ時間、ならびに、実行決定性が向上するか否かに直接影響するので、重要である。例えば、受け継ぐことができるウォームアップ状態をマスタプロセスコンテキストに構築するように、一般的に用いられる方法がプリコンパイルされるか、クラスローダーが先に呼び出され得る。しかし、子プロセスの性能は、基礎となる実行プロファイルの実際のランタイム条件との一致状態がよくない場合、悪い影響を受け得る。例えば、使用されていない方法がプリコンパイルされるか、または、正しくないクラスがロードされる可能性があり、それにより、方法をコンパイルし、実際に用いられるクラスをロードする必要がある子プロセスにおいて、処理およびメモリリソースが消費される。同様に、デバイス使用パターンは変化し得る。結果として、１つの初期化行動のセットでは、異なる使用および実行シナリオに最も適した、好ましい動作のセットを正しく反映しない可能性があり、観察されたプロファイルデータに基づいて、起動時またはダイナミックにランタイムにおいて細かく調整される必要がある。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
従って、ランタイムにおける実際の使用パターンを、特に、マスタランタイムシステムプロセスから受け継がれた、ウォームアップ済み状態に関して、測定するために、クローニングされたランタイムシステムプロセスの実行および性能をプロファイリングする必要がある。このようなアプローチが、マスタランタイムシステムプロセスによって起動時またはランタイムに実行され得る、ダイナミックに適用可能なフィードバックまたは持続的に格納されるプロファイルデータを提供することが好ましい。
【課題を解決するための手段】
【０００９】
（発明の要旨）
マネージドコードプラットフォームは、複数の独立した分離ユーザアプリケーションの発生をサポートするアプリケーションフレームワークにおいて実行される。アプリケーションフレームワークが、書き込み時コピーセマンティクスを用いるユーザアプリケーションのそれぞれのメモリ空間のクローニングをサポートすることが好ましい。マネージドコードプラットフォームは、互換性があるアプリケーションを定義するポータブルコードを解釈する、マスタランタイムシステムプロセス、例えば、バーチャルマシンを含む。アプリケーションマネージャはまた、アプリケーションフレームワーク内で実行し、プロセス間通信メカニズムを介して、マスタランタイムプロセスと通信可能にインターフェースする。アプリケーションフレームワークは、プロセスクローニングを介して、子ランタイムシステムプロセスを作成するように、アプリケーションフレームワークによってリクエストされるときに、マスタランタイムシステムプロセスコンテキストを論理的にコピーする。メモリに格納されたマスタランタイムシステムプロセスのコンテキストは、子ランタイムシステムプロセスによって、ウォームアップ済み状態およびキャッシュ済みコードとして、受け継がれる。書き込み時コピーセマンティクスとともにインプリメントされる場合、プロセスクローニングは、マスタランタイムシステムプロセスコンテキストへの参照の論理コピーを作成する。参照されたマスタランタイムシステムプロセスコンテキストのセグメントは、参照されたコンテキストを変更しようと子ランタイムシステムプロセスによって試みられる場合にのみ、ゆっくりとコピーされる。ランタイムにおいて、子ランタイムシステムプロセスプロファイルのそれぞれは、メモリバッファに一時的にステージされるか、または、ファイルに持続的に格納され得る。アプリケーションマネージャは、インクリメンタルプロファイルデータを取り出し、解析し、マスタウォームアッププログラムを更新する。マスタランタイムシステムプロセスは、初期化のときに、または、アプリケーションマネージャからのコマンドに応答して、コンテキストをダイナミックに再初期化するように、更新されたマスタウォームアッププログラムを実行する。適切なマネージドコードプラットフォームおよびランタイムシステムプロセスの例は、Ｐａｌｏ  Ａｌｔｏ，ＣＡのＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．によってライセンス供与されている、Ｊａｖａ（登録商標）オペレーティング環境およびＪａｖａ（登録商標）バーチャルマシン（ＪＶＭ）アーキテクチャである。
【００１０】
ある実施形態は、プロセスクローニングアプリケーション環境において、インクリメンタルプロファイリングデータをダイナミックかつ持続的にトラッキングするシステムおよび方法を提供する。マスタランタイムシステムプロセスが実行される。マスタランタイムシステムプロセスのメモリ空間は、プロセスリクエストに応答する子ランタイムシステムプロセスとしてクローニングされる。子ランタイムシステムプロセスが実行される。子ランタイムシステムプロセスの実行は、プロファイリングデータを付加的に収集することによってプロファイリングされる。子ランタイムシステムプロセスプロファイルは、マスタランタイムシステムプロセスにフィードバックされ、後のクローニングされる子ランタイムシステムプロセスが恩恵を受ける。さらなる実施形態において、子ランタイムシステムプロセスプロファイルは、次の起動のときに、マスタランタイムシステムプロセスによって用いられるために、持続性格納装置に保持される。
【００１１】
基礎をなすアプリケーションフレームワークによって提供される、プロセスクローニングメカニズムの使用は、マシンポータブルコードの効率的な同時アプリケーション実行の必要性を解決する以外にもいくつかの利点を提供する。マスタランタイムプロセスコンテキストのクローニングを介して、ウォームアップ済み状態を受け継ぐことは、計算済み、ウォームアップ済み状態をプロセス間で共有することを提供する。同様に、子ランタイムシステムプロセスは、他のプロセスのそれぞれから分離して実行し、それにより、アプリケーションフレームワークのシステムレベルサービスを介して、強いリソース制御が提供される。分離、信頼できるプロセス呼び出しおよび終了、ならびにリソースの再利用が利用可能であり、オペレーティングシステムレベルで、手際よく提供される。さらに、プロセスクローニングは、速いユーザアプリケーション初期化および決定性ランタイム動作を、特に書き込み時コピーセマンティクスを用いるプロセスクローニングを提供する環境について、提供する。最後に、マスタランタイムシステムプロセスコンテキストの非共有セグメントについて、実際のコピーは、書き込み時コピーセマンティクスによって要求されるまで遅らせられ、それにより、セグメントが必要とされる場合、必要とされるまで、アプリケーション性能に影響を与えることが避けられる。
【００１２】
本発明のさらに他の実施形態は、以下の詳細な説明から、当業者にとって容易に明らかになる。詳細な説明においては、本発明を実行するために考えられるベストモードを例示するために、本発明の実施形態が説明される。理解されるように、本発明の精神および範囲から逸脱することなく、本発明は他の異なる実施形態が可能であり、細部のいくつかには様々な明らかな面において変更が為され得る。従って、図面および詳細な説明は、本質的に例示するものであり、限定するものではないとみなされるべきである。
【００１３】
従って、本発明は、以下のものを提供する。
【００１４】
１．プロセスクローニングアプリケーション環境においてインクリメンタルプロファイリングデータをダイナミックかつ持続的にトラッキングするシステムであって、実行しているマスタランタイムシステムプロセスのメモリ空間を、プロセスリクエストに応答する、子ランタイムシステムプロセスとして、クローニングし、該子ランタイムシステムプロセスを実行する、ランタイム環境と、プロファイリングデータを付加的に収集することによって、該子ランタイムシステムプロセスの実行をプロファイリングする、コレクタとを備える、システム。
【００１５】
２．前記子ランタイムシステムプロセスのメモリ空間に、前記プロファイリングデータを一時的に格納するように、規定される、メモリバッファをさらに備える、項１に記載のシステム。
【００１６】
３．前記ランタイム環境は、前記メモリバッファから、実行しているアプリケーションマネージャプロセスへと、前記プロファイリングデータを周期的に通信する、項２に記載のシステム。
【００１７】
４．前記子ランタイムシステムプロセスにおいて前記アプリケーションマネージャプロセスとともに保持されるプロファイリング実行スレッドと、該アプリケーションマネージャプロセスからのデータリクエストに応答する、該プロファイリング実行スレッドを介して前記プロファイリングデータを提供する応答と、をさらに備える、項３に記載のシステム。
【００１８】
５．前記プロファイリング実行スレッドは、プロセス間通信メカニズムを含む、項４に記載のシステム。
【００１９】
６．前記プロファイリングデータは、前記アプリケーションマネージャプロセスへの通信が完了するときにリセットされる、項３に記載のシステム。
【００２０】
７．デバイスのシャットダウンにおいて、または、周期的に、前記プロファイリングデータを持続的に格納するファイルをさらに備える、項１に記載のシステム。
【００２１】
８．前記ランタイム環境は、前記ファイルから、実行しているアプリケーションマネージャプロセスへと、前記プロファイリングデータを通信する、項７に記載のシステム。
【００２２】
９．オブジェクト指向プログラムコードとして提供され、アプリケーションモデルと関連付けられている、ソース定義からの少なくとも１つのクラスの表現を含むアプリケーションモデルをさらに備えるシステムであって、前記子ランタイムプロセスは、１つのこのようなアプリケーションモデル特有のクラスローダインスタンスを選択し、前記ランタイム環境は、該子ランタイムシステムプロセスによって選択された該アプリケーションモデルを、実行しているアプリケーションマネージャプロセスに通信する、項１に記載のシステム。
【００２３】
１０．前記プロファイリングデータを統合するように、前記プロファイリングデータをオブジェクト指向プログラムコードとして提供されたソース定義として定義されるマスタウォームアッププログラムをさらに備える、項１に記載のシステム。
【００２４】
１１．実行しているアプリケーションマネージャプロセスの実行が終了するときに、前記マスタウォームアッププログラムをファイルに持続的に格納するファイルマネージャをさらに備えるシステムであって、前記ランタイム環境は、前記マスタウォームアッププログラムを該ファイルから取り出し、該マスタウォームアッププログラムを、実行しているさらなるマスタランタイムシステムプロセスのメモリ空間に、解釈し、インスタンス化し、ウォームアップする、項１０に記載のシステム。
【００２５】
１２．前記ランタイム環境は、前記さらなるマスタランタイムシステムプロセスのメモリ空間を、プロセスリクエストに応答する、さらなる子ランタイムシステムプロセスとしてクローニングし、該さらなる子ランタイムシステムプロセスを実行する、項１１に記載のシステム。
【００２６】
１３．前記マスタランタイムシステムプロセスの実行の間、前記マスタウォームアッププログラムをダイナミックに更新するアプリケーションマネージャプログラムをさらに備えるシステムであって、前記ランタイム環境は、該マスタウォームアッププログラムを、該マスタランタイムシステムプロセスのメモリ空間に、解釈し、インスタンス化し、ウォームアップする、項１０に記載のシステム。
【００２７】
１４．前記プロファイリングデータは、クラス初期化、およびダイナミックコンパイルについて選択された方法を含む群から選択されるデータを含む、項１に記載のシステム。
【００２８】
１５．前記マスタランタイムシステムプロセスのメモリ空間を前記子ランタイムシステムプロセス用の別のメモリ空間にコピーすることによって、該子ランタイムシステムプロセスをインスタンス化するプロセスクローニングメカニズムをさらに備える、項１に記載のシステム。
【００２９】
１６．前記マスタランタイムシステムプロセスのメモリ空間への参照を前記子ランタイムシステムプロセス用の別のメモリ空間にコピーすることによって、該子ランタイムシステムプロセスをインスタンス化し、該マスタランタイムシステムプロセスのメモリ空間のコピーを、該子ランタイムシステムプロセスが、該参照されたマスタランタイムシステムプロセスのメモリ空間を変更することを必要とするまで遅らせる、書き込み時コピープロセスクローニングメカニズムをさらに備える、項１に記載のシステム。
【００３０】
１７．前記マスタランタイムシステムプロセスは、前記プロセスリクエストを受け取ることに関連して、スリープ状態にされる、項１に記載のシステム。
【００３１】
１８．前記子ランタイムシステムプロセス上のオペレーティングシステムレベルリソース管理パラメータを設定するリソースコントローラをさらに備える、項１に記載のシステム。
【００３２】
１９．前記オブジェクト指向プログラムコードは、Ｊａｖａ（登録商標）プログラミング言語で書かれている、項１に記載のシステム。
【００３３】
２０．前記マスタランタイムシステムプロセスおよび前記子ランタイムシステムプロセスは、Ｊａｖａ（登録商標）バーチャルマシンである、項１９に記載のシステム。
【発明を実施するための最良の形態】
【００３４】
（発明の詳細な説明）
プロセスクローニングアプリケーション環境において、インクリメンタルプロファイリングデータをダイナミックかつ持続的にトラッキングするシステムおよび方法が提示される。マスタランタイムシステムプロセスが実行される。マスタランタイムシステムプロセスのメモリ空間は、プロセスリクエストに応答する子ランタイムシステムプロセスとしてクローニングされる。子ランタイムシステムプロセスが実行される。子ランタイムシステムプロセスの実行は、プロファイリングデータを付加的に収集することによってプロファイリングされる。子ランタイムシステムプロセスプロファイルは、マスタランタイムシステムプロセスにフィードバックされ、後のクローニングされる子ランタイムシステムプロセスが恩恵を受ける。さらなる実施形態において、子ランタイムシステムプロセスプロファイルは、次の起動のときに、マスタランタイムシステムプロセスによって用いられるために、持続性格納装置に保持される。
【００３５】
（システム概要）
図１は、例として、複数の異機種デバイス１１上にインプリメントされる、ランタイム環境（ＲＴＥ）１４、２２、２４、および２６を示す機能ブロック図１０である。各異機種デバイス１１は、図２を参照しながら以下に詳細に説明するように、ランタイム環境１４、２１、２４、２６において実行するマネージドコードプラットフォーム、例えば、Ｊａｖａ（登録商標）動作環境などを提供する。異機種デバイス１１は、デスクトップコンピュータシステムまたはラップトップコンピュータシステムなどのクライアントコンピュータシステム１３を、非排他的に含む。各クライアント１３は、格納デバイス１５に動作可能に接続され、データ構造を特定するコードモジュールおよびデータ上で動作する方法のセット、ならびに共有可能なモジュールの集合をそれぞれ定義する、クラス１６およびクラスライブラリ１７のセットを保持する。また、異機種デバイス１１には、携帯情報端末２１を含む携帯用コンピュータデバイスと、携帯電話２３およびセットトップボックス２５などの民生用デバイスとが含まれる。最後に、サーバ１８は、グローバルに共有可能なクラスライブラリ２０が保持される格納デバイス１９に動作可能に接続されている。異機種デバイス１１のそれぞれは、従来のハードワイヤおよびワイヤレスネットワーク構造を含むネットワーク１２を介してインターフェースし得る。他のタイプの異機種デバイス１１ならびに様々なネットワーク構造、配置およびトポロジーが可能である。
【００３６】
各異機種デバイス１１は、リソースを管理し、周辺機器へのアクセスを提供し、メモリリソースを割り当て、プログラム実行および終了を制御するオペレーティングシステムを含む。各オペレーティングシステムは、明記できるプロセスのメモリ空間をクローニングすることによって、複数の独立した、分離ユーザアプリケーションを発生するプロセスクローニングメカニズムをサポートする。本発明における使用に適したプロセスクローニングメカニズムの一例は、Ｕｎｉｘ（登録商標）またはＬｉｎｕｘオペレーティングシステムによって提供されるｆｏｒｋ（）システムコールである。ｆｏｒｋ（）システムコールは、Ｍ．Ｊ．Ｂａｃｈによる「Ｔｈｅ  Ｄｅｓｉｇｎ  Ｏｆ  Ｔｈｅ  Ｕｎｉｘ（登録商標）  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ」（Ｃｈ．７、Ｂｅｌｌ  Ｔｅｌｅ．Ｌａｂｓ．，Ｉｎｃ．（１９８６）に記載されている。この文献の開示内容は、本明細書中、参考として援用される。ｆｏｒｋ（）システムコールを呼び出すプロセスは、親プロセスとして公知であり、新たに作成されるプロセスは子プロセスと呼ばれる。オペレーティングシステムは、別個のプロセス識別子を、別個のプロセスを実行する、子プロセスに割り当てる。オペレーティングプロセスはまた、親プロセスのメモリ空間を子プロセスのメモリ空間にコピーすることによって、親プロセスのコンテキストの論理コピーを作成する。ｆｏｒｋ（）システムコールの書き込み時コピー型の変形例において、オペレーティングシステムは、メモリ空間への参照のみをコピーし、個々のメモリ空間セグメントの実際のコピーを、親プロセスコンテキストの参照されたデータを変更するように子プロセスが試みる場合にそのときまで遅らせる。書き込み時コピーｆｏｒｋ（）システムコールは、書き込み時コピーでないｆｏｒｋ（）システムコールよりも速く、親プロセスと子プロセスとの間で書き込まれていない任意のデータを自動的に共有する。
【００３７】
（付加的にプロファイリングデータをダイナミックにトラッキングするシステム）
図２は、本発明による、プロセスクローニング環境３４において、インクリメンタルプロファイリングをダイナミックかつ持続的にトラッキングするシステムを示すブロック図３０である。システムは、ランタイム環境３１と、マネージドコードプラットフォーム全体の中心を形成する個々のクラス４５およびクラスライブラリ４６とを含む。例として、このシステムは、Ｊａｖａ（登録商標）オペレーティング環境を参照しながら説明されているが、Ｊａｖａ（登録商標）プログラミング言語などのオブジェクト指向プログラミング言語で書かれることが好ましい、アプリケーションを実行する他の形態のマネージドコードプラットフォームが用いられてもよい。
【００３８】
例示的なランタイム環境３１は、アプリケーションマネージャ３２、マスタＪａｖａ（登録商標）バーチャルマシン（ＪＶＭ）プロセス３３、およびゼロ以上のクローニングされたＪＶＭプロセス３４２を含む。マスタＪＶＭプロセス３３およびクローニングされたＪＶＭプロセス３４は、それぞれ、マスタランタイムシステムプロセスおよび子ランタイムシステムプロセスに対応する。マスタランタイムシステムプロセスは、好ましくは、バーチャルマシンとして提供されるが、マシンポータブルコード定義互換性アプリケーションを解釈する。
【００３９】
ランタイム環境３１は、マスタランタイムシステムプロセスのメモリ空間を好ましくはクローニングすることによって、複数の独立した、分離ユーザアプリケーションプロセスインスタンスを発生する、アプリケーションフレームワークを実行する。本発明における使用に適したアプリケーションフレームワークの例は、Ｕｎｉｘ（登録商標）オペレーティングシステムである。そのようなＵｎｉｘ（登録商標）オペレーティングシステムは、全体的に、上記のＭ．Ｊ．Ｂａｃｈの文献のＣｈ．２に記載されており、その開示内容は、本明細書中、参考として援用される。
【００４０】
アプリケーションマネージャ３２は、個々のアプリケーションがそこを通じて選択され、実行され得るユーザインターフェースを提示する。アプリケーションマネージャ３２およびマスタＪＶＭプロセス３３は、プロセス間通信（ＩＰＣ）メカニズム、例えば、パイプまたはソケットを介して通信することが好ましい。マスタＪＶＭプロセス３３は、デバイスブート時に開始される。
【００４１】
初期化において、マスタＪＶＭプロセス３３は、格納デバイス４３から実行可能なプロセスイメージを読み出し、マスタウォームアッププログラム４４において指定されるブートストラップ動作を行う。マスタウォームアッププログラム４４は、クラス４５およびクラスライブラリ４６において定義されたクラスのプリロードと、プリコンパイル方法と、スタテッィクな初期化方法の実行とを含む、あらゆる種類の動作を行い、ウォームアップ動作を指定する実行可能なプログラムである。これらは、それぞれ、同一譲受人に譲渡された、「Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｄｙｎａｍｉｃ  Ｐｒｅｌｏａｄｉｎｇ  Ｏｆ  Ｃｌａｓｓｅｓ  Ｔｈｒｏｕｇｈ  Ｍｅｍｏｒｙ  Ｓｐａｃｅ  Ｃｌｏｎｉｎｇ  Ｏｆ  Ａ  Ｍａｓｔｅｒ  Ｒｕｎｔｉｍｅ  Ｓｙｓｔｅｍ  Ｐｒｏｃｅｓｓ」という名称の２００３年１２月２２日に出願された係属中の米国特許出願第１０／７４５，０２３号、「Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｐｒｏｖｉｄｉｎｇ  Ｐｒｅｃｏｍｐｉｌｅｄ  Ｃｏｄｅ  Ｔｈｒｏｕｇｈ  Ｍｅｍｏｒｙ  Ｓｐａｃｅ  Ｃｌｏｎｉｎｇ  Ｏｆ  Ａ  Ｍａｓｔｅｒ  Ｒｕｎｔｉｍｅ  Ｓｙｓｔｅｍ  Ｐｒｏｃｅｓｓ」という名称の２００３年１２月２２日に出願された係属中の特許出願第１０／７４５，０２０号、および、「Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｅｌｉｍｉｎａｔｉｎｇ  Ｓｔａｔｉｃ  Ｉｎｉｔｉａｌｉｚａｔｉｏｎ  Ｏｖｅｒｈｅａｄ  Ｂｙ  Ｍｅｍｏｒｙ  Ｓｐａｃｅ  Ｃｌｏｎｉｎｇ  Ｏｆ  Ａ  Ｍａｓｔｅｒ  Ｒｕｎｔｉｍｅ  Ｓｙｓｔｅｍ  Ｐｒｏｃｅｓｓ」という名称の２００３年１２月２２日に出願された係属中の特許出願第１０／７４５，０２１号に記載されている。これらの文献は、本明細書中、参考として援用される。従って、初期化の完了において、マスタＪＶＭプロセス３３のメモリイメージは、マスタＪＶＭプロセスコンテキストに格納されている、キークラス、方法および初期化された常態を用いて、初期化され、準備され、ウォームアップされたＪＶＭプロセスのメモリイメージに類似する。
【００４２】
初期化の後、マスタＪＶＭプロセス３３は、アプリケーションマネージャ３２からのさらなる指令を待機しながら、アイドル状態になる。すなわち、イナクティブ状態で「眠る」。マスタＪＶＭプロセス３３は、アプリケーションマネージャ３２から受信したアプリケーションを実行するためのリクエストに応答して起きる。アプリケーションマネージャ３２は、アプリケーション名、クラスパス、およびアプリケーション引数などの標準的なコマンドラインパラメータを含む、リクエストをマスタＪＶＭプロセス３３に送信する。マスタＪＶＭプロセス３３は、基礎となるオペレーティングシステムのプロセスクローニングメカニズムを用いて、マスタＪＶＭプロセス３３の新たなクローニングされたプロセスインスタンスとして、クローニングされたＪＶＭプロセス３４を起こし、作成する。ウォームアップ済み状態３７として、メモリに格納されたマスタＪＶＭプロセス３３のコンテキストは、受け継がれたウォームアップ済み状態４１としてクローニングされたＪＶＭプロセス３４によって受け継がれ、これにより、初期化およびランタイム実行時間が節約され、決定性実行動作が提供される。クローニングされたＪＶＭプロセス３４の「クローニング」に続いて、マスタＪＶＭプロセス３３は、アプリケーション立ち上げリスト５１に立ち上げられたアプリケーションを記録し、イナクティブなスリープ状態に戻る。
【００４３】
書き込み時コピーセマンティクスでインプリメントされる場合、プロセスクローニングは、マスタＪＶＭプロセスコンテキストのみを参照しながら、論理コピーを作成する。参照されたマスタＪＶＭプロセスコンテキストのセグメントは、クローニングされたＪＶＭプロセスによって、参照されたコンテキストを変更しようと試みられる場合にのみ、ゆっくりとコピーされる。従って、クローニングされたＪＶＭプロセスがメモリセグメントに書き込まない限り、セグメントは、親プロセスと子プロセスとの間で共有され続ける。
【００４４】
マスタＪＶＭプロセス３３は、ＩＰＣメカニズムを通じてアプリケーションマネージャ３２から受け取った以下の基本的なコマンドを認識する。
【００４５】
（１）ｌｉｓｔ：アプリケーションマネージャ３２から受け取ったリクエストに応答して立ち上げられるアプリケーションのリストを提供する。
【００４６】
（２）ｊｅｘｅｃ：プロセスクローニングメカニズムを呼び出し、コマンドライン引数を解析し、マスタＪＶＭプロセス３３の新たなインスタンスをクローニングされたＪＶＭプロセス３４として実行する。標準的なＪＶＭプロセスに適合する構文を採用することが好ましい。
【００４７】
（３）ｋｉｌｌ：アプリケーションハンドルまたはプロセス識別子によって識別されるアプリケーションを終了する
（４）ｓｏｕｒｃｅ：引数を解析し、クローニングされたＪＶＭプロセス３４を作成することなくマスタＪＶＭプロセス３３のボディのプログラムを実行する。その後、クローニングされたＪＶＭプロセス３４は、マスタＪＶＭプロセス３３の代わりのソースコマンドの実行から得られる、マスタＪＶＭプロセス３３の精密化されたメモリ状態を受け継ぐ。
【００４８】
他のコマンドも可能である。
【００４９】
デバイスのブート時、マスタＪＶＭプロセス３３は、マスタウォームアッププログラム４４を実行し、ウォームアップ済み状態３７およびコードキャッシュ３８内のコンパイル済み方法コードは、クローニングされたＪＶＭプロセス３４のそれぞれによって、受け継がれたウォームアップ済み状態４１および受け継がれたコードキャッシュ４２内の受け継がれたコンパイル済み方法コードとして、受け継がれる。マスタウォームアッププログラム４４は、以前に実行されたクローニングされたＪＶＭプロセス３４の１つ以上を実行するプロファイルコレクタ３９から以前に引き出され、格納される、持続性プロファイルデータに基づいて、アプリケーションマネージャ３２によって実行される。また、各プロファイルコレクタ３９は、クローニングされたアプリケーションマネージャ３２の１つ以上において実行するプロファイラ４０によって生成されるインクリメンタルプロファイルデータを収集し、格納する。ダイナミックにプロファイルされたデータは、アプリケーションマネージャ３２によって規則的にポーリングされて、マスタダイナミックプロファイル４９が作成され、マスタダイナミックプロファイル４９は、後のクローニングされるＪＶＭプロセス３４が恩恵を受けるように、ソースコマンドを用いて、マスタＪＶＭプロセス３３にフィードバックされる。マスタダイナミックプロファイル４９はまた、次のデバイスブートにおいて、マスタＪＶＭプロセス３３によって用いられ得る、持続性プロファイルの基礎を形成する。
【００５０】
各プロファイラ４０は、当業者であれば理解するように、実行されているアプリケーションアカウンティングを行う。プロファイラ４０は、例えば、アプリケーションにおける重要で、性能感受性があるコードセグメントを識別しようと試みる解釈ループを通じて、アプリケーション実行を連続的に評価する。例として、プロファイラ４０は、ループ反復および方法呼び出しの計算を含み、実行方法をサンプリングすることによる、アカウンティングを通じて、方法呼び出しおよびシステムライブラリコールを識別する。アカウンティグを行うために、他の形態およびアプローチも可能である。プロファイラ４０が、プロファイリングを通じて収集されたデータに閾値を付与し、閾値を越える方法を識別することが好ましい。プロファイルコレクタ３９は、プロファイラ４０によって行われた動作を評価し、性能に影響を与えるイベント、例えば、クラス初期化およびダイナミックコンパイルについて選択された方法を、プロファイルデータとして格納する。他のタイプおよび形態のプロファイルデータも可能である。
【００５１】
ある実施形態において、クローニングされたＪＶＭプロセス３４のそれぞれのプロファイルコレクタ３５は、収集されたプロファイルデータを、一時的にメモリバッファ５２に格納する。クローニングされたＪＶＭプロセス３４のそれぞれは、メインの実行スレッド（図示せず）と同時に実行するプロファイルリクエスト待ち受けスレッド（図示せず）を保持する。アプリケーションマネージャ３２は、ソケットなどの適切なＩＰＣメカニズムを用いて、プロファイルリクエスト待ち受けスレッドにアクセスする。ランタイムにおいて、クローニングされるＪＶＭプロセス３４は、アプリケーションマネージャ３２がそこを通じてポーリングリクエストなどのプロファイリングデータクエリを周期的に送信する、プロファイルスレッドを待ち受ける。それに応答して、クローニングされるＪＶＭプロセス３４は、インクリメンタルプロファイルデータをアプリケーションマネージャ３２に送信し、メモリバッファ５２をリセットする。最後のプロファイリングデータクエリ以来付加的に収集されたプロファイルデータのみが、メモリバッファ５２においてステージされ、アプリケーションマネージャ３２は、マスタダイナミックプロファイル４９におけるインクリメンタルプロファイルデータの類似するセットを格納する。
【００５２】
さらなる実施形態において、各クローニングされたＪＶＭプロセス３４のそれぞれのプロファイルコレクタ３５は、格納されたプロファイル４８として、持続的に、収集されたプロファイルデータを格納する。ランタイムにおいて、アプリケーションマネージャ３２は、格納されたプロファイル４８におけるインクリメンタルプロファイルデータを、好ましくは、周期的に、重要なイベントについて繰り返し、評価されたインクリメンタルプロファイルデータをマスタダイナミックプロファイルに格納する。インクリメンタルプロファイルデータはまた、メモリバッファ５２に一時的プロファイルデータとして、格納されたプロファイル４８に持続性プロファイルデータとして格納され得る。
【００５３】
ランタイムにおいて、アプリケーションマネージャ３２は、それぞれのクローンされたＪＶＭプロセス３２から受け取ったインクリメンタルプロファイルデータに類似する、マスタダイナミックプロファイル４９を保持する。マスタダイナミックプロファイル４９は、観察された重要なイベント、例えば、クラス初期化、およびダイナミックコンパイルについて選択された方法などをダイナミックに反映する。このデータは、ランタイムにおける実際の使用パターンを反映させるように、マスタＪＶＭプロセス３３によって初期化の際に実行される、ウォームアップ初期化行動の微調整に用いられ得る。従って、アプリケーションマネージャ３２は、マスタダイナミックプロファイル４９を解析し、マスタウォームアッププログラム４４を更新する。ある実施形態において、アプリケーションマネージャ３２は、マスタウォームアッププログラム４４を、ファイルとして、格納デバイス４３に、デバイスの停止時または周期的に、例えば、自動セーブ機能に応答して、持続的に格納する。その後、デバイスブート時において、マスタＪＶＭプロセス３３は、最新の観察された使用パターンを反映する、セーブされたマスタウォームアッププログラム４４を実行する。その後、ウォームアップ済み状態３７およびコードキャッシュ３８内のコンパイル済み方法コードは、それぞれのクローニングされたＪＶＭプロセス３４によって、受け継がれたウォームアップ済み状態４１および受け継がれたコードキャッシュ４２内の受け継がれたコンパイル済み方法コードとして受け継がれる。
【００５４】
さらなる実施形態において、アプリケーションマネージャ３２は、インクリメンタルプロファイルデータをマスタＪＶＭプロセス３３にダイナミックにフィードする。マスタＪＶＭプロセス３３は、ＩＰＣメカニズムを通じてアプリケーションマネージャ３２から受け取ったさらなる基本的なソースコマンドを認識する。このようなソースコマンドは、同一譲受人に譲渡された、「Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｐｅｒｆｏｒｍｉｎｇ  Ｉｎｃｒｅｍｅｎｔａｌ  Ｉｎｉｔｉａｌｉｚａｔｉｏｎ  Ｏｆ  Ａ  Ｍａｓｔｅｒ  Ｒｕｎｔｉｍｅ  Ｓｙｓｔｅｍ  Ｐｒｏｃｅｓｓ」という名称の２００３年１２月２２日に出願された係属中の米国特許出願第１０／７４５，１６４号に記載されている。この出願の開示内容は、本明細書中で援用される。簡潔に言うと、マスタＪＶＭプロセス３３上で、ソースコマンドを実行することは、ウォームアップ状態、すなわち、ウォームアップ済み状態３７およびコードキャッシュ３８が、付加的に初期化されることを可能にする。アプリケーションマネージャ３２は、マスタウォームアッププログラム４４を、マスタＪＶＭプロセス３３のコンテキストを精密化するために実行された、ソースコマンドを用いて、マスタＪＶＭプロセス３３に送る。その後発生したクローニングされたＪＶＭプロセス３３のそれぞれは、その時点でウォームアップされたコンテキストを、そのときまでにマスタＪＶＭプロセス３３によって実行される、受け継がれたウォームアップ済み状態４３およびコードキャッシュ３８として受け継ぐ。
【００５５】
（マスタＪＶＭプロセスマッピング）
図３は、例として、メモリ６２にマッピングされるマスタＪＶＭプロセス３３を示すブロック図６０である。概して、実行するプロセスのコンテキストには、データ空間、ユーザスタック、カーネルスタック、ならびに、オープンファイル、現在のディレクトリ、および監視許可設定をリスト化するユーザ領域が含まれる。他のタイプのコンテキストも提供され得る。コンテキストは、オペレーティングシステムによって、メモリ６２に格納され、管理される。デバイスブート時において、オペレーティングシステムは、おそらくは、連続していないページ６４ａ〜ｄにおいて、実行可能なマスタＪＶＭプロセス３３をメモリ６２にインスタンス化し、マスタＪＶＭプロセス３３の実行を開始する前に、メモリ空間の割り当てをページテーブルエントリ６３としてページテーブル６１に記録する。また、マスタＪＶＭプロセスコンテキストは、プロセスクローニング、特に、コピーオンライトセマンティクスでのプロセスクローニングに適合する、他のメモリ管理システムを用いて、例えば、デマンドページング、スワッピング、および類似のプロセスメモリ割り当て方式を用いて、同様にマッピングされ得る。
【００５６】
（クローニングされたＪＶＭマッピング）
図４は、例として、メモリ空間クローニングを介して、メモリ６２にマッピングされた、マスタＪＶＭプロセス３３およびクローニングされたＪＶＭプロセス３４を示すブロック図７０である。書き込み時コピーセマンティクスを提供しないプロセスクローニングを用いるシステムにおいて、親プロセスコンテキストを格納する、メモリ６２内のページ６４ａ〜ｃの物理的コピーは、子プロセスのそれぞれについて作成される。プロセスクローニングリクエストに応答して、オペレーティングシステムは、クローニングされたＪＶＭプロセス３４について、実行可能なマスタＪＶＭプロセス３３の表現のコピーを、メモリ６２に、おそらくは、非連続的なページ７２ａ〜ｄにおいて、インスタンス化し、クローニングされたＪＶＭプロセス３４の実行を開始する前に、メモリ空間の割り当てを、ページテーブルエントリ７１として、ページテーブル６１に記録する。従って、クローニングされたＪＶＭプロセス３４は、マスタＪＶＭプロセス３３のコンテキストの物理的コピーを用いて作成される。新たな別のマスタＪＶＭプロセスコンテキストの物理的コピーが作成されるので、クローニングされたＪＶＭプロセス３４は、ウォームアップ済み状態３７を受け継ぎ、マスタＪＶＭプロセス３３のプリロード済みクラスを含む。しかし、ランタイム環境３１のメモリフットプリント全体は、マスタＪＶＭプロセスコンテキストのさらなるコピーを格納するために必要とされるメモリ空間の分、増大される。
【００５７】
（書き込み時コピーを用いるクローニングされたＪＶＭプロセスマッピング）
図５Ａ〜５Ｂは、例として、書き込み時コピーセマンティクスを用いるメモリ空間クローニングを介して、メモリ６２にマッピングされた、マスタＪＶＭプロセス３３およびクローニングされたＪＶＭプロセス３４を示すブロック図８０および９０である。書き込み時コピーセマンティクスを提供するプロセスクローニングを用いるシステムにおいて、親プロセスコンテキストを格納するメモリ空間への参照、代表的には、ページテーブルエントリのコピーのみが、子プロセスのそれぞれについて作成される。まず、図５Ａを参照すると、プロセスクローニングリクエストに応答して、オペレーティングシステムは、実行可能なマスタＪＶＭプロセス３３のメモリ空間を参照するページテーブルエントリ６３のみを、クローニングされたＪＶＭプロセス３４用の新たなページテーブルエントリ８１のセットとしてコピーする。従って、クローニングされたＪＶＭプロセス３４は、マスタＪＶＭプロセス３４と、マスタＪＶＭプロセスコンテキストを格納する、おそらくは非連続的なページ６４ａ〜ｄへの同じ参照を用いる。クローニングされたＪＶＭプロセス３４に関連付けられたアプリケーションの初期化および実行が必要とする時間は、ページテーブルエントリ６２のみがマスタＪＶＭプロセスコンテキストをクローニングするためにコピーされるので、より短い。さらに、クローニングされたＪＶＭプロセス３４がマスタＪＶＭプロセスコンテキストを変更しようとするまで、メモリ空間は、他のプロセスが共有することができる、読み出し専用データとして扱われる。
【００５８】
次に、図５Ｂを参照すると、クローニングされたＪＶＭプロセス３４は、マスタＪＶＭプロセスコンテキストのメモリ空間において、ページ８２ｃのうちの１つを変更しようと試みる。応答して、オペレーティングシステムは、変更されるメモリ空間ページ８２ｃの物理的コピーを新たなページ９１として作成し、クローニングされたＪＶＭプロセス３４について、ページテーブルエントリ８１における割り当てを更新する。書き込み時コピーセマンティクスを介して、ランタイム環境３１のフットプリント全体は、可能な限り小さいままにされ、クローニングされたＪＶＭプロセス３４のそれぞれが、アプリケーション特有コンテキストについて、さらなるメモリ空間を必要とする場合、実際に必要とするまで成長するのみである。
【００５９】
（付加的にプロファイリングデータをダイナミックにトラッキングする方法）
図６は、本発明による、プロセスクローニングアプリケーション環境において、インクリメンタルプロファイリングデータをダイナミックかつ持続的にトラッキングする方法１００を示すフローチャートである。方法１００は、例えば、図２のランタイム環境３１または他のコンポーネントによって実行され得る、一連のプロセス動作またはステップとして記載される。
【００６０】
最初に、アプリケーションマネージャ３２がロードされる（ブロック１０１）。デバイスのブート時に、マスタＪＶＭプロセス３３がロードされ、初期化される（ブロック１０２）。詳細については、図７を参考しながら下記に記載する。ローディングおよび初期化に続いて、マスタＪＶＭプロセス３３は、イナクティブスリープモードになる（ブロック１０３）。アプリケーションマネージャ３２からのリクエストを受け取ると（ブロック１０４）、マスタＪＶＭプロセス３３は起きる（ブロック１０５）。必要とされる場合、アプリケーションマネージャ３２について、ネットワーク接続識別子（ＩＤ）をチェックし（ブロック１０６）、リクエストのタイプを判別する（ブロック１０７）。マスタＪＶＭプロセス３３は、図２を参照しながら上記で説明したコマンドｌｉｓｔ、ｊｅｘｅｃ、ｓｏｕｒｃｅ、ｋｉｌｌを識別する。リクエストタイプがｓｏｕｒｃｅコマンドに対応する場合、マスタＪＶＭプロセス３３にマスタウォームアッププログラム４４を実行するように命令する（ブロック１０８）。マスタＪＶＭプロセス３３は、マスタＪＶＭプロセス３３から発生した後でクローニングされるＪＶＭプロセス３４が精密化されたコンテキストを受け継ぐように、マスタＪＶＭプロセス３３のウォームアップ済み状態を精密化または「向上」させるマスタウォームアッププログラム４４を実行する（ブロック１０９）。リクエストタイプがｊｅｘｅｃコマンドに対応する場合、マスタＪＶＭプロセス３３にプロセスクローニングを介してアプリケーションの実行を開始するように命令する（ブロック１１０）。クローニングされたＪＶＭプロセス３４は、クローニングされ、実行される（ブロック１１１）。詳細については、図８および９を参照しながら下記に説明する。
【００６１】
同時に、アプリケーションマネージャ３２は、メモリバッファ５２または格納されたプロファイル４８からプロファイルデータを収集する（ブロック１１２）。各プロファイルコレクタ３９は、１つ以上のクローニングされたＪＶＭプロセス３４において実行するプロファイラ４０によって生成されるインクリメンタルプロファイルデータを収集し、格納する。ダイナミックにプロファイルされるデータは、アプリケーションマネージャ３２によって規則的にポーリングされ、マスタダイナミックプロファイル４９が生成され、ｓｏｕｒｃｅコマンドを用いてマスタＪＶＭプロセス３３にフィードバックされて（ブロック１０８）、後のクローニングされるＪＶＭプロセス３４が恩恵を受ける。従って、マスタＪＶＭプロセス３３は、インクリメンタルプロファイルデータ（ブロック１１３）のフィードバックを介して更新され、アプリケーションマネージャ３２は、ｓｏｕｒｃｅコマンドを送信することによってマスタＪＶＭプロセス状態をウォームアップする（ブロック１１４）。マスタダイナミックプロファイル４９はまた、次のデバイスブートのときにマスタＪＶＭプロセス３３によって用いられることができる持続性プロファイルの基礎を形成する。持続的に保持される場合（ブロック１１５）、マスタダイナミックプロファイル４９は、例えばファイルにおいて、持続的に格納される（ブロック１１６）。処理は、アプリケーションマネージャ３２、マスタＪＶＭプロセス３３、およびランタイム環境３１が終了されるまで無期限に続けられる。
【００６２】
（マスタＪＶＭプロセスをローディングするルーチン）
図７は、図６の方法１００において用いられる、マスタＪＶＭプロセス３３をローディングするルーチン１２０を示すフローチャートである。このルーチンの目的の１つは、マスタＪＶＭプロセス３３を呼び出し、クローニングされたＪＶＭプロセス３４によって受け継がれるようにマスタＪＶＭプロセス状態をウォームアップすることである。
【００６３】
最初に、マスタＪＶＭプロセス３３は、デバイスブート時において、実行を開始する（ブロック１２１）。マスタＪＶＭプロセス３３は、マスタウォームアッププログラム４４およびマスタダイナミックプロファイル４９を用いて、２組のウォームアップ動作を実行する。マスタウォームアッププログラム４４はスタティックであり、デバイスのブートの間で変化を生じさせないのに対し、マスタダイナミックプロファイル４９は、アプリケーションマネージャ３２によって収集され、適合されたインクリメンタルプロファイルデータに基づく連続的な変化の影響を受ける。まず、マスタＪＶＭプロセス３３はマスタウォームアッププログラム４４を実行して、マスタＪＶＭプロセスコンテキストに格納されるキークラス、方法および初期化状態を用いて、初期化され、準備され、ウォームアップされたＪＶＭプロセスのメモリイメージに類似するメモリイメージが、形成される（ブロック１２２）。第２に、アプリケーションマネージャ３２がマスタダイナミックプロファイル４９を持続的に保持する場合（ブロック１２３）、マスタＪＶＭプロセス３３は、マスタダイナミックプロファイル４９を取り出し、実行する（ブロック１２４）。その後、マスタＪＶＭプロセス３３は、任意の他のウォームアップ動作を完了し（ブロック１２５）、ルーチンは戻る。
【００６４】
（書き込み時コピーがないプロセスクローニングのルーチン）
図８は、図６の方法１００において用いられる、書き込み時コピーがないプロセスをクローニングするルーチン１３０を示すフローチャートである。このルーチンの目的の１つは、書き込み時コピーセメンティクスを提供しないプロセスクローニングを介して、クローニングされたＪＶＭプロセス３４の実行を作成し、開始させることである。
【００６５】
最初に、マスタＪＶＭプロセス３３のコンテキストを含むメモリ空間は、クローニングされたＪＶＭプロセス３４について、新たなメモリ空間に物理的にコピーされる（ブロック１３１）。必要に応じて、マスタＪＶＭプロセス３３は、クローニングされたＪＶＭプロセス３４にわたって、オペレーティングシステムレベルリソース管理パラメータを設定し得る（ブロック１３２）。これには、優先度のスケジューリングならびにプロセッサおよびメモリ消費の制限を設定することが含まれる。他のタイプのリソース管理制御も可能である。その後、クローニングされたＪＶＭプロセス３４は、複製されたマスタＪＶＭプロセスコンテキストを用いて、ランタイム環境３１によって実行される（ブロック１３３）。実行の間、クローニングされたＪＶＭプロセス３４は、アプリケーションをプロファイリングして、インクリメンタルプロファイルデータを作成する（ブロック１３４）。インクリメンタルプロファイルデータが持続的に格納される場合（ブロック１３５）、クローニングされたＪＶＭプロセス３４は、格納されたプロファイル４８として、インクリメンタルプロファイルデータを格納する（ブロック１３６）。そうでない場合、インクリメンタルプロファイルデータは、メモリバッファ５２に一時的にステージされる（ブロック１３７）。ルーチンは、クローニングされたＪＶＭプロセス３４が完了するときに、戻る（ブロック１３８）。
【００６６】
（書き込み時を用いるプロセスクローニングのルーチン）
図９は、図６の方法１００において用いられる、書き込み時コピーを用いるプロセスをクローニングするルーチン１４０を示すフローチャートである。このルーチンの目的の１つは、書き込み時コピーを提供するプロセスクローニングを介して、クローニングされたＪＶＭプロセス３４の実行を作成し、開始することである。
【００６７】
最初に、クローニングされたＪＶＭプロセス３４について、マスタＪＶＭプロセス３３のコンテキストを含むメモリ空間への参照がコピーされる（ブロック１４１）。必要に応じて、マスタＪＶＭプロセス３３は、クローニングされたＪＶＭプロセス３４にわたって、オペレーティングシステムレベルリソース管理パラメータを設定し得る（ブロック１４２）。これには、優先度のスケジューリングならびにプロセッサおよびメモリ消費の制限を設定することが含まれる。他のタイプのリソース管理制御も可能である。その後、クローニングされたＪＶＭプロセス３４は、参照されたマスタＪＶＭプロセスコンテキストを用いて、ランタイム環境３１によって実行される（ブロック１４３）。実行の間、クローニングされたＪＶＭプロセス３４は、アプリケーションをプロファイリングし、インクリメンタルプロファイルデータを作成する（ブロック１４４）。インクリメンタルプロファイルデータが持続的に格納される場合（ブロック１４５）、クローニングされたＪＶＭプロセス３４は、格納されたプロファイル４８として、インクリメンタルプロファイルデータを格納する。そうでない場合、インクリメンタルプロファイルデータは、メモリバッファ５２に一時的にステージされる（ブロック１４７）。クローニングされたＪＶＭプロセス３４が、マスタＪＶＭプロセスコンテキストへと参照されるメモリ空間に書き込もうとするたび（ブロック１４８）、オペレーティングシステムは、適用可能なメモリセグメントをコピーする（ブロック１４９）。そうでない場合、クローニングされたＪＶＭプロセス３４は、読み出し専用データとして扱われる、参照されたマスタＪＶＭプロセスコンテキストを用い続ける（ブロック１５０）。ルーチンは、クローニングされたＪＶＭプロセス３４が完了するときに、戻る（ブロック１５１）。
【００６８】
本発明は、特に、上記の実施形態を参照して例示および説明されてきたが、当業者であれば、形態および細部における上記および他の変更は、本発明の精神および範囲から逸脱することなく為され得ることを理解する。
【図面の簡単な説明】
【００６９】
【図１】図１は、例として、複数の異機種デバイス上にインプリメントされる、ランタイム環境を示す機能ブロック図である。
【図２】図２は、本発明による、プロセスクローニング環境において、インクリメンタルプロファイリングをダイナミックかつ持続的にトラッキングするシステムを示すブロック図である。
【図３】図３は、例として、メモリにマッピングされるマスタＪＶＭプロセスを示すブロック図である。
【図４】図４は、例として、メモリ空間クローニングを介して、メモリにマッピングされた、マスタＪＶＭプロセスおよびクローニングされたＪＶＭプロセスを示すブロック図である。
【図５Ａ】図５Ａは、例として、書き込み時コピーセマンティクスを用いるメモリ空間クローニングを介して、メモリにマッピングされた、マスタＪＶＭプロセスおよびクローニングされたＪＶＭプロセスを示すブロック図である。
【図５Ｂ】図５Ｂは、例として、書き込み時コピーセマンティクスを用いるメモリ空間クローニングを介して、メモリにマッピングされた、マスタＪＶＭプロセスおよびクローニングされたＪＶＭプロセスを示すブロック図である。
【図６】図６は、本発明による、プロセスクローニングアプリケーション環境において、インクリメンタルプロファイリングデータをダイナミックかつ持続的にトラッキングする方法を示すフローチャートである。
【図７】図７は、図６の方法において用いられる、マスタＪＶＭプロセスをローディングするルーチンを示すフローチャートである。
【図８】図８は、図６の方法において用いられる、書き込み時コピーがないプロセスをクローニングするルーチンを示すフローチャートである。
【図９】図９は、図６の方法において用いられる、書き込み時コピーを用いるプロセスをクローニングするルーチンを示すフローチャートである。
【図１】
0004640728.tif 000002
【図２】
0004640728.tif 000003
【図３】
0004640728.tif 000004
【図４】
0004640728.tif 000005
【図５Ａ】
0004640728.tif 000006
【図５Ｂ】
0004640728.tif 000007
【図６】
0004640728.tif 000008
【図７】
0004640728.tif 000009
【図８】
0004640728.tif 000010
【図９】
0004640728.tif 000011