(58)【調査した分野】(Int.Cl.,DB名)
前記メモリ管理モジュールは、ガーベッジコレクションサイクルの間、少なくとも前記複数の専用育成部におけるガーベッジコレクションを実行するガーベッジコレクタモジュールを有する、
請求項6記載の装置。
前記少なくとも1つのスポーンスレッドは、前記実行の状態が休止状態又は完了状態のとき、前記セーフポイントに到達し、前記実行の状態が動作中のときには前記セーフポイントに到達しない、
請求項9記載の装置。
前記複数の専用育成部のうち前記関連付けられた1つの専用育成部は、前記少なくとも1つのスポーンスレッドが1又は複数のオブジェクトを完全に割り当てるには、メモリスペースが不十分な場合、前記少なくとも1つのスポーンスレッドは、前記複数の専用育成部から以前利用された1つの専用育成部へのアクセスを要求するよう構成され、
該以前利用された専用育成部は、前記少なくとも1つのスポーンスレッドが1又は複数のオブジェクトを割り当てるために利用可能なメモリスペースの部分を有する、
請求項1記載の装置。
【発明を実施するための形態】
【0011】
以下の詳細な説明を参照して進行するものの、例示の実施形態では、多くの代替、修正に対して行われ、およびその変形は、当業者には明らかであるものとする。
概要として、本開示は、一般にブラウザ内のウェブアプリケーションの並列計算のための自動メモリ管理のためのシステムおよび方法に関する。本開示と一致するシステム及び方法は、ブラウザ内のウェブアプリケーションのためのデータの並列処理を可能にするように構成された、決定性(決定論的な、deterministic)並列プログラミングモデルと組み合わせて使用することができる。決定性並列プログラミングモデルは、使い慣れたジャバスクリプト(JavaScript)プログラミング・対応策(paradigm)の境界内のマルチコアプロセッサのCPUコアと、ベクター命令を活用することでブラウザ内のウェブアプリケーション用のデータの並列処理を可能にするように構成されうる。
具体的には、決定性並列プログラミングモデルは、ジャバスクリプトのシーケンシャルな実行を超える速度の大幅な増加を達成するために、実行時に低レベルのハードウェア抽象化レイヤーに変換された、決定性データ並列構造でジャバスクリプトを拡張するように構成されうる。このため、決定性並列プログラミングモデルを備えるジャバスクリプトの拡張はウェブブラウザ中にアクセスされる、例えば、写真の編集やビデオゲームは、アクセスされるように、などの複数の計算集約型アプリケーション、を可能にする。これは、プログラマ、特にジャバスクリプトで作業するウェブアプリケーションプログラマによる作成に役立つ。
【0012】
マルチコアプロセッサでのアプリケーションの並列処理の間に、2つ以上のCPUコアは、各プロセスが1つまたは複数のスレッドを実行することができる、直列の、1又は複数のプロセス(プログラムまたは命令のセット)の夫々が実行する。この場合、プロセスは1又は複数のスレッドを実行し、各スレッドは、アプリケーションでの実行の単一の経路を表す。各CPUコアが特定のスレッドを実行すると、2つ以上のアプリケーションのスレッドが、同時に実行することが可能である。アプリケーションのスレッドによって、同時実行中にリソース(例えば、メモリ)を共有することが一般的である。同時実行は、アプリケーションの2つ以上のスレッドの同時実行を指すことができる。共有メモリは、データを渡す効率的な手段であってもよい。
【0013】
前述したように、決定性並列プログラミングモデルでジャバスクリプトを拡張した結果、ジャバスクリプトは、同時性構造の共有メモリを採択することができる。共有メモリに関連付けられている1つの課題は、異なる計算の実行の間の相互作用や通信の正しい順序付けを確実にすること、そして処理の間で共有メモリへのアクセスを調整すること、である。いくつかの一般的なソフトウェア開発モデル下で、ソフトウェア開発者は、アプリケーション内の並列スレッドを正しく同期しようとするように識別し、試みるために、かなりの時間を費やす。
例えば、開発者は共有メモリへのアクセスを制御するロック、セマフォ、バリア、または他の同期機構を一般的に使用することができる。スレッドが共有メモリにアクセスするとき、一般的に、同期メカニズムは、リソースが利用可能になるまでこれらのスレッドをサスペンド(一時動作停止)することにより、他もスレッドが共有メモリへアクセスすることを防ぐことができる。
【0014】
前述したように、ジャバスクリプトを拡張するためのいくつかの決定性並列プログラミングモデルは、決定論的なランタイム実行環境でのブラウザ内のウェブアプリケーションの実行を可能にすることで、共有メモリ構築物での同期の問題に対処する。「決定性、決定論的(deterministic)」という用語は、一般的に予測またはプログラムや環境の動作を指定する能力を指す。決定論的マルチプロセッシングとブラウザ内のウェブアプリケーションの決定論的マルチプロセッシングと実行は、共有メモリへのスレッドのアクセスを同期するので、ウェブアプリケーションのプログラマの負担を容易にすることができる。
しかし、決定論的マルチプロセッシングを確保するために、共有メモリへのアクセスが制限されており、いくつかの決定性並列プログラミング・モデルがジャバスクリプトに読み込み専用のデータ構造を追加するので、スレッドが同時に実行されているときはいつでも、共有メモリへのアクセスは読み取りのみに限定される。
【0015】
ジャバスクリプトを拡張するために、現在の決定性並列プログラミング・モデルは、共有メモリに負担がかかるおそれがある。例えば、計算システムでは、データは共有メモリの一部のスペースを割り当てられている「オブジェクト」の形式で格納されうる。多くのコンピューター環境では、プログラムまたはアプリケーションの実行中に、オブジェクトが、動的に(すなわち、必要に応じて)、作成される、或いは割り当てられる。
また、コンピューターで利用可能なメモリの量は限られているので、特定のプログラム命令の使用によって、またはガベージコレクションとして知られている自動化されたプロセスのいずれかを介して、何らかのメカニズムでは、典型的には、取り除くこと、又は「割り当て取消」により、未使用のオブジェクトが提供される。
【0016】
しかし、動的メモリ管理の主な欠点は、オブジェクトの割り当てと割り当て取消の両方に関連付けられている追加の「オーバーヘッド(負荷)」である。オブジェクトの割り当てと割り当て取消は、コンピューターに、プログラム又はアプリケーションの実行中に動作させられる実際の生産的な動作外の特定の動作を実行させることを必要とするので、各生産的な動作のパフォーマンスを遅らせることになる。さらに、動的なメモリ管理はまた、「不変」(例えば、それらが作成された後に修正できないオブジェクト)オブジェクトを生じることがある。冗長な不変オブジェクトを多数の作成すること、そしてその後割り当て取消しをすることは、使用可能な記憶領域を減少させ、処理負荷が発生し、どちらもパフォーマンスを低下させる。
このように、現在の決定性並列プログラミングモデルとともに、不変なオブジェクトを有することにより、利用可能するための最適化の間にテンション(Tension)が存在し、コピー間の干渉と、変化できないこと及びすでに割り当てられたオブジェクトが再利用できないことによるメモリ管理にかかる圧力と、がほとんど又は全くない。
【0017】
本開示と一致するシステム及び方法は、クライアント装置の演算システムでのブラウザ内のウェブアプリケーションの並列処理中に使用するための共有メモリの管理を提供するように構成されている。システムは、ブラウザ内のウェブアプリケーションスレッドの実行を監視し、スレッドの実行に関係する共有メモリ内に割り当てられ、格納されたオブジェクトのライフサイクルを管理するように構成された、メモリ管理モジュールを含む。
共有メモリヒープを、育成ヒープと成熟ヒープ(例えば、グローバル領域)と専用育成部(例えば、ローカルエリア)を複数有するデータベースを含むように分割することができる。ウェブアプリケーションの1又は複数のスポーンスレッドを実行する間、各スポーンスレッドは、オブジェクトを割り当てて操作するための空の専用育成部へアクセスする。
【0018】
スポーンスレッドが関連する専用育成部内の使用可能領域を使い果たし、追加のメモリ空間を必要とする場合には、割り当ての要件を完了するために、スポーンスレッドは、未使用のメモリ空間の一部を持つ独立した利用可能な専用育成部(例えば、部分的に使用する専用育成部)へのアクセスを獲得することができる。
部分的に使用した専用育成部が利用できない場合は、少なくとも1つの別のスポーンスレッドが実行を完了し、部分的に使用する専用育成部を提供するまで、あるいは、すべての未完了のスポーンスレッドが割り当てにおいて休止状態になるまでは、スポーンスレッドは休止状態を保つ。システム内のメモリ空間が制限されてもよいように、部分的に使用するメモリの使用率は、スレッドの実行において効率的であり、無駄が少ない手段である。
【0019】
メモリ管理モジュールは、1又は複数のガベージコレクションサイクルの間に共有メモリのグローバルエリアおよびローカルエリアのガベージコレクションを提供するように構成されたガベージコレクタモジュールを含む。
1又は複数のガーベッジコレクションサイクルは、スポーンスレッドの実行の状態(たとえば、実行中、休止状態、完了状態)によって判定される、各スポーンスレッドがセーフポイント(例えば、ガベージコレクションが安全であるスポーンスレッドの実行のポイント)に到達したかどうか、というセーフポイント(到達検知)方式に基づいている。
セーフポイント方式によれば、スポーンスレッドが動作中の場合、その後、システムが進行中であり、スポーンスレッドは、セーフポイントに達していない。スポーンスレッドが休止状態又は完了状態である場合には、スポーンスレッドはセーフポイントに達している。
ガベージコレクションサイクルを開始するためには、すべてのスポーンスレッドはセーフポイントに到達することが可能である(各スポーンスレッドが休眠または完全である必要がある)と、スポーンスレッドのいずれかが実行されている場合は、ガベージコレクションが発生しない。セーフポイント方式は、ガベージコレクションを可能にするために、セーフポイントのセットを最小限にすることを可能にし、ガベージコレクションが、システム全体の進行を妨害しない。
【0020】
ここで、
図1を参照して、本明細書に対応するある実施形態のシステム10の全体を表す。システム10は、ネットワーク16を介してメディアソース14と通信するクライアント装置12を有する。クライアント装置12は、パーソナルコンピューター(PC)、ネットブック、タブレット、ポータブルデジタルアシスタント(PDA)、ポータブルメディアプレイヤー(PMP)、及び携帯電話及び他の演算装置を含んでもよく、また、これらに限られない。
クライアント装置12は、ネットワーク16を介してメディアソース14によって提供されるアクセスコンテンツにアクセスするように構成されている。ネットワーク16はデータを運ぶいかなるネットワークであってもよい。
ネットワーク16として用いられる適切なネットワークの非限定的な例として、インターネット、プライベートネットワーク、バーチャルプライベートネットワーク(VPN)、公衆交換電話網(Public Switched Telephone Network:PSTN)、アイエスディーエヌ(integrated services digital networks:ISDN)、デジタルサブスクリバーリンクネットワーク(Digital Subscriber Line:DSL)、無線データネットワーク(携帯電話ネットワーク)、データを運ぶ他のネットワーク、及びこれらの組み合わせを含む。
ある実施形態において、ネットワーク16はインターネット、少なくとも1つの無線ネットワーク、少なくとも1つのセルラーフォンネットワーク、及びこれらの組み合わせから選択される。限定がなければ、ネットワーク16は好ましくはインターネットである。メディアソース14は、例えば、公共の及びプライベートウェブサイト、ソーシャルネットワークウェブサイト、オーディオ及び/又はビデオウェブサイト、これらの組み合わせ、及び例えばクライアント装置12で実行されるウェブアプリケーション等のコンテンツを提供できる同様のもの、を含んでもよく、これらに限られない。
【0021】
次に
図2を参照して、
図1のシステムのブロック図の詳細の概要を示す。
図2に示すように、クライアント装置12は演算システム18を含む。演算システム18は、マルチコアプロセッサ20、オペレーティングシステム22、メモリ24、メモリ管理モジュール26、ネットワークインターフェース28、ウェブブラウザ30、プログラム言語エンジン(例えば、ジャバスクリプトエンジン32)、及び決定性並列プログラミングモジュール34を有する。
【0022】
マルチコアプロセッサ20は、演算システム18を介する情報の流れを、演算して管理する命令を処理するように構成されている。一般的に理解されているものとして、マルチコアプロセッサ20は、プログラム命令を読み込んで実行するように構成される複数の中央処理ユニット(Central Processing Unit:CPU)コアを備えている。
オペレーティングシステム22はマルチコアプロセッサ20を動作させ、メモリ24を利用してデータを格納する。オペレーティングシステム22は、例えば、ここで説明するものとして、メモリ24に格納されたデータ、スケジュールタスク等の複数のリソースを管理し、メモリ管理モジュール26のオペレーションを処理するように構成されている。さらに、オペレーティングシステム22は、当業者が知りうる演算システム18での他のタスクも管理するように構成されてもよい。本出願に一致するシステムは公知のオペレーティングシステム22を含んでもよい。
【0023】
理解されるように、オペレーティングシステム22は、スケジューリングを実施するように構成された、いずれか公知のハードウェア及び/又はソフトウェアを含みうる。例えば、ある実施形態において、オペレーティングシステム22はスケジューラ(不図示)を含んでもよい。一般的に理解されるように、スケジューリングはスレッド、プロセッサ又はデータフローがシステムリソース(例えば、プロセッサタイム、通信、帯域幅)へのアクセスを与えられることによる方法である。オペレーティングシステム22におけるプロセス(例えばアプリケーション)は1又は複数のスレッドを含み、各スレッドはアプリケーションコードを介する単一パスの実行を表現する。
スケジューラーは、スレッドをマルチコアプロセッサ20の対応するCPUコアに指定し、スレッドを対応するCPUコアで実行させるようスケジューリングする、命令及び/又は論理を含む。
【0024】
アプリケーションの1又は複数のスレッドを実行している間、メモリ24はメモリ管理モジュール26によって管理される。詳しくは、メモリ管理モジュール26は、スレッドの実行を監視し、メモリ24内で割り当てられ、格納されるオブジェクトのライフサイクルを管理し、そして追って詳細説明するように、使われていないオブジェクトを取り除くことで、バーチャルメモリスペースを開放する。
【0025】
クライアント装置12がネットワーク16を介してメディアソース14と通信し、情報の交換を可能にするように、ネットワークインターフェース28は、構成されている。例えば、ある実施形態において、クライアント装置12で実行するために、ユーザーはメディアソース14からのウェブアプリケーションへ、アクセスできる。
ウェブアプリケーションは、一般的にブラウザにサポートされた言語、例えばジャバスクリプトと組み合わされたブラウザレンダリングマークアップ言語であるHTML等、でコード化された、コンピューターソフトウェアアプリケーションと呼ばれる。ウェブアプリケーションはブラウザ・ベースであり、ウェブアプリケーションはウェブブラウザに依存しており、アプリケーションを実行可能にする。なお、本出願に一致するシステム及び方法は、ジャバスクリプト・プログラム言語に限定されず、本出願の他の実施形態では、他の公知のコンピュータープログラミング言語によって実施されてもよい。
【0026】
クライアント装置12のユーザーがインターネット上の文書及び他のリソースへアクセス、検索(Retrive)、ビュー(View)することが可能になるように、ウェブブラウザ30は構成されている。一般的な理解として、ウェブブラウザ30は、メディアソース14、特にワールドワイドウェブ、からの情報を検索、表現、及び横断するためにソフトウエアアプリケーションを含む。本実施形態では、ウェブブラウザ30は、メディアソース14からのアプリケーションを実行し、ユーザーが、ウェブアプリケーションに関連するコンテンツ(テキスト、画像、及び他の情報)にアクセスして相互作用(Interact)することが可能になるように構成されている。ある実施形態では、ウェブブラウザはモジラ・コーポレーション(Mozilla Corporation)によるファイアフォックス(Firefox)(登録商標)を含んでもよい。なお、ウェブブラウザはインターネットエクスプローラ(Internet Explorer)(登録商標)、オペラ(Opera)(登録商標)、ネットスケープ(Netscape)(登録商標)、及びサファリ(Safari)(登録商標)等の他の公知のブラウザを含んでもよく、またこれらに限られない。
【0027】
ジャバスクリプトエンジン32は、ウェブブラウザ30のランタイムシステム内で、ウェブアプリケーションコード(例えば、ウェブアプリケーションは、ジャバスクリプトでコード化されている)を解釈して実行する。一般的に理解されているように、ジャバスクリプトエンジン32はジャバスクリプトを解釈して実行できるコンピューターソフトウエアを有している。ウェブアプリケーションコードの実行はウェブブラウザ30又は他のクライアント側のプログラム内で起こる。ジャバスクリプトエンジン32はウェブブラウザ30と互換性のある他の公知のジャバスクリプトエンジンを有していてもよい。例えば、ある実施形態では、ジャバスクリプトエンジン32はファイアフォックス(Firefox)ウェブブラウザ30のいくつか或いは全てのバージョンと互換性があってもよい。
【0028】
決定性並列プログラミングモジュール34は、ブラウザ内のウェブアプリケーションのためのデータ並列化を可能にするように構成されている。より詳しくは、決定性並列プログラミングモジュール34は、ランタイムに低レベルハードウェア抽象化レイヤーへ変換される決定性データ並列構造、とともにジャバスクリプトを拡張できるように構成されている。少なくとも複数のCPUコア及び/又はマルチコアプロセッサ20のベクター命令を活性化(Leveraging)することによって、ブラウザ内ウェブアプリケーションの並列化プロセスを可能にするために、決定性並列プログラミングモジュール34はジャバスクリプトエンジン32と連動して動作するように構成されている。
このようにして、決定性並列プログラミングモジュール34はジャバスクリプトエンジン32を変更することができ、ランタイムにおいて、変更されたジャバスクリプトエンジン32は、自動発見し、いずれか並列化プロセスリソースに利用可能に適合される。例えば、変更されたジャバスクリプトエンジン32はCPUのベクター演算命令、複数のCPUコア、コア当たりの複数のスレッド及び/又はシステムの複数のプロセッサを利用するように、構成してもよい。
【0029】
図3を参照して、本出願の様々な実施形態に一致する一例としてのメモリ管理モジュール26及びメモリ24の全体的なブロック図を示す。上述のように、オペレーティングシステム22は、マルチコアプロセッサ20の対応するCPUコアにスレッドを指定し(割り当て)、該対応するCPUコアにおいて実行するスレッドをスケジューリングするように構成されるスケジューラーを有している。
従って、本出願の実施形態に一致するものとして、ブラウザ内ウェブアプリケーションの1又は複数の処理機能は、たくさんのスレッドへと振り分けられ、各スレッドは、マルチコアプロセッサ20の対応するCPUコアでの実行のためのスケジューラーによってスケジューリングされる。
【0030】
ウェブアプリケーションは、ウェブアプリケーションの主機能を動作する単一のスレッド(メインスレッド36)とともに一般的に開始する。ウェブアプリケーションは、追加スレッド(例えば、スポーンスレッド38(1)〜38(n))をスポーンする(同時発生する):Spawn)、各スポーンスレッドは特定の機能のコードを実行する。各スポーンスレッド38(1)〜38(n)は、ウェブアプリケーションのプロセススペースの内側の独立したエンティティ(entity:一単位として扱われるデータのまとまり)となる。
当業者により理解されるように、各スレッドは実行スタック(Stack、不図示)を備えてもよく、カーネル(Kernel)(不図示)によってランタイムが独立してスケジュールされてもよい。上述のように、ジャバスクリプトエンジン32を決定性並列プログラミングモジュール34とともに変更することが、ウェブアプリケーションのデータ並列化を可能にする。従って、ウェブアプリケーションのいくつかのスレッドは、別々に指定CPUコアで夫々、同時実行することが可能である。
【0031】
例示的な実施形態において、複数のスレッド(メインスレッド36及びスポーンスレッド38(1)〜38(n))はメモリ24を共有化する。より詳しくは、ブロックのセット又はメモリの隣接した領域は実行のためのスレッドに分配される。
図に示すように、メモリ24のヒープスペース(自由な順番でメモリの領域を確保・解放できるスペース)は少なくとも育成ヒープ(Nursery Heap:新しいデータを育成するヒープメモリ)40と成熟ヒープ42(Mature Heap:古いデータを預かるヒープメモリ)とに分割される。
育成ヒープ40は、新しいオブジェクトが作成され(例えば、割り当てられ)、比較的短時間(秒)のために格納されたメモリの小さい面積を備える。一般的に育成ヒープ40に格納されるオブジェクトは一般的に短い寿命である。
成熟ヒープ42は、もはや利用できなくなるまでオブジェクトが存続する、メモリの比較的大きい面積を備える。メモリ24は専用育成部(Private Nursery)46(1)〜46(n)を内部に格納するスポーンスレッド育成データベース44をさらに有していてもよい。一般的に、実行中、識別されるメインスレッド36は1又は複数のオブジェクトを育成ヒープ40において割り当て、リファレンス(Reference)を、育成ヒープ40に格納された1又は複数のオブジェクトに書き込む。成熟ヒープ42についても同様である。
各スポーンスレッド38(1)〜38(n)は、スポーンスレッド育成データベース44の割り当てられた専用育成部46(1)〜46(n)へアクセスする。詳しくは、スレッドがスポーンしたとき、オブジェクトを割り当てて操作する(操作処理を行う:manipulate)ための、対応する空の専用育成部へアクセスするようにスポーンスレッドは提供されている。スポーンスレッド38(1)〜38(n)は、育成ヒープ40及び成熟ヒープ42に読み込むことは許可されているが、育成ヒープ40及び成熟ヒープへ書き込むことは許可されていない。
【0032】
上述のように、メモリ管理モジュール26は、スレッド実行を監視し、メモリ24内において割り当てられ格納されるオブジェクトのライフサイクルを管理する。メモリ管理モジュール26は、例えば、ガーベッジコレクション(garbage collection:メモリの不要になった領域を回収して利用可能なメモリ領域を確保する)を実行するガーベッジコレクタモジュール(garbage collector module)48を備えてもよい。ガーベッジコレクションは、例えば、サブジェクトアプリケーションによって再びアクセスせず操作処理を行わないデータオブジェクトによって用いられる、メモリ等のリソースを再生させるように構成された、メモリ管理の自動形状を参照する。
従って、新しいオブジェクトの割り当てのためのバーチャルメモリスペースを解放するために、ガーベッジコレクタモジュール48はメモリ24内の未使用のオブジェクトの割り当てを取り消すように構成される。
【0033】
ガーベッジコレクタモジュール48は、ウェブアプリケーションのデータアプリケーションが、オブジェクトによって用いられるリソースに将来アクセスさせず、該リソースを再生利用させられないかどうか、判定できるように構成されている。詳しくは、ガーベッジコレクタモジュール48は、オブジェクトがウェブアプリケーションの実行手順において要求されるかどうか、判定できるように構成されている。
ガーベッジコレクションサイクルの期間、例えば、育成ヒープ40、成熟ヒープ42、及び/又はスポーンスレッド育成データベース44の1又は複数の専用育成部46(1)〜46(n)、等からのオブジェクトの割り当てを取り消すことで、オブジェクトに対応するメモリ24内のスペースを解放するように、ガーベッジコレクタモジュール48はさらに構成されてもよい。一般的に、ガーベッジコレクタモジュール48がガーベッジコレクションを実行する期間をガーベッジコレクションサイクルと呼ぶ。
ここで詳細説明したように、ガーベッジコレクションサイクルは、ウェブアプリケーションの各スレッドの実行の状態に基づいて、決定される。詳しくは、ガーベッジコレクタモジュール48によるガーベッジコレクションサイクルの開始はここで説明する識別された各スレッドの実行の状態に依存する。
【0034】
1又は複数のスポーンスレッド38(1)〜38(n)を実行する期間、識別されるメインスレッド36は休止状態にある。1又は複数のスポーンスレッド38(1)〜38(n)を実行する期間、各スポーンスレッド38(1)〜38(n)は、1又は複数のオブジェクトへアクセスし、関連付けられた空の専用育成部46(1)〜46(n)へ割り当てる。上述のように、メモリ24は共有メモリとして構成されている。作成の際、このようなオブジェクトは、スレッドローカルであると考えられる。このようにして、他のスポーンスレッド38に見えるメモリ24の領域において、ポインター(メモリ24におけるオブジェクトの位置を示すリファレンス等)をインストールすることによって、スポーンスレッド38は、関連付けられた専用育成部46からの1又は複数のオブジェクトを公開するのを不可能にする。
これにより、スポーンスレッドが、同階層のスポーン(Sibling Spawn)によってアクセス値が操作処理されることが不可能である不変量を維持する。実行の完了の際、スポーンスレッド38は新しく割り当てられたオブジェクトをメインスレッド36又は、潜在的に他のスポーンスレッドに戻す。あるいは他のイベントにおいて、このようなオブジェクトは、関連付けられた専用育成部46へ格納されてもよい。ある例において、完了時、関連付けられた専用育成部46は利用可能な追加スペースを有していてもよく、「部分的に使用される専用育成部」と呼ばれてもよい。
【0035】
実行時、スポーンスレッド38が、関連付けられた専用育成部46における使用可能なスペースを使い果たし、追加メモリスペースを要求する場合、関連付けられた専用育成部46を拡張するために追加メモリブロックを要求するように、スポーンスレッド38は構成されている。また、スポーンスレッド38は、スポーンスレッド育成データベース44からの部分的に使用される専用育成部へのアクセスの要求を行うことができる。
例えば、万一スポーンスレッド38(1)に関連付けられた専用育成部46(1)が使用可能なスペースを使い果たした場合、スレッド実行を続けるために、スポーンスレッド38(1)は、部分的に使用される専用育成部、例えば専用育成部46(2)へのアクセスを要求して増やす。要求が成功した場合、スポーンスレッド38(1)は、アクセスを増やし、1又は複数のオブジェクトを部分的に使用される専用育成部の、利用可能な、残っているメモリスペースにおいて、割り当て続ける。
万一部分的に使用される専用育成部が利用可能ではない場合、スポーンスレッド38は、少なくとも他の1つのスポーンスレッドが実行を完了して、部分的に使用される専用育成部が提供されるまで、または、割り当てにおいてすべての未完了のスポーンスレッドが休止状態になるまで、スレッド38は休止状態を保持する。
【0036】
一般的に、各スポーンスレッド38(1)〜38(n)は、実行の少なくとも1つの状態を含んでいてもよい。実行の状態とは、動作状態(Running state)、休止状態(dormant state)、及び完了状態(completed state)を含みうる。1又は複数のスポーンスレッド38(1)〜38(n)の現在の実行状態に応じて、ガーベッジコレクタモジュール48はガーベッジコレクションサイクルを開始するように構成されている。
例えば、ある実施形態において、ガーベッジコレクションサイクルを開始するために、スポーンスレッド38(1)〜38(n)のすべてがセーフポイント(safe point)に到達している必要がある。スレッドのセーフポイントは、ポインターのために、スレッドスタックが正確にスキャン(呼び出し)される(例えば、呼び出し位置)であり、ガーベッジコレクションが安全であるスレッドの実行ポイントである。
スポーンスレッドの現在の実行状態はスレッドがセーフポイントに到達したかどうかを指し示す。例えば、スポーンスレッドが未だ休止状態にある、またはすでに実行が完了した場合、スポーンスレッドはセーフポイントに到達している。スポーンスレッドが動作状態の場合(即ち、動作が完了しておらず、進化している最中であるとき)、システムは進化して、スポーンスレッドはセーフポイントに到達していない。
従って、すべてのスポーンスレッド38(1)〜38(n)は、休止状態にある又は既に完了した場合、すべてのスポーンスレッド38(1)〜38(n)は、セーフポイントに到達していることになり、ガーベッジコレクタモジュール48はガーベッジコレクションを開始することができる。一方、1又は複数のスポーンスレッド38(1)〜38(n)が動作中の場合、動作中のスポーンスレッド38はセーフポイントに到達しておらず、ガーベッジコレクタモジュール48はガーベッジコレクションを開始しない。
【0037】
最終的に、すべてのスポーンスレッド38(1)〜38(n)がセーフポイントに必然的に到達する。一旦すべてのスポーンスレッドが完了し、休止状態のメインスレッドが再開する前に、スポーンスレッド育成データベース44からの専用育成部46(1)〜46(n)は育成ヒープ40に配置される。次のガーベッジコレクションサイクルのとき、メインスレッドの育成ヒープ40とスポーンスレッドの専用育成部46が、単にガーベッジコレクションを目的とした育成部(育成手段)として取り扱われる。
【0038】
スポーンスレッドが同階層のスポーンスレッドのワークがみえないので、スポーンスレッドは他のスポーンスレッドに依存せず、同階層のスレッドが休止状態になることを妨害しない。スポーンスレッドが存在しないとき、メインスレッドは進化から解放される。このように、少なくとも、1つのスレッドがすべての時間で自由に実行することができ、これにより、システムは常に前進することができる。
【0039】
ガーベッジコレクタモジュール48は、育成ヒープ40と同様に、専用育成室46(1)〜46(n)においてガーベッジコレクションを実行するように構成されており、当業者が知る1又は複数のガーベッジコレクションメソッドを実施する。
ガーベッジコレクタモジュール48は、関連付けられ、割り当てられたオブジェクトに対応する、1又は複数のメモリブロックを検知し、関連付けられ、割り当てられたオブジェクトは将来アクセスされるかどうか判定するように構成されている。
ウェブアプリケーションの実行手順において要求されないオブジェクトを決定する場合、ガーベッジコレクタモジュール48は、メモリからオブジェクトの割り当てを取り消して(取り去って)、さらなる割り当てのためにより利用可能なメモリを解放する。
なお、ガーベッジコレクタモジュール48は、育成のみのガーベッジコレクションとグローバルガーベッジコレクションとを実施するように構成してもよい。
育成のみのガーベッジコレクションでは、ガーベッジコレクタモジュール48は、少なくとも専用育成部46(1)〜46(n)でガーベッジコレクションを実行するように構成される。
グローバルガーベッジコレクションでは、ガーベッジコレクタモジュール48は、育成ヒープ40と、成熟ヒープ42と同様に専用育成部46(1)〜46(n)でガーベッジコレクションを実施するように構成される。この実施形態において、スポーンスレッドが動作中、グローバルエリアでの割り当て(例えば、育成ヒープ40と成熟ヒープ42)は保留され、いずれかローカルエリア(例えば、専用育成部46(1)〜46(n))がオブジェクトを保持する間、グローバルエリアを収集する必要はない。
【0040】
図4は、本出願において一致した少なくとも1つの実施形態に係る例示的な動作のフローチャートを示す。
動作S402において、アプリケーション(例えば、ブラウザ内ウェブアプリケーション)のスレッド(例えばスポーンスレッド)の実行が開始される。
動作S404において、スレッド実行開始の後、メモリブロックの取得に続く。メモリのブロックは、スポーンスレッドがスレッド実行の間アクセスできる育成データベース(例えば、スポーンスレッド育成データベース)からの専用育成部(専用育成部46(1)〜46(n))を含みうる。
動作S406において、スレッド実行の演算をする。
【0041】
動作S408において、スレッド実行が完了したかどうかの、の判定を行う。
S408で実行の完了したことが判定した場合、動作S410で、メモリのブロックが部分的に空かどうかの判定を行う。
動作S410で、メモリのブロックが部分的に空であることが判定した場合、メモリの部分空きブロックは、動作S412で戻され、そして、スレッドはS414において、ガベレッジコレクション(GC)がセーフ状態に入る。GCセーフ状態は、メモリブロックのガーベッジコレクションが安全に起こるスレッドの実行の地点である。
【0042】
また、S408で実行の未完了であると判定した場合、動作S416で、メモリのブロックの割り当てが必要かどうかの判定を行う。
動作S416で、メモリのブロックの割り当てが必要の場合は、動作S418において、メモリのブロックの部分において、オブジェクトを生成する。
あるいは、動作S416で割り当てが要求されていない場合、動作S406〜S408を繰り返す。
【0043】
動作S418において、ブロックメモリの一部のオブジェクトを作成する際、スレッドによる割り当てが成功したかどうかを、動作S420で実施する。
S420において、割り当てが成功したと判定した場合、動作S406〜S408を繰り返す。
あるいは、S420において、割り当てが成功していないと判定した場合、S422にてメモリの空きブロックが利用可能かどうか判定する。メモリの初期ブロックが利用可能なメモリスペースを使い切って、割り当ての完了をするために、スレッドが追加メモリスペースを要求する。
S422にてメモリの追加の空きブロックが利用可能であると判定した場合、メモリの追加の空きブロックを獲得し、メモリの追加の空きブロックにおいて割り当てが行われる。ここで、S424にて、メミリの追加の空きブロックでオブジェクトが作成され、動作S420が繰り返される。
【0044】
動作S422において、メモリの追加の空きブロックが利用不可能である場合、動作S426において、メモリの部分空きブロックが利用可能かどうか、判定する。例えば、スレッドは、部分的に使用されるメモリブロック(例えば、スポーンスレッド育成データベース44からの部分的に使用される専用育成部)へのアクセスを要求するように構成されてもよい。
動作S426において、部分空きメモリブロックが利用可能な場合、部分空きメモリブロックを取得し、部分空きメモリブロック内で割り当てを行う。
動作S428において、部分的に使用されるメモリブロックにおける残りの利用可能なスペースで、オブジェクトが作成され、動作S420が繰り返される。
あるいは、部分空きメモリブロックが利用可能でない場合と判定される場合、動作S430において、スレッドはGC(ガーベッジコレクション)セーフ状態へ入り、動作S422を繰り返す。
【0045】
ある実施形態にかかわる様々な動作を
図4で示したが、他の実施形態において、
図4に示す、すべての動作(ステップの動作)が必要というわけではないと理解できる。実際に、本開示の他の実施形態も本明細書で企図され、本明細書に記載の
図4に示す動作及び/又は他の動作を具体的に図面の中に示されていない方法で組み合わせることも、本開示に十分に一致するとすることができる。従って、正確に一つの図面には示されていない特徴及び/又は動作に向けた特許請求の範囲は、範囲及び本開示の内容の範囲内とみなされる。
【0046】
さらに、実施形態のための動作はさらに、上記の図面および添付の実施例を参照して記載されている。図の一部は論理フローを含むことができる。本明細書で提示されるそのような数値は、特定の論理フローを含んでもよいが、論理フローは単に、本明細書に記載の一般的な機能を実現することができる方法の例を提供することは明らかである。さらに、与えられた論理フローは、特に明記しない限り、必ずしも提示した順序で実行する必要はない。また、与えられた論理フローは、ハードウェア要素、プロセッサによって実行されるソフトウェア要素、またはそれらの任意の組み合わせによって実現されてもよい。実施形態はこの文脈に限定されない。
【0047】
さまざまな特徴、態様、および実施形態は、本明細書に記載されている。当業者によって理解されるように特徴、態様、および実施形態は、互いに同様の変形や変更との組み合わせに対して影響を受けやすい。本開示は、従って、そのような組合せ、変形、及び変更を包含すると見なされるべきである。したがって、本発明の範囲は、上述の例示的な実施形態のいずれによっても限定されるべきではなく、以下の特許請求の範囲及びその均等物によって定義されるべきである。
【0048】
本明細書中の任意の実施形態で使用される場合、用語「モジュール」は、前述の動作を実行するように構成されたソフトウェア、ファームウェア及び/又は回路を意味することができる。「ソフトウェア」は、非一時的なコンピューター可読記憶媒体に記録された、ソフトウェアパッケージ、コード、命令、命令セット及び/又はデータとして具現化することができる。「ファームウェア」は、コード、命令、又は命令セット、および/または、メモリ・デバイスにハードコード(例えば、不揮発性にコード)されたデータ、として具現化することができる。
「回路」は、本明細書中の任意の実施形態で使用されるように、(1)ハードワイヤード回路(固定配線回路)、(2)1又は複数の個別の命令処理コアを含むコンピュータープロセッサ等のプログラム可能な回路、(3)ステートマシン回路、及び/又は、(4)プログラム可能な回路によって実行される命令を格納するファームウェア、の単体、及びその組み合わせを含む。
「モジュール」は、集合的にまたは個別に、例えば、集積回路(IC)、システムオンチップ(SoC)、デスクトップコンピューター、ラップトップコンピューター、タブレットコンピューター、サーバー、スマートフォン等の、大きなシステムの一部を形成する回路として具現化されうる。
【0049】
本明細書で説明する動作のいずれも、1又は複数の記憶媒体内に格納され、1又は複数のプロセッサが操作することで実行される命令を格納する、1又は複数の記憶媒体を備えるシステムによって、実装される。
ここで、「プロセッサ」は、例えば、サーバー、CPU、モバイルデバイスのCPU、及び/又は他のプログラム可能な回路を含みうる。また、本明細書に説明される動作は、複数の異なる物理的な場所にある処理構造などの複数の物理デバイスによって分散されてもよいことが意図されている。
記憶媒体は、任意の有形の媒体の種類、例えば、(1)ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RWディスク)を含む、任意のタイプのディスク、(2)光磁気ディスク、読み出し専用メモリ(ROM)、動的およびスタティックRAM等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリーメモリ(EPROM)、電気的消去可能プログラマブルリードオンリーメモリ(EEPROM)、フラッシュメモリ、ソリッドステートディスク(SSD)、及び磁気または光カード、等の半導体デバイス、または、(3)電子命令を格納するのに適した任意の種類のメディア、を含みうる。
他の実施形態は、プログラマブル制御装置により実行されるソフトウェアモジュールとして実装することができる。記憶媒体は、非一時的であってもよい。
【0050】
本明細書で用いた用語及び表現は、説明の用語として使用され、限定するものではなく、本明細書で表され、説明された特徴(またはその一部)の均等物を排除する意図はなく、そして、さまざまな変更が特許請求の範囲内で可能であることが認識される。したがって、特許請求の範囲は全てのそのような均等物を包含することを意図している。さまざまな特徴、態様、および実施形態は、本明細書に記載されている。
当業者によって理解されるように特徴、態様、および実施形態は、互いに同様の変形や変更との組み合わせに対して影響を受ける。本開示は、従って、そのような組合せ、変形、及び変更を包含すると見なされるべきである。
【0051】
本明細書で説明するように、さまざまな実施形態は、ハードウェア要素、ソフトウェア要素、またはそれらの任意の組合せを用いて実装することができる。「ハードウェア要素」の例としては、プロセッサ、マイクロプロセッサ、回路、回路素子(例えば、トランジスタ、抵抗、コンデンサ、インダクタなど)、集積回路、特定用途向け集積回路(ASIC)、プログラマブルロジックデバイス(PLD)、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセット、を含むことができる。
【0052】
本明細書における「ある実施形態」または「一実施形態」への言及は、特定の特徴、構造、または実施形態に関連して説明さ特性が少なくとも1つの実施形態に含まれることを意味する。したがって、本明細書を通じてさまざまな箇所における「ある実施形態において」又は「一実施形態」という語句の出現は、または本明細書を通じて必ずしも全て同じ実施形態を指すわけではない。さらに、特定の特徴、構造、または特性は、1つまたは複数の実施形態において任意の適切な方法で組み合わせることができる。
【0053】
一態様によれば、ウェブアプリケーションの並列計算のための自動メモリ管理をする装置が提供される。この装置は、少なくとも2つのコンピュータープロセッシングユニット(CPU)コアを備えるプロセッサを有する。
また、装置は、ウェブアプリケーションの処理機能の1又は複数のスレッドを、前記プロセッサの対応するCPUコアへ指定し、該対応するCPUコアにおいて同時実行をするように構成される、オペレーティングシステムを有する。前記1又は複数のスレッドは、第一スレッド及び少なくとも1つのスポーンスレッドを含みうる。
【0054】
装置(コンピューティングシステム)は、さらに、前記第一スレッドと前記少なくとも1つのスポーンスレッドとへ分配されるブロックのセットを備えているメモリを有している。該メモリは、育成ヒープ、成熟ヒープ、複数の専用育成部を含むデータベースへ分割される。
前記第一スレッドは、前記育成ヒープと前記成熟ヒープにアクセスする。該第一スレッドは、該育成ヒープ内において1又は複数のオブジェクトを割り当てて操作し、前記育成ヒープや前記成熟ヒープに格納された1又は複数のオブジェクトへのリファレンスを書き込むように構成されている。
前記少なくとも1つのスポーンスレッドは、前記複数の専用育成部の関連付けられた1つへアクセスする。該少なくとも1つのスポーンスレッドは、該関連付けられた専用育成部内において1又は複数のオブジェクトを割り当てて操作するように構成されている。
【0055】
別の例示的な装置は、上記の構成要素を含み、さらに、ウェブアプリケーションを実行するように構成され、ウェブブラウザを有している。ウェブアプリケーションは、ウェブブラウザでサポートされているスクリプト言語でコード化されている。
【0056】
別の例示的な装置は、上記構成要素を含み、スクリプト言語は、ジャバスクリプトである。
【0057】
別の例示的な装置は、上記の構成要素を含み、ウェブブラウザのランタイムシステム内のウェブアプリケーションのコードを解釈して実行するように構成されたプログラミング言語エンジンを含む。
【0058】
別の例示的な装置は、上記構成要素を含み、さらに、前記プログラミング言語エンジンを変更し、ランタイム中に低レベルハードウェア抽象化レイヤーへ変換される決定性データ並列構造とともにプログラミング言語を拡張して、前記ウェブアプリケーションのためのデータ並列性を可能にするように構成された決定性並列プログラミングモジュールを有する。
【0059】
別の例示的な装置は、上記構成要素を含み、さらに、少なくとも、前記第一スレッド及び前記少なくとも1つのスポーンスレッドの監視を実行し、前記メモリの前記ブロックのセット内において割り当てられ格納される1又は複数のオブジェクトのライフサイクルを管理する、ように構成されたメモリ管理モジュールを有する。
【0060】
別の例示的な装置は、上記構成要素を含み、メモリ管理モジュールは、ガベージコレクションサイクル中に専用育成部のうちの少なくとも各ガベージコレクションを実行するように構成されたガベージコレクタモジュールを含む。
【0061】
別の例示的な装置は、上記構成要素を含み、少なくとも1つのスポーンスレッドの実行の状態に少なくとも部分的に基づいて、ガベージコレクションサイクルを開始するように構成されている。実行の状態は、少なくとも一つのスポーンスレッドがセーフポイントに到達したか否かの判定要因である。
【0062】
別の例示的な装置は、上記構成要素を含み、実行状態が、動作中、休止状態、完了状態、からなる群から選択される。
【0063】
別の例示的な装置は、上記構成要素を含み、少なくとも一つのスポーンスレッドは、実行状態が休止状態または完了状態のときは実行状態が実行されているセーフポイントに達しておらず、実行状態が実行されているときはセーフポイントに到達する。
【0064】
別の例示的な装置は、上記構成要素を含み、前記複数の専用育成部のうち前記関連付けられた1つの専用育成部において、前記少なくとも1つのスポーンスレッドが、1又は複数のオブジェクトを完全に割り当てるには、メモリスペースが不十分である場合、少なくとも1つの前記スポーンスレッドは、前記複数の専用育成部から以前利用された1つの専用育成部へアクセスするように要求するように構成されている。該以前利用された専用育成部は、1又は複数のオブジェクトを割り当てるための前記少なくとも1つのスポーンスレッドのために利用可能なメモリスペースの部分を備えている。
【0065】
一態様によれば、ウェブアプリケーションの並列計算のための自動メモリ管理をするシステムが提供される。システムは、メディアソースと、ネットワークを介してメディアソースと通信し、メディアソースが提供するウェブアプリケーションにアクセスし、実行するように構成されたクライアント装置を含む。クライアント装置は、ウェブアプリケーションの並列計算を可能にするように構成されたコンピューティングシステムを含む。
【0066】
コンピューティングシステムは、少なくとも2つのコンピュータープロセッシングユニット(CPU)コアを備えるプロセッサを有する。
また、システムは、ウェブアプリケーションの処理機能の1又は複数のスレッドを、前記プロセッサの対応するCPUコアへ指定し、該対応するCPUコアにおいて同時実行をするように構成される、オペレーティングシステムを有する。前記1又は複数のスレッドは、第一スレッド及び少なくとも1つのスポーンスレッドを含みうる。
【0067】
コンピューティングシステムは、さらに、前記第一スレッドと前記少なくとも1つのスポーンスレッドとへ分配されるブロックのセットを備えているメモリを有している。該メモリは、育成ヒープ、成熟ヒープ、複数の専用育成部を含むデータベースへ分割される。
前記第一スレッドは、前記育成ヒープと前記成熟ヒープにアクセスする。該第一スレッドは、該育成ヒープ内において1又は複数のオブジェクトを割り当てて操作し、前記育成ヒープや前記成熟ヒープに格納された1又は複数のオブジェクトへのリファレンスを書き込むように構成されている。
前記少なくとも1つのスポーンスレッドは、前記複数の専用育成部の関連付けられた1つへアクセスする。該少なくとも1つのスポーンスレッドは、該関連付けられた専用育成部内において1又は複数のオブジェクトを割り当てて操作するように構成されている。
【0068】
別の例示的なシステムは、上記構成要素を含み、さらに、ウェブアプリケーションを実行するように構成されるウェブブラウザを有している。ウェブアプリケーションは、ウェブブラウザでサポートされているスクリプト言語でコード化されている。
【0069】
別の例示的なシステムは、上記構成要素を含み、ウェブブラウザのランタイムシステム内のプログラミング言語エンジンを解釈して実行するように構成されたプログラム言語エンジンを有している。
また、システムは、さらに、前記プログラミング言語エンジンを変更し、ランタイム中に低レベルハードウェア抽象化レイヤーへ変換される決定性データ並列構造とともにプログラミング言語を拡張して、前記ウェブアプリケーションのためのデータ並列性を可能にするように構成された決定性並列プログラミングモジュールを有する。
【0070】
別の例示的なシステムは、上記構成要素を含み、さらに、少なくとも、前記第一スレッド及び前記少なくとも1つのスポーンスレッドの監視を実行し、前記メモリの前記ブロックのセット内において割り当てられ格納される1又は複数のオブジェクトのライフサイクルを管理する、ように構成されたメモリ管理モジュールを有する。
【0071】
別の例示的なシステムは、上記構成要素を含み、ガベージコレクタモジュールは、少なくとも1つのスポーンスレッドの実行の状態に、少なくとも部分的に基づいて、ガベージコレクションサイクルを開始するように構成されている。実行の状態は、休止状態、動作中、完了、からなる群から選択される。実行の状態は、少なくとも一つのスポーンスレッドがセーフポイントに到達したかどうかが判定要因である。
【0072】
別の例示的なシステムは、上記構成要素を含み、専用育成部、複数の関連する1又は複数のオブジェクトの割り当てを完了するために、スレッドスポーン少なくとも一つのための十分なメモリ容量を有する場合、少なくとも一つのスポーンスレッドは、にアクセスを要求するように構成されている専用育成部から複数の以前に使用したプライベート育成部。以前に使用した専用育成部は、1又は複数のオブジェクトを割り当てるために、スレッドスポーン少なくとも一つの利用可能なメモリ空間の部分を有する。
【0073】
別の態様によれば、コンピューターに格納された命令を含む、コンピューターアクセス可能な1又は複数のメディアが提供される。1又は複数のプロセッサによって実行されるとき、命令はコンピューターシステムに、ウェブアプリケーションの並列計算のための自動メモリ管理の動作を実行させてもよい。動作は、プロセッサのCPUコアに対応するウェブアプリケーションの処理機能の一つ以上のスレッドの同時実行を開始するステップが含まれる。1又は複数のスレッドは、第一スレッドと少なくとも一つのスポーンスレッドとが含まれている。
動作は、育成ヒープ、成熟ヒープ、及び複数の専用育成部を含みうる、前記第一スレッド及び前記少なくとも1つのスポーンスレッドに分配された共有メモリにおいて関連付けられたブロック、を取得するステップを有する。前記第一スレッドは前記育成ヒープと前記成熟ヒープへアクセスする。該第一スレッドは、前記育成ヒープにおいて1又は複数のオブジェクトを割り当てて操作し、前記育成ヒープ及び前記成熟ヒープに格納されたオブジェクトへリファレンスを書き込むように構成されている。前記少なくとも1つのスポーンスレッドは前記複数の専用育成部のうち関連付けられた1つへアクセスする。前記少なくとも1つのスポーンスレッドは、前記関連付けられた専用育成部内において1又は複数のオブジェクトを割り当てて操作するように構成されている。
動作は、前記第一スレッド及び前記少なくとも1つのスポーンスレッドの監視を実行し、前記メモリの前記育成ヒープ、前記成熟ヒープ、及び前記複数の夫々の専用育成部内において割り当てられ格納される1又は複数のオブジェクトのライフサイクルを管理するステップ、を有する。
【0074】
別の例示的なコンピューターアクセス可能なメディアは、前述の動作が含まれており、ガーベッジコレクションサイクルの初期化開始の間、少なくとも前記複数の専用育成部におけるガーベッジコレクションを実行するステップをさらに有する。
【0075】
別の例示的なコンピューターアクセス可能メディアは、ガベージコレクタモジュールは、少なくとも1つのスポーンスレッドの実行の状態に、少なくとも部分的に基づいて、ガベージコレクションサイクルを開始するように構成されている。実行の状態は、動作中、休止状態、完了状態、からなる群から選択される。実行の状態は、少なくとも一つのスポーンスレッドがセーフポイントに到達したかどうかが判定要因である。
【0076】
別の態様によれば、ウェブアプリケーションの並列計算のための自動メモリ管理をする方法が提供される。この方法は、プロセッサの対応するCPUコアにおいて、ウェブアプリケーションの処理機能の1又は複数のスレッドの同時実行を開始するステップを有する。前記1又は複数のスレッドは、第一スレッド及び少なくとも1つのスポーンスレッドを含みうる。
方法は、育成ヒープ、成熟ヒープ、及び複数の専用育成部を含みうる、前記第一スレッド及び前記少なくとも1つのスポーンスレッドに分配された共有メモリにおいて関連付けられたブロック、を取得するステップを有する。前記第一スレッドは前記育成ヒープと前記成熟ヒープへアクセスする。該第一スレッドは、前記育成ヒープにおいて1又は複数のオブジェクトを割り当てて操作し、前記育成ヒープ及び前記成熟ヒープに格納されたオブジェクトへリファレンスを書き込むように構成されている。前記少なくとも1つのスポーンスレッドは前記複数の専用育成部のうち関連付けられた1つへアクセスする。前記少なくとも1つのスポーンスレッドは、前記関連付けられた専用育成部内において1又は複数のオブジェクトを割り当てて操作するように構成されている。
方法は、前記第一スレッド及び前記少なくとも1つのスポーンスレッドの監視を実行し、前記メモリの前記育成ヒープ、前記成熟ヒープ、及び前記複数の夫々の専用育成部内において割り当てられ格納される1又は複数のオブジェクトのライフサイクルを管理するステップ、を有する。
【0077】
別の例示的な方法は、前述の動作が含まれ、さらに、ガーベッジコレクションサイクルの初期化開始の間、少なくとも前記複数の専用育成部におけるガーベッジコレクションを実行するステップを含む。
【0078】
別の例示的な方法は、少なくとも1つのスポーンスレッドの実行の状態に少なくとも部分的に基づいて、ガベージコレクションサイクルを開始するように構成されている。実行の状態は、少なくとも一つのスポーンスレッドがセーフポイントに到達したかどうかが判定要因である。実行の状態は、動作中、休止状態、完了状態、からなる群から選択される。
【0079】
別の例示的な方法は、以上の動作を含み、さらに、前記複数の専用育成部のうち前記関連付けられた1つの専用育成部において、前記少なくとも1つのスポーンスレッドが、1又は複数のオブジェクトを完全に割り当てるには、メモリスペースが不十分かどうか判定するステップを含む。
方法は、前記複数の専用育成部の以前利用された1つの専用育成部が、1又は複数のオブジェクトを割り当てるための前記少なくとも1つのスポーンスレッドのために利用可能なメモリスペースの部分を有するかどうか、識別するステップを有する。
方法は、前記以前利用された専用育成部へアクセスし、前記利用可能なメモリスペース内で1又は複数のオブジェクトを割り当てるステップをさらに有する
【0080】
本明細書で用いた用語及び表現は、説明の用語として使用され、限定するものではなく、本明細書で表され、説明された特徴(またはその一部)の均等物を排除する意図はなく、そして、さまざまな変更が特許請求の範囲内で可能であることが認識される。
したがって、特許請求の範囲は全てのそのような均等物を包含することを意図している。