(57)【特許請求の範囲】
【請求項１】
コンピュータが実行する方法であって、
１つまたは複数のプロセッサが１つまたは複数のソフトウェア・アプリケーションの実行中にアイドル状態にある、将来のアイドル期間を決定する工程と、
前記将来のアイドル期間について、前記１つまたは複数のソフトウェア・アプリケーションのための将来のメモリ割当を推定する推定工程と、
決定された前記将来のアイドル期間と推定された前記将来のメモリ割当とに基づき、複数の所定のソフトウェア・ガベージ・コレクション・イベントのうちの１つを選択する選択工程と、
選択された前記ソフトウェア・ガベージ・コレクション・イベントが前記将来のアイドル期間中に実行されるようにスケジュールを設定する工程と、
選択された前記ソフトウェア・ガベージ・コレクション・イベントを前記将来のアイドル期間中に実行する工程と、
を備える方法。
【請求項２】
前記選択工程は、
推定された前記メモリ割当に基づき、前記複数の所定のソフトウェア・ガベージ・コレクション・イベントの各々を完了させるための推定時間を決定する工程と、
選択された前記ソフトウェア・ガベージ・コレクション・イベントに対応するそれぞれの推定時間と将来のアイドル期間の持続時間とに基づき、選択された前記ソフトウェア・ガベージ・コレクション・イベントを選択する工程と、
を含む、請求項１に記載のコンピュータが実行する方法。
【請求項３】
フレーム・レートと１つまたは複数のソフトウェア・アプリケーション・タスクとに基づき、第１のフレーム・レンダリング開始時刻と第２のフレーム・レンダリング時刻とを決定する工程をさらに備え、
前記将来のアイドル期間は、前記第１のフレーム・レンダリング開始時刻と前記第２のフレーム・レンダリング時刻との間にある、
請求項１に記載のコンピュータが実行する方法。
【請求項４】
選択された前記ソフトウェア・ガベージ・コレクション・イベントは、複数のガベージ・コレクション・タスクからなる１グループのガベージ・コレクション・タスクを含み、前記方法は、
前記将来のアイドル期間が前記１つまたは複数のソフトウェア・アプリケーションのためのフレームをレンダリングする際の休止に対応すると決定する工程と、
前記１グループの前記ガベージ・コレクション・タスクが前記将来のアイドル期間中に実行されるようにスケジュールを設定する工程であって、前記１グループの持続時間はそれぞれのフレームの持続時間より大きい、工程と、をさらに備える、請求項１に記載のコンピュータが実行する方法。
【請求項５】
推定された前記メモリ割当が前記将来のアイドル期間におけるしきい値メモリ割当を満たすと決定する工程をさらに備える、請求項１に記載のコンピュータが実行する方法。
【請求項６】
前記推定工程は、メモリ割当の現在のレートを決定する工程を含み、
推定された前記メモリ割当がしきい値メモリ割当を満たすとの決定は、メモリ割当の前記現在のレートに基づく、請求項５に記載のコンピュータが実行する方法。
【請求項７】
推定された前記メモリ割当は、スケジュールの設定された複数の将来のアイドル時間を通じたメモリ割当に基づく、請求項１に記載のコンピュータが実行する方法。
【請求項８】
前記複数の所定のソフトウェア・ガベージ・コレクション・イベントは、オブジェクト・マーキングと、ファイナライゼーションと、メモリ・スイーピングとを含む、請求項１に記載のコンピュータが実行する方法。
【請求項９】
選択された前記ソフトウェア・ガベージ・コレクション・イベントは、オブジェクト・マーキング・イベントであり、前記方法は、
前記オブジェクト・マーキング・イベントを複数のインクリメンタル・オブジェクト・マーキング・タスクへとフラグメント化する工程であって、前記複数のインクリメンタル・オブジェクト・マーキング・タスクのうちの第１のインクリメンタル・オブジェクト・マーキング・タスクは、前記将来のアイドル期間中に最初に実行されるようにスケジュールを設定される、工程をさらに備える、請求項８に記載のコンピュータが実行する方法。
【請求項１０】
前記複数のインクリメンタル・オブジェクト・マーキング・タスクは、２つ以上の異なるアイドル期間の間で分割されるようにスケジュールを設定される、請求項９に記載のコンピュータが実行する方法。
【請求項１１】
システムであって、
１つまたは複数のプロセッサと、
命令を含むメモリと、を備え、前記命令は前記１つまたは複数のプロセッサによる実行時、前記１つまたは複数のプロセッサに、
前記１つまたは複数のプロセッサが１つまたは複数のソフトウェア・アプリケーションの実行中にアイドル状態にある、将来のアイドル期間を決定する工程と、
前記将来のアイドル期間について、前記１つまたは複数のソフトウェア・アプリケーションのための将来のメモリ割当を推定する推定工程と、
決定された前記将来のアイドル期間と推定された前記将来のメモリ割当とに基づき、複数の所定のソフトウェア・ガベージ・コレクション・イベントのうちの１つを選択する選択工程と、
選択された前記ソフトウェア・ガベージ・コレクション・イベントが前記将来のアイドル期間中に実行されるようにスケジュールを設定する工程と、
選択された前記ソフトウェア・ガベージ・コレクション・イベントを前記将来のアイドル期間中に実行する工程と、
を行わせる、システム。
【請求項１２】
前記命令は、実行時、前記１つまたは複数のプロセッサに、
推定された前記メモリ割当に基づき、前記複数の所定のソフトウェア・ガベージ・コレクション・イベントの各々を完了させるための推定時間を決定する工程と、
選択された前記ソフトウェア・ガベージ・コレクション・イベントに対応するそれぞれの推定時間と将来のアイドル期間の持続時間とに基づき、選択された前記ソフトウェア・ガベージ・コレクション・イベントを選択する工程と、
をさらに行わせる、請求項１１に記載のシステム。
【請求項１３】
前記命令は、実行時、前記１つまたは複数のプロセッサに、
フレーム・レートと１つまたは複数のソフトウェア・アプリケーション・タスクとに基づき、第１のフレーム・レンダリング開始時刻と第２のフレーム・レンダリング時刻とを決定する工程をさらに行わせ、
前記将来のアイドル期間は、前記第１のフレーム・レンダリング開始時刻と前記第２のフレーム・レンダリング時刻との間にある、請求項１１に記載のシステム。
【請求項１４】
選択された前記ソフトウェア・ガベージ・コレクション・イベントは、複数のガベージ・コレクション・タスクからなる１グループのガベージ・コレクション・タスクを含み、前記命令は、実行時、前記１つまたは複数のプロセッサに、
前記将来のアイドル期間が前記１つまたは複数のソフトウェア・アプリケーションのためのフレームをレンダリングする際の休止に対応すると決定する工程と、
前記１グループの前記ガベージ・コレクション・タスクが前記将来のアイドル期間中に実行されるようにスケジュールを設定する工程であって、前記１グループの持続時間はそれぞれのフレームの持続時間より大きい、工程と、
をさらに行わせる、請求項１１に記載のシステム。
【請求項１５】
前記命令は、実行時、前記１つまたは複数のプロセッサに、
推定された前記メモリ割当が前記将来のアイドル期間におけるしきい値メモリ割当を満たすと決定する工程をさらに行わせ、
前記推定工程は、メモリ割当の現在のレートを決定する工程を含み、
推定された前記メモリ割当がしきい値メモリ割当を満たすとの決定は、メモリ割当の前記現在のレートに基づく、請求項１１に記載のシステム。
【請求項１６】
推定された前記メモリ割当は、スケジュールの設定された複数の将来のアイドル時間を通じたメモリ割当に基づく、請求項１１に記載のシステム。
【請求項１７】
前記複数の所定のソフトウェア・ガベージ・コレクション・イベントは、オブジェクト・マーキングと、ファイナライゼーションと、メモリ・スイーピングとを含む、請求項１１に記載のシステム。
【請求項１８】
選択された前記ソフトウェア・ガベージ・コレクション・イベントは、オブジェクト・マーキング・イベントであり、前記命令は、実行時、前記１つまたは複数のプロセッサに、
前記オブジェクト・マーキング・イベントを複数のインクリメンタル・オブジェクト・マーキング・タスクへとフラグメント化する工程であって、前記複数のインクリメンタル・オブジェクト・マーキング・タスクのうちの第１のインクリメンタル・オブジェクト・マーキング・タスクは、前記将来のアイドル期間中に最初に実行されるようにスケジュールを設定される、工程をさらに行わせる、請求項１７に記載のシステム。
【請求項１９】
前記複数のインクリメンタル・オブジェクト・マーキング・タスクは、２つ以上の異なるアイドル期間の間で分割されるようにスケジュールを設定される、請求項１８に記載のシステム。
【請求項２０】
命令を含む非一時的なコンピュータ可読記憶媒体であって、前記命令は、実行時、
１つまたは複数のプロセッサが１つまたは複数のソフトウェア・アプリケーションの実行中にアイドル状態にある、将来のアイドル期間を決定する工程と、
前記将来のアイドル期間について、前記１つまたは複数のソフトウェア・アプリケーションのための将来のメモリ割当を推定する推定工程と、
決定された前記将来のアイドル期間と推定された前記将来のメモリ割当とに基づき、複数の所定のソフトウェア・ガベージ・コレクション・タスクのうちの１つを選択する選択工程と、
選択された前記ソフトウェア・ガベージ・コレクション・タスクが前記将来のアイドル期間中に実行されるようにスケジュールを設定する工程と、
選択された前記ソフトウェア・ガベージ・コレクション・タスクを前記将来のアイドル期間中に実行する工程と、
を行わせる、非一時的なコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、アイドル時間のソフトウェア・ガベージ・コレクションに関する。
【背景技術】
【０００２】
ガベージ・コレクションは自動化されたメモリ管理の一形態である。ガベージ・コレクションでは、ランタイム環境によって、その環境内で動作しているソフトウェア・アプリケーションがもはや使用していないデータ・オブジェクトにより占められているメモリの回収が試みられる。ソフトウェア・ガベージ・コレクションの１つの目標は、よりリーンな動作環境を提供するべくメモリを解放し、それによって動作効率を向上させることである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、ソフトウェア・ガベージ・コレクションが生じる時点は予測不能であることから、ユーザ・エクスペリエンスに負の影響を与える場合がある。例えば、ソフトウェア・ガベージ・コレクションにより、ユーザ・インタフェースのレンダリング中やユーザがユーザ・インタフェースと対話している期間中に休止が生じる場合がある。さらにまた、ガベージ・コレクション用にマーキングが行われるメモリの量はしばしば変化し、未使用のアプリケーション・メモリを解放するために実行時間の延長が必要とされる場合がある。
【課題を解決するための手段】
【０００４】
本出願の主題技術は、プロセッサ・アイドル期間中におけるソフトウェア・ガベージ・コレクションのスケジュールを設定するためのシステムと、そのためにコンピュータが実行する方法とを提供する。１つまたは複数の実施形態では、方法は、１つまたは複数のプロセッサが１つまたは複数のソフトウェア・アプリケーションの実行中にアイドル状態にある、将来のアイドル期間を決定する工程と、前記将来のアイドル期間について、前記１つまたは複数のソフトウェア・アプリケーションのためのメモリ割当を推定する推定工程と、決定された前記将来のアイドル期間と推定された前記メモリ割当とに基づき、複数の所定のソフトウェア・ガベージ・コレクション・イベントのうちの１つを選択する選択工程と、選択された前記ソフトウェア・ガベージ・コレクション・イベントが前記将来のアイドル期間中に実行されるようにスケジュールを設定する工程と、選択された前記ソフトウェア・ガベージ・コレクション・イベントを前記将来のアイドル期間中に実行する工程と、を備える。他の態様は、このコンピュータが実行する方法の実装のための対応するシステム、装置、およびコンピュータ・プログラム製品を含む。
【０００５】
１つまたは複数の実施形態では、システムは１つまたは複数のプロセッサと、命令を含むメモリとを備える。この命令は前記１つまたは複数のプロセッサによる実行時、前記１つまたは複数のプロセッサに、前記１つまたは複数のプロセッサが１つまたは複数のソフトウェア・アプリケーションの実行中にアイドル状態にある、将来のアイドル期間を決定する工程と、前記将来のアイドル期間について、前記１つまたは複数のソフトウェア・アプリケーションのためのメモリ割当を推定する推定工程と、決定された前記将来のアイドル期間と推定された前記メモリ割当とに基づき、複数の所定のソフトウェア・ガベージ・コレクション・イベントのうちの１つを選択する選択工程と、選択された前記ソフトウェア・ガベージ・コレクション・イベントが前記将来のアイドル期間中に実行されるようにスケジュールを設定する工程と、選択された前記ソフトウェア・ガベージ・コレクション・イベントを前記将来のアイドル期間中に実行する工程と、を行わせる。他の態様は、上記のシステムの実装のための対応する装置およびコンピュータ・プログラム製品を含む。
【０００６】
１つまたは複数の実施形態では、コンピュータ可読記憶媒体は命令を含み、この命令は、実行時、１つまたは複数のプロセッサが１つまたは複数のソフトウェア・アプリケーションの実行中にアイドル状態にある、将来のアイドル期間を決定する工程と、前記将来のアイドル期間について、前記１つまたは複数のソフトウェア・アプリケーションのためのメモリ割当を推定する推定工程と、決定された前記将来のアイドル期間と推定された前記メモリ割当とに基づき、複数の所定のソフトウェア・ガベージ・コレクション・タスクのうちの１つを選択する選択工程と、選択された前記ソフトウェア・ガベージ・コレクション・タスクが前記将来のアイドル期間中に実行されるようにスケジュールを設定する工程と、選択された前記ソフトウェア・ガベージ・コレクション・タスクを前記将来のアイドル期間中に実行する工程と、を行わせる。他の態様は、上記のコンピュータ可読記憶媒体の実装のための対応する方法、装置、およびコンピュータ・プログラム製品を含む。
【図面の簡単な説明】
【０００７】
【図１】プロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定するための構成要素例を含む、一例のシステムを示す図。
【図２】アイドル・タスクを含む係属中のタスクの一例のスケジュールを示す図。
【図３】プロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定するための第１の例の処理のフローチャート。
【図４】プロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定することに関連して用いられる一例の電子システムを示す図。
【発明を実施するための形態】
【０００８】
主題技術の様々な構成が例示によって図示および説明されている以下の詳細な説明から、主題技術の他の構成が当業者には容易に明らかとなることが理解される。理解されるように、主題技術は他の構成および異なる構成であることが可能であり、その幾つかの詳細は様々な他の態様では修正であることが可能であり、いずれも主題技術の範囲から外れることはない。したがって、図面および詳細な説明は限定ではなく例示と見なされるものである。
【０００９】
添付の図面を参照して詳細な説明が行われる。
下述の詳細な説明は主題技術の様々な構成を説明するものとして意図されており、主題技術が実行される唯一の構成を表すことは意図されていない。添付の図面は本明細書に組み込まれ、詳細な説明の一部を構成する。詳細な説明は、主題技術についての十分な理解を提供する目的のため特定の詳細を含む。しかしながら、主題技術が本明細書に記載の特定の詳細に限定されるものではなく、そうした特定の詳細なしで実施されてもよいことは、当業者には明らかであろう。一部の例では、周知の構造および構成要素は、主題技術の概念を曖昧にすることを避けるべく、ブロック図の形態により示されている。
【００１０】
主題技術は、ガベージ・コレクションを用いてソフトウェア・アプリケーションのためのメモリを解放するシステムにおける性能の不均一さを減少させるようにプロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定するための機構を含む。メモリ・マネージャおよびタスク・スケジューラ（例えばバックエンド・ソフトウェア・コンポーネント）は、アプリケーションの性能に対するガベージ・コレクションの負の影響を減少させるためになど、いくつかのランタイム推定を実行し、動作中のソフトウェア・アプリケーションによって用いられるメモリのガベージ・コレクションを行うか否か、またいつ行うかを決定する。これに関して、メモリ・マネージャおよびタスク・スケジューラは、プロセッサの将来のアイドル時間や、それらのアイドル時間が生じるときにどれくらいのガベージ・コレクションが必要とされるかを決定し、推定されるガベージ・コレクションを完了するのに必要なガベージ・コレクション・イベントの優先順位を決め、優先順位を決めたガベージ・コレクション・イベントを、決定されたアイドル時間にスケジュールする。
【００１１】
一例として、スケジューラはシステムおよびアプリケーション・タスクのスケジュールを設定し、様々なタスク種類（例えば、コンポジタ・タスク、汎用（ｇｅｎｅｒｉｃ）タスクなど）によってタスクを構成し、どの種類のタスクを特定の時に実行するかを決定する。タスク・スケジューラは、プロセッサがアイドル状態にあるであろう将来の期間を決定する。また、このスケジューラは、どのタスクがアイドル・タスク（例えば、システムの現在の動作または実行中のアプリケーションに必要でないタスク）として分類され得るかも決定する。ガベージ・コレクションは、アイドル・タスクとして分類され得るタスクの一例である。スケジューラは、係属中のアイドル・タスクのキューを維持し、このアイドル・タスクのスケジュールをタスク実行に関するアイドル期間に設定してもよい。
【００１２】
メモリ・マネージャは、どれだけのメモリが割り当てられているかを推定するとともに、どれだけのメモリがスケジューラによって決定された将来のアイドル時間において割り当てられている可能性があるかを推定する。これにしたがって、適切なアイドル時間にガベージ・コレクションのスケジュールが設定される。例えば、メモリ・マネージャは、ｘＭＢが割り当てられており、割当レートはｙＭＢ／ｍｓであると決定する。次のアイドル時間が３ミリ秒後である場合、（ｘ＋３ｙ）ＭＢが次のアイドル時間までに割り当てられると推定される。この計算に基づき、メモリ・マネージャは、メモリのガベージ・コレクションを行うのにどれくらいの時間が掛かるかを推定する（例えば、過去のガベージ・コレクション・イベントに基づいて）。
【００１３】
メモリ・マネージャは、新たに割り当てられたオブジェクトのためのガベージ・コレクション・マーキング、古いオブジェクトのためのガベージ・コレクション・マーキング、ガベージ・コレクション・ファイナライゼーション、およびメモリ・スイーピングを含め、複数の様々なガベージ・コレクション・イベントについて、推定時間を提供してもよい。各推定時間は、来る（ｕｐｃｏｍｉｎｇ）アイドル時間に対応するそれぞれのイベントや推定されるメモリ割当に基づいてもよい。来るアイドル時間がイベント全体を完了させるには十分に長くないのなら、メモリ・マネージャはイベントを動作のより小さなチャンクに分解してもよい。例えば、ガベージ・コレクションのための古いオブジェクトのマーキングは、複数のインクリメンタル・マーキング・ステップへと分けられてよい。メモリ・マネージャは、各ステップの推定時間を計算し、いくつかの係属中のアイドル時間を通じた推定されるメモリ割当を考慮に入れてもよい。
【００１４】
メモリ・マネージャは、メモリ割当がしきい値割当に達した場合、または達すると推定される場合のみ、ガベージ・コレクション・イベントのスケジュールを試みてもよい。しきい値割当は、例えば、所定時間によって（例えば、次のアイドル時間において）割り当てられるのに必要なメモリの所定量、または所定のしきい値割当レートであってよい。メモリ・マネージャは、アイドル・イベントとしてガベージ・コレクション・イベントおよびその推定された完了時刻をタスク・スケジューラに追加してよく、スケジューラは、イベント・サイズおよびスケジュールされたアイドル時間に基づきイベントを選択してよい。ガベージ・コレクション・イベントは、ＦＩＦＯの順序でグループ化されてもよい。例えば、複数のイベントが、インクリメンタルにオブジェクトのマーキングを行うために要求されてもよく、各イベントが、時間で分割されたチャンク（例えば、１０ｍｓ、２０ｍｓ、５０ｍｓなど）として、スケジュールされてもよい。ガベージ・コレクション・イベントは、スケジュールされた順序で将来のアイドル期間において実行されるように、スケジュールされてもよい。
【００１５】
図１には、主題技術の１つまたは複数の態様による、プロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定するための構成要素例を含む、一例のシステム１００を示す。システム１００は、プロセッサ１０２およびメモリ１０４を備える。アプリケーション処理１０６が開始すると、その処理に対応する実行可能なファイルが、処理１０６のために割り当てられるメモリ１０４における仮想アドレス空間へマッピングされる。仮想アドレス空間は、オブジェクト・ヒープ１０８も含んでよい。オブジェクト・ヒープ１０８は、アドレス空間へマッピングされた追加のライブラリに利用可能となってもよい。オブジェクト・ヒープ１０８は、アプリケーションまたはそのアプリケーションが動作するランタイム環境（例えば、オペレーティング・システムまたはバーチャル・マシンを含む）によって管理されてもよい。この管理は、処理１０６の実行中にメモリ空間を解放するためのガベージ・コレクションを含んでもよい。アプリケーション処理１０６は、ウェブ・アプリケーション、ウェブ・アプリケーション内のスクリプトまたはコンパイルされた動的プログラミング言語に由来する実行処理、またはランタイム環境内で実行可能な他のアプリケーションであってもよい。
【００１６】
システム１００は、所与の時間においてメイン・スレッド上でどのタスクを実行することにするかを決定するタスク・スケジューラ１１０をさらに備える。したがって、タスク・スケジューラ１１０は、レイテンシの影響を受けやすいタスク（例えば、入力イベントまたはコンポジタ更新）を優先させることが可能である。１つまたは複数の実施形態では、タスク・スケジューラ１１０は複数のソフトウェア・コンポーネントを備え、１つまたは複数のコンポーネントは、主題技術にしたがって適合されているソフトウェア・ガベージ・コレクタの一部であるか、またはソフトウェア・ガベージ・コレクタ内に埋め込まれている。これに加えてまたは代えて、タスク・スケジューラ１１０は、ソフトウェア・ガベージ・コレクタと通信する（例えば、ＡＰＩ（アプリケーション・プログラム・インタフェース）を介して）１つまたは複数のコンポーネントを備えてもよい。これに関して、タスク・スケジューラ１１０の１つまたは複数のコンポーネントは、ガベージ・コレクタ内のタスク・スケジューリング関連コンポーネントにプロセッサ・アイドル時間を通知してもよい。したがって、タスク・スケジューラ１１０のコンポーネントは、タスクが様々なタスク種類（例えば、コンポジタ・タスク、ガベージ・コレクション・タスク、汎用タスクなど）にポストされることを可能とし、これによって（例えば、ガベージ・コレクタ内の）タスク・スケジューラのコンポーネントが特定の時にどの種類のタスクが実行されるかを決定することが可能である。タスク・スケジューラ１１０は、タスクをアイドル・タスクのカテゴリに分類してもよい。
【００１７】
タスク・スケジューラ１１０は、係属中のアイドル・タスクのキューを維持し、このアイドル・タスクを実行のアイドル期間にスケジュールしてもよい。タスク・スケジューラ１１０は、アイドル・イベントがフレーム・レイテンシの増加を生じないとき、アイドル・イベントをそれぞれの時間にスケジュールするために、フレーム・ビギン（ｂｅｇｉｎ）・イベントおよびフレーム・コミット（ｃｏｍｍｉｔ）・イベントや現在係属中の他のタスクの状態（例えば、より高い優先順位のタスク）についてのドローイング・コンポジタ１１２からの通知を用いてもよい。また、アイドル・タスクは、より長いアイドル期間（ドローイング・コンポジタ１１２によってフレームのコミットが行われない）中に、実行されてもよい。タスク・スケジューラ１１０は、他のタスクに関連してタスクの順序を変更してもよい。各タスクは、タスク・スケジューラ１１０によって提供されるタスク・デッドラインに関連付けられてよい。デッドラインが終了する前にタスクを完了させることが不可能である場合、そのタスクは次のアイドル期間中に実行するように再スケジュールされてよい。
【００１８】
アイドル期間中、スケジューラは係属中のキューから最も古いタスクを取り、残るアイドル期間と等しいかそれより短いデッドラインでその実行をスケジュールしてもよい。タスクがこのデッドラインの前に完了する場合、スケジューラは、デッドラインまでＦＩＦＯ（先入れ先出し）の順序でアイドル・タスクの実行を継続してもよい。アイドル・タスクが一度だけ実行されてもよく、実行時、デッドラインの終了前に許される時間内に任意の有用な作業をタスクが行うことが可能であるか否かをタスク・スケジューラ１１０が判定してもよい。有用な作業を行うことが不可能である場合、そのタスクは実行されず、その代わりアイドル・キューに再ポストされてよい。アイドル・タスクの大半は、例えば、フレーム間に実行され得る。これに関して、デッドラインは、ｘ持続時間、例えば、１０ｍｓ以下、２５ｍｓ以下、５０ｍｓ以下の期間であってよい。
【００１９】
一部の実施形態では、タスク・スケジューラ１１０に対しポストされるアイドル・タスクは、インカミング・アイドル・タスク・キューに追加されてもよい。新たなアイドル期間の開始時に、インカミング・タスクは、それらをタスク・スケジューラ１１０がＦＩＦＯ方式で実行する係属中のアイドル・タスク・キューへフラッシュされ得る。この例では、デッドラインの終了前にアイドル・タスクが実際の作業を行うことが不可能であった場合であっても、アイドル・タスクは自身の実行中に再ポストされ得る。１つまたは複数の実施形態では、タスク・スケジューラ１１０は、より高い優先順位のタスク（例えば、コンポジタまたは入力タスク）をアイドル・タスクに優先してアイドル時間にスケジュールしてもよい。
【００２０】
タスク・スケジューラ１１０は、アイドル期間がいつ開始し終了するかを決定するために種々の信号を用いてよい。例えば、タスク・スケジューラ１１０は、フレームがコミットされた時と次のフレームが開始すると期待される時との間にのみアイドル・タスクがスケジュールされることを保証するべく、ソフトウェア・ドローイング・コンポジタ１１２からの入力（例えば、ユーザ・インタフェースまたはその一部のドローイングを担うソフトウェア・ランタイム環境またはアプリケーション処理の一部）を用いてもよい。したがって、相互フレーム時間に対するアイドル期間は限定的であり、コンポジタがアクティブでないときには（フレームのドローイングが行われていないので）アイドル期間は生じ得ない。一例は、ある期間にフレームのドローイングが行われていない場合にアイドル期間をトリガする遅延タスクをポストすることを含んでもよい。
【００２１】
図１に示すように、システム１００は、メモリ・マネージャ１１４をさらに備えてもよい。メモリ・マネージャ１１４は、ソフトウェア・ランタイム環境用のメモリを管理し、決定されたメモリ割当に基づき、メモリ割当の監視とタスク・スケジューラ１１０に対するガベージ・コレクション・イベントのポスト（タスクとしての）とを行うように構成されている。上述のように、メモリ・マネージャ１１４は、どれだけのメモリが割り当てられているかと、どれだけのメモリがタスク・スケジューラ１１０によって決定された将来のアイドル時間において割り当てられ得るかとを推定する。
【００２２】
メモリ・マネージャ１１４は、例えば、次のアイドル時間を決定するためにタスク・スケジューラ１１０のポーリングを行い、割当のレートに基づき次のアイドル時間までにどれだけのメモリが割り当てられるかを決定してもよい。メモリ・マネージャ１１４は、次いで、例えば、推定されたメモリ割当と過去のガベージ・コレクション・イベントとに基づいて、メモリのガベージ・コレクションを行うのにどれくらいの時間が掛かるかを推定してもよい。例えば、メモリ・マネージャ１１４は、アプリケーションの平均メモリ割当レート、新しいおよび／または古いオブジェクトのための平均ガベージ・コレクション時間（例えば、ＭＢ当たり）、および平均マーキング速度（例えば、ＭＢ当たり）に基づき、ガベージ・コレクションの持続時間を推定してもよい、ガベージ・コレクション・イベントの持続時間を推定するための他の因子の例は、ヒープ状態（例えば、フラグメント化（ｆｒａｇｍｅｎｔｅｄ）、整合（ｃｏｎｓｉｓｔｅｎｔ）、破損（ｃｏｒｒｕｐｔｅｄ）のパーセンテージ）、コミットされたヒープのパーセンテージ、フリー、予約済み、割当ロード、およびマーキング速度（例えば、過去の速度に基づく）を含み得る。
【００２３】
メモリ・マネージャ１１４は、インクリメンタル・ガベージ・コレクション（例えば、０ｍｓ〜ＸＸｍｓから直線的に構成される）、スカベンジ（ｓｃａｖｅｎｇｅ）（例えば、約５〜１０ｍｓ）、および長いフル（ｆｕｌｌ）・ガベージ・コレクション（例えば３０〜ＸＸＸｍｓ）をトリガしてもよい。メモリ・マネージャ１１４は、タスクが完了されるべき推定時間を含め、各ガベージ・コレクション・イベントをタスク・スケジューラ１１０にポストしてもよい。一部の実施形態では、メモリ・マネージャ１１４は、それらが所定の長さを越える場合、より大きなイベントまたはタスクをより小さなチャンクへと分解してもよく、ガベージ・コレクション・イベントを所定の持続時間（例えば、１０ｍｓまたは５０ｍｓ）のタスクへと編制してもよい。
【００２４】
１つまたは複数の実施形態では、タスク・スケジューラ１１０は、係属中のタスク（ガベージ・コレクション・タスクを含む）のグローバル・リストを維持し、それらのタスクを優先させる。一例では、メモリ・マネージャ１１４は、ガベージ・コレクション・イベントまたはそのイベントの一部を、タスクの優先順位およびイベントの種類（例えば、マーキング、ファイナライゼーション、スイーピング、コンパクション）、およびタスクの推定される実行時間を含め、アイドル・タスクとしてメイン・スレッドにポストしてもよい。このように、メモリ・マネージャ１１４は、タスク・スケジューラ１１０にガベージ・コレクション・タスクをポストしてもよく、ドローイング・コンポジタ１１２は、係属中のアイドル・タスクを実行する良い機会についてタスク・スケジュール１１０に通知してもよく、タスク・スケジューラ１１０は、次いで、どのタスクを実行するか、またいつ実行するかを決定してもよい。
【００２５】
タスク・マネージャ１１０およびメモリ・マネージャ１１４は、タスク編制および優先順位やランタイム環境内に作成される（例えば、１つまたは複数のＡＰＩを通じて）オブジェクトのガベージ・コレクションを管理するためのランタイム環境（例えば、バーチャル・マシン）の外部に実装されてもよい。これに加えてまたは代えて、タスク・マネージャ１１０およびメモリ・マネージャ１１４のコンポーネントがランタイム環境の一部であってもよく、ランタイム環境内に埋め込まれてもよい。ランタイム環境は、ウェブブラウザ・アプリケーションの一部であるかまたはウェブブラウザ・アプリケーション内に埋め込まれてもよく、ウェブ・アプリケーション（例えば、ＪＡＶＡＳＣＲＩＰＴ（登録商標）およびＪＡＶＡ（登録商標）アプレット）およびランタイム環境内で動作する他の動的プログラミング言語を担ってもよく、その両方であってもよい。１つまたは複数の実施形態では、ドローイング・コンポジタ１１２は、アプリケーション処理１０６のために表示（例えば、１つのウィンドウの）内のフレームの再ドローイングを担うランタイム環境のディスプレイ・レンダリング・コンポーネントであってもよい。
【００２６】
図２は、主題技術の態様による、アイドル・タスクを含む係属中のタスクの一例のスケジュールを示す。タスク・スケジューラ１１０は、ドローイング・コンポジタ１１２からのフレーム開始時刻２０２（例えば、所定のフレーム・レートに基づく）の通知を受信し、フレーム開始時刻２０２に基づきタスクのスケジュールを設定する。示した例は、２つの連続するタスク期間を形成する３つのフレーム開始時刻２０２を含む。タスク・スケジューラ１１０は、アプリケーション１０６からアプリケーション・タスクおよび／またはランタイム環境を受信し、それらをドローイング・レイテンシがフレーム・レートに基づき減少または除去されるように編制する。例えば、タスク・スケジューラ１１０は、フレーム開始に関するメッセージ（例えば、コンポジタ１１２からの）用のランタイム環境のコマンド・キューを監視し、連続する開始時刻２０２の間のアイドル期間２０４，２０６を決定してもよい。
【００２７】
示すように、タスク・スケジューラ１１０は、入力タスク２０８（例えば、ユーザ入力キーまたはコマンドを定義する）およびコンポジタ・タスク２１０（例えば、フレームのドローイングを行う）などの不可欠なタスクを最初にスケジュールしてもよく、次のフレーム開始までの残りの時間によってアイドル期間２０４，２０６が定義される。１つまたは複数の実施形態では、アイドル期間２０４，２０６は、例えば、フレーム終了（例えば、フレーム・コミット）時刻から次のフレーム開始時刻２０２まで、決定されてもよい。アイドル期間２０４，２０６は、ガベージ・コレクション・タスクを含め、タスク・キュー中のタスクをポストするためにタスク・スケジューラ１１０によって用いられてもよい。
【００２８】
一部の態様では、アイドル・タスク（例えば、ガベージ・コレクション・タスク）がアイドル期間内に完了されることが不可能な場合がある。例えば、タスク・スケジューラ１１０は、アイドル・タスク２１２（５０ｍｓのタスク）をアイドル期間２０４にポストすることを試みる。しかしながら、タスク・マネージャ１１０は１つまたは複数の高優先順位タスク２１４を既にアイドル期間２０４にスケジュールしており、アイドル・タスク２１２を完了させるには５０ｍｓ未満しか利用可能でない。この状況例では、アイドル・タスク２１２は直ちに戻され、続くアイドル期間、例えば、図２のアイドル期間２０６に再ポストされる（この続くアイドル期間は、再ポストされたタスクを完了させるのに十分に長い持続時間を有する）。
【００２９】
一部の実施形態では、タスク・スケジューラ１１０は、アイドル・タスク実行を１つのフレーム内期間に制限し、現在のデッドライン内に完了不可能なタスクが同じアイドル期間の残りに再ポストされることを防止する。これによって、アイドル期間の残りにタスクが繰り返し再ポストされてＣＰＵパワーを不必要に消費すること（ｂｕｒｎｉｎｇ）を防止できる。
【００３０】
１つまたは複数の実施形態では、タスク・スケジューラ１１０は、ドローイング・コンポジタ１１２からの入力に基づき、ドローイング・コンポジタ１１２によってフレームがコミットされていないより長いアイドル期間を決定してもよい。この例では、アイドル・タスクは、単一のアイドル期間２０４，２０６中の所定のチャンク持続時間（例えば、５０ｍｓのアイドル・タスク）に限定されなくてよい。タスク・スケジューラ１１０は、任意の必要なバックグラウンド作業を行うべくアイドル期間の全体をスケジュールするように構成されてもよい（つまり、入力イベントのブロッキングを防止し、したがって入力イベントに対する顕著なレイテンシを防止するべく、各所定のチャンク持続時間（例えば、各５０ｍｓ）の終わりに、スケジュールされたタスクがスケジューリング制御をスケジューラに戻す限りは）。長いアイドル期間２０４，２０６（例えば、所定の持続時間を越える）では、同じアイドル期間にタスクが再ポストされることが許可されてもよい。アイドル期間の残りがアイドル・タスク持続時間を完了させるのに十分に長い限り、アイドル・タスクは拒絶されず、したがって、タスクが繰り返し自身の再ポストを試みる可能性が防止される。
【００３１】
図３には、主題技術の態様による、プロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定するための第１の例の処理のフローチャートを示す。説明の目的のため、例示的な処理３００について、図１および図２のコンポーネントに関して本明細書に記載する。さらに説明の目的のため、例示的な処理３００のブロックを、逐次的、すなわち、直線的に発生するように本明細書に記載する。しかしながら、例示的な処理３００の複数のブロックは並列的に発生してもよい。加えて、例示的な処理３００のブロックが示された順序に実行される必要はない、および／または例示的な処理３００のブロックのうちの１つ以上は実行される必要がない。
【００３２】
示したフローチャート例では、システム１００（例えば、タスク・スケジューラ１１０）は、１つまたは複数のソフトウェア・アプリケーションの実行中（３０２）にプロセッサ１０２がアイドル状態にある、将来のアイドル期間（例えば、アイドル期間２０４）を決定する。上述のように、将来のアイドル期間は、第１のフレーム・レンダリング開始時刻と第２のフレーム・レンダリング時刻とによって決定されてもよい。フレーム開始時刻は、ドローイング・コンポジタ１１２から決定されてもよい。ドローイング・コンポジタ１１２は、例えば、所定のフレーム・レートにしたがってタスク・スケジューラ１１０によりフレームのスケジュールを設定してもよい。例えば、６０ｆｐｓ（フレーム／秒）のドローイング・コンポジタは、１６．６ｍｓ毎に開始するようにフレーム開始時刻をポストする。決定した将来のアイドル期間は、第１のフレーム・レンダリング開始時刻と、アプリケーションまたはランタイム環境によって必要とされるアプリケーション・タスク（例えば、入力タスク、コンポジタ・タスク）を含まない第２のフレーム・レンダリング開始時刻との間の期間であってもよい。
【００３３】
ユーザ対話型のアプリケーション（例えば、レイアウトおよびラスタライズを実装するＪＡＶＡＳＣＲＩＰＴ（登録商標）アプリケーション）では、１６．６ｍｓ超のフレーム計算時間は望ましくない高いレイテンシを有すると考えられる。しかしながら、同じアプリケーションが、実行時、フレーム持続時間より長く、それによって、フレーム・ドローイング中にユーザが知覚可能な望ましくない休止を生じるガベージ・コレクション処理を含んでもよい。例えば、ガベージ・コレクションは、複数の様々なイベント（例えば、スカベンジング、マーキング、およびコミット時にまとめて実行され相当な時間を必要とするマーキングされたオブジェクトのコンパクションを含む）を含んでもよい。ガベージ・コレクションをオフにするとオウト・オブ・メモリ・エラーが生じる可能性があり、プログラム的にガベージ・コレクションを呼び出すことによって、ガベージ・コレクションのヒューリスティックスに負の影響が与えられる可能性がある。多くの例では、アプリケーションはガベージ・コレクタと対話を行うべきではない。したがって、主題技術は、種々のガベージ・コレクション・イベントを、より小さく、より管理しやすいチャンクに（アイドル・タスクとしてタスク・スケジューラ１１０に対しポストされ、システムがアイドル状態にあるあいだに実行可能である）自動的に分別する。したがって、ガベージ・コレクションは、アプリケーションから隠されたままであるが、フレーム遅延の可能性を減少させる。
【００３４】
したがって、ガベージ・コレクション・イベントを分解するために、システム１００は、どれだけのガベージ・コレクションが必要かを最初に決定する。これに関して、システム１００（例えば、メモリ・マネージャ１１４）は、将来のアイドル期間について、１つまたは複数のソフトウェア・アプリケーションのためのメモリ割当を推定する（３０４）。メモリ・マネージャ１１４は、様々な種類の利用可能なガベージ・コレクション・イベントの各々について、メモリのガベージ・コレクションを行うのにどれくらいの時間が掛かるかを推定してもよい。例えば、メモリ・マネージャ１１４は、新しいおよび／または古いオブジェクトのためのガベージ・コレクションの持続時間（例えば、ＭＢ当たり）、新しいおよび／または古いオブジェクトのマーキング（例えば、ＭＢ当たり）、およびコンパクションを推定してもよい。メモリ・マネージャ１１４は、ヒープ状態（例えば、フラグメント化、整合、破損のパーセンテージ）、コミットされたヒープのパーセンテージ、フリー、予約済み、割当のレート、割当ロード、およびガベージ・コレクションのマーキング速度（例えば、過去の速度に基づく）を含む種々の因子に基づき、各イベントに対する推定値を提供してもよい。
【００３５】
メモリ・マネージャ１１４は、例えば、次のアイドル時間を決定するためにタスク・スケジューラ１１０のポーリングを行い、次のアイドル時間までに上記の因子に基づきどれだけのメモリが割り当てられるかを割当のレート（過去または現在）に基づき決定してもよい。例えば、メモリ・マネージャ１１４は、ｘＭＢが割り当てられており、現在の割当レートはｙＭＢ／ｍｓであると決定する。次のアイドル時間がそのとき３ミリ秒である場合、（ｘ＋３ｙ）ＭＢが次のアイドル時間までに割り当てられると推定される。割当が決定されると、メモリ・マネージャ１１４は、各種類のイベントにどれだけの時間が掛かるかを決定してもよい。
【００３６】
ガベージ・コレクションのイベントは、所定のイベント・タスクへ分割されてもよく、各イベント・タスクは、一連のサブタスクまたはコマンドを含むイベントのチャンクである。各タスクは、それが所定の持続時間に実行されるように、生成される。例えば、古いオブジェクトのマーキングなどのガベージ・コレクション・イベントに４００ｍｓ掛かると推定される場合、このイベントは、８つの５０ｍｓのタスク（または他の所定の持続時間）に分割されてよい。システム１００は、任意の所定量の時間に基づき、イベントのためのタスクを生成してもよい。例えば、各タスクは、１０ｍｓ、２５ｍｓ、５０ｍｓなどであってよい。
【００３７】
一部の態様では、推定されたメモリ割当は、スケジュールの設定された複数の将来のアイドル時間を通じたメモリ割当に基づいてもよい。例えば、メモリ・マネージャ１１４は、以前に生成されたガベージ・コレクション・タスク２１２がアイドル期間２０４にタスク・スケジューラ１１０にポストされた後に戻されたと決定してもよい。メモリ・マネージャ１１４は、次いで、続くアイドル期間２０６のメモリ割当を再計算してもよい。これに加えてまたは代えて、メモリ・マネージャ１１４は、ガベージ・コレクション・イベントを単一のアイドル期間に完了させることは不可能であると決定してもよい。したがって、メモリ・マネージャ１１４は、イベントを完了させるための推定されるアイドル期間の数を決定し、この数のアイドル期間のためのメモリ割当を決定してもよい。
【００３８】
図３を参照すると、システム１００（例えば、タスク・スケジューラ１１０）は、決定された将来のアイドル期間と推定された前記メモリ割当とに基づき、複数の所定のソフトウェア・ガベージ・コレクション・イベントのうちの１つを選択する（３０６）。１つまたは複数の実施形態では、ガベージ・コレクション・イベントは、推定されたメモリ割当が、例えば、決定された将来のアイドル期間にて、しきい値メモリ割当を満たすと最初に決定される場合にのみ選択される。このしきい値は、総割当、割当のレート、新しいまたは古いオブジェクトの割当などに基づいてもよい。１つまたは複数の実施形態では、タスク・スケジューラ１１０は、イベント・キュー中のガベージ・コレクション・イベントの種類を分析し、システムの性能を最大化するようにイベント（またはイベントのためのタスク）をスケジュールしてもよい。タスク・スケジューラ１１０（または例えば、タスク・スケジューラ１１０のコンポーネントに適合したシステム・ガベージ・コレクタ）は、単一のアイドル期間に完了される、またはキュー中のイベントのための最も少ない数のアイドル期間を通じて（例えば、一連のタスクとして）完了されるイベントを選択してもよい。タスク・スケジューラ１１０は、最小の持続時間または最も少ない数のタスク・チャンクにより最大のメモリ最適化（例えば、ガベージ・コレクションを介する）を提供するイベントのためのタスクをスケジュールしてもよい。
【００３９】
１つまたは複数の実施形態では、タスク・スケジューラ１１０は、１つまたは複数の所定の規則に基づき、スケジュールされるガベージ・コレクション・イベントを選択してもよい。例えば、新しい世代がほぼフル（例えば、９０パーセント超）である場合、その新しい世代のガベージ・コレクションが選択されてもよい。オブジェクトのインクリメンタル・マーキング（例えば、複数のオブジェクトが所定の持続時間のチャンク・タスクによりマーキングされる）が、古い世代のオブジェクトがほぼフル（例えば、現在時刻より所定時刻を超えるだけ前に作成されたオブジェクションが９０パーセント超フル）である場合に開始されてもよい。続くマーキング・ステップが、より早いアイドル期間にマーキングが開始されたときに選択されてもよい。フル・ガベージ・コレクションは、レイテンシを生じさせることなくガベージ・コレクションを完了させるのに十分なアイドル時間が利用可能であるとタスク・スケジューラ１１０が決定されるときに開始され、スケジュールされてもよい。
【００４０】
一部の態様では、選択されたガベージ・コレクション・イベントがオブジェクト・マーキング・イベントであるとき、イベントは複数のインクリメンタル・オブジェクト・マーキング・タスクへとフラグメント化される。複数のインクリメンタル・オブジェクト・マーキング・タスクのうちの第１のインクリメンタル・オブジェクト・マーキング・タスクは、上述の将来のアイドル期間中に最初に実行されるようにスケジュールされる。上述のように、複数のインクリメンタル・オブジェクト・マーキング・タスクは、２つ以上の異なるアイドル期間の間で分割されるようにスケジュールされてもよい。
【００４１】
したがって、推定されたメモリ割当に基づき、複数の所定のソフトウェア・ガベージ・コレクション・イベントの各々を完了させるための推定時間が決定されてよく、ガベージ・コレクション・イベントは、選択されたソフトウェア・ガベージ・コレクション・イベントに対応するそれぞれの推定時間と将来のアイドル期間の持続時間とに基づき選択される。
【００４２】
図３を参照すると、システム１００（例えば、タスク・スケジューラ１１０）は、選択されたソフトウェア・ガベージ・コレクション・イベントが将来のアイドル期間中に実行されるようにスケジュールする（３０８）。これに加えてまたは代えて、１グループのタスクがアイドル期間中にスケジュールされてもよい。例えば、タスク・スケジューラ１１０は、将来のアイドル期間が１つまたは複数のソフトウェア・アプリケーションのためのフレームをレンダリングする際の休止に対応する（例えば、長いアイドル時間）と決定してもよい。したがって、タスク・スケジューラ１１０は、１グループのソフトウェア・ガベージ・コレクション・タスクが将来のアイドル期間中に実行されるようにスケジュールしてよく、このグループは、選択されたソフトウェア・ガベージ・コレクション・イベントの少なくとも一部を含む。この例では、グループの持続時間は、単一のそれぞれのフレームの持続時間より大きい（例えば、１６．６ｍｓ超）。
【００４３】
システム１００は、次いで、選択されたソフトウェア・ガベージ・コレクション・イベントを将来のアイドル期間中に実行する（３１０）。上述のように、イベントは、一連のタスク（例えば、各々が所定の持続時間の）として実行されてもよい。一部の例では、イベントは、１つのタスクのみであってもよく、または少数のタスク（同じアイドル期間に実行され得る）であってもよい。しかしながら、この将来のアイドル期間は連続的であってもよく、いくつかのフレーム（例えば、システム・タスクと各フレームの終了との間）に広がってもよい。
【００４４】
上述の例示的な処理２００，３００，４００の多くや関連するフィーチャおよびアプリケーションは、コンピュータ可読記憶媒体（コンピュータ可読媒体とも称される）上に記録される一組の命令として記述されるソフトウェア処理として実装され得る。それらの命令が１つ以上のプロセッサ・ユニット（例えば、１つ以上のプロセッサ、プロセッサのコア、または他の処理ユニット）によって実行されるとき、それらの命令によって処理ユニットが命令に示されているアクションを実行する。コンピュータ可読媒体の例は、次に限定されないが、ＣＤ−ＲＯＭ、フラッシュ・ドライブ、ＲＡＭチップ、ハード・ドライブ、ＥＰＲＯＭなどを含む。コンピュータ可読媒体は、無線でまたは有線接続を通じて送られる搬送波および電気信号を含まない。
【００４５】
用語「ソフトウェア」は、適切な場合、リード・オンリ・メモリに存在するファームウェア、または、プロセッサによる処理のためにメモリへと読込可能な磁気ストレージに記憶されるアプリケーションを含むことが意図されている。また、いくつかの実施形態では、主題の開示の複数のソフトウェア態様は、主題の開示の特有のソフトウェア態様を残しながら、より大きなプログラムのサブ部分として実装されることが可能である。いくつかの実施形態では、複数のソフトウェア態様は別個のプログラムとして実装されることも可能である。最後に、本明細書に記載のソフトウェア態様をともに実装する別個のプログラムのいかなる組み合わせも、主題の開示の範囲内にある。いくつかの実施形態では、ソフトウェア・プログラムは、１つ以上の電子システム上で動作するようにインストールされるとき、ソフトウェア・プログラムの動作を実行する１つ以上の特定の機械実装を規定する。
【００４６】
コンピュータ・プログラム（プログラム、ソフトウェア、ソフトウェア・アプリケーション、スクリプト、またはコード）は、コンパイル型またはインタプリタ型言語を含む任意の形態のプログラミング言語により書かれてよく、スタンドアロン・プログラムとして、またはモジュール、コンポーネント、サブルーチン、オブジェクト、またはコンピューティング環境における使用に適切な他のユニットとしてを含め、任意の形態によりデプロイされることが可能である。コンピュータ・プログラムはファイルシステム中のファイルに相当し得るが、これは必須ではない。プログラムは、対象のプログラムの専用の単一のファイルにおいて、または協調動作する複数のファイル（例えば、１つ以上のモジュール、サブプログラム、または部分コードを記憶するファイル）において、他のプログラムまたはデータを保持するファイルの一部（例えば、マークアップ言語文書に記憶される１つ以上のスクリプト）に記憶されることが可能である。コンピュータ・プログラムは、１つのコンピュータ、または複数のコンピュータ（１つのサイトに位置するか、複数のサイトを通じて分散され、通信ネットワークによって相互接続される）上で実行されるようにデプロイされることが可能である。
【００４７】
図４は、主題技術の１つまたは複数の態様による、プロセッサ・アイドル期間中のソフトウェア・ガベージ・コレクションのスケジュールを設定することに関連して用いられる一例の電子システム４００を示す図である。電子システム４００は、コンピューティング・デバイス１００の動作に関連付けられているソフトウェアの実行用のコンピューティング・デバイスであってもよく、処理３００の１つまたは複数の部分またはステップであってもよく、図１〜３によって提供されるコンポーネントおよび処理であってもよい。種々の実施形態では、電子システム４００はシステム１００を表し得る。これに関して、電子システム４００またはシステム１００は、タブレット・コンピュータ、ラップトップ、スマートフォン、ＰＤＡ、または他のタッチ・スクリーンまたはテレビ（それに結合する１つまたは複数のプロセッサが埋め込まれている）、または他の種類の無線接続を有するコンピュータ関連電子デバイスなど、パーソナル・コンピュータまたはモバイル・デバイスであってよい。
【００４８】
電子システム４００は、様々な種類のコンピュータ可読媒体および様々な他の種類のコンピュータ可読媒体のためのインタフェースを含んでもよい。示した例では、電子システム４００は、バス４０８、処理ユニット４１２、システム・メモリ４０４、リード・オンリ・メモリ（ＲＯＭ）４１０、パーマネント・ストレージ・デバイス４０２、入力デバイス・インタフェース４１４、出力デバイス・インタフェース４０６、および１つまたは複数のネットワーク・インタフェース４１６を備える。一部の実施形態では、電子システム４００は、上述の種々のコンポーネントおよび処理の動作用の他のコンピューティング・デバイスまたは回路を備えてもよく、それらにインテグレートされてもよい。
【００４９】
バス４０８は、電子システム４００の多数の内部デバイスを通信可能に接続する全てのシステム、周辺機器、およびチップセット・バスを集合的に表す。例えば、バス４０８は、１または複数の処理ユニット４１２を、ＲＯＭ４１０、システム・メモリ４０４、パーマネント・ストレージ・デバイス４０２に通信可能に接続する。
【００５０】
これらの種々のメモリ・ユニットから、処理ユニット４１２は、主題の開示の処理を実行するために、実行する命令および処理するデータを取り出す。１つまたは複数の処理ユニットは、様々な実施形態において単一のプロセッサであることも、マルチコア・プロセッサであることも可能である。
【００５１】
ＲＯＭ４１０は、１または複数の処理ユニット４１２と電子システムの他のモジュールとによって必要とされる静的データおよび命令を記憶する。一方、パーマネント・ストレージ・デバイス４０２は、読出／書込メモリ・デバイスである。このデバイスは、電子システム４００がオフであるときであっても命令およびデータを記憶する、不揮発性メモリ・ユニットである。主題の開示のいくつかの実施形態では、パーマネント・ストレージ・デバイス４０２として、マス・ストレージ・デバイス（たとえば、磁気または光ディスク、およびそれに対応するディスク・ドライブ）が用いられる。
【００５２】
他の実施形態では、パーマネント・ストレージ・デバイス４０２として、リムーバブル・ストレージ・デバイス（たとえば、フロッピー（登録商標）・ディスクおよびそれに対応するディスク・ドライブ）が用いられる。パーマネント・ストレージ・デバイス４０２と同様、システム・メモリ４０４は読出／書込メモリ・デバイスである。しかしながら、ストレージ・デバイス４０２と異なり、システム・メモリ４０４は、揮発性の読出／書込メモリ（ランダム・アクセス・メモリなど）である。システム・メモリ４０４は、実行時にプロセッサが必要とする命令とデータとの一部を記憶する。いくつかの実施形態では、主題の開示の処理は、システム・メモリ４０４、パーマネント・ストレージ・デバイス４０２、および／またはＲＯＭ４１０に記憶される。これらの様々なメモリ・ユニットから、１または複数のプロセッサ４１２は、いくつかの実装の処理を実行するために、実行する命令と処理するデータとを取り出す。
【００５３】
また、バス４０８は、入力デバイス・インタフェース４１４と出力デバイス・インタフェース４０６とに接続する。入力デバイス・インタフェース４１４によって、ユーザが情報を通信し、電子システムに対するコマンドを選択することが可能となる。入力デバイス・インタフェース４１４とともに用いられる入力デバイスは、例えば、英数キーボードおよびポインティング・デバイス（「カーソル・コントロール・デバイス」とも呼ばれる）を含む。出力デバイス・インタフェース４０６によって、たとえば、電子システム４００によって生成される画像の表示が可能となる。出力デバイス・インタフェース４０６とともに用いられる出力デバイスは、例えば、プリンタおよびディスプレイ・デバイス（陰極線管（ＣＲＴ）または液晶ディスプレイ（ＬＣＤ）など）を含む。いくつかの実施形態は、入力デバイスおよび出力デバイスの両方として機能するタッチ・スクリーンなどのデバイスを含む。
【００５４】
最後に、図４に示すように、バス４０８は、ネットワーク・インタフェース４１６を通じて電子システム４００をネットワーク（図示せず）に接続する。ネットワーク・インタフェース４１６は、例えば、無線アクセス・ポイント（例えば、ＢＬＵＥＴＯＯＴＨ（登録商標）またはＷｉＦｉ）または無線アクセス・ポイントに接続するための無線回路を備えてもよい。また、ネットワーク・インタフェース４１６は、コンピュータのネットワーク（ローカル・エリア・ネットワーク（「ＬＡＮ」）、ワイド・エリア・ネットワーク（「ＷＡＮ」）、無線ＬＡＮ、またはイントラネット、またはインターネットなどネットワークのネットワーク）の一部にコンピュータを接続するためのハードウェア（例えば、イーサネット（登録商標）・ハードウェア）も備えてよい。電子システム４００の要素のいずれかまたは全てが、主題の開示とともに用いられることが可能である。
【００５５】
上述のそれらの機能は、コンピュータ・ソフトウェア、ファームウェア、またはハードウェアにより実装可能である。それらの技術は、１つ以上のコンピュータ・プログラム製品を用いて実装可能である。プログラマブル・プロセッサおよびコンピュータは、モバイル・デバイスに含まれてもよいし、モバイル・デバイスとしてパッケージされてもよい。処理およびロジック・フローは、１つ以上のプログラマブル・プロセッサと１つ以上のプログラマブル論理回路とによって実行される。汎用および専用のコンピューティング・デバイスと、ストレージ・デバイスとは、通信ネットワークを通じて相互接続されることが可能である。
【００５６】
いくつかの実施形態は、電子部品（機械可読またはコンピュータ可読媒体（これに代えて、コンピュータ可読記憶媒体、機械可読媒体、機械可読記憶媒体とも称される）におけるコンピュータ・プログラム命令を記憶するマイクロ・プロセッサ、ストレージ、メモリなど）を含む。そうしたコンピュータ可読媒体のいくつかの例には、ＲＡＭ、ＲＯＭ、読出専用コンパクト・ディスク（ＣＤ−ＲＯＭ）、記録可能コンパクト・ディスク（ＣＤ−Ｒ）、書換可能コンパクト・ディスク（ＣＤ−ＲＷ）、読出専用デジタル多用途ディスク（例えば、ＤＶＤ−ＲＯＭ、２層ＤＶＤ−ＲＯＭ）、種々の記録可能／書換可能ＤＶＤ（例えば、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷなど）、フラッシュ・メモリ（例えば、ＳＤカード、ミニＳＤカード、マイクロＳＤカードなど）、磁気および／またはソリッド・ステート・ハード・ドライブ、読出専用および記録可能Ｂｌｕ−ｒａｙ（登録商標）ディスク、超高密度光ディスク、任意の他の光または磁気メディア、およびフロッピー（登録商標）・ディスクが含まれる。コンピュータ可読媒体は、１つ以上のプロセッサにより実行可能であって様々な動作を実行するための命令のセットを含むコンピュータ・プログラムを記憶できる。コンピュータ・プログラムまたはコンピュータ・コードの例には、例えば、コンパイラによって生成される機械コードと、インタプリタを用いてコンピュータ、電子部品、またはマイクロ・プロセッサによって実行される、より高レベルのコードを含むファイルと、が含まれる。
【００５７】
上述の記載では主としてソフトウェアを実行するマイクロ・プロセッサまたはマルチコア・プロセッサについて言及しているが、いくつかの実施形態は１つ以上の集積回路（特定用途向け集積回路（ＡＳＩＣ）またはフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）など）によって実行される。いくつかの実施形態では、そうした集積回路は回路自体に記憶されている命令を実行する。
【００５８】
本明細書および本出願の任意の請求項で用いられる、用語「コンピュータ」、「サーバ」、「プロセッサ」、および「メモリ」はすべて、電子デバイスまたは他の技術分野のデバイスを指す。これらの用語から、人または人の集団は除外される。詳細に説明する目的において、表示または表示するという用語は、電子デバイス上での表示を意味する。本明細書および本出願の任意の請求項で用いられる、用語「１つのコンピュータ可読媒体」および「複数のコンピュータ可読媒体」は全体として、コンピュータに可読な形式により情報を記憶する有形の物理的な物体に限定される。これらの用語から、任意の無線信号、有線ダウンロード信号、および他の任意の一時的な信号は除外される。
【００５９】
ユーザとの対話を提供するために、本明細書に記載の主題技術の実装は、ユーザに情報を表示するためのディスプレイ・デバイス（例えば、ＣＲＴ（陰極線管）またはＬＣＤ（液晶ディスプレイ）モニタと、ユーザがコンピュータに入力を提供可能なキーボードおよびポインティング・デバイス（例えば、マウスまたはトラックボール）とを有するコンピュータ上に実装されてよい。他の種類のデバイスも、ユーザとの対話用に同様に用いられてよい。例えば、ユーザに対し提供されるフィードバックは任意の形態の知覚フィードバック（例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック）であってよく、ユーザからの入力は、音響、音声、または触覚の入力を含む任意の形態により受信されてよい。これに加えて、ユーザによって用いられるデバイスとの間のドキュメントの送受信によって（例えば、ユーザのクライアント・デバイス上のウェブ・ブラウザから受信されるリクエストに応じて該ウェブ・ブラウザにウェブ・ページを送信することによって）、コンピュータはユーザと対話することが可能である。
【００６０】
本明細書に記載の主題の実施形態は、バックエンド・コンポーネントを備える（例えば、データ・サーバとして）か、ミドルウェア・コンポーネント（例えば、アプリケーション・サーバ）を備えるか、またはフロントエンド・コンポーネント（例えば、本明細書に記載の主題の実装とユーザが対話可能なグラフィカル・ユーザ・インタフェースまたはウェブ・ブラウザを有するクライアント・コンピュータ）を備えるコンピューティング・システム、または１つ以上のそうしたバックエンド、ミドルウェア、またはフロントエンド・コンポーネントの任意の組み合わせにより実装されることが可能である。システムのコンポーネントは、任意の形態または媒体のデジタル・データ通信（例えば、通信ネットワーク）によって相互接続されることが可能である。通信ネットワークなどネットワークの例には、ローカル・エリア・ネットワーク（ＬＡＮ）およびワイド・エリア・ネットワーク（ＷＡＮ）、インター・ネットワーク（例えば、インターネット）、およびピア・ツー・ピア・ネットワーク（例えば、アドホック・ピア・ツー・ピア・ネットワーク）が含まれてよい。
【００６１】
コンピューティング・システムは、クライアントおよびサーバを備えることが可能である。クライアントおよびサーバは、一般に互いに離れており、通常、通信ネットワークを通じて対話する。クライアントおよびサーバの関係は、それぞれのコンピュータ上で動作しており互いにクライアント−サーバ関係を有するコンピュータ・プログラムによって生じる。いくつかの実施形態では、サーバがデータ（例えば、ＨＴＭＬページ）をクライアント・デバイスに（例えば、該クライアント・デバイスと対話するユーザにデータを表示する目的、および、該ユーザからユーザ入力を受信する目的で）送信する。クライアント・デバイスにおいて生成されたデータ（例えば、ユーザ対話の結果）は、サーバにおいてクライアント・デバイスから受信されることが可能である。
【００６２】
当業者には、本明細書に記載の種々の例示的なブロック、モジュール、要素、コンポーネント、方法、およびアルゴリズムが、電子ハードウェア、コンピュータ・ソフトウェア、または両者の組み合わせとして実装されてもよいことが認められるだろう。ハードウェアおよびソフトウェアの相互交換性を示すため、種々の例示的なブロック、モジュール、要素、コンポーネント、方法、およびアルゴリズムについて、一般にそれらの機能に関して上述した。そうした機能がハードウェアとして実装されるかソフトウェアとして実装されるかは、特定の用途およびシステム全体に課される設計制約に応じて異なる。当業者は、各特定のアプリケーションについて様々な手法により記載の機能を実装してよい。種々のコンポーネントおよびブロックは、全て主題技術の範囲から逸脱することなく、異なって配置されてもよい（例えば、異なる順序で配置されてもよく、異なるやり方で分割されてもよい）。
【００６３】
開示の処理における工程の特定の順序または階層はアプローチの一例であることが理解される。設計の選好に基づき、処理の工程の特定の順序または階層が再構成されてよいことが理解される。一部の工程は同時に実行されてもよい。添付の方法の請求項では、種々の工程の要素が一例の順序で提示されるが、添付の方法の請求項を提示された特定の順序または階層に限定することは意図していない。
【００６４】
上述の記載は当業者が本明細書に記載の様々な態様を実施することを可能にするために提供される。上述の記載は主題技術の種々の例を提供し、主題技術はそれらの例に限定されない。それらの態様に対する様々な修正形態が容易に識別され、本明細書に規定される一般原則は他の態様にも適用されてよい。したがって、特許請求の範囲は、本明細書に示される態様に限定されることを意図したものでなく、請求項の文言に一致する範囲全てが与えられる。単数の要素に対する参照は、特にそのように具体的に言及されていない限り、「１つかつ１つのみ（ｏｎｅ  ａｎｄ  ｏｎｌｙ  ｏｎｅ）」を意味することは意図されておらず、むしろ「１つ以上」を意味することが意図される。用語「いくつか」は、（他に具体的に言及されている場合を除いて）１つ以上を指す。男性の指示代名詞（例えば、「彼の」）は、女性および中性（例えば、「彼女の」「その」）を含み、その逆も同様である。見出しおよび小見出しは、それらがある場合、便宜上用いられているに過ぎず、本発明を限定するものではない。
【００６５】
本明細書において用いられる用語ウェブサイトは、１つまたは複数のウェブ・ページ、ウェブ関連のコンテンツをホストまたは記憶するために用いられる１つまたは複数のサーバなどを含め、ウェブサイトの任意の態様を含んでよい。したがって、用語ウェブサイトは、用語ウェブ・ページおよびサーバと交換可能に用いられてよい。述語「ように構成されている」、「ように動作可能である」、および「ようにプログラムされている」は、主題の任意の特定の有形または無形の修正形態を意味するのではなく、むしろ、交換可能に用いられることが意図される。例えば、動作またはコンポーネントを監視および制御するように構成されているプロセッサは、動作を監視および制御するようにプログラムされているプロセッサ、または動作を監視および制御するように動作可能であるプロセッサも意味してよい。同様に、コードを実行するように構成されているプロセッサは、コードを実行するようにプログラムされているプロセッサ、またはコードを実行するように動作可能であるプロセッサと解することが可能である。
【００６６】
例えば、「態様」という語句は、そうした態様が主題技術に不可欠であること、またはそうした態様が主題技術の全ての構成に適用されることを意味していない。１つの態様に関する開示が全ての構成に適用されてもよく、１つ以上の構成に適用されてもよい。１つの態様によって、１つまたは複数の例が提供されてよい。例えば、１つの態様という語句が１つ以上の態様を指してもよいし、１つ以上の態様という語句が１つの態様を指してもよい。例えば、「実施形態」という語句は、そうした実施形態が主題技術に不可欠であること、またはそうした実施形態が主題技術の全ての構成に適用されることを意味していない。１つの実施形態に関係のある開示は、すべての実施形態、または１つまたは複数の実施形態に当てはまってもよい。１つの実施形態によって、１つまたは複数の例が提供されてよい。例えば、１つの「実施形態」という語句が１つ以上の実施形態を指してもよいし、１つ以上の実施形態という語句が１つの実施形態を指してもよい。例えば、「構成」という語句は、そうした構成が主題技術に不可欠であること、またはそうした構成が主題技術の全ての構成に適用されることを意味していない。１つの構成に関する開示が全ての構成に適用されてもよく、１つ以上の構成に適用されてもよい。１つの構成によって、１つまたは複数の例が提供されてよい。例えば、１つの「構成」という語句が１つ以上の構成を指してもよいし、１つ以上の構成という語句が１つの構成を指してもよい。
【００６７】
単語「例」は本明細書では「一例または例示として働く」を意味するように用いられる。「例」として本明細書に記載される任意の態様または設計は、必ずしも他の態様または設計に対して好適であるまたは有利であるものとして解されるべきものではない。
【００６８】
本開示全体を通じて記載される当業者に知られているまたは後に知られるようになる様々な態様の要素に対する全ての構造的および機能的な均等物は、引用によって本明細書に明確に援用され、特許請求の範囲によって包含されることが意図される。さらにまた、本明細書の開示のいずれについても、そうした開示が特許請求の範囲に明示的に記載されているか否かに拘わらず、公衆に捧げられることは意図されていない。特許請求の範囲のいずれの要素も、その要素が「ｍｅａｎｓ  ｆｏｒ」の語句を用いて明示的に記載されていない限り（方法の請求項の場合には「ｓｔｅｐ  ｆｏｒ」の語句を用いて記載されていない限り）、米国特許法第１１２条第６段落の下で解釈されるべきものではない。さらにまた、用語「備える」、「有する」などが明細書または特許請求の範囲において用いられる限りにおいて、そうした用語は、特許請求の範囲において用語「含む」が移行語として用いられるときに「含む」が解釈されるのと同様に包括を意図している。
【図１】
0006553203.tif 000002
【図２】
0006553203.tif 000003
【図３】
0006553203.tif 000004
【図４】
0006553203.tif 000005