(58)【調査した分野】(Int.Cl.,DB名)
フレーム・レートと1つまたは複数のソフトウェア・アプリケーション・タスクとに基づき、第1のフレーム・レンダリング開始時刻と第2のフレーム・レンダリング時刻とを決定する工程をさらに備え、
前記将来のアイドル期間は、前記第1のフレーム・レンダリング開始時刻と前記第2のフレーム・レンダリング時刻との間にある、
請求項1に記載のコンピュータが実行する方法。
推定された前記メモリ割当が前記将来のアイドル期間におけるしきい値メモリ割当を満たすと決定する工程をさらに備える、請求項1に記載のコンピュータが実行する方法。
前記複数の所定のソフトウェア・ガベージ・コレクション・イベントは、オブジェクト・マーキングと、ファイナライゼーションと、メモリ・スイーピングとを含む、請求項1に記載のコンピュータが実行する方法。
前記複数のインクリメンタル・オブジェクト・マーキング・タスクは、2つ以上の異なるアイドル期間の間で分割されるようにスケジュールを設定される、請求項9に記載のコンピュータが実行する方法。
前記複数の所定のソフトウェア・ガベージ・コレクション・イベントは、オブジェクト・マーキングと、ファイナライゼーションと、メモリ・スイーピングとを含む、請求項11に記載のシステム。
前記複数のインクリメンタル・オブジェクト・マーキング・タスクは、2つ以上の異なるアイドル期間の間で分割されるようにスケジュールを設定される、請求項18に記載のシステム。
【発明を実施するための形態】
【0008】
主題技術の様々な構成が例示によって図示および説明されている以下の詳細な説明から、主題技術の他の構成が当業者には容易に明らかとなることが理解される。理解されるように、主題技術は他の構成および異なる構成であることが可能であり、その幾つかの詳細は様々な他の態様では修正であることが可能であり、いずれも主題技術の範囲から外れることはない。したがって、図面および詳細な説明は限定ではなく例示と見なされるものである。
【0009】
添付の図面を参照して詳細な説明が行われる。
下述の詳細な説明は主題技術の様々な構成を説明するものとして意図されており、主題技術が実行される唯一の構成を表すことは意図されていない。添付の図面は本明細書に組み込まれ、詳細な説明の一部を構成する。詳細な説明は、主題技術についての十分な理解を提供する目的のため特定の詳細を含む。しかしながら、主題技術が本明細書に記載の特定の詳細に限定されるものではなく、そうした特定の詳細なしで実施されてもよいことは、当業者には明らかであろう。一部の例では、周知の構造および構成要素は、主題技術の概念を曖昧にすることを避けるべく、ブロック図の形態により示されている。
【0010】
主題技術は、ガベージ・コレクションを用いてソフトウェア・アプリケーションのためのメモリを解放するシステムにおける性能の不均一さを減少させるようにプロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定するための機構を含む。メモリ・マネージャおよびタスク・スケジューラ(例えばバックエンド・ソフトウェア・コンポーネント)は、アプリケーションの性能に対するガベージ・コレクションの負の影響を減少させるためになど、いくつかのランタイム推定を実行し、動作中のソフトウェア・アプリケーションによって用いられるメモリのガベージ・コレクションを行うか否か、またいつ行うかを決定する。これに関して、メモリ・マネージャおよびタスク・スケジューラは、プロセッサの将来のアイドル時間や、それらのアイドル時間が生じるときにどれくらいのガベージ・コレクションが必要とされるかを決定し、推定されるガベージ・コレクションを完了するのに必要なガベージ・コレクション・イベントの優先順位を決め、優先順位を決めたガベージ・コレクション・イベントを、決定されたアイドル時間にスケジュールする。
【0011】
一例として、スケジューラはシステムおよびアプリケーション・タスクのスケジュールを設定し、様々なタスク種類(例えば、コンポジタ・タスク、汎用(generic)タスクなど)によってタスクを構成し、どの種類のタスクを特定の時に実行するかを決定する。タスク・スケジューラは、プロセッサがアイドル状態にあるであろう将来の期間を決定する。また、このスケジューラは、どのタスクがアイドル・タスク(例えば、システムの現在の動作または実行中のアプリケーションに必要でないタスク)として分類され得るかも決定する。ガベージ・コレクションは、アイドル・タスクとして分類され得るタスクの一例である。スケジューラは、係属中のアイドル・タスクのキューを維持し、このアイドル・タスクのスケジュールをタスク実行に関するアイドル期間に設定してもよい。
【0012】
メモリ・マネージャは、どれだけのメモリが割り当てられているかを推定するとともに、どれだけのメモリがスケジューラによって決定された将来のアイドル時間において割り当てられている可能性があるかを推定する。これにしたがって、適切なアイドル時間にガベージ・コレクションのスケジュールが設定される。例えば、メモリ・マネージャは、xMBが割り当てられており、割当レートはyMB/msであると決定する。次のアイドル時間が3ミリ秒後である場合、(x+3y)MBが次のアイドル時間までに割り当てられると推定される。この計算に基づき、メモリ・マネージャは、メモリのガベージ・コレクションを行うのにどれくらいの時間が掛かるかを推定する(例えば、過去のガベージ・コレクション・イベントに基づいて)。
【0013】
メモリ・マネージャは、新たに割り当てられたオブジェクトのためのガベージ・コレクション・マーキング、古いオブジェクトのためのガベージ・コレクション・マーキング、ガベージ・コレクション・ファイナライゼーション、およびメモリ・スイーピングを含め、複数の様々なガベージ・コレクション・イベントについて、推定時間を提供してもよい。各推定時間は、来る(upcoming)アイドル時間に対応するそれぞれのイベントや推定されるメモリ割当に基づいてもよい。来るアイドル時間がイベント全体を完了させるには十分に長くないのなら、メモリ・マネージャはイベントを動作のより小さなチャンクに分解してもよい。例えば、ガベージ・コレクションのための古いオブジェクトのマーキングは、複数のインクリメンタル・マーキング・ステップへと分けられてよい。メモリ・マネージャは、各ステップの推定時間を計算し、いくつかの係属中のアイドル時間を通じた推定されるメモリ割当を考慮に入れてもよい。
【0014】
メモリ・マネージャは、メモリ割当がしきい値割当に達した場合、または達すると推定される場合のみ、ガベージ・コレクション・イベントのスケジュールを試みてもよい。しきい値割当は、例えば、所定時間によって(例えば、次のアイドル時間において)割り当てられるのに必要なメモリの所定量、または所定のしきい値割当レートであってよい。メモリ・マネージャは、アイドル・イベントとしてガベージ・コレクション・イベントおよびその推定された完了時刻をタスク・スケジューラに追加してよく、スケジューラは、イベント・サイズおよびスケジュールされたアイドル時間に基づきイベントを選択してよい。ガベージ・コレクション・イベントは、FIFOの順序でグループ化されてもよい。例えば、複数のイベントが、インクリメンタルにオブジェクトのマーキングを行うために要求されてもよく、各イベントが、時間で分割されたチャンク(例えば、10ms、20ms、50msなど)として、スケジュールされてもよい。ガベージ・コレクション・イベントは、スケジュールされた順序で将来のアイドル期間において実行されるように、スケジュールされてもよい。
【0015】
図1には、主題技術の1つまたは複数の態様による、プロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定するための構成要素例を含む、一例のシステム100を示す。システム100は、プロセッサ102およびメモリ104を備える。アプリケーション処理106が開始すると、その処理に対応する実行可能なファイルが、処理106のために割り当てられるメモリ104における仮想アドレス空間へマッピングされる。仮想アドレス空間は、オブジェクト・ヒープ108も含んでよい。オブジェクト・ヒープ108は、アドレス空間へマッピングされた追加のライブラリに利用可能となってもよい。オブジェクト・ヒープ108は、アプリケーションまたはそのアプリケーションが動作するランタイム環境(例えば、オペレーティング・システムまたはバーチャル・マシンを含む)によって管理されてもよい。この管理は、処理106の実行中にメモリ空間を解放するためのガベージ・コレクションを含んでもよい。アプリケーション処理106は、ウェブ・アプリケーション、ウェブ・アプリケーション内のスクリプトまたはコンパイルされた動的プログラミング言語に由来する実行処理、またはランタイム環境内で実行可能な他のアプリケーションであってもよい。
【0016】
システム100は、所与の時間においてメイン・スレッド上でどのタスクを実行することにするかを決定するタスク・スケジューラ110をさらに備える。したがって、タスク・スケジューラ110は、レイテンシの影響を受けやすいタスク(例えば、入力イベントまたはコンポジタ更新)を優先させることが可能である。1つまたは複数の実施形態では、タスク・スケジューラ110は複数のソフトウェア・コンポーネントを備え、1つまたは複数のコンポーネントは、主題技術にしたがって適合されているソフトウェア・ガベージ・コレクタの一部であるか、またはソフトウェア・ガベージ・コレクタ内に埋め込まれている。これに加えてまたは代えて、タスク・スケジューラ110は、ソフトウェア・ガベージ・コレクタと通信する(例えば、API(アプリケーション・プログラム・インタフェース)を介して)1つまたは複数のコンポーネントを備えてもよい。これに関して、タスク・スケジューラ110の1つまたは複数のコンポーネントは、ガベージ・コレクタ内のタスク・スケジューリング関連コンポーネントにプロセッサ・アイドル時間を通知してもよい。したがって、タスク・スケジューラ110のコンポーネントは、タスクが様々なタスク種類(例えば、コンポジタ・タスク、ガベージ・コレクション・タスク、汎用タスクなど)にポストされることを可能とし、これによって(例えば、ガベージ・コレクタ内の)タスク・スケジューラのコンポーネントが特定の時にどの種類のタスクが実行されるかを決定することが可能である。タスク・スケジューラ110は、タスクをアイドル・タスクのカテゴリに分類してもよい。
【0017】
タスク・スケジューラ110は、係属中のアイドル・タスクのキューを維持し、このアイドル・タスクを実行のアイドル期間にスケジュールしてもよい。タスク・スケジューラ110は、アイドル・イベントがフレーム・レイテンシの増加を生じないとき、アイドル・イベントをそれぞれの時間にスケジュールするために、フレーム・ビギン(begin)・イベントおよびフレーム・コミット(commit)・イベントや現在係属中の他のタスクの状態(例えば、より高い優先順位のタスク)についてのドローイング・コンポジタ112からの通知を用いてもよい。また、アイドル・タスクは、より長いアイドル期間(ドローイング・コンポジタ112によってフレームのコミットが行われない)中に、実行されてもよい。タスク・スケジューラ110は、他のタスクに関連してタスクの順序を変更してもよい。各タスクは、タスク・スケジューラ110によって提供されるタスク・デッドラインに関連付けられてよい。デッドラインが終了する前にタスクを完了させることが不可能である場合、そのタスクは次のアイドル期間中に実行するように再スケジュールされてよい。
【0018】
アイドル期間中、スケジューラは係属中のキューから最も古いタスクを取り、残るアイドル期間と等しいかそれより短いデッドラインでその実行をスケジュールしてもよい。タスクがこのデッドラインの前に完了する場合、スケジューラは、デッドラインまでFIFO(先入れ先出し)の順序でアイドル・タスクの実行を継続してもよい。アイドル・タスクが一度だけ実行されてもよく、実行時、デッドラインの終了前に許される時間内に任意の有用な作業をタスクが行うことが可能であるか否かをタスク・スケジューラ110が判定してもよい。有用な作業を行うことが不可能である場合、そのタスクは実行されず、その代わりアイドル・キューに再ポストされてよい。アイドル・タスクの大半は、例えば、フレーム間に実行され得る。これに関して、デッドラインは、x持続時間、例えば、10ms以下、25ms以下、50ms以下の期間であってよい。
【0019】
一部の実施形態では、タスク・スケジューラ110に対しポストされるアイドル・タスクは、インカミング・アイドル・タスク・キューに追加されてもよい。新たなアイドル期間の開始時に、インカミング・タスクは、それらをタスク・スケジューラ110がFIFO方式で実行する係属中のアイドル・タスク・キューへフラッシュされ得る。この例では、デッドラインの終了前にアイドル・タスクが実際の作業を行うことが不可能であった場合であっても、アイドル・タスクは自身の実行中に再ポストされ得る。1つまたは複数の実施形態では、タスク・スケジューラ110は、より高い優先順位のタスク(例えば、コンポジタまたは入力タスク)をアイドル・タスクに優先してアイドル時間にスケジュールしてもよい。
【0020】
タスク・スケジューラ110は、アイドル期間がいつ開始し終了するかを決定するために種々の信号を用いてよい。例えば、タスク・スケジューラ110は、フレームがコミットされた時と次のフレームが開始すると期待される時との間にのみアイドル・タスクがスケジュールされることを保証するべく、ソフトウェア・ドローイング・コンポジタ112からの入力(例えば、ユーザ・インタフェースまたはその一部のドローイングを担うソフトウェア・ランタイム環境またはアプリケーション処理の一部)を用いてもよい。したがって、相互フレーム時間に対するアイドル期間は限定的であり、コンポジタがアクティブでないときには(フレームのドローイングが行われていないので)アイドル期間は生じ得ない。一例は、ある期間にフレームのドローイングが行われていない場合にアイドル期間をトリガする遅延タスクをポストすることを含んでもよい。
【0021】
図1に示すように、システム100は、メモリ・マネージャ114をさらに備えてもよい。メモリ・マネージャ114は、ソフトウェア・ランタイム環境用のメモリを管理し、決定されたメモリ割当に基づき、メモリ割当の監視とタスク・スケジューラ110に対するガベージ・コレクション・イベントのポスト(タスクとしての)とを行うように構成されている。上述のように、メモリ・マネージャ114は、どれだけのメモリが割り当てられているかと、どれだけのメモリがタスク・スケジューラ110によって決定された将来のアイドル時間において割り当てられ得るかとを推定する。
【0022】
メモリ・マネージャ114は、例えば、次のアイドル時間を決定するためにタスク・スケジューラ110のポーリングを行い、割当のレートに基づき次のアイドル時間までにどれだけのメモリが割り当てられるかを決定してもよい。メモリ・マネージャ114は、次いで、例えば、推定されたメモリ割当と過去のガベージ・コレクション・イベントとに基づいて、メモリのガベージ・コレクションを行うのにどれくらいの時間が掛かるかを推定してもよい。例えば、メモリ・マネージャ114は、アプリケーションの平均メモリ割当レート、新しいおよび/または古いオブジェクトのための平均ガベージ・コレクション時間(例えば、MB当たり)、および平均マーキング速度(例えば、MB当たり)に基づき、ガベージ・コレクションの持続時間を推定してもよい、ガベージ・コレクション・イベントの持続時間を推定するための他の因子の例は、ヒープ状態(例えば、フラグメント化(fragmented)、整合(consistent)、破損(corrupted)のパーセンテージ)、コミットされたヒープのパーセンテージ、フリー、予約済み、割当ロード、およびマーキング速度(例えば、過去の速度に基づく)を含み得る。
【0023】
メモリ・マネージャ114は、インクリメンタル・ガベージ・コレクション(例えば、0ms〜XXmsから直線的に構成される)、スカベンジ(scavenge)(例えば、約5〜10ms)、および長いフル(full)・ガベージ・コレクション(例えば30〜XXXms)をトリガしてもよい。メモリ・マネージャ114は、タスクが完了されるべき推定時間を含め、各ガベージ・コレクション・イベントをタスク・スケジューラ110にポストしてもよい。一部の実施形態では、メモリ・マネージャ114は、それらが所定の長さを越える場合、より大きなイベントまたはタスクをより小さなチャンクへと分解してもよく、ガベージ・コレクション・イベントを所定の持続時間(例えば、10msまたは50ms)のタスクへと編制してもよい。
【0024】
1つまたは複数の実施形態では、タスク・スケジューラ110は、係属中のタスク(ガベージ・コレクション・タスクを含む)のグローバル・リストを維持し、それらのタスクを優先させる。一例では、メモリ・マネージャ114は、ガベージ・コレクション・イベントまたはそのイベントの一部を、タスクの優先順位およびイベントの種類(例えば、マーキング、ファイナライゼーション、スイーピング、コンパクション)、およびタスクの推定される実行時間を含め、アイドル・タスクとしてメイン・スレッドにポストしてもよい。このように、メモリ・マネージャ114は、タスク・スケジューラ110にガベージ・コレクション・タスクをポストしてもよく、ドローイング・コンポジタ112は、係属中のアイドル・タスクを実行する良い機会についてタスク・スケジュール110に通知してもよく、タスク・スケジューラ110は、次いで、どのタスクを実行するか、またいつ実行するかを決定してもよい。
【0025】
タスク・マネージャ110およびメモリ・マネージャ114は、タスク編制および優先順位やランタイム環境内に作成される(例えば、1つまたは複数のAPIを通じて)オブジェクトのガベージ・コレクションを管理するためのランタイム環境(例えば、バーチャル・マシン)の外部に実装されてもよい。これに加えてまたは代えて、タスク・マネージャ110およびメモリ・マネージャ114のコンポーネントがランタイム環境の一部であってもよく、ランタイム環境内に埋め込まれてもよい。ランタイム環境は、ウェブブラウザ・アプリケーションの一部であるかまたはウェブブラウザ・アプリケーション内に埋め込まれてもよく、ウェブ・アプリケーション(例えば、JAVASCRIPT(登録商標)およびJAVA(登録商標)アプレット)およびランタイム環境内で動作する他の動的プログラミング言語を担ってもよく、その両方であってもよい。1つまたは複数の実施形態では、ドローイング・コンポジタ112は、アプリケーション処理106のために表示(例えば、1つのウィンドウの)内のフレームの再ドローイングを担うランタイム環境のディスプレイ・レンダリング・コンポーネントであってもよい。
【0026】
図2は、主題技術の態様による、アイドル・タスクを含む係属中のタスクの一例のスケジュールを示す。タスク・スケジューラ110は、ドローイング・コンポジタ112からのフレーム開始時刻202(例えば、所定のフレーム・レートに基づく)の通知を受信し、フレーム開始時刻202に基づきタスクのスケジュールを設定する。示した例は、2つの連続するタスク期間を形成する3つのフレーム開始時刻202を含む。タスク・スケジューラ110は、アプリケーション106からアプリケーション・タスクおよび/またはランタイム環境を受信し、それらをドローイング・レイテンシがフレーム・レートに基づき減少または除去されるように編制する。例えば、タスク・スケジューラ110は、フレーム開始に関するメッセージ(例えば、コンポジタ112からの)用のランタイム環境のコマンド・キューを監視し、連続する開始時刻202の間のアイドル期間204,206を決定してもよい。
【0027】
示すように、タスク・スケジューラ110は、入力タスク208(例えば、ユーザ入力キーまたはコマンドを定義する)およびコンポジタ・タスク210(例えば、フレームのドローイングを行う)などの不可欠なタスクを最初にスケジュールしてもよく、次のフレーム開始までの残りの時間によってアイドル期間204,206が定義される。1つまたは複数の実施形態では、アイドル期間204,206は、例えば、フレーム終了(例えば、フレーム・コミット)時刻から次のフレーム開始時刻202まで、決定されてもよい。アイドル期間204,206は、ガベージ・コレクション・タスクを含め、タスク・キュー中のタスクをポストするためにタスク・スケジューラ110によって用いられてもよい。
【0028】
一部の態様では、アイドル・タスク(例えば、ガベージ・コレクション・タスク)がアイドル期間内に完了されることが不可能な場合がある。例えば、タスク・スケジューラ110は、アイドル・タスク212(50msのタスク)をアイドル期間204にポストすることを試みる。しかしながら、タスク・マネージャ110は1つまたは複数の高優先順位タスク214を既にアイドル期間204にスケジュールしており、アイドル・タスク212を完了させるには50ms未満しか利用可能でない。この状況例では、アイドル・タスク212は直ちに戻され、続くアイドル期間、例えば、
図2のアイドル期間206に再ポストされる(この続くアイドル期間は、再ポストされたタスクを完了させるのに十分に長い持続時間を有する)。
【0029】
一部の実施形態では、タスク・スケジューラ110は、アイドル・タスク実行を1つのフレーム内期間に制限し、現在のデッドライン内に完了不可能なタスクが同じアイドル期間の残りに再ポストされることを防止する。これによって、アイドル期間の残りにタスクが繰り返し再ポストされてCPUパワーを不必要に消費すること(burning)を防止できる。
【0030】
1つまたは複数の実施形態では、タスク・スケジューラ110は、ドローイング・コンポジタ112からの入力に基づき、ドローイング・コンポジタ112によってフレームがコミットされていないより長いアイドル期間を決定してもよい。この例では、アイドル・タスクは、単一のアイドル期間204,206中の所定のチャンク持続時間(例えば、50msのアイドル・タスク)に限定されなくてよい。タスク・スケジューラ110は、任意の必要なバックグラウンド作業を行うべくアイドル期間の全体をスケジュールするように構成されてもよい(つまり、入力イベントのブロッキングを防止し、したがって入力イベントに対する顕著なレイテンシを防止するべく、各所定のチャンク持続時間(例えば、各50ms)の終わりに、スケジュールされたタスクがスケジューリング制御をスケジューラに戻す限りは)。長いアイドル期間204,206(例えば、所定の持続時間を越える)では、同じアイドル期間にタスクが再ポストされることが許可されてもよい。アイドル期間の残りがアイドル・タスク持続時間を完了させるのに十分に長い限り、アイドル・タスクは拒絶されず、したがって、タスクが繰り返し自身の再ポストを試みる可能性が防止される。
【0031】
図3には、主題技術の態様による、プロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定するための第1の例の処理のフローチャートを示す。説明の目的のため、例示的な処理300について、
図1および
図2のコンポーネントに関して本明細書に記載する。さらに説明の目的のため、例示的な処理300のブロックを、逐次的、すなわち、直線的に発生するように本明細書に記載する。しかしながら、例示的な処理300の複数のブロックは並列的に発生してもよい。加えて、例示的な処理300のブロックが示された順序に実行される必要はない、および/または例示的な処理300のブロックのうちの1つ以上は実行される必要がない。
【0032】
示したフローチャート例では、システム100(例えば、タスク・スケジューラ110)は、1つまたは複数のソフトウェア・アプリケーションの実行中(302)にプロセッサ102がアイドル状態にある、将来のアイドル期間(例えば、アイドル期間204)を決定する。上述のように、将来のアイドル期間は、第1のフレーム・レンダリング開始時刻と第2のフレーム・レンダリング時刻とによって決定されてもよい。フレーム開始時刻は、ドローイング・コンポジタ112から決定されてもよい。ドローイング・コンポジタ112は、例えば、所定のフレーム・レートにしたがってタスク・スケジューラ110によりフレームのスケジュールを設定してもよい。例えば、60fps(フレーム/秒)のドローイング・コンポジタは、16.6ms毎に開始するようにフレーム開始時刻をポストする。決定した将来のアイドル期間は、第1のフレーム・レンダリング開始時刻と、アプリケーションまたはランタイム環境によって必要とされるアプリケーション・タスク(例えば、入力タスク、コンポジタ・タスク)を含まない第2のフレーム・レンダリング開始時刻との間の期間であってもよい。
【0033】
ユーザ対話型のアプリケーション(例えば、レイアウトおよびラスタライズを実装するJAVASCRIPT(登録商標)アプリケーション)では、16.6ms超のフレーム計算時間は望ましくない高いレイテンシを有すると考えられる。しかしながら、同じアプリケーションが、実行時、フレーム持続時間より長く、それによって、フレーム・ドローイング中にユーザが知覚可能な望ましくない休止を生じるガベージ・コレクション処理を含んでもよい。例えば、ガベージ・コレクションは、複数の様々なイベント(例えば、スカベンジング、マーキング、およびコミット時にまとめて実行され相当な時間を必要とするマーキングされたオブジェクトのコンパクションを含む)を含んでもよい。ガベージ・コレクションをオフにするとオウト・オブ・メモリ・エラーが生じる可能性があり、プログラム的にガベージ・コレクションを呼び出すことによって、ガベージ・コレクションのヒューリスティックスに負の影響が与えられる可能性がある。多くの例では、アプリケーションはガベージ・コレクタと対話を行うべきではない。したがって、主題技術は、種々のガベージ・コレクション・イベントを、より小さく、より管理しやすいチャンクに(アイドル・タスクとしてタスク・スケジューラ110に対しポストされ、システムがアイドル状態にあるあいだに実行可能である)自動的に分別する。したがって、ガベージ・コレクションは、アプリケーションから隠されたままであるが、フレーム遅延の可能性を減少させる。
【0034】
したがって、ガベージ・コレクション・イベントを分解するために、システム100は、どれだけのガベージ・コレクションが必要かを最初に決定する。これに関して、システム100(例えば、メモリ・マネージャ114)は、将来のアイドル期間について、1つまたは複数のソフトウェア・アプリケーションのためのメモリ割当を推定する(304)。メモリ・マネージャ114は、様々な種類の利用可能なガベージ・コレクション・イベントの各々について、メモリのガベージ・コレクションを行うのにどれくらいの時間が掛かるかを推定してもよい。例えば、メモリ・マネージャ114は、新しいおよび/または古いオブジェクトのためのガベージ・コレクションの持続時間(例えば、MB当たり)、新しいおよび/または古いオブジェクトのマーキング(例えば、MB当たり)、およびコンパクションを推定してもよい。メモリ・マネージャ114は、ヒープ状態(例えば、フラグメント化、整合、破損のパーセンテージ)、コミットされたヒープのパーセンテージ、フリー、予約済み、割当のレート、割当ロード、およびガベージ・コレクションのマーキング速度(例えば、過去の速度に基づく)を含む種々の因子に基づき、各イベントに対する推定値を提供してもよい。
【0035】
メモリ・マネージャ114は、例えば、次のアイドル時間を決定するためにタスク・スケジューラ110のポーリングを行い、次のアイドル時間までに上記の因子に基づきどれだけのメモリが割り当てられるかを割当のレート(過去または現在)に基づき決定してもよい。例えば、メモリ・マネージャ114は、xMBが割り当てられており、現在の割当レートはyMB/msであると決定する。次のアイドル時間がそのとき3ミリ秒である場合、(x+3y)MBが次のアイドル時間までに割り当てられると推定される。割当が決定されると、メモリ・マネージャ114は、各種類のイベントにどれだけの時間が掛かるかを決定してもよい。
【0036】
ガベージ・コレクションのイベントは、所定のイベント・タスクへ分割されてもよく、各イベント・タスクは、一連のサブタスクまたはコマンドを含むイベントのチャンクである。各タスクは、それが所定の持続時間に実行されるように、生成される。例えば、古いオブジェクトのマーキングなどのガベージ・コレクション・イベントに400ms掛かると推定される場合、このイベントは、8つの50msのタスク(または他の所定の持続時間)に分割されてよい。システム100は、任意の所定量の時間に基づき、イベントのためのタスクを生成してもよい。例えば、各タスクは、10ms、25ms、50msなどであってよい。
【0037】
一部の態様では、推定されたメモリ割当は、スケジュールの設定された複数の将来のアイドル時間を通じたメモリ割当に基づいてもよい。例えば、メモリ・マネージャ114は、以前に生成されたガベージ・コレクション・タスク212がアイドル期間204にタスク・スケジューラ110にポストされた後に戻されたと決定してもよい。メモリ・マネージャ114は、次いで、続くアイドル期間206のメモリ割当を再計算してもよい。これに加えてまたは代えて、メモリ・マネージャ114は、ガベージ・コレクション・イベントを単一のアイドル期間に完了させることは不可能であると決定してもよい。したがって、メモリ・マネージャ114は、イベントを完了させるための推定されるアイドル期間の数を決定し、この数のアイドル期間のためのメモリ割当を決定してもよい。
【0038】
図3を参照すると、システム100(例えば、タスク・スケジューラ110)は、決定された将来のアイドル期間と推定された前記メモリ割当とに基づき、複数の所定のソフトウェア・ガベージ・コレクション・イベントのうちの1つを選択する(306)。1つまたは複数の実施形態では、ガベージ・コレクション・イベントは、推定されたメモリ割当が、例えば、決定された将来のアイドル期間にて、しきい値メモリ割当を満たすと最初に決定される場合にのみ選択される。このしきい値は、総割当、割当のレート、新しいまたは古いオブジェクトの割当などに基づいてもよい。1つまたは複数の実施形態では、タスク・スケジューラ110は、イベント・キュー中のガベージ・コレクション・イベントの種類を分析し、システムの性能を最大化するようにイベント(またはイベントのためのタスク)をスケジュールしてもよい。タスク・スケジューラ110(または例えば、タスク・スケジューラ110のコンポーネントに適合したシステム・ガベージ・コレクタ)は、単一のアイドル期間に完了される、またはキュー中のイベントのための最も少ない数のアイドル期間を通じて(例えば、一連のタスクとして)完了されるイベントを選択してもよい。タスク・スケジューラ110は、最小の持続時間または最も少ない数のタスク・チャンクにより最大のメモリ最適化(例えば、ガベージ・コレクションを介する)を提供するイベントのためのタスクをスケジュールしてもよい。
【0039】
1つまたは複数の実施形態では、タスク・スケジューラ110は、1つまたは複数の所定の規則に基づき、スケジュールされるガベージ・コレクション・イベントを選択してもよい。例えば、新しい世代がほぼフル(例えば、90パーセント超)である場合、その新しい世代のガベージ・コレクションが選択されてもよい。オブジェクトのインクリメンタル・マーキング(例えば、複数のオブジェクトが所定の持続時間のチャンク・タスクによりマーキングされる)が、古い世代のオブジェクトがほぼフル(例えば、現在時刻より所定時刻を超えるだけ前に作成されたオブジェクションが90パーセント超フル)である場合に開始されてもよい。続くマーキング・ステップが、より早いアイドル期間にマーキングが開始されたときに選択されてもよい。フル・ガベージ・コレクションは、レイテンシを生じさせることなくガベージ・コレクションを完了させるのに十分なアイドル時間が利用可能であるとタスク・スケジューラ110が決定されるときに開始され、スケジュールされてもよい。
【0040】
一部の態様では、選択されたガベージ・コレクション・イベントがオブジェクト・マーキング・イベントであるとき、イベントは複数のインクリメンタル・オブジェクト・マーキング・タスクへとフラグメント化される。複数のインクリメンタル・オブジェクト・マーキング・タスクのうちの第1のインクリメンタル・オブジェクト・マーキング・タスクは、上述の将来のアイドル期間中に最初に実行されるようにスケジュールされる。上述のように、複数のインクリメンタル・オブジェクト・マーキング・タスクは、2つ以上の異なるアイドル期間の間で分割されるようにスケジュールされてもよい。
【0041】
したがって、推定されたメモリ割当に基づき、複数の所定のソフトウェア・ガベージ・コレクション・イベントの各々を完了させるための推定時間が決定されてよく、ガベージ・コレクション・イベントは、選択されたソフトウェア・ガベージ・コレクション・イベントに対応するそれぞれの推定時間と将来のアイドル期間の持続時間とに基づき選択される。
【0042】
図3を参照すると、システム100(例えば、タスク・スケジューラ110)は、選択されたソフトウェア・ガベージ・コレクション・イベントが将来のアイドル期間中に実行されるようにスケジュールする(308)。これに加えてまたは代えて、1グループのタスクがアイドル期間中にスケジュールされてもよい。例えば、タスク・スケジューラ110は、将来のアイドル期間が1つまたは複数のソフトウェア・アプリケーションのためのフレームをレンダリングする際の休止に対応する(例えば、長いアイドル時間)と決定してもよい。したがって、タスク・スケジューラ110は、1グループのソフトウェア・ガベージ・コレクション・タスクが将来のアイドル期間中に実行されるようにスケジュールしてよく、このグループは、選択されたソフトウェア・ガベージ・コレクション・イベントの少なくとも一部を含む。この例では、グループの持続時間は、単一のそれぞれのフレームの持続時間より大きい(例えば、16.6ms超)。
【0043】
システム100は、次いで、選択されたソフトウェア・ガベージ・コレクション・イベントを将来のアイドル期間中に実行する(310)。上述のように、イベントは、一連のタスク(例えば、各々が所定の持続時間の)として実行されてもよい。一部の例では、イベントは、1つのタスクのみであってもよく、または少数のタスク(同じアイドル期間に実行され得る)であってもよい。しかしながら、この将来のアイドル期間は連続的であってもよく、いくつかのフレーム(例えば、システム・タスクと各フレームの終了との間)に広がってもよい。
【0044】
上述の例示的な処理200,300,400の多くや関連するフィーチャおよびアプリケーションは、コンピュータ可読記憶媒体(コンピュータ可読媒体とも称される)上に記録される一組の命令として記述されるソフトウェア処理として実装され得る。それらの命令が1つ以上のプロセッサ・ユニット(例えば、1つ以上のプロセッサ、プロセッサのコア、または他の処理ユニット)によって実行されるとき、それらの命令によって処理ユニットが命令に示されているアクションを実行する。コンピュータ可読媒体の例は、次に限定されないが、CD−ROM、フラッシュ・ドライブ、RAMチップ、ハード・ドライブ、EPROMなどを含む。コンピュータ可読媒体は、無線でまたは有線接続を通じて送られる搬送波および電気信号を含まない。
【0045】
用語「ソフトウェア」は、適切な場合、リード・オンリ・メモリに存在するファームウェア、または、プロセッサによる処理のためにメモリへと読込可能な磁気ストレージに記憶されるアプリケーションを含むことが意図されている。また、いくつかの実施形態では、主題の開示の複数のソフトウェア態様は、主題の開示の特有のソフトウェア態様を残しながら、より大きなプログラムのサブ部分として実装されることが可能である。いくつかの実施形態では、複数のソフトウェア態様は別個のプログラムとして実装されることも可能である。最後に、本明細書に記載のソフトウェア態様をともに実装する別個のプログラムのいかなる組み合わせも、主題の開示の範囲内にある。いくつかの実施形態では、ソフトウェア・プログラムは、1つ以上の電子システム上で動作するようにインストールされるとき、ソフトウェア・プログラムの動作を実行する1つ以上の特定の機械実装を規定する。
【0046】
コンピュータ・プログラム(プログラム、ソフトウェア、ソフトウェア・アプリケーション、スクリプト、またはコード)は、コンパイル型またはインタプリタ型言語を含む任意の形態のプログラミング言語により書かれてよく、スタンドアロン・プログラムとして、またはモジュール、コンポーネント、サブルーチン、オブジェクト、またはコンピューティング環境における使用に適切な他のユニットとしてを含め、任意の形態によりデプロイされることが可能である。コンピュータ・プログラムはファイルシステム中のファイルに相当し得るが、これは必須ではない。プログラムは、対象のプログラムの専用の単一のファイルにおいて、または協調動作する複数のファイル(例えば、1つ以上のモジュール、サブプログラム、または部分コードを記憶するファイル)において、他のプログラムまたはデータを保持するファイルの一部(例えば、マークアップ言語文書に記憶される1つ以上のスクリプト)に記憶されることが可能である。コンピュータ・プログラムは、1つのコンピュータ、または複数のコンピュータ(1つのサイトに位置するか、複数のサイトを通じて分散され、通信ネットワークによって相互接続される)上で実行されるようにデプロイされることが可能である。
【0047】
図4は、主題技術の1つまたは複数の態様による、プロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定することに関連して用いられる一例の電子システム400を示す図である。電子システム400は、コンピューティング・デバイス100の動作に関連付けられているソフトウェアの実行用のコンピューティング・デバイスであってもよく、処理300の1つまたは複数の部分またはステップであってもよく、
図1〜3によって提供されるコンポーネントおよび処理であってもよい。種々の実施形態では、電子システム400はシステム100を表し得る。これに関して、電子システム400またはシステム100は、タブレット・コンピュータ、ラップトップ、スマートフォン、PDA、または他のタッチ・スクリーンまたはテレビ(それに結合する1つまたは複数のプロセッサが埋め込まれている)、または他の種類の無線接続を有するコンピュータ関連電子デバイスなど、パーソナル・コンピュータまたはモバイル・デバイスであってよい。
【0048】
電子システム400は、様々な種類のコンピュータ可読媒体および様々な他の種類のコンピュータ可読媒体のためのインタフェースを含んでもよい。示した例では、電子システム400は、バス408、処理ユニット412、システム・メモリ404、リード・オンリ・メモリ(ROM)410、パーマネント・ストレージ・デバイス402、入力デバイス・インタフェース414、出力デバイス・インタフェース406、および1つまたは複数のネットワーク・インタフェース416を備える。一部の実施形態では、電子システム400は、上述の種々のコンポーネントおよび処理の動作用の他のコンピューティング・デバイスまたは回路を備えてもよく、それらにインテグレートされてもよい。
【0049】
バス408は、電子システム400の多数の内部デバイスを通信可能に接続する全てのシステム、周辺機器、およびチップセット・バスを集合的に表す。例えば、バス408は、1または複数の処理ユニット412を、ROM410、システム・メモリ404、パーマネント・ストレージ・デバイス402に通信可能に接続する。
【0050】
これらの種々のメモリ・ユニットから、処理ユニット412は、主題の開示の処理を実行するために、実行する命令および処理するデータを取り出す。1つまたは複数の処理ユニットは、様々な実施形態において単一のプロセッサであることも、マルチコア・プロセッサであることも可能である。
【0051】
ROM410は、1または複数の処理ユニット412と電子システムの他のモジュールとによって必要とされる静的データおよび命令を記憶する。一方、パーマネント・ストレージ・デバイス402は、読出/書込メモリ・デバイスである。このデバイスは、電子システム400がオフであるときであっても命令およびデータを記憶する、不揮発性メモリ・ユニットである。主題の開示のいくつかの実施形態では、パーマネント・ストレージ・デバイス402として、マス・ストレージ・デバイス(たとえば、磁気または光ディスク、およびそれに対応するディスク・ドライブ)が用いられる。
【0052】
他の実施形態では、パーマネント・ストレージ・デバイス402として、リムーバブル・ストレージ・デバイス(たとえば、フロッピー(登録商標)・ディスクおよびそれに対応するディスク・ドライブ)が用いられる。パーマネント・ストレージ・デバイス402と同様、システム・メモリ404は読出/書込メモリ・デバイスである。しかしながら、ストレージ・デバイス402と異なり、システム・メモリ404は、揮発性の読出/書込メモリ(ランダム・アクセス・メモリなど)である。システム・メモリ404は、実行時にプロセッサが必要とする命令とデータとの一部を記憶する。いくつかの実施形態では、主題の開示の処理は、システム・メモリ404、パーマネント・ストレージ・デバイス402、および/またはROM410に記憶される。これらの様々なメモリ・ユニットから、1または複数のプロセッサ412は、いくつかの実装の処理を実行するために、実行する命令と処理するデータとを取り出す。
【0053】
また、バス408は、入力デバイス・インタフェース414と出力デバイス・インタフェース406とに接続する。入力デバイス・インタフェース414によって、ユーザが情報を通信し、電子システムに対するコマンドを選択することが可能となる。入力デバイス・インタフェース414とともに用いられる入力デバイスは、例えば、英数キーボードおよびポインティング・デバイス(「カーソル・コントロール・デバイス」とも呼ばれる)を含む。出力デバイス・インタフェース406によって、たとえば、電子システム400によって生成される画像の表示が可能となる。出力デバイス・インタフェース406とともに用いられる出力デバイスは、例えば、プリンタおよびディスプレイ・デバイス(陰極線管(CRT)または液晶ディスプレイ(LCD)など)を含む。いくつかの実施形態は、入力デバイスおよび出力デバイスの両方として機能するタッチ・スクリーンなどのデバイスを含む。
【0054】
最後に、
図4に示すように、バス408は、ネットワーク・インタフェース416を通じて電子システム400をネットワーク(図示せず)に接続する。ネットワーク・インタフェース416は、例えば、無線アクセス・ポイント(例えば、BLUETOOTH(登録商標)またはWiFi)または無線アクセス・ポイントに接続するための無線回路を備えてもよい。また、ネットワーク・インタフェース416は、コンピュータのネットワーク(ローカル・エリア・ネットワーク(「LAN」)、ワイド・エリア・ネットワーク(「WAN」)、無線LAN、またはイントラネット、またはインターネットなどネットワークのネットワーク)の一部にコンピュータを接続するためのハードウェア(例えば、イーサネット(登録商標)・ハードウェア)も備えてよい。電子システム400の要素のいずれかまたは全てが、主題の開示とともに用いられることが可能である。
【0055】
上述のそれらの機能は、コンピュータ・ソフトウェア、ファームウェア、またはハードウェアにより実装可能である。それらの技術は、1つ以上のコンピュータ・プログラム製品を用いて実装可能である。プログラマブル・プロセッサおよびコンピュータは、モバイル・デバイスに含まれてもよいし、モバイル・デバイスとしてパッケージされてもよい。処理およびロジック・フローは、1つ以上のプログラマブル・プロセッサと1つ以上のプログラマブル論理回路とによって実行される。汎用および専用のコンピューティング・デバイスと、ストレージ・デバイスとは、通信ネットワークを通じて相互接続されることが可能である。
【0056】
いくつかの実施形態は、電子部品(機械可読またはコンピュータ可読媒体(これに代えて、コンピュータ可読記憶媒体、機械可読媒体、機械可読記憶媒体とも称される)におけるコンピュータ・プログラム命令を記憶するマイクロ・プロセッサ、ストレージ、メモリなど)を含む。そうしたコンピュータ可読媒体のいくつかの例には、RAM、ROM、読出専用コンパクト・ディスク(CD−ROM)、記録可能コンパクト・ディスク(CD−R)、書換可能コンパクト・ディスク(CD−RW)、読出専用デジタル多用途ディスク(例えば、DVD−ROM、2層DVD−ROM)、種々の記録可能/書換可能DVD(例えば、DVD−RAM、DVD−RW、DVD+RWなど)、フラッシュ・メモリ(例えば、SDカード、ミニSDカード、マイクロSDカードなど)、磁気および/またはソリッド・ステート・ハード・ドライブ、読出専用および記録可能Blu−ray(登録商標)ディスク、超高密度光ディスク、任意の他の光または磁気メディア、およびフロッピー(登録商標)・ディスクが含まれる。コンピュータ可読媒体は、1つ以上のプロセッサにより実行可能であって様々な動作を実行するための命令のセットを含むコンピュータ・プログラムを記憶できる。コンピュータ・プログラムまたはコンピュータ・コードの例には、例えば、コンパイラによって生成される機械コードと、インタプリタを用いてコンピュータ、電子部品、またはマイクロ・プロセッサによって実行される、より高レベルのコードを含むファイルと、が含まれる。
【0057】
上述の記載では主としてソフトウェアを実行するマイクロ・プロセッサまたはマルチコア・プロセッサについて言及しているが、いくつかの実施形態は1つ以上の集積回路(特定用途向け集積回路(ASIC)またはフィールド・プログラマブル・ゲート・アレイ(FPGA)など)によって実行される。いくつかの実施形態では、そうした集積回路は回路自体に記憶されている命令を実行する。
【0058】
本明細書および本出願の任意の請求項で用いられる、用語「コンピュータ」、「サーバ」、「プロセッサ」、および「メモリ」はすべて、電子デバイスまたは他の技術分野のデバイスを指す。これらの用語から、人または人の集団は除外される。詳細に説明する目的において、表示または表示するという用語は、電子デバイス上での表示を意味する。本明細書および本出願の任意の請求項で用いられる、用語「1つのコンピュータ可読媒体」および「複数のコンピュータ可読媒体」は全体として、コンピュータに可読な形式により情報を記憶する有形の物理的な物体に限定される。これらの用語から、任意の無線信号、有線ダウンロード信号、および他の任意の一時的な信号は除外される。
【0059】
ユーザとの対話を提供するために、本明細書に記載の主題技術の実装は、ユーザに情報を表示するためのディスプレイ・デバイス(例えば、CRT(陰極線管)またはLCD(液晶ディスプレイ)モニタと、ユーザがコンピュータに入力を提供可能なキーボードおよびポインティング・デバイス(例えば、マウスまたはトラックボール)とを有するコンピュータ上に実装されてよい。他の種類のデバイスも、ユーザとの対話用に同様に用いられてよい。例えば、ユーザに対し提供されるフィードバックは任意の形態の知覚フィードバック(例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック)であってよく、ユーザからの入力は、音響、音声、または触覚の入力を含む任意の形態により受信されてよい。これに加えて、ユーザによって用いられるデバイスとの間のドキュメントの送受信によって(例えば、ユーザのクライアント・デバイス上のウェブ・ブラウザから受信されるリクエストに応じて該ウェブ・ブラウザにウェブ・ページを送信することによって)、コンピュータはユーザと対話することが可能である。
【0060】
本明細書に記載の主題の実施形態は、バックエンド・コンポーネントを備える(例えば、データ・サーバとして)か、ミドルウェア・コンポーネント(例えば、アプリケーション・サーバ)を備えるか、またはフロントエンド・コンポーネント(例えば、本明細書に記載の主題の実装とユーザが対話可能なグラフィカル・ユーザ・インタフェースまたはウェブ・ブラウザを有するクライアント・コンピュータ)を備えるコンピューティング・システム、または1つ以上のそうしたバックエンド、ミドルウェア、またはフロントエンド・コンポーネントの任意の組み合わせにより実装されることが可能である。システムのコンポーネントは、任意の形態または媒体のデジタル・データ通信(例えば、通信ネットワーク)によって相互接続されることが可能である。通信ネットワークなどネットワークの例には、ローカル・エリア・ネットワーク(LAN)およびワイド・エリア・ネットワーク(WAN)、インター・ネットワーク(例えば、インターネット)、およびピア・ツー・ピア・ネットワーク(例えば、アドホック・ピア・ツー・ピア・ネットワーク)が含まれてよい。
【0061】
コンピューティング・システムは、クライアントおよびサーバを備えることが可能である。クライアントおよびサーバは、一般に互いに離れており、通常、通信ネットワークを通じて対話する。クライアントおよびサーバの関係は、それぞれのコンピュータ上で動作しており互いにクライアント−サーバ関係を有するコンピュータ・プログラムによって生じる。いくつかの実施形態では、サーバがデータ(例えば、HTMLページ)をクライアント・デバイスに(例えば、該クライアント・デバイスと対話するユーザにデータを表示する目的、および、該ユーザからユーザ入力を受信する目的で)送信する。クライアント・デバイスにおいて生成されたデータ(例えば、ユーザ対話の結果)は、サーバにおいてクライアント・デバイスから受信されることが可能である。
【0062】
当業者には、本明細書に記載の種々の例示的なブロック、モジュール、要素、コンポーネント、方法、およびアルゴリズムが、電子ハードウェア、コンピュータ・ソフトウェア、または両者の組み合わせとして実装されてもよいことが認められるだろう。ハードウェアおよびソフトウェアの相互交換性を示すため、種々の例示的なブロック、モジュール、要素、コンポーネント、方法、およびアルゴリズムについて、一般にそれらの機能に関して上述した。そうした機能がハードウェアとして実装されるかソフトウェアとして実装されるかは、特定の用途およびシステム全体に課される設計制約に応じて異なる。当業者は、各特定のアプリケーションについて様々な手法により記載の機能を実装してよい。種々のコンポーネントおよびブロックは、全て主題技術の範囲から逸脱することなく、異なって配置されてもよい(例えば、異なる順序で配置されてもよく、異なるやり方で分割されてもよい)。
【0063】
開示の処理における工程の特定の順序または階層はアプローチの一例であることが理解される。設計の選好に基づき、処理の工程の特定の順序または階層が再構成されてよいことが理解される。一部の工程は同時に実行されてもよい。添付の方法の請求項では、種々の工程の要素が一例の順序で提示されるが、添付の方法の請求項を提示された特定の順序または階層に限定することは意図していない。
【0064】
上述の記載は当業者が本明細書に記載の様々な態様を実施することを可能にするために提供される。上述の記載は主題技術の種々の例を提供し、主題技術はそれらの例に限定されない。それらの態様に対する様々な修正形態が容易に識別され、本明細書に規定される一般原則は他の態様にも適用されてよい。したがって、特許請求の範囲は、本明細書に示される態様に限定されることを意図したものでなく、請求項の文言に一致する範囲全てが与えられる。単数の要素に対する参照は、特にそのように具体的に言及されていない限り、「1つかつ1つのみ(one and only one)」を意味することは意図されておらず、むしろ「1つ以上」を意味することが意図される。用語「いくつか」は、(他に具体的に言及されている場合を除いて)1つ以上を指す。男性の指示代名詞(例えば、「彼の」)は、女性および中性(例えば、「彼女の」「その」)を含み、その逆も同様である。見出しおよび小見出しは、それらがある場合、便宜上用いられているに過ぎず、本発明を限定するものではない。
【0065】
本明細書において用いられる用語ウェブサイトは、1つまたは複数のウェブ・ページ、ウェブ関連のコンテンツをホストまたは記憶するために用いられる1つまたは複数のサーバなどを含め、ウェブサイトの任意の態様を含んでよい。したがって、用語ウェブサイトは、用語ウェブ・ページおよびサーバと交換可能に用いられてよい。述語「ように構成されている」、「ように動作可能である」、および「ようにプログラムされている」は、主題の任意の特定の有形または無形の修正形態を意味するのではなく、むしろ、交換可能に用いられることが意図される。例えば、動作またはコンポーネントを監視および制御するように構成されているプロセッサは、動作を監視および制御するようにプログラムされているプロセッサ、または動作を監視および制御するように動作可能であるプロセッサも意味してよい。同様に、コードを実行するように構成されているプロセッサは、コードを実行するようにプログラムされているプロセッサ、またはコードを実行するように動作可能であるプロセッサと解することが可能である。
【0066】
例えば、「態様」という語句は、そうした態様が主題技術に不可欠であること、またはそうした態様が主題技術の全ての構成に適用されることを意味していない。1つの態様に関する開示が全ての構成に適用されてもよく、1つ以上の構成に適用されてもよい。1つの態様によって、1つまたは複数の例が提供されてよい。例えば、1つの態様という語句が1つ以上の態様を指してもよいし、1つ以上の態様という語句が1つの態様を指してもよい。例えば、「実施形態」という語句は、そうした実施形態が主題技術に不可欠であること、またはそうした実施形態が主題技術の全ての構成に適用されることを意味していない。1つの実施形態に関係のある開示は、すべての実施形態、または1つまたは複数の実施形態に当てはまってもよい。1つの実施形態によって、1つまたは複数の例が提供されてよい。例えば、1つの「実施形態」という語句が1つ以上の実施形態を指してもよいし、1つ以上の実施形態という語句が1つの実施形態を指してもよい。例えば、「構成」という語句は、そうした構成が主題技術に不可欠であること、またはそうした構成が主題技術の全ての構成に適用されることを意味していない。1つの構成に関する開示が全ての構成に適用されてもよく、1つ以上の構成に適用されてもよい。1つの構成によって、1つまたは複数の例が提供されてよい。例えば、1つの「構成」という語句が1つ以上の構成を指してもよいし、1つ以上の構成という語句が1つの構成を指してもよい。
【0067】
単語「例」は本明細書では「一例または例示として働く」を意味するように用いられる。「例」として本明細書に記載される任意の態様または設計は、必ずしも他の態様または設計に対して好適であるまたは有利であるものとして解されるべきものではない。
【0068】
本開示全体を通じて記載される当業者に知られているまたは後に知られるようになる様々な態様の要素に対する全ての構造的および機能的な均等物は、引用によって本明細書に明確に援用され、特許請求の範囲によって包含されることが意図される。さらにまた、本明細書の開示のいずれについても、そうした開示が特許請求の範囲に明示的に記載されているか否かに拘わらず、公衆に捧げられることは意図されていない。特許請求の範囲のいずれの要素も、その要素が「means for」の語句を用いて明示的に記載されていない限り(方法の請求項の場合には「step for」の語句を用いて記載されていない限り)、米国特許法第112条第6段落の下で解釈されるべきものではない。さらにまた、用語「備える」、「有する」などが明細書または特許請求の範囲において用いられる限りにおいて、そうした用語は、特許請求の範囲において用語「含む」が移行語として用いられるときに「含む」が解釈されるのと同様に包括を意図している。