(57)【特許請求の範囲】
【請求項１】
ウェブアプリケーションの並列計算のための自動メモリ管理をする装置であって、
少なくとも２つのコンピュータープロセッシングユニット（ＣＰＵ）コアを備えるプロセッサと、
ウェブアプリケーションの処理機能の１又は複数のスレッドを対応するＣＰＵコアで同時実行するために、前記１又は複数のスレッドを前記プロセッサの対応するＣＰＵコアへ指定するオペレーティングシステムであって、前記１又は複数のスレッドは、メインスレッドと及び少なくとも１つのスポーンスレッドを含む、前記オペレーティングシステムと、
前記メインスレッドと前記少なくとも１つのスポーンスレッドとへ分配されるブロックのセットを備えており、育成ヒープと、成熟ヒープと、複数の専用育成部を有するデータベースとに分割されている、メモリと、
を有し、
前記メインスレッドは、前記育成ヒープと前記成熟ヒープへのアクセスを有し、該育成ヒープ内において１又は複数のオブジェクトを割り当てて操作し、前記育成ヒープ及び前記成熟ヒープに格納される１又は複数のオブジェクトへリファレンスを書き込み、
前記少なくとも１つのスポーンスレッドは、前記育成ヒープ及び前記成熟ヒープへの書き込みは許可されておらず、前記複数の専用育成部のうちの関連付けられる１つ専用育成部へのアクセスを有し、該関連付けられる１つの専用育成部内において１又は複数のオブジェクトを割り当てて操作するように構成される、
装置。
【請求項２】
前記ウェブアプリケーションを実行するウェブブラウザを更に有し、
前記ウェブアプリケーションは前記ウェブブラウザによってサポートされるスクリプト言語によってコード化される、
請求項１記載の装置。
【請求項３】
前記スクリプト言語はジャバスクリプトである、
請求項２記載の装置。
【請求項４】
前記ウェブブラウザのランタイムシステム内で、前記ウェブアプリケーションのコードを解釈して実行するように構成されるプログラミング言語エンジンを更に有する、
請求項２記載の装置。
【請求項５】
前記プログラミング言語エンジンを変更し、ランタイムに低レベルハードウェア抽象化レイヤーへ変換される決定性データ並列構造によりプログラミング言語を拡張して、前記ウェブアプリケーションのデータ並列性を可能にする、決定性並列プログラミングモジュールを更に有する、
請求項４記載の装置。
【請求項６】
少なくとも前記メインスレッド及び前記少なくとも１つのスポーンスレッドの実行を監視し、前記メモリの前記ブロックのセット内において割り当てられて格納される、１又は複数のオブジェクトのライフサイクルを管理する、メモリ管理モジュールを更に有する、
請求項１記載の装置。
【請求項７】
前記メモリ管理モジュールは、ガーベッジコレクションサイクルの間、少なくとも前記複数の専用育成部におけるガーベッジコレクションを実行するガーベッジコレクタモジュールを有する、
請求項６記載の装置。
【請求項８】
前記ガーベッジコレクタモジュールは、前記少なくとも１つのスポーンスレッドの実行の状態に少なくとも部分的に基づいて、前記ガーベッジコレクションサイクルを開始するように構成され、前記実行の状態により、前記少なくとも１つのスポーンスレッドがセーフポイントに到達したかどうかを判断する、
請求項７記載の装置。
【請求項９】
前記実行の状態は、動作中、休止状態、又は完了状態で構成されるグループから選択され、
前記少なくとも１つのスポーンスレッドの前記実行の状態が動作中であるとき、前記メインスレッドは休止状態にあり、該休止状態のメインスレッドが再開する前に、前記関連付けられる１つの専用育成部が前記育成ヒープに配置される、
請求項８記載の装置。
【請求項１０】
前記少なくとも１つのスポーンスレッドは、前記実行の状態が休止状態又は完了状態のとき、前記セーフポイントに到達し、前記実行の状態が動作中のときには前記セーフポイントに到達しない、
請求項９記載の装置。
【請求項１１】
前記複数の専用育成部のうち前記関連付けられた１つの専用育成部は、前記少なくとも１つのスポーンスレッドが１又は複数のオブジェクトを完全に割り当てるには、メモリスペースが不十分な場合、前記少なくとも１つのスポーンスレッドは、前記複数の専用育成部から以前利用された１つの専用育成部へのアクセスを要求するよう構成され、
該以前利用された専用育成部は、前記少なくとも１つのスポーンスレッドが１又は複数のオブジェクトを割り当てるために利用可能なメモリスペースの部分を有する、
請求項１記載の装置。
【請求項１２】
ウェブアプリケーションの並列計算のための自動メモリ管理をするシステムであって、
メディアソースと、
前記メディアソースとネットワークを介して通信し、前記メディアソースによって提供される前記ウェブアプリケーションを実行するように構成されるクライアント装置であって、前記ウェブアプリケーションの並列計算を可能にするよう構成される演算システムを有するクライアント装置と、
を備え、前記演算システムは、
少なくとも２つのコンピュータープロセッシングユニット（ＣＰＵ）コアを含むプロセッサと、
前記ウェブアプリケーションの処理機能の１又は複数のスレッドを対応するＣＰＵコアで同時実行するために、１又は複数のスレッドを前記プロセッサの対応するＣＰＵコアへ指定するオペレーティングシステムであって、前記１又は複数のスレッドが、メインスレッドと少なくとも１つのスポーンスレッドとを含む、前記オペレーティングシステムと、
前記メインスレッド及び前記少なくとも１つのスポーンスレッドへブロックのセットを分配し、育成ヒープと、成熟ヒープと、複数の専用育成部を有するデータベースとに分割されている、メモリと、
を備え、
前記メインスレッドは、前記育成ヒープと前記成熟ヒープへのアクセスを有し、前記メインスレッドは、前記育成ヒープにおいて１又は複数のオブジェクトを割り当てて操作し、前記育成ヒープ及び前記成熟ヒープに格納されたオブジェクトへリファレンスを書き込み、
前記少なくとも１つのスポーンスレッドは、前記育成ヒープ及び前記成熟ヒープへの書き込みは許可されておらず、前記複数の専用育成部のうち関連付けられる１つの専用育成部へのアクセスを有し、前記関連付けられる１つの専用育成部内において１又は複数のオブジェクトを割り当てて操作するように構成される、
システム。
【請求項１３】
前記ウェブアプリケーションを実行するウェブブラウザを更に有しており、
前記ウェブアプリケーションは、前記ウェブブラウザでサポートされたスクリプト言語でコード化される、
請求項１２記載のシステム。
【請求項１４】
前記ウェブブラウザのランタイムシステム内で、前記ウェブアプリケーションのコードを解釈して実行するプログラミング言語エンジンと、
前記プログラミング言語エンジンを変更し、ランタイムに低レベルハードウェア抽象化レイヤーへ変換される決定性データ並列構造によりプログラミング言語を拡張して、前記ウェブアプリケーションのデータ並列性を可能にする、決定性並列プログラミングモジュールと、
を更に有する、請求項１３記載のシステム。
【請求項１５】
前記メインスレッド及び前記少なくとも１つのスポーンスレッドの実行を監視し、前記メモリのブロックのセット内において割り当てられて格納される１又は複数のオブジェクトのライフサイクルを管理する、メモリ管理モジュールと、
前記メモリ管理モジュールは、ガーベッジコレクションサイクルの間、少なくとも前記複数の専用育成部におけるガーベッジコレクションを実行するように構成されるガーベッジコレクタモジュールと、
を更に有する、請求項１２記載のシステム。
【請求項１６】
前記ガーベッジコレクタモジュールは、前記少なくとも１つのスポーンスレッドの実行の状態に少なくとも部分的に基づいて、前記ガーベッジコレクションサイクルを開始するように構成され、前記実行の状態により、前記少なくとも１つのスポーンスレッドがセーフポイントに到達したかどうかを判断し、前記実行の状態は、動作中、休止状態、又は完了状態で構成されるグループから選択され、前記少なくとも１つのスポーンスレッドの前記実行の状態が動作中であるとき、前記メインスレッドは休止状態にあり、該休止状態のメインスレッドが再開する前に、前記関連付けられる１つの専用育成部が前記育成ヒープに配置される、
請求項１５記載のシステム。
【請求項１７】
前記複数の専用育成部のうち前記関連付けられた１つの専用育成部は、前記少なくとも１つのスポーンスレッドが１又は複数のオブジェクトを完全に割り当てるには、メモリスペースが不十分な場合、前記少なくとも１つのスポーンスレッドは、前記複数の専用育成部から以前利用された１つの専用育成部へのアクセスを要求するように構成され、該以前利用された専用育成部は、前記少なくとも１つのスポーンスレッドが１又は複数のオブジェクトを割り当てるために利用可能なメモリスペースの部分を有する、
請求項１２記載のシステム。
【請求項１８】
ウェブアプリケーションの並列計算のための自動メモリ管理をする方法であって、
プロセッサの対応するＣＰＵコアにおいて、ウェブアプリケーションの処理機能の１又は複数のスレッドの同時実行を開始する開始ステップであって、前記１又は複数のスレッドが、メインスレッドと少なくとも１つのスポーンスレッドとを含む、開始ステップと、
前記メインスレッド及び前記少なくとも１つのスポーンスレッドに分配される共有メモリ内において関連付けられるブロックを取得する取得ステップであって、前記ブロックは、育成ヒープと、成熟ヒープと、複数の専用育成部を有するデータベースとを備え、前記メインスレッドは、前記育成ヒープと前記成熟ヒープへのアクセスし、前記メインスレッドは、前記育成ヒープにおいて１又は複数のオブジェクトを割り当てて操作するように構成され、前記少なくとも１つのスポーンスレッドは、前記育成ヒープ及び前記成熟ヒープへの書き込みは許可されておらず、前記複数の専用育成部のうち関連付けられる１つの専用育成部へのアクセスを有し、前記関連付けられる１つの専用育成部内において１又は複数のオブジェクトを割り当てて操作するように構成される、取得ステップと、
前記メインスレッド及び前記少なくとも１つのスポーンスレッドの実行を監視し、前記共有メモリの前記育成ヒープ、前記成熟ヒープ及び前記複数の専用育成部の各々において割り当てられて格納される１又は複数のオブジェクトのライフサイクルを管理するステップと、
を含む、方法。
【請求項１９】
ガーベッジコレクションサイクルの開始のとき、少なくとも前記複数の専用育成部においてガーベッジコレクションを実行する、
請求項１８記載の方法。
【請求項２０】
前記ガーベッジコレクションサイクルは、前記少なくとも１つのスポーンスレッドの実行の状態に少なくとも部分的に基づき、前記実行の状態により、前記少なくとも１つのスポーンスレッドがセーフポイントに到達したかどうかを判断し、前記実行の状態は、動作中、休止状態、又は完了状態で構成されるグループから選択され、前記少なくとも１つのスポーンスレッドの前記実行の状態が動作中であるとき、前記メインスレッドは休止状態にあり、該休止状態のメインスレッドが再開する前に、前記関連付けられる１つの専用育成部が前記育成ヒープに配置される、
請求項１９記載の方法。
【請求項２１】
前記複数の専用育成部のうち前記関連付けられる１つの専用育成部が、前記少なくとも１つのスポーンスレッドが１又は複数のオブジェクトを完全に割り当てるには、メモリスペースが不十分かどうか判定するステップと、
前記複数の専用育成部から、１又は複数のオブジェクトを割り当てるための前記少なくとも１つのスポーンスレッドが１又は複数のオブジェクトを割り当てるために利用可能なメモリスペースの部分を有する以前利用された１つの専用育成部を識別するステップと、
前記以前利用された専用育成部へアクセスし、前記利用可能なメモリスペース内で１又は複数のオブジェクトを割り当てるステップと、
を更に有する、請求項１８記載の方法。
【請求項２２】
装置に請求項１８乃至２１のいずれか１項記載の方法の動作を実行させるプログラム。
【請求項２３】
請求項２２に記載のプログラムを記憶したコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ管理に関し、特に、装置、システム、及びブラウザ内のウェブアプリケーションの並列処理の期間の共有メモリの自動メモリ管理方法に関する。
【背景技術】
【０００２】
並列処理（並列計算ともいう）は、たくさんの計算が同時に実施される演算の形であって、大きな問題は小さな問題へ分割してから同時に（並列して）解決することができるという原理において動作する。コンピューターの消費電力（及びその結果としての発熱）近年、問題となるにつれて、並列計算は、主に、マルチコアプロセッサなど最新のプロセッサの形の、コンピューターアーキテクチャであって、支配的な対応策となっている。
一般に理解されるように、マルチコアプロセッサは、プログラム命令を読み出して実行する、２つ以上の独立した中央処理ユニット（ＣＰＵ）、プログラム命令を読み出して実行コアを有する単一の演算要素である。複数のコアが、複数の命令ストリームから周期ごとに複数の命令を発行することにより、並列計算を受け入れるプログラムのための全体的な速度を増加させる。従って、マルチコアプロセッサでの並列処理は、プログラム及び／又は複数の計算スレッドを実行するための複数のコアの同時使用を一般的に含む。
【０００３】
機械語とＯＳが中で動作されているコンピューター環境において、動作するように設計された、ローカルにインストールされたアプリケーション等のネイティブアプリケーションに対して、並列処理は一般的に適用されている。ユーザーが、ウェブブラウザ内のウェブアプリケーションへアクセスし、該ウェブアプリケーションを働かせることがますます一般的になってきた。ウェブアプリケーションは、可能な限り最高のユーザー体験を提供するために、すべての利用可能なコンピューティングリソースを一般的に活用する必要がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国公開特許公報  ２０１１−２５２２１６号公報
【特許文献２】米国公開特許公報  ２００８−００２１９３９号公報
【特許文献３】米国特許７，５５２，１５３号公報
【非特許文献】
【０００５】
【非特許文献１】ERBAD,AIMAN  et  al,  “DOHA:scalable  real-time  web  application  through  adaptive  concurrent  execution”  P.161-170  In  Proceeding  of  the  21st  international  conference  on  Word  Wide  Web、2011年2月12日〜20日開催
【非特許文献２】MEHRARA,MOITABA  et  al,  “Dynamic  parallelization  of  JavaScript  applications  using  an  ultra-lightweight  speculation  mechanisms,”  P.87-98In  Proceeding  of  the  17st  International  Symposium  on  High-Performance  Computer  Architecture、2011年2月12日〜16日開催
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、ウェブアプリケーションは、適切なプログラミング・モデルがないため、並列のクライアントのハードウェアを必ずしも十分に利用できていなかった。エクマインターナショナル（Ecma  International）によって標準化されたスクリプト言語であるエクマスクリプト（ECMAScript）は、ジャバスクリプト（JavaScript（登録商標））、ジェースクリプト（JScript（登録商標））、及びアクションスクリプト（ActionScript（登録商標））等いくつかのよく知られている方言の形で、広くウェブ上でクライアント側スクリプトのために使用されるスクリプト言語である。
例えば、ジャバスクリプトは、ウェブブラウザでＨＴＭＬドキュメントを操作する人気のスクリプト言語であり、様々なウェブアプリケーションで採択されている。ジャバスクリプトは、適切なプログラミング・モデルがないために、シーケンシャルな実行が一般的に制限されている。そのため、データの並列処理は、一般的にウェブアプリケーションで実現可能なものではなかった。
【０００７】
そこで、本発明は上記事情に鑑み、ブラウザ内のウェブアプリケーションのためのデータの並列処理を可能にする、装置を提供することができる。
の提供を目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するため、本発明の一態様では、ウェブアプリケーションの並列計算のための自動メモリ管理をする装置であって、少なくとも２つのコンピュータープロセッシングユニット（ＣＰＵ）コアを備えるプロセッサと、第一スレッド及び少なくとも１つのスポーンスレッドを含みうる、ウェブアプリケーションの処理機能の１又は複数のスレッドを、前記プロセッサの対応するＣＰＵコアへ指定し、該対応するＣＰＵコアにおいて同時実行をする、オペレーティングシステムと、前記第一スレッドと前記少なくとも１つのスポーンスレッドとへ分配されるブロックのセットを備えており、育成ヒープ、成熟ヒープ、複数の専用育成部を含むデータベースへ分割される、メモリと、を有している。前記第一スレッドは、前記育成ヒープと前記成熟ヒープにアクセスし、該育成ヒープ内において１又は複数のオブジェクトを割り当てて操作し、前記育成ヒープや前記成熟ヒープに格納された１又は複数のオブジェクトへのリファレンスを書き込み、前記少なくとも１つのスポーンスレッドは、前記複数の専用育成部の関連付けられた１つへアクセスし、該関連付けられた専用育成部内において１又は複数のオブジェクトを割り当てて操作する。
【発明の効果】
【０００９】
一態様によれば、装置は、ブラウザ内のウェブアプリケーションのためのデータの並列処理を可能にすることができる。
【図面の簡単な説明】
【００１０】
【図１】本開示のさまざまな実施形態と一致するブラウザ内のウェブ・アプリケーションの並列計算中に共有メモリを管理するためのシステムの一実施形態を示すブロック図である。
【図２】図１のシステムのクライアント装置の一実施形態をより詳細に示すブロック図である。
【図３】一つのメモリ管理モジュールの一実施形態は、本開示のさまざまな実施形態と一致する共有メモリを示すブロック図である。
【図４】本開示の少なくとも一実施形態による例示的な動作を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下の詳細な説明を参照して進行するものの、例示の実施形態では、多くの代替、修正に対して行われ、およびその変形は、当業者には明らかであるものとする。
概要として、本開示は、一般にブラウザ内のウェブアプリケーションの並列計算のための自動メモリ管理のためのシステムおよび方法に関する。本開示と一致するシステム及び方法は、ブラウザ内のウェブアプリケーションのためのデータの並列処理を可能にするように構成された、決定性（決定論的な、deterministic）並列プログラミングモデルと組み合わせて使用することができる。決定性並列プログラミングモデルは、使い慣れたジャバスクリプト（JavaScript）プログラミング・対応策（paradigm）の境界内のマルチコアプロセッサのＣＰＵコアと、ベクター命令を活用することでブラウザ内のウェブアプリケーション用のデータの並列処理を可能にするように構成されうる。
具体的には、決定性並列プログラミングモデルは、ジャバスクリプトのシーケンシャルな実行を超える速度の大幅な増加を達成するために、実行時に低レベルのハードウェア抽象化レイヤーに変換された、決定性データ並列構造でジャバスクリプトを拡張するように構成されうる。このため、決定性並列プログラミングモデルを備えるジャバスクリプトの拡張はウェブブラウザ中にアクセスされる、例えば、写真の編集やビデオゲームは、アクセスされるように、などの複数の計算集約型アプリケーション、を可能にする。これは、プログラマ、特にジャバスクリプトで作業するウェブアプリケーションプログラマによる作成に役立つ。
【００１２】
マルチコアプロセッサでのアプリケーションの並列処理の間に、２つ以上のＣＰＵコアは、各プロセスが１つまたは複数のスレッドを実行することができる、直列の、１又は複数のプロセス（プログラムまたは命令のセット）の夫々が実行する。この場合、プロセスは１又は複数のスレッドを実行し、各スレッドは、アプリケーションでの実行の単一の経路を表す。各ＣＰＵコアが特定のスレッドを実行すると、２つ以上のアプリケーションのスレッドが、同時に実行することが可能である。アプリケーションのスレッドによって、同時実行中にリソース（例えば、メモリ）を共有することが一般的である。同時実行は、アプリケーションの２つ以上のスレッドの同時実行を指すことができる。共有メモリは、データを渡す効率的な手段であってもよい。
【００１３】
前述したように、決定性並列プログラミングモデルでジャバスクリプトを拡張した結果、ジャバスクリプトは、同時性構造の共有メモリを採択することができる。共有メモリに関連付けられている１つの課題は、異なる計算の実行の間の相互作用や通信の正しい順序付けを確実にすること、そして処理の間で共有メモリへのアクセスを調整すること、である。いくつかの一般的なソフトウェア開発モデル下で、ソフトウェア開発者は、アプリケーション内の並列スレッドを正しく同期しようとするように識別し、試みるために、かなりの時間を費やす。
例えば、開発者は共有メモリへのアクセスを制御するロック、セマフォ、バリア、または他の同期機構を一般的に使用することができる。スレッドが共有メモリにアクセスするとき、一般的に、同期メカニズムは、リソースが利用可能になるまでこれらのスレッドをサスペンド（一時動作停止）することにより、他もスレッドが共有メモリへアクセスすることを防ぐことができる。
【００１４】
前述したように、ジャバスクリプトを拡張するためのいくつかの決定性並列プログラミングモデルは、決定論的なランタイム実行環境でのブラウザ内のウェブアプリケーションの実行を可能にすることで、共有メモリ構築物での同期の問題に対処する。「決定性、決定論的（deterministic）」という用語は、一般的に予測またはプログラムや環境の動作を指定する能力を指す。決定論的マルチプロセッシングとブラウザ内のウェブアプリケーションの決定論的マルチプロセッシングと実行は、共有メモリへのスレッドのアクセスを同期するので、ウェブアプリケーションのプログラマの負担を容易にすることができる。
しかし、決定論的マルチプロセッシングを確保するために、共有メモリへのアクセスが制限されており、いくつかの決定性並列プログラミング・モデルがジャバスクリプトに読み込み専用のデータ構造を追加するので、スレッドが同時に実行されているときはいつでも、共有メモリへのアクセスは読み取りのみに限定される。
【００１５】
ジャバスクリプトを拡張するために、現在の決定性並列プログラミング・モデルは、共有メモリに負担がかかるおそれがある。例えば、計算システムでは、データは共有メモリの一部のスペースを割り当てられている「オブジェクト」の形式で格納されうる。多くのコンピューター環境では、プログラムまたはアプリケーションの実行中に、オブジェクトが、動的に（すなわち、必要に応じて）、作成される、或いは割り当てられる。
また、コンピューターで利用可能なメモリの量は限られているので、特定のプログラム命令の使用によって、またはガベージコレクションとして知られている自動化されたプロセスのいずれかを介して、何らかのメカニズムでは、典型的には、取り除くこと、又は「割り当て取消」により、未使用のオブジェクトが提供される。
【００１６】
しかし、動的メモリ管理の主な欠点は、オブジェクトの割り当てと割り当て取消の両方に関連付けられている追加の「オーバーヘッド（負荷）」である。オブジェクトの割り当てと割り当て取消は、コンピューターに、プログラム又はアプリケーションの実行中に動作させられる実際の生産的な動作外の特定の動作を実行させることを必要とするので、各生産的な動作のパフォーマンスを遅らせることになる。さらに、動的なメモリ管理はまた、「不変」（例えば、それらが作成された後に修正できないオブジェクト）オブジェクトを生じることがある。冗長な不変オブジェクトを多数の作成すること、そしてその後割り当て取消しをすることは、使用可能な記憶領域を減少させ、処理負荷が発生し、どちらもパフォーマンスを低下させる。
このように、現在の決定性並列プログラミングモデルとともに、不変なオブジェクトを有することにより、利用可能するための最適化の間にテンション（Tension）が存在し、コピー間の干渉と、変化できないこと及びすでに割り当てられたオブジェクトが再利用できないことによるメモリ管理にかかる圧力と、がほとんど又は全くない。
【００１７】
本開示と一致するシステム及び方法は、クライアント装置の演算システムでのブラウザ内のウェブアプリケーションの並列処理中に使用するための共有メモリの管理を提供するように構成されている。システムは、ブラウザ内のウェブアプリケーションスレッドの実行を監視し、スレッドの実行に関係する共有メモリ内に割り当てられ、格納されたオブジェクトのライフサイクルを管理するように構成された、メモリ管理モジュールを含む。
共有メモリヒープを、育成ヒープと成熟ヒープ（例えば、グローバル領域）と専用育成部（例えば、ローカルエリア）を複数有するデータベースを含むように分割することができる。ウェブアプリケーションの１又は複数のスポーンスレッドを実行する間、各スポーンスレッドは、オブジェクトを割り当てて操作するための空の専用育成部へアクセスする。
【００１８】
スポーンスレッドが関連する専用育成部内の使用可能領域を使い果たし、追加のメモリ空間を必要とする場合には、割り当ての要件を完了するために、スポーンスレッドは、未使用のメモリ空間の一部を持つ独立した利用可能な専用育成部（例えば、部分的に使用する専用育成部）へのアクセスを獲得することができる。
部分的に使用した専用育成部が利用できない場合は、少なくとも１つの別のスポーンスレッドが実行を完了し、部分的に使用する専用育成部を提供するまで、あるいは、すべての未完了のスポーンスレッドが割り当てにおいて休止状態になるまでは、スポーンスレッドは休止状態を保つ。システム内のメモリ空間が制限されてもよいように、部分的に使用するメモリの使用率は、スレッドの実行において効率的であり、無駄が少ない手段である。
【００１９】
メモリ管理モジュールは、１又は複数のガベージコレクションサイクルの間に共有メモリのグローバルエリアおよびローカルエリアのガベージコレクションを提供するように構成されたガベージコレクタモジュールを含む。
１又は複数のガーベッジコレクションサイクルは、スポーンスレッドの実行の状態（たとえば、実行中、休止状態、完了状態）によって判定される、各スポーンスレッドがセーフポイント（例えば、ガベージコレクションが安全であるスポーンスレッドの実行のポイント）に到達したかどうか、というセーフポイント（到達検知）方式に基づいている。
セーフポイント方式によれば、スポーンスレッドが動作中の場合、その後、システムが進行中であり、スポーンスレッドは、セーフポイントに達していない。スポーンスレッドが休止状態又は完了状態である場合には、スポーンスレッドはセーフポイントに達している。
ガベージコレクションサイクルを開始するためには、すべてのスポーンスレッドはセーフポイントに到達することが可能である（各スポーンスレッドが休眠または完全である必要がある）と、スポーンスレッドのいずれかが実行されている場合は、ガベージコレクションが発生しない。セーフポイント方式は、ガベージコレクションを可能にするために、セーフポイントのセットを最小限にすることを可能にし、ガベージコレクションが、システム全体の進行を妨害しない。
【００２０】
ここで、図１を参照して、本明細書に対応するある実施形態のシステム１０の全体を表す。システム１０は、ネットワーク１６を介してメディアソース１４と通信するクライアント装置１２を有する。クライアント装置１２は、パーソナルコンピューター（ＰＣ）、ネットブック、タブレット、ポータブルデジタルアシスタント（ＰＤＡ）、ポータブルメディアプレイヤー（ＰＭＰ）、及び携帯電話及び他の演算装置を含んでもよく、また、これらに限られない。
クライアント装置１２は、ネットワーク１６を介してメディアソース１４によって提供されるアクセスコンテンツにアクセスするように構成されている。ネットワーク１６はデータを運ぶいかなるネットワークであってもよい。
ネットワーク１６として用いられる適切なネットワークの非限定的な例として、インターネット、プライベートネットワーク、バーチャルプライベートネットワーク（ＶＰＮ）、公衆交換電話網（Public  Switched  Telephone  Network:ＰＳＴＮ）、アイエスディーエヌ（integrated  services  digital  networks:ＩＳＤＮ）、デジタルサブスクリバーリンクネットワーク（Digital  Subscriber  Line:ＤＳＬ）、無線データネットワーク（携帯電話ネットワーク）、データを運ぶ他のネットワーク、及びこれらの組み合わせを含む。
ある実施形態において、ネットワーク１６はインターネット、少なくとも１つの無線ネットワーク、少なくとも１つのセルラーフォンネットワーク、及びこれらの組み合わせから選択される。限定がなければ、ネットワーク１６は好ましくはインターネットである。メディアソース１４は、例えば、公共の及びプライベートウェブサイト、ソーシャルネットワークウェブサイト、オーディオ及び／又はビデオウェブサイト、これらの組み合わせ、及び例えばクライアント装置１２で実行されるウェブアプリケーション等のコンテンツを提供できる同様のもの、を含んでもよく、これらに限られない。
【００２１】
次に図２を参照して、図１のシステムのブロック図の詳細の概要を示す。図２に示すように、クライアント装置１２は演算システム１８を含む。演算システム１８は、マルチコアプロセッサ２０、オペレーティングシステム２２、メモリ２４、メモリ管理モジュール２６、ネットワークインターフェース２８、ウェブブラウザ３０、プログラム言語エンジン（例えば、ジャバスクリプトエンジン３２）、及び決定性並列プログラミングモジュール３４を有する。
【００２２】
マルチコアプロセッサ２０は、演算システム１８を介する情報の流れを、演算して管理する命令を処理するように構成されている。一般的に理解されているものとして、マルチコアプロセッサ２０は、プログラム命令を読み込んで実行するように構成される複数の中央処理ユニット（Central  Processing  Unit：ＣＰＵ）コアを備えている。
オペレーティングシステム２２はマルチコアプロセッサ２０を動作させ、メモリ２４を利用してデータを格納する。オペレーティングシステム２２は、例えば、ここで説明するものとして、メモリ２４に格納されたデータ、スケジュールタスク等の複数のリソースを管理し、メモリ管理モジュール２６のオペレーションを処理するように構成されている。さらに、オペレーティングシステム２２は、当業者が知りうる演算システム１８での他のタスクも管理するように構成されてもよい。本出願に一致するシステムは公知のオペレーティングシステム２２を含んでもよい。
【００２３】
理解されるように、オペレーティングシステム２２は、スケジューリングを実施するように構成された、いずれか公知のハードウェア及び／又はソフトウェアを含みうる。例えば、ある実施形態において、オペレーティングシステム２２はスケジューラ（不図示）を含んでもよい。一般的に理解されるように、スケジューリングはスレッド、プロセッサ又はデータフローがシステムリソース（例えば、プロセッサタイム、通信、帯域幅）へのアクセスを与えられることによる方法である。オペレーティングシステム２２におけるプロセス（例えばアプリケーション）は１又は複数のスレッドを含み、各スレッドはアプリケーションコードを介する単一パスの実行を表現する。
スケジューラーは、スレッドをマルチコアプロセッサ２０の対応するＣＰＵコアに指定し、スレッドを対応するＣＰＵコアで実行させるようスケジューリングする、命令及び／又は論理を含む。
【００２４】
アプリケーションの１又は複数のスレッドを実行している間、メモリ２４はメモリ管理モジュール２６によって管理される。詳しくは、メモリ管理モジュール２６は、スレッドの実行を監視し、メモリ２４内で割り当てられ、格納されるオブジェクトのライフサイクルを管理し、そして追って詳細説明するように、使われていないオブジェクトを取り除くことで、バーチャルメモリスペースを開放する。
【００２５】
クライアント装置１２がネットワーク１６を介してメディアソース１４と通信し、情報の交換を可能にするように、ネットワークインターフェース２８は、構成されている。例えば、ある実施形態において、クライアント装置１２で実行するために、ユーザーはメディアソース１４からのウェブアプリケーションへ、アクセスできる。
ウェブアプリケーションは、一般的にブラウザにサポートされた言語、例えばジャバスクリプトと組み合わされたブラウザレンダリングマークアップ言語であるＨＴＭＬ等、でコード化された、コンピューターソフトウェアアプリケーションと呼ばれる。ウェブアプリケーションはブラウザ・ベースであり、ウェブアプリケーションはウェブブラウザに依存しており、アプリケーションを実行可能にする。なお、本出願に一致するシステム及び方法は、ジャバスクリプト・プログラム言語に限定されず、本出願の他の実施形態では、他の公知のコンピュータープログラミング言語によって実施されてもよい。
【００２６】
クライアント装置１２のユーザーがインターネット上の文書及び他のリソースへアクセス、検索（Retrive）、ビュー（View）することが可能になるように、ウェブブラウザ３０は構成されている。一般的な理解として、ウェブブラウザ３０は、メディアソース１４、特にワールドワイドウェブ、からの情報を検索、表現、及び横断するためにソフトウエアアプリケーションを含む。本実施形態では、ウェブブラウザ３０は、メディアソース１４からのアプリケーションを実行し、ユーザーが、ウェブアプリケーションに関連するコンテンツ（テキスト、画像、及び他の情報）にアクセスして相互作用（Interact）することが可能になるように構成されている。ある実施形態では、ウェブブラウザはモジラ・コーポレーション（Mozilla  Corporation）によるファイアフォックス（Firefox）（登録商標）を含んでもよい。なお、ウェブブラウザはインターネットエクスプローラ（Internet  Explorer）（登録商標）、オペラ（Opera）（登録商標）、ネットスケープ（Netscape）（登録商標）、及びサファリ（Safari）（登録商標）等の他の公知のブラウザを含んでもよく、またこれらに限られない。
【００２７】
ジャバスクリプトエンジン３２は、ウェブブラウザ３０のランタイムシステム内で、ウェブアプリケーションコード（例えば、ウェブアプリケーションは、ジャバスクリプトでコード化されている）を解釈して実行する。一般的に理解されているように、ジャバスクリプトエンジン３２はジャバスクリプトを解釈して実行できるコンピューターソフトウエアを有している。ウェブアプリケーションコードの実行はウェブブラウザ３０又は他のクライアント側のプログラム内で起こる。ジャバスクリプトエンジン３２はウェブブラウザ３０と互換性のある他の公知のジャバスクリプトエンジンを有していてもよい。例えば、ある実施形態では、ジャバスクリプトエンジン３２はファイアフォックス（Firefox）ウェブブラウザ３０のいくつか或いは全てのバージョンと互換性があってもよい。
【００２８】
決定性並列プログラミングモジュール３４は、ブラウザ内のウェブアプリケーションのためのデータ並列化を可能にするように構成されている。より詳しくは、決定性並列プログラミングモジュール３４は、ランタイムに低レベルハードウェア抽象化レイヤーへ変換される決定性データ並列構造、とともにジャバスクリプトを拡張できるように構成されている。少なくとも複数のＣＰＵコア及び／又はマルチコアプロセッサ２０のベクター命令を活性化（Leveraging）することによって、ブラウザ内ウェブアプリケーションの並列化プロセスを可能にするために、決定性並列プログラミングモジュール３４はジャバスクリプトエンジン３２と連動して動作するように構成されている。
このようにして、決定性並列プログラミングモジュール３４はジャバスクリプトエンジン３２を変更することができ、ランタイムにおいて、変更されたジャバスクリプトエンジン３２は、自動発見し、いずれか並列化プロセスリソースに利用可能に適合される。例えば、変更されたジャバスクリプトエンジン３２はＣＰＵのベクター演算命令、複数のＣＰＵコア、コア当たりの複数のスレッド及び／又はシステムの複数のプロセッサを利用するように、構成してもよい。
【００２９】
図３を参照して、本出願の様々な実施形態に一致する一例としてのメモリ管理モジュール２６及びメモリ２４の全体的なブロック図を示す。上述のように、オペレーティングシステム２２は、マルチコアプロセッサ２０の対応するＣＰＵコアにスレッドを指定し（割り当て）、該対応するＣＰＵコアにおいて実行するスレッドをスケジューリングするように構成されるスケジューラーを有している。
従って、本出願の実施形態に一致するものとして、ブラウザ内ウェブアプリケーションの１又は複数の処理機能は、たくさんのスレッドへと振り分けられ、各スレッドは、マルチコアプロセッサ２０の対応するＣＰＵコアでの実行のためのスケジューラーによってスケジューリングされる。
【００３０】
ウェブアプリケーションは、ウェブアプリケーションの主機能を動作する単一のスレッド（メインスレッド３６）とともに一般的に開始する。ウェブアプリケーションは、追加スレッド（例えば、スポーンスレッド３８（１）〜３８（ｎ））をスポーンする（同時発生する）：Spawn）、各スポーンスレッドは特定の機能のコードを実行する。各スポーンスレッド３８（１）〜３８（ｎ）は、ウェブアプリケーションのプロセススペースの内側の独立したエンティティ（entity：一単位として扱われるデータのまとまり）となる。
当業者により理解されるように、各スレッドは実行スタック（Stack、不図示）を備えてもよく、カーネル（Kernel）（不図示）によってランタイムが独立してスケジュールされてもよい。上述のように、ジャバスクリプトエンジン３２を決定性並列プログラミングモジュール３４とともに変更することが、ウェブアプリケーションのデータ並列化を可能にする。従って、ウェブアプリケーションのいくつかのスレッドは、別々に指定ＣＰＵコアで夫々、同時実行することが可能である。
【００３１】
例示的な実施形態において、複数のスレッド（メインスレッド３６及びスポーンスレッド３８（１）〜３８（ｎ））はメモリ２４を共有化する。より詳しくは、ブロックのセット又はメモリの隣接した領域は実行のためのスレッドに分配される。
図に示すように、メモリ２４のヒープスペース（自由な順番でメモリの領域を確保・解放できるスペース）は少なくとも育成ヒープ（Nursery  Heap：新しいデータを育成するヒープメモリ）４０と成熟ヒープ４２（Mature  Heap：古いデータを預かるヒープメモリ）とに分割される。
育成ヒープ４０は、新しいオブジェクトが作成され（例えば、割り当てられ）、比較的短時間（秒）のために格納されたメモリの小さい面積を備える。一般的に育成ヒープ４０に格納されるオブジェクトは一般的に短い寿命である。
成熟ヒープ４２は、もはや利用できなくなるまでオブジェクトが存続する、メモリの比較的大きい面積を備える。メモリ２４は専用育成部（Private  Nursery）４６（１）〜４６（ｎ）を内部に格納するスポーンスレッド育成データベース４４をさらに有していてもよい。一般的に、実行中、識別されるメインスレッド３６は１又は複数のオブジェクトを育成ヒープ４０において割り当て、リファレンス（Reference）を、育成ヒープ４０に格納された１又は複数のオブジェクトに書き込む。成熟ヒープ４２についても同様である。
各スポーンスレッド３８（１）〜３８（ｎ）は、スポーンスレッド育成データベース４４の割り当てられた専用育成部４６（１）〜４６（ｎ）へアクセスする。詳しくは、スレッドがスポーンしたとき、オブジェクトを割り当てて操作する（操作処理を行う：manipulate）ための、対応する空の専用育成部へアクセスするようにスポーンスレッドは提供されている。スポーンスレッド３８（１）〜３８（ｎ）は、育成ヒープ４０及び成熟ヒープ４２に読み込むことは許可されているが、育成ヒープ４０及び成熟ヒープへ書き込むことは許可されていない。
【００３２】
上述のように、メモリ管理モジュール２６は、スレッド実行を監視し、メモリ２４内において割り当てられ格納されるオブジェクトのライフサイクルを管理する。メモリ管理モジュール２６は、例えば、ガーベッジコレクション（garbage  collection：メモリの不要になった領域を回収して利用可能なメモリ領域を確保する）を実行するガーベッジコレクタモジュール（garbage  collector  module）４８を備えてもよい。ガーベッジコレクションは、例えば、サブジェクトアプリケーションによって再びアクセスせず操作処理を行わないデータオブジェクトによって用いられる、メモリ等のリソースを再生させるように構成された、メモリ管理の自動形状を参照する。
従って、新しいオブジェクトの割り当てのためのバーチャルメモリスペースを解放するために、ガーベッジコレクタモジュール４８はメモリ２４内の未使用のオブジェクトの割り当てを取り消すように構成される。
【００３３】
ガーベッジコレクタモジュール４８は、ウェブアプリケーションのデータアプリケーションが、オブジェクトによって用いられるリソースに将来アクセスさせず、該リソースを再生利用させられないかどうか、判定できるように構成されている。詳しくは、ガーベッジコレクタモジュール４８は、オブジェクトがウェブアプリケーションの実行手順において要求されるかどうか、判定できるように構成されている。
ガーベッジコレクションサイクルの期間、例えば、育成ヒープ４０、成熟ヒープ４２、及び／又はスポーンスレッド育成データベース４４の１又は複数の専用育成部４６（１）〜４６（ｎ）、等からのオブジェクトの割り当てを取り消すことで、オブジェクトに対応するメモリ２４内のスペースを解放するように、ガーベッジコレクタモジュール４８はさらに構成されてもよい。一般的に、ガーベッジコレクタモジュール４８がガーベッジコレクションを実行する期間をガーベッジコレクションサイクルと呼ぶ。
ここで詳細説明したように、ガーベッジコレクションサイクルは、ウェブアプリケーションの各スレッドの実行の状態に基づいて、決定される。詳しくは、ガーベッジコレクタモジュール４８によるガーベッジコレクションサイクルの開始はここで説明する識別された各スレッドの実行の状態に依存する。
【００３４】
１又は複数のスポーンスレッド３８（１）〜３８（ｎ）を実行する期間、識別されるメインスレッド３６は休止状態にある。１又は複数のスポーンスレッド３８（１）〜３８（ｎ）を実行する期間、各スポーンスレッド３８（１）〜３８（ｎ）は、１又は複数のオブジェクトへアクセスし、関連付けられた空の専用育成部４６（１）〜４６（ｎ）へ割り当てる。上述のように、メモリ２４は共有メモリとして構成されている。作成の際、このようなオブジェクトは、スレッドローカルであると考えられる。このようにして、他のスポーンスレッド３８に見えるメモリ２４の領域において、ポインター（メモリ２４におけるオブジェクトの位置を示すリファレンス等）をインストールすることによって、スポーンスレッド３８は、関連付けられた専用育成部４６からの１又は複数のオブジェクトを公開するのを不可能にする。
これにより、スポーンスレッドが、同階層のスポーン（Sibling  Spawn）によってアクセス値が操作処理されることが不可能である不変量を維持する。実行の完了の際、スポーンスレッド３８は新しく割り当てられたオブジェクトをメインスレッド３６又は、潜在的に他のスポーンスレッドに戻す。あるいは他のイベントにおいて、このようなオブジェクトは、関連付けられた専用育成部４６へ格納されてもよい。ある例において、完了時、関連付けられた専用育成部４６は利用可能な追加スペースを有していてもよく、「部分的に使用される専用育成部」と呼ばれてもよい。
【００３５】
実行時、スポーンスレッド３８が、関連付けられた専用育成部４６における使用可能なスペースを使い果たし、追加メモリスペースを要求する場合、関連付けられた専用育成部４６を拡張するために追加メモリブロックを要求するように、スポーンスレッド３８は構成されている。また、スポーンスレッド３８は、スポーンスレッド育成データベース４４からの部分的に使用される専用育成部へのアクセスの要求を行うことができる。
例えば、万一スポーンスレッド３８（１）に関連付けられた専用育成部４６（１）が使用可能なスペースを使い果たした場合、スレッド実行を続けるために、スポーンスレッド３８（１）は、部分的に使用される専用育成部、例えば専用育成部４６（２）へのアクセスを要求して増やす。要求が成功した場合、スポーンスレッド３８（１）は、アクセスを増やし、１又は複数のオブジェクトを部分的に使用される専用育成部の、利用可能な、残っているメモリスペースにおいて、割り当て続ける。
万一部分的に使用される専用育成部が利用可能ではない場合、スポーンスレッド３８は、少なくとも他の１つのスポーンスレッドが実行を完了して、部分的に使用される専用育成部が提供されるまで、または、割り当てにおいてすべての未完了のスポーンスレッドが休止状態になるまで、スレッド３８は休止状態を保持する。
【００３６】
一般的に、各スポーンスレッド３８（１）〜３８（ｎ）は、実行の少なくとも１つの状態を含んでいてもよい。実行の状態とは、動作状態（Running  state）、休止状態（dormant  state）、及び完了状態（completed  state）を含みうる。１又は複数のスポーンスレッド３８（１）〜３８（ｎ）の現在の実行状態に応じて、ガーベッジコレクタモジュール４８はガーベッジコレクションサイクルを開始するように構成されている。
例えば、ある実施形態において、ガーベッジコレクションサイクルを開始するために、スポーンスレッド３８（１）〜３８（ｎ）のすべてがセーフポイント（safe  point）に到達している必要がある。スレッドのセーフポイントは、ポインターのために、スレッドスタックが正確にスキャン（呼び出し）される（例えば、呼び出し位置）であり、ガーベッジコレクションが安全であるスレッドの実行ポイントである。
スポーンスレッドの現在の実行状態はスレッドがセーフポイントに到達したかどうかを指し示す。例えば、スポーンスレッドが未だ休止状態にある、またはすでに実行が完了した場合、スポーンスレッドはセーフポイントに到達している。スポーンスレッドが動作状態の場合（即ち、動作が完了しておらず、進化している最中であるとき）、システムは進化して、スポーンスレッドはセーフポイントに到達していない。
従って、すべてのスポーンスレッド３８（１）〜３８（ｎ）は、休止状態にある又は既に完了した場合、すべてのスポーンスレッド３８（１）〜３８（ｎ）は、セーフポイントに到達していることになり、ガーベッジコレクタモジュール４８はガーベッジコレクションを開始することができる。一方、１又は複数のスポーンスレッド３８（１）〜３８（ｎ）が動作中の場合、動作中のスポーンスレッド３８はセーフポイントに到達しておらず、ガーベッジコレクタモジュール４８はガーベッジコレクションを開始しない。
【００３７】
最終的に、すべてのスポーンスレッド３８（１）〜３８（ｎ）がセーフポイントに必然的に到達する。一旦すべてのスポーンスレッドが完了し、休止状態のメインスレッドが再開する前に、スポーンスレッド育成データベース４４からの専用育成部４６（１）〜４６（ｎ）は育成ヒープ４０に配置される。次のガーベッジコレクションサイクルのとき、メインスレッドの育成ヒープ４０とスポーンスレッドの専用育成部４６が、単にガーベッジコレクションを目的とした育成部（育成手段）として取り扱われる。
【００３８】
スポーンスレッドが同階層のスポーンスレッドのワークがみえないので、スポーンスレッドは他のスポーンスレッドに依存せず、同階層のスレッドが休止状態になることを妨害しない。スポーンスレッドが存在しないとき、メインスレッドは進化から解放される。このように、少なくとも、１つのスレッドがすべての時間で自由に実行することができ、これにより、システムは常に前進することができる。
【００３９】
ガーベッジコレクタモジュール４８は、育成ヒープ４０と同様に、専用育成室４６（１）〜４６（ｎ）においてガーベッジコレクションを実行するように構成されており、当業者が知る１又は複数のガーベッジコレクションメソッドを実施する。
ガーベッジコレクタモジュール４８は、関連付けられ、割り当てられたオブジェクトに対応する、１又は複数のメモリブロックを検知し、関連付けられ、割り当てられたオブジェクトは将来アクセスされるかどうか判定するように構成されている。
ウェブアプリケーションの実行手順において要求されないオブジェクトを決定する場合、ガーベッジコレクタモジュール４８は、メモリからオブジェクトの割り当てを取り消して（取り去って）、さらなる割り当てのためにより利用可能なメモリを解放する。
なお、ガーベッジコレクタモジュール４８は、育成のみのガーベッジコレクションとグローバルガーベッジコレクションとを実施するように構成してもよい。
育成のみのガーベッジコレクションでは、ガーベッジコレクタモジュール４８は、少なくとも専用育成部４６（１）〜４６（ｎ）でガーベッジコレクションを実行するように構成される。
グローバルガーベッジコレクションでは、ガーベッジコレクタモジュール４８は、育成ヒープ４０と、成熟ヒープ４２と同様に専用育成部４６（１）〜４６（ｎ）でガーベッジコレクションを実施するように構成される。この実施形態において、スポーンスレッドが動作中、グローバルエリアでの割り当て（例えば、育成ヒープ４０と成熟ヒープ４２）は保留され、いずれかローカルエリア（例えば、専用育成部４６（１）〜４６（ｎ））がオブジェクトを保持する間、グローバルエリアを収集する必要はない。
【００４０】
図４は、本出願において一致した少なくとも１つの実施形態に係る例示的な動作のフローチャートを示す。
動作Ｓ４０２において、アプリケーション（例えば、ブラウザ内ウェブアプリケーション）のスレッド（例えばスポーンスレッド）の実行が開始される。
動作Ｓ４０４において、スレッド実行開始の後、メモリブロックの取得に続く。メモリのブロックは、スポーンスレッドがスレッド実行の間アクセスできる育成データベース（例えば、スポーンスレッド育成データベース）からの専用育成部（専用育成部４６（１）〜４６（ｎ））を含みうる。
動作Ｓ４０６において、スレッド実行の演算をする。
【００４１】
動作Ｓ４０８において、スレッド実行が完了したかどうかの、の判定を行う。
Ｓ４０８で実行の完了したことが判定した場合、動作Ｓ４１０で、メモリのブロックが部分的に空かどうかの判定を行う。
動作Ｓ４１０で、メモリのブロックが部分的に空であることが判定した場合、メモリの部分空きブロックは、動作Ｓ４１２で戻され、そして、スレッドはＳ４１４において、ガベレッジコレクション（ＧＣ）がセーフ状態に入る。ＧＣセーフ状態は、メモリブロックのガーベッジコレクションが安全に起こるスレッドの実行の地点である。
【００４２】
また、Ｓ４０８で実行の未完了であると判定した場合、動作Ｓ４１６で、メモリのブロックの割り当てが必要かどうかの判定を行う。
動作Ｓ４１６で、メモリのブロックの割り当てが必要の場合は、動作Ｓ４１８において、メモリのブロックの部分において、オブジェクトを生成する。
あるいは、動作Ｓ４１６で割り当てが要求されていない場合、動作Ｓ４０６〜Ｓ４０８を繰り返す。
【００４３】
動作Ｓ４１８において、ブロックメモリの一部のオブジェクトを作成する際、スレッドによる割り当てが成功したかどうかを、動作Ｓ４２０で実施する。
Ｓ４２０において、割り当てが成功したと判定した場合、動作Ｓ４０６〜Ｓ４０８を繰り返す。
あるいは、Ｓ４２０において、割り当てが成功していないと判定した場合、Ｓ４２２にてメモリの空きブロックが利用可能かどうか判定する。メモリの初期ブロックが利用可能なメモリスペースを使い切って、割り当ての完了をするために、スレッドが追加メモリスペースを要求する。
Ｓ４２２にてメモリの追加の空きブロックが利用可能であると判定した場合、メモリの追加の空きブロックを獲得し、メモリの追加の空きブロックにおいて割り当てが行われる。ここで、Ｓ４２４にて、メミリの追加の空きブロックでオブジェクトが作成され、動作Ｓ４２０が繰り返される。
【００４４】
動作Ｓ４２２において、メモリの追加の空きブロックが利用不可能である場合、動作Ｓ４２６において、メモリの部分空きブロックが利用可能かどうか、判定する。例えば、スレッドは、部分的に使用されるメモリブロック（例えば、スポーンスレッド育成データベース４４からの部分的に使用される専用育成部）へのアクセスを要求するように構成されてもよい。
動作Ｓ４２６において、部分空きメモリブロックが利用可能な場合、部分空きメモリブロックを取得し、部分空きメモリブロック内で割り当てを行う。
動作Ｓ４２８において、部分的に使用されるメモリブロックにおける残りの利用可能なスペースで、オブジェクトが作成され、動作Ｓ４２０が繰り返される。
あるいは、部分空きメモリブロックが利用可能でない場合と判定される場合、動作Ｓ４３０において、スレッドはＧＣ（ガーベッジコレクション）セーフ状態へ入り、動作Ｓ４２２を繰り返す。
【００４５】
ある実施形態にかかわる様々な動作を図４で示したが、他の実施形態において、図４に示す、すべての動作（ステップの動作）が必要というわけではないと理解できる。実際に、本開示の他の実施形態も本明細書で企図され、本明細書に記載の図４に示す動作及び／又は他の動作を具体的に図面の中に示されていない方法で組み合わせることも、本開示に十分に一致するとすることができる。従って、正確に一つの図面には示されていない特徴及び／又は動作に向けた特許請求の範囲は、範囲及び本開示の内容の範囲内とみなされる。
【００４６】
さらに、実施形態のための動作はさらに、上記の図面および添付の実施例を参照して記載されている。図の一部は論理フローを含むことができる。本明細書で提示されるそのような数値は、特定の論理フローを含んでもよいが、論理フローは単に、本明細書に記載の一般的な機能を実現することができる方法の例を提供することは明らかである。さらに、与えられた論理フローは、特に明記しない限り、必ずしも提示した順序で実行する必要はない。また、与えられた論理フローは、ハードウェア要素、プロセッサによって実行されるソフトウェア要素、またはそれらの任意の組み合わせによって実現されてもよい。実施形態はこの文脈に限定されない。
【００４７】
さまざまな特徴、態様、および実施形態は、本明細書に記載されている。当業者によって理解されるように特徴、態様、および実施形態は、互いに同様の変形や変更との組み合わせに対して影響を受けやすい。本開示は、従って、そのような組合せ、変形、及び変更を包含すると見なされるべきである。したがって、本発明の範囲は、上述の例示的な実施形態のいずれによっても限定されるべきではなく、以下の特許請求の範囲及びその均等物によって定義されるべきである。
【００４８】
本明細書中の任意の実施形態で使用される場合、用語「モジュール」は、前述の動作を実行するように構成されたソフトウェア、ファームウェア及び／又は回路を意味することができる。「ソフトウェア」は、非一時的なコンピューター可読記憶媒体に記録された、ソフトウェアパッケージ、コード、命令、命令セット及び／又はデータとして具現化することができる。「ファームウェア」は、コード、命令、又は命令セット、および／または、メモリ・デバイスにハードコード（例えば、不揮発性にコード）されたデータ、として具現化することができる。
「回路」は、本明細書中の任意の実施形態で使用されるように、（１）ハードワイヤード回路（固定配線回路）、（２）１又は複数の個別の命令処理コアを含むコンピュータープロセッサ等のプログラム可能な回路、（３）ステートマシン回路、及び／又は、（４）プログラム可能な回路によって実行される命令を格納するファームウェア、の単体、及びその組み合わせを含む。
「モジュール」は、集合的にまたは個別に、例えば、集積回路（ＩＣ）、システムオンチップ（ＳｏＣ）、デスクトップコンピューター、ラップトップコンピューター、タブレットコンピューター、サーバー、スマートフォン等の、大きなシステムの一部を形成する回路として具現化されうる。
【００４９】
本明細書で説明する動作のいずれも、１又は複数の記憶媒体内に格納され、１又は複数のプロセッサが操作することで実行される命令を格納する、１又は複数の記憶媒体を備えるシステムによって、実装される。
ここで、「プロセッサ」は、例えば、サーバー、ＣＰＵ、モバイルデバイスのＣＰＵ、及び／又は他のプログラム可能な回路を含みうる。また、本明細書に説明される動作は、複数の異なる物理的な場所にある処理構造などの複数の物理デバイスによって分散されてもよいことが意図されている。
記憶媒体は、任意の有形の媒体の種類、例えば、（１）ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷディスク）を含む、任意のタイプのディスク、（２）光磁気ディスク、読み出し専用メモリ（ＲＯＭ）、動的およびスタティックＲＡＭ等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリーメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、ソリッドステートディスク（ＳＳＤ）、及び磁気または光カード、等の半導体デバイス、または、（３）電子命令を格納するのに適した任意の種類のメディア、を含みうる。
他の実施形態は、プログラマブル制御装置により実行されるソフトウェアモジュールとして実装することができる。記憶媒体は、非一時的であってもよい。
【００５０】
本明細書で用いた用語及び表現は、説明の用語として使用され、限定するものではなく、本明細書で表され、説明された特徴（またはその一部）の均等物を排除する意図はなく、そして、さまざまな変更が特許請求の範囲内で可能であることが認識される。したがって、特許請求の範囲は全てのそのような均等物を包含することを意図している。さまざまな特徴、態様、および実施形態は、本明細書に記載されている。
当業者によって理解されるように特徴、態様、および実施形態は、互いに同様の変形や変更との組み合わせに対して影響を受ける。本開示は、従って、そのような組合せ、変形、及び変更を包含すると見なされるべきである。
【００５１】
本明細書で説明するように、さまざまな実施形態は、ハードウェア要素、ソフトウェア要素、またはそれらの任意の組合せを用いて実装することができる。「ハードウェア要素」の例としては、プロセッサ、マイクロプロセッサ、回路、回路素子（例えば、トランジスタ、抵抗、コンデンサ、インダクタなど）、集積回路、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジックデバイス（ＰＬＤ）、デジタル信号プロセッサ（ＤＳＰ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセット、を含むことができる。
【００５２】
本明細書における「ある実施形態」または「一実施形態」への言及は、特定の特徴、構造、または実施形態に関連して説明さ特性が少なくとも１つの実施形態に含まれることを意味する。したがって、本明細書を通じてさまざまな箇所における「ある実施形態において」又は「一実施形態」という語句の出現は、または本明細書を通じて必ずしも全て同じ実施形態を指すわけではない。さらに、特定の特徴、構造、または特性は、１つまたは複数の実施形態において任意の適切な方法で組み合わせることができる。
【００５３】
一態様によれば、ウェブアプリケーションの並列計算のための自動メモリ管理をする装置が提供される。この装置は、少なくとも２つのコンピュータープロセッシングユニット（ＣＰＵ）コアを備えるプロセッサを有する。
また、装置は、ウェブアプリケーションの処理機能の１又は複数のスレッドを、前記プロセッサの対応するＣＰＵコアへ指定し、該対応するＣＰＵコアにおいて同時実行をするように構成される、オペレーティングシステムを有する。前記１又は複数のスレッドは、第一スレッド及び少なくとも１つのスポーンスレッドを含みうる。
【００５４】
装置（コンピューティングシステム）は、さらに、前記第一スレッドと前記少なくとも１つのスポーンスレッドとへ分配されるブロックのセットを備えているメモリを有している。該メモリは、育成ヒープ、成熟ヒープ、複数の専用育成部を含むデータベースへ分割される。
前記第一スレッドは、前記育成ヒープと前記成熟ヒープにアクセスする。該第一スレッドは、該育成ヒープ内において１又は複数のオブジェクトを割り当てて操作し、前記育成ヒープや前記成熟ヒープに格納された１又は複数のオブジェクトへのリファレンスを書き込むように構成されている。
前記少なくとも１つのスポーンスレッドは、前記複数の専用育成部の関連付けられた１つへアクセスする。該少なくとも１つのスポーンスレッドは、該関連付けられた専用育成部内において１又は複数のオブジェクトを割り当てて操作するように構成されている。
【００５５】
別の例示的な装置は、上記の構成要素を含み、さらに、ウェブアプリケーションを実行するように構成され、ウェブブラウザを有している。ウェブアプリケーションは、ウェブブラウザでサポートされているスクリプト言語でコード化されている。
【００５６】
別の例示的な装置は、上記構成要素を含み、スクリプト言語は、ジャバスクリプトである。
【００５７】
別の例示的な装置は、上記の構成要素を含み、ウェブブラウザのランタイムシステム内のウェブアプリケーションのコードを解釈して実行するように構成されたプログラミング言語エンジンを含む。
【００５８】
別の例示的な装置は、上記構成要素を含み、さらに、前記プログラミング言語エンジンを変更し、ランタイム中に低レベルハードウェア抽象化レイヤーへ変換される決定性データ並列構造とともにプログラミング言語を拡張して、前記ウェブアプリケーションのためのデータ並列性を可能にするように構成された決定性並列プログラミングモジュールを有する。
【００５９】
別の例示的な装置は、上記構成要素を含み、さらに、少なくとも、前記第一スレッド及び前記少なくとも１つのスポーンスレッドの監視を実行し、前記メモリの前記ブロックのセット内において割り当てられ格納される１又は複数のオブジェクトのライフサイクルを管理する、ように構成されたメモリ管理モジュールを有する。
【００６０】
別の例示的な装置は、上記構成要素を含み、メモリ管理モジュールは、ガベージコレクションサイクル中に専用育成部のうちの少なくとも各ガベージコレクションを実行するように構成されたガベージコレクタモジュールを含む。
【００６１】
別の例示的な装置は、上記構成要素を含み、少なくとも１つのスポーンスレッドの実行の状態に少なくとも部分的に基づいて、ガベージコレクションサイクルを開始するように構成されている。実行の状態は、少なくとも一つのスポーンスレッドがセーフポイントに到達したか否かの判定要因である。
【００６２】
別の例示的な装置は、上記構成要素を含み、実行状態が、動作中、休止状態、完了状態、からなる群から選択される。
【００６３】
別の例示的な装置は、上記構成要素を含み、少なくとも一つのスポーンスレッドは、実行状態が休止状態または完了状態のときは実行状態が実行されているセーフポイントに達しておらず、実行状態が実行されているときはセーフポイントに到達する。
【００６４】
別の例示的な装置は、上記構成要素を含み、前記複数の専用育成部のうち前記関連付けられた１つの専用育成部において、前記少なくとも１つのスポーンスレッドが、１又は複数のオブジェクトを完全に割り当てるには、メモリスペースが不十分である場合、少なくとも１つの前記スポーンスレッドは、前記複数の専用育成部から以前利用された１つの専用育成部へアクセスするように要求するように構成されている。該以前利用された専用育成部は、１又は複数のオブジェクトを割り当てるための前記少なくとも１つのスポーンスレッドのために利用可能なメモリスペースの部分を備えている。
【００６５】
一態様によれば、ウェブアプリケーションの並列計算のための自動メモリ管理をするシステムが提供される。システムは、メディアソースと、ネットワークを介してメディアソースと通信し、メディアソースが提供するウェブアプリケーションにアクセスし、実行するように構成されたクライアント装置を含む。クライアント装置は、ウェブアプリケーションの並列計算を可能にするように構成されたコンピューティングシステムを含む。
【００６６】
コンピューティングシステムは、少なくとも２つのコンピュータープロセッシングユニット（ＣＰＵ）コアを備えるプロセッサを有する。
また、システムは、ウェブアプリケーションの処理機能の１又は複数のスレッドを、前記プロセッサの対応するＣＰＵコアへ指定し、該対応するＣＰＵコアにおいて同時実行をするように構成される、オペレーティングシステムを有する。前記１又は複数のスレッドは、第一スレッド及び少なくとも１つのスポーンスレッドを含みうる。
【００６７】
コンピューティングシステムは、さらに、前記第一スレッドと前記少なくとも１つのスポーンスレッドとへ分配されるブロックのセットを備えているメモリを有している。該メモリは、育成ヒープ、成熟ヒープ、複数の専用育成部を含むデータベースへ分割される。
前記第一スレッドは、前記育成ヒープと前記成熟ヒープにアクセスする。該第一スレッドは、該育成ヒープ内において１又は複数のオブジェクトを割り当てて操作し、前記育成ヒープや前記成熟ヒープに格納された１又は複数のオブジェクトへのリファレンスを書き込むように構成されている。
前記少なくとも１つのスポーンスレッドは、前記複数の専用育成部の関連付けられた１つへアクセスする。該少なくとも１つのスポーンスレッドは、該関連付けられた専用育成部内において１又は複数のオブジェクトを割り当てて操作するように構成されている。
【００６８】
別の例示的なシステムは、上記構成要素を含み、さらに、ウェブアプリケーションを実行するように構成されるウェブブラウザを有している。ウェブアプリケーションは、ウェブブラウザでサポートされているスクリプト言語でコード化されている。
【００６９】
別の例示的なシステムは、上記構成要素を含み、ウェブブラウザのランタイムシステム内のプログラミング言語エンジンを解釈して実行するように構成されたプログラム言語エンジンを有している。
また、システムは、さらに、前記プログラミング言語エンジンを変更し、ランタイム中に低レベルハードウェア抽象化レイヤーへ変換される決定性データ並列構造とともにプログラミング言語を拡張して、前記ウェブアプリケーションのためのデータ並列性を可能にするように構成された決定性並列プログラミングモジュールを有する。
【００７０】
別の例示的なシステムは、上記構成要素を含み、さらに、少なくとも、前記第一スレッド及び前記少なくとも１つのスポーンスレッドの監視を実行し、前記メモリの前記ブロックのセット内において割り当てられ格納される１又は複数のオブジェクトのライフサイクルを管理する、ように構成されたメモリ管理モジュールを有する。
【００７１】
別の例示的なシステムは、上記構成要素を含み、ガベージコレクタモジュールは、少なくとも１つのスポーンスレッドの実行の状態に、少なくとも部分的に基づいて、ガベージコレクションサイクルを開始するように構成されている。実行の状態は、休止状態、動作中、完了、からなる群から選択される。実行の状態は、少なくとも一つのスポーンスレッドがセーフポイントに到達したかどうかが判定要因である。
【００７２】
別の例示的なシステムは、上記構成要素を含み、専用育成部、複数の関連する１又は複数のオブジェクトの割り当てを完了するために、スレッドスポーン少なくとも一つのための十分なメモリ容量を有する場合、少なくとも一つのスポーンスレッドは、にアクセスを要求するように構成されている専用育成部から複数の以前に使用したプライベート育成部。以前に使用した専用育成部は、１又は複数のオブジェクトを割り当てるために、スレッドスポーン少なくとも一つの利用可能なメモリ空間の部分を有する。
【００７３】
別の態様によれば、コンピューターに格納された命令を含む、コンピューターアクセス可能な１又は複数のメディアが提供される。１又は複数のプロセッサによって実行されるとき、命令はコンピューターシステムに、ウェブアプリケーションの並列計算のための自動メモリ管理の動作を実行させてもよい。動作は、プロセッサのＣＰＵコアに対応するウェブアプリケーションの処理機能の一つ以上のスレッドの同時実行を開始するステップが含まれる。１又は複数のスレッドは、第一スレッドと少なくとも一つのスポーンスレッドとが含まれている。
動作は、育成ヒープ、成熟ヒープ、及び複数の専用育成部を含みうる、前記第一スレッド及び前記少なくとも１つのスポーンスレッドに分配された共有メモリにおいて関連付けられたブロック、を取得するステップを有する。前記第一スレッドは前記育成ヒープと前記成熟ヒープへアクセスする。該第一スレッドは、前記育成ヒープにおいて１又は複数のオブジェクトを割り当てて操作し、前記育成ヒープ及び前記成熟ヒープに格納されたオブジェクトへリファレンスを書き込むように構成されている。前記少なくとも１つのスポーンスレッドは前記複数の専用育成部のうち関連付けられた１つへアクセスする。前記少なくとも１つのスポーンスレッドは、前記関連付けられた専用育成部内において１又は複数のオブジェクトを割り当てて操作するように構成されている。
動作は、前記第一スレッド及び前記少なくとも１つのスポーンスレッドの監視を実行し、前記メモリの前記育成ヒープ、前記成熟ヒープ、及び前記複数の夫々の専用育成部内において割り当てられ格納される１又は複数のオブジェクトのライフサイクルを管理するステップ、を有する。
【００７４】
別の例示的なコンピューターアクセス可能なメディアは、前述の動作が含まれており、ガーベッジコレクションサイクルの初期化開始の間、少なくとも前記複数の専用育成部におけるガーベッジコレクションを実行するステップをさらに有する。
【００７５】
別の例示的なコンピューターアクセス可能メディアは、ガベージコレクタモジュールは、少なくとも１つのスポーンスレッドの実行の状態に、少なくとも部分的に基づいて、ガベージコレクションサイクルを開始するように構成されている。実行の状態は、動作中、休止状態、完了状態、からなる群から選択される。実行の状態は、少なくとも一つのスポーンスレッドがセーフポイントに到達したかどうかが判定要因である。
【００７６】
別の態様によれば、ウェブアプリケーションの並列計算のための自動メモリ管理をする方法が提供される。この方法は、プロセッサの対応するＣＰＵコアにおいて、ウェブアプリケーションの処理機能の１又は複数のスレッドの同時実行を開始するステップを有する。前記１又は複数のスレッドは、第一スレッド及び少なくとも１つのスポーンスレッドを含みうる。
方法は、育成ヒープ、成熟ヒープ、及び複数の専用育成部を含みうる、前記第一スレッド及び前記少なくとも１つのスポーンスレッドに分配された共有メモリにおいて関連付けられたブロック、を取得するステップを有する。前記第一スレッドは前記育成ヒープと前記成熟ヒープへアクセスする。該第一スレッドは、前記育成ヒープにおいて１又は複数のオブジェクトを割り当てて操作し、前記育成ヒープ及び前記成熟ヒープに格納されたオブジェクトへリファレンスを書き込むように構成されている。前記少なくとも１つのスポーンスレッドは前記複数の専用育成部のうち関連付けられた１つへアクセスする。前記少なくとも１つのスポーンスレッドは、前記関連付けられた専用育成部内において１又は複数のオブジェクトを割り当てて操作するように構成されている。
方法は、前記第一スレッド及び前記少なくとも１つのスポーンスレッドの監視を実行し、前記メモリの前記育成ヒープ、前記成熟ヒープ、及び前記複数の夫々の専用育成部内において割り当てられ格納される１又は複数のオブジェクトのライフサイクルを管理するステップ、を有する。
【００７７】
別の例示的な方法は、前述の動作が含まれ、さらに、ガーベッジコレクションサイクルの初期化開始の間、少なくとも前記複数の専用育成部におけるガーベッジコレクションを実行するステップを含む。
【００７８】
別の例示的な方法は、少なくとも１つのスポーンスレッドの実行の状態に少なくとも部分的に基づいて、ガベージコレクションサイクルを開始するように構成されている。実行の状態は、少なくとも一つのスポーンスレッドがセーフポイントに到達したかどうかが判定要因である。実行の状態は、動作中、休止状態、完了状態、からなる群から選択される。
【００７９】
別の例示的な方法は、以上の動作を含み、さらに、前記複数の専用育成部のうち前記関連付けられた１つの専用育成部において、前記少なくとも１つのスポーンスレッドが、１又は複数のオブジェクトを完全に割り当てるには、メモリスペースが不十分かどうか判定するステップを含む。
方法は、前記複数の専用育成部の以前利用された１つの専用育成部が、１又は複数のオブジェクトを割り当てるための前記少なくとも１つのスポーンスレッドのために利用可能なメモリスペースの部分を有するかどうか、識別するステップを有する。
方法は、前記以前利用された専用育成部へアクセスし、前記利用可能なメモリスペース内で１又は複数のオブジェクトを割り当てるステップをさらに有する
【００８０】
本明細書で用いた用語及び表現は、説明の用語として使用され、限定するものではなく、本明細書で表され、説明された特徴（またはその一部）の均等物を排除する意図はなく、そして、さまざまな変更が特許請求の範囲内で可能であることが認識される。
したがって、特許請求の範囲は全てのそのような均等物を包含することを意図している。
【符号の説明】
【００８１】
１０  システム
１２  クライアント装置
１４  メディアソース
１６  ネットワーク
１８  演算システム
２０  マルチコアプロセッサ
２２  オペレーティングシステム
２４  メモリ
２６  メモリ管理モジュール
２８  ネットワークインターフェース
３０  ウェブブラウザ
３２  ジャバスクリプトエンジン
３４  決定性並列プログラミングモジュール
３６  メインスレッド
３８  スポーンスレッド
４０  育成ヒープ
４２  成熟ヒープ
４４  スポーンスレッド育成データベース
４６  専用育成部
４８  ガーベッジコレクタモジュール
【図１】
0005911997.tif 000002
【図２】
0005911997.tif 000003
【図３】
0005911997.tif 000004
【図４】
0005911997.tif 000005