(57)【要約】      （修正有）【課題】無難なガベージ・コレクション・アルゴリズムについての形態を提供する。【解決手段】コール・スタックに含まれるルート・オブジェクトを特定する。コール・スタックは、整数およびポインターを含む６００。整数表現にタグを付けて、タグのないポインター表現から区別可能にする６１０。その後の追跡がポインター表現に対して行われ、整数表現に対しては飛ばされるように、ルート・オブジェクトを対応するメモリー位置まで追跡する６２０。次いで、コール・スタックによって到達不可能なオブジェクトに割り当てられているメモリーを解放する６３０。【選択図】図６
2018067331.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
コール・スタックに含まれたルート・オブジェクトを特定するステップであって、前記ルート・オブジェクトが、整数表現およびポインター表現を含む、ステップと、
前記整数表現にタグを付けるステップであって、タグ付き整数表現がタグなしポインター表現から区別可能となる、ステップと、
前記ルート・オブジェクトを対応する１組のメモリー位置まで追跡するステップであって、その後の追跡が前記タグなしポインター表現に対して行われ、前記その後の追跡が前記タグ付き整数表現に対して飛ばされる、ステップと、
前記コール・スタックによって到達不可能な１組のオブジェクトに割り当てられたメモリーを解放するステップと、
を含む、方法。
【請求項２】
請求項１記載の方法において、前記タグを付けるステップが、前記整数表現を異なるデータ構造に変換するステップを含む、方法。
【請求項３】
請求項２記載の方法において、前記変換するステップが、前記異なるデータ構造における少なくとも１つのビットをタグ専用にするステップを含む、方法。
【請求項４】
請求項１記載の方法において、前記解放するステップが、到達可能なオブジェクトをそれぞれヒープの元の記憶位置に保存するステップを含む、方法。
【請求項５】
請求項４記載の方法において、前記保存するステップが、前記ヒープ内における１組の固定境界にしたがって、ヒープ・オブジェクトの分離を維持するステップを含む、方法。
【請求項６】
請求項１記載の方法であって、更に、
前記コール・スタックを実行するステップであって、コールされたオブジェクトがヒープに載せられる、ステップと、
前記ヒープのサイズをしきい値と比較するステップであって、ガベージ・コレクション・アルゴリズムの開始が、前記ヒープのサイズが前記しきい値を超えるか否かに基づく、ステップと、
を含む、方法。
【請求項７】
請求項６記載の方法において、前記実行するステップが、ジャヴァスクリプトをコンパイルするステップを含む、方法。
【請求項８】
請求項６記載の方法において、前記実行するステップが、文書オブジェクト・モデルを変更するステップを含む、方法。
【請求項９】
メモリー管理デバイスであって、
コンピューター実行可能コンポーネントが格納されたメモリーと、
前記メモリーに通信可能に結合されているプロセッサーであって、前記コンピューター実行可能コンポーネントを実行するように構成されたプロセッサーと、
を含み、前記コンピューター実行可能コンポーネントが、
コール・スタックに含まれるルート・オブジェクトを特定するように構成されたスキャニング・コンポーネントであって、前記ルート・オブジェクトが整数表現およびポインター表現を含む、スキャニング・コンポーネントと、
前記整数表現にタグを付けるように構成されたタギング・コンポーネントであって、タグ付き整数表現がタグなしポインター表現から区別可能である、タギング・コンポーネン
トと、
前記ルート・オブジェクトを対応する１組のメモリー位置まで追跡するように構成された追跡コンポーネントであって、その後の追跡が前記タグ無しポインター表現に対して行われ、前記その後の追跡が前記タグ付き整数表現に対して飛ばされる、追跡コンポーネントと、
前記コール・スタックによって到達不可能な１組オブジェクトに割り当てられたメモリーを解放するように構成されたリサイクリング・コンポーネントと、
を含む、メモリー管理デバイス。
【請求項１０】
請求項９記載のメモリー管理デバイスにおいて、前記タギング・コンポーネントが、前記整数表現を異なるデータ構造に変換するように構成された、メモリー管理デバイス。
【請求項１１】
請求項１０記載のメモリー管理デバイスにおいて、前記タギング・コンポーネントが、前記異なるデータ構造における少なくとも１つのビットをタグ専用にするように構成された、メモリー管理デバイス。
【請求項１２】
請求項９記載のメモリー管理デバイスにおいて、前記リサイクリング・コンポーネントが、到達可能なオブジェクトをそれぞれヒープの元の記憶位置に保存するように構成されている、メモリー管理デバイス。
【請求項１３】
請求項１２記載のメモリー管理デバイスにおいて、前記リサイクリング・コンポーネントが、前記ヒープ内における１組の固定境界にしたがって、ヒープ・オブジェクトの分離を維持するように構成されている、メモリー管理デバイス。
【請求項１４】
請求項９記載のメモリー管理デバイスにおいて、前記リサイクリング・コンポーネントが、前記コール・スタックによってコールされたオブジェクトをヒープに載せるように構成され、前記リサイクリング・コンポーネントが、更に、前記ヒープのサイズがしきい値を超えるか否かに基づいて、ガベージ・コレクション・アルゴリズムを開始するように構成された、メモリー管理デバイス。
【請求項１５】
請求項９記載のメモリー管理デバイスにおいて、前記コール・スタックが、ジャヴァスクリプトのコンパイルと関連付けられた、メモリー管理デバイス。
【発明の詳細な説明】
【従来技術】
【０００１】
[0001]  従来のシステムに関する背景として、計算デバイスは従前より情報および関連するアプリケーションを格納していることを注記しておく。これらの目的のために、効率的なメモリー管理方式を実現することが、計算能力向上を達成するためには望ましい。自動メモリー管理方式の開発は、特に、手作業によるメモリー管理方式よりも望ましかった。例えば、ガベージ・コレクション・アルゴリズムは、もはや特定のプログラムによって使用されなくなったオブジェクトが占有するメモリーを取り戻そうとする自動メモリー管理方式である。
【０００２】
[0002]  追跡ガベージ・コレクターは、最も一般的なタイプのガベージ・コレクターである。追跡ガベージ・コレクターは、最初に、どのオブジェクトが到達可能か（または潜在的に到達可能か）判断し、次いで全ての残りのオブジェクトを破棄する。到達可能なオブジェクトは、プログラム環境において何らかの変数が存在するオブジェクトであって、直接的にまたは他の到達可能なオブジェクトからの参照を介してその変数に通じるオブジェクトとして定めることができる。更に正確に言うと、オブジェクトは通常２つの方法で到達可能である。第１に、ルートとして知られる、１組の区別されたオブジェクトは、到達可能であると見なされる。通例、これらは、コール・スタック（即ち、現在呼び出されている関数における全てのローカル変数およびパラメータ）におけるいずれかの場所から参照されたオブジェクト、および任意のグローバル変数を含む。第２に、到達可能なオブジェクトから参照されるものはいずれも、それ自体到達可能であると見なされる。
【０００３】
[0003]  参照タイプおよび即値タイプ双方のことばで表される従来のガベージ・コレクターに伴う厄介な問題は、ガベージ・コレクターが、コール・スタックにおけるどの変数が正規値（例えば、整数）であり、どの変数が参照（例えば、ポインター）であるのか区別することである。このような区別は、区別を目的とするようなシステムにおいては有用であろう。何故なら、整数および参照は、区別しないと、メモリーにおいて表現されたときに、同じように見えるからである。これに関して、ガベージ・コレクターは、この区別を使用して、特定のエレメントを参照として扱いそしてその参照に従うべきか否か判断し、またはそれが単に原始値であるか否か判断することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[0004]  以上で述べた今日のメモリー管理方式の欠点は、単に、従来のシステムの問題の一部の概観を与えることを意図するに過ぎず、網羅的であることを意図するのではない。技術的現状に伴う他の問題、および種々の非限定的な実施形態の一部の対応する利点は、以下の詳細な説明を検討することにより、一層明白になるであろう。
【課題を解決するための手段】
【０００５】
[0005]  以下に続く更に詳細な説明および添付図面における例示的な非限定の実施形態の種々の形態の基本的なまたは総合的な理解を可能にするのに役立てるために、簡素化した摘要を設ける。この摘要は、しかしながら、広範なまたは網羅的な全体像であることは意図していない。代わりに、この摘要の唯一の目的は、以下に続く種々の実施形態の更に詳細な説明に対する序説として、一部の例示的非限定的実施形態に関する概念を紹介することである。
【０００６】
[0006]  １つ以上の実施形態および対応する開示によれば、メモリー管理のための無難な(conservative)ガベージ・コレクションに関して、種々の非限定的な形態について説明
する。このような一形態では、無難なガベージ・コレクション・アルゴリズム内において整数にタグを付ける方法を提供する。この方法は、コール・スタックに含まれるルート・オブジェクトを特定するステップを含むことができる。コール・スタックは、整数表現およびポインター表現を含むことができる。更に、この実施形態は、タグ付き整数表現が、タグなしポインター表現から区別可能なように、整数表現にタグ付けするステップも含むことができる。また、この方法は、ルート・オブジェクトを対応する１組のメモリー位置まで追跡するステップも含むことができる。この特定実施形態では、後続の追跡は、タグなしポインター表現に対して行われ、一方、タグ付き整数表現に対しては、後続の追跡は飛ばされる。次いで、この方法は、更に、コール・スタックによって到達不可能な１組のオブジェクトに割り当てられているメモリーを解放するステップも含むことができる。
【０００７】
[0007]  他の形態では、無難なガベージ・コレクション・アルゴリズムを、タグ付き整数を用いて実現するように構成されたメモリー管理デバイスを開示する。このような実施形態内では、メモリー管理デバイスは、メモリーに格納されているコンピューター実行可能コンポーネントを実行するように構成されたプロセッサーを含む。コンピューター実行可能コンポーネントは、スキャニング・コンポーネント、タギング・コンポーネント、追跡コンポーネント、およびリサイクリング・コンポーネントを含む。スキャニング・コンポーネントは、コール・スタックに含まれるルート・オブジェクトを特定するように構成されている。コール・スタックは、整数表現およびポインター表現を含む。タギング・コンポーネントは、タグ付き整数表現がタグなしポインター表現から区別できるように、整数表現にタグ付けするように構成されており、一方追跡コンポーネントは、ルート・オブジェクトを対応する１組のメモリー位置まで追跡するように構成されている。この実施形態では、追跡コンポーネントは、タグなしポインター表現に対して後続の追跡を行うように構成されており、後続の追跡は、タグ付き整数表現に対しては飛ばされる。リサイクリング・コンポーネントは、コール・スタックによって到達不可能な１組のオブジェクトに割り当てられているメモリーを解放するように構成されている。
【０００８】
[0008]  更に他の形態では、無難なガベージ・コレクション・アルゴリズム内において整数にタグ付けするためのコンピューター読み取り可能記憶媒体を開示する。このような実施形態内では、このコンピューター読み取り可能記憶媒体は、少なくとも１つのプロセッサーに種々の動作を実行させるコンピューター読み取り可能命令を含む。例えば、このような動作は、コール・スタックに関連するオブジェクト・グラフにタグ付けする動作、およびコール・スタックの実行中にオブジェクトのヒープ(heap)を生成する動作を含む。ここで、タグ付きオブジェクト・グラフに含まれるルート・オブジェクトは、タグ付き整数表現と、タグなしポインター表現とを含み、一方オブジェクトのヒープは、コール・スタックの内既実行部分に含まれるオブジェクトを含む。更に、この実施形態は、コール・スタックの内未実行部分に含まれる実行されていないオブジェクトを、ヒープにおける対応するメモリー位置まで追跡する動作も含む。この特定実施形態では、後続の追跡は、タグなしポインター表現に対して行われ、タグ付き整数表現に対しては飛ばされる。次いで、ヒープにおいて到達不可能なオブジェクトに対応するメモリー位置はクリアされる。ここで、到達不可能なオブジェクトとは、コール・スタックの未実行部分が到達できないということである。
【０００９】
[0009]  他の実施形態および種々の非限定的な例、シナリオ、ならびに実現例について、以下で更に詳しく説明する。
【図面の簡単な説明】
【００１０】
[0010]  添付図面を参照して種々の非限定的な実施形態について更に説明する。図面において、
【図１】図１は、一実施形態にしたがって無難なガベージ・コレクション・アルゴリズムを実現し易くするシステム例を示す。
【図２】図２は、一実施形態によるオブジェクトのヒープの一例を示す図である。
【図３】図３は、一実施形態によるオブジェクト・グラフの一例を示す図である。
【図４】図４は、一実施形態によるメモリー解放の一例を示す図である。
【図５】図５は、一実施形態によるメモリー管理デバイスの一例を示すブロック図である。
【図６】図６は、一実施形態にしたがって無難なガベージ・コレクション・アルゴリズムを実現する非限定的な実施形態例を示す流れ図である。
【図７】図７は、一実施形態によるリソース管理ユニットの一例を示すブロック図である。
【図８】図８は、一実施形態にしたがって整数にタグ付けする非限定的な実施形態例を示す流れ図である。
【図９】図９は、本明細書において記載する種々の実施形態を実現することができる非限定的なネットワーク環境例を示すブロック図である。
【図１０】図１０は、本明細書において記載する種々実施形態の１つ以上の形態を実現することができる、非限定的な計算システムまたは動作環境例を表すブロック図である。
【発明を実施するための形態】
【００１１】
全体像
[0021]  背景において説明したように、コール・スタックにおいて整数とポインターとの間で区別するガベージ・コレクション・アルゴリズムを実現することが望ましい。種々の実施形態では、ネーティブ・コードの互換性を中心に、メモリー管理を設計し直す。一形態では、スクリプト・オブジェクトは管理を少なくしたオブジェクトとし、更に正しくは、メモリーのネーティブな部分 (native piece)として、オブジェクト間における参照
のカウンティング(counting)を排除する。更に、無難なガベージ・コレクション・アルゴリズムを実現し、ポインターであるあらゆるものが既知であるとは仮定しない。例えば、共通言語ランタイム（ＣＬＲ）ガベージ・コレクターでは、スタックは強く型が決められる(type)。しかしながら、ネーティブ・コード、例えば、Ｃコード、およびスクリプト・コードでは、何がスタックにあるのか分からない。これに関して、参照カウンティング・モデルを利用する代わりに、オブジェクト同士を直接相互作用させることが考えられる。
【００１２】
[0022]  本明細書において記載する種々実施形態は、無難なガベージ・コレクション・アルゴリズム内において整数にタグ付けすることを対象とする。この目的のために、本明細書において開示する形態は、偽のポインターを生成しそうにない文書オブジェクト・モデルに対して、スクリプト（例えば、ジャヴァスクリプト）の実行を容易にすることを注記しておく。更に、本明細書において開示する形態は、偽のポインターの確率を低下させる。何故なら、タグなしポインターおよびタグ付きポインターは容易に区別できるからである。
タグ付き整数および無難なガベージ・コレクション
[0023]  ウェブ・ブラウズ体験が、最小限の対話処理に抑えた平面的な情報の提示から、クライアント側における対話処理が多く一層豊富なアプリケーションまたはアプレットに発展するに連れて、様々な問題が持ち上がっている。更に一般的には、ウェブ・ブラウズ体験は、情報表示と、ディスプレイ上のオブジェクトとの増々豊富になった対話処理との混成に発展している。この発展に伴う特定の課題は、古い文書オブジェクト・モデル（ＤＯＭ）をジャヴァスクリプト・オブジェクトのような流動的にスクリプト・コードを扱う体験に適応させることに基づく。文書オブジェクト・モデルは、主にクライアントにおけるネーティブ・コードに基づく平面的な情報の提示のために本来設計されたのであった。
【００１３】
[0024]  一層望ましいユーザー体験を促進するためには、速度の向上が特に重要である。例えば、過去のフライ・アウト・メニュー(fly out menu)では、サーバーとの通信に基づく遅延によって、ウェブ体験が途切れ途切れになる(flicker)。しかしながら、スクリ
プトは、小さなプログラムが、サーバーに戻ることなく、その場でＤＯＭを変更することを可能にする。人がサーバーに戻ることなくその場でもっと多くのことをしたくなるに連れて、スクリプト・コードの実行を速くすることが課題となる。
【００１４】
[0025]  ユーザー体験は、ＤＯＭを効果的にスクリプトする(scripting)ことによって
大きく影響されるので、対話速度を最大限高めるためには、ＤＯＭを出来るだけ速く変化させることが望ましい。従来では、スクリプティング・エンジンとＤＯＭのネーティブ・クラスとの間の通信は乏しかった。これは、１組のインターフェース、例えば、iDispatch、iActiveScript等を含むオブジェクト・リンキングおよび埋め込み（ＯＬＥ）自動化の使用のためであるが、これは任意のオブジェクトをスクリプト可能にする。しかしながら、このような方法は遅く、このために改良が望まれる。したがって、本明細書において開示する形態は、無難なガベージ・コレクション・アルゴリズム内において整数にタグ付けすることによって、スクリプト実行速度を向上させることを目的とする。
【００１５】
[0026]  図１は、一実施形態にしたがって無難なガベージ・コレクション・アルゴリズムを実現し易くするシステム例を示す。図示のように、システム１００はメモリー管理ユニット１１０を含むことができる。メモリー管理ユニット１１０は、メモリー１２０に通信可能に結合されている。一形態では、メモリー管理ユニット１１０は、メモリー１２０内のメモリー空間を管理するために、無難なガベージ・コレクション・アルゴリズムを実現するように構成されている。更に、メモリー管理ユニット１１０は、スクリプト１１２の実行に関連するタグ付きオブジェクト・グラフ１１４を生成するように構成されている。例えば、スクリプト１１２は、ＤＯＭに対して実行されるジャヴァスクリプトであってもよく、このジャヴァスクリプトは、メモリー１２０におけるメモリー空間の割り当てを要求する種々のオブジェクトを含む。一特定実施形態では、メモリー１２０内において整数とポインターとの間で区別し易くするために、整数値に対応するスクリプト・オブジェクトは、メモリー管理ユニット１１０によってタグ付けされ、タグ付きオブジェクト・グラフ１１４に含まれる。
【００１６】
[0027]  一形態では、スクリプト・オブジェクトに割り当てられるメモリーは、このようなオブジェクトをヒープに格納することを含む。次に図２を参照すると、一実施形態によるオブジェクトのヒープの一例のブロック図が示されている。図示のように、ヒープ２００は、利用可能なメモリー２１０を含むことができ、種々のオブジェクト２２０、２３０、２４０、２５０、２６０、および２７０に対応して、メモリーが割り当てられている。この特定の例では、オブジェクト２４０および２７０はポインター値に対応し、一方、オブジェクト２２０、２３０、２５０、および２６０は整数値に対応する。即ち、オブジェクト２４０は、オブジェクト２３０によって表される整数値を参照するポインター値であり、一方オブジェクト２７０は、オブジェクト２６０によって表される整数値を参照するポインター値である。
【００１７】
[0028]  これに関して、整数値に対応するスクリプト・オブジェクトにはタグ付けし、これらをポインター値から容易に区別可能にすることができる。次に図３を参照すると、ヒープにおけるタグ付きオブジェクト／タグなしオブジェクトのマッピングを容易にするオブジェクト・グラフの一例を示す図が用意されている。図示のように、オブジェクト・グラフ３００は、未実行コール・スタック部分３１０に含まれるオブジェクトをヒープ３２０にマッピングする。これらおよび関連する目的のために、ヒープ３２０および利用可能なメモリー３３０は、それぞれ、ヒープ２００および利用可能なメモリー２１０と総じて似ていることを注記しておく。
【００１８】
[0029]  一形態では、オブジェクト・グラフ３００は、ヒープ３２０におけるどのオブジェクトが、未実行コール・スタック部分３１０によって到達可能であるか判断するために利用される。即ち、未実行コール・スタック部分３１０に含まれるルート・オブジェクトは、ヒープ３２０における対応するメモリー位置まで追跡され、整数値に対応するルート・オブジェクトにタグ付けする。次いで、ルート・オブジェクトのその後の追跡は、到達可能なタグなしポインター値に対してのみ実行して、これらのポインター値によって参照されている到達可能なオブジェクトを特定することが考えられる。逆に、その後の追跡は、到達可能なタグ付き整数値に対しては飛ばされる。この特定例では、到達可能なオブジェクト３９０は、ポインター値に対応するルート・オブジェクトであるので、これはタグが付けられていない。したがって、その後の追跡は、到達可能なオブジェクト３９０に対して実行され、整数値に対応する到達可能なオブジェクト３８０を特定する。しかしながら、その後の追跡は、到達可能なオブジェクト３４０および３７０に対しては飛ばされる。何故なら、これらは、タグ付き整数値に対応するルート・オブジェクトであるからである。
【００１９】
[0030]  尚、オブジェクト・グラフ３００は、未実行コール・スタック部分３１０によって到達不可能なオブジェクトを特定するために利用できることを注記しておく。この特定例では、到達不可能なオブジェクト３５０および３６０は、未実行コール・スタック部分３１０内にあるルート・オブジェクトに対応せず、これらが到達可能なポインター・オブジェクトによって参照されてもいないので、到達不可能であると見なされる。
【００２０】
[0031]  到達不可能なオブジェクトを特定すると、このようなオブジェクトに割り当てられているメモリーをクリアすることができる。次に図４を参照すると、一実施形態によるメモリー解放の一例を示す図が用意されている。図示のように、オブジェクト・グラフ４００はヒープ４２０を含む。このヒープ４２０は、ヒープ２００および３２０と総じて似ている。ヒープ４２０は、到達不可能なオブジェクト３５０および３６０に以前に割り当てられたメモリーの解放を示す。即ち、ヒープ４２０は、ここでは、利用可能なメモリー４３０に加えて、解放されたメモリー４５０および４６０を含む。しかしながら、一形態では、到達可能なオブジェクト４４０、４７０、４８０、および４９０は、それらの元の格納位置に保存される（即ち、ヒープ４２０は潰されない）。
【００２１】
[0032]  次に図５を参照すると、ブロック図は、種々の形態にしたがって無難なガベージ・コレクション・アルゴリズムを実現するように構成されているメモリー管理ユニットの一例を示す。図示のように、メモリー管理ユニット５００は、プロセッサー・コンポーネント５１０、メモリー・コンポーネント５２０、スキャニング・コンポーネント５３０、タギング・コンポーネント５４０、追跡コンポーネント５５０、およびリサイクリング・コンポーネント５６０を含むことができる。
【００２２】
[0033]  一形態では、プロセッサー・コンポーネント５１０は、複数の関数の内任意のものを実行することに関するコンピューター読み取り可能命令を実行するように構成されている。プロセッサー・コンポーネント５１０は、メモリー管理ユニット５００から伝達される情報を分析すること、および／またはメモリー・コンポーネント５２０、スキャニング・コンポーネント５３０、タギング・コンポーネント５４０、追跡コンポーネント５５０、および／またはリサイクリング・コンポーネント５６０によって利用することができる情報を生成することを専用とする１つのプロセッサーまたは複数のプロセッサーとすることができる。加えてまたは代わりに、プロセッサー・コンポーネント５１０は、メモリー管理ユニット５００の１つ以上のコンポーネントを制御するように構成することができる。
【００２３】
[0034]  他の形態では、メモリー・コンポーネント５２０は、プロセッサー・コンポーネント５１０に結合されており、プロセッサー・コンポーネント５１０によって実行されるコンピューター読み取り可能命令を格納するように構成されている。また、メモリー・コンポーネント５２０は、スキャニング・コンポーネント５３０、タギング・コンポーネント５４０、追跡コンポーネント５５０、および／またはリサイクリング・コンポーネント５６０の内任意のものによって生成されたデータを含む、複数の他のタイプのデータの内任意のものを格納するように構成することもできる。メモリー・コンポーネント５２０は、ランダム・アクセス・メモリー、バッテリ・バックアップ・メモリー、ハード・ディスク、磁気テープ等としての構成を含む、複数の異なる構成で構成することができる。また、圧縮および自動バックアップ、例えば、独立ドライブの冗長アレイ構成の使用というような、種々の機構をメモリー・コンポーネント５２０に実現することもできる。
【００２４】
[0035]  図示のように、メモリー管理ユニット５００はスキャニング・コンポーネント５３０を含むこともできる。このような実施形態内では、スキャニング・コンポーネント５３０は、コール・スタックに含まれるルート・オブジェクトを特定するように構成されている。コール・スタックは、整数表現およびポインター表現を含む。ここでは、このようなコール・スタックが、特定のオブジェクト・モデルに対して実行されるスクリプトと関連付けられると考える。例えば、コール・スタックは、ジャヴァスクリプトのコンパイル(compilation)と関連付けることができ、これは実行中に文書オブジェクト・モデルを
変更し易くする。
【００２５】
[0036]  更に、メモリー管理ユニット５００は、図示のように、タギング・コンポーネント５４０も含むことができる。タギング・コンポーネント５４０は、コール・スタックに含まれる整数表現にタグを付けるように構成されている。ここでは、整数のタグ付けは、タグ付き整数表現がタグなしポインター表現から容易に区別可能となるように行われることを注記しておく。この目的のために、更に、タギング・コンポーネント５４０は、複数の方法の内任意のもので整数にタグを付けるように構成することができる。例えば、タギング・コンポーネント５４０は、整数表現を異なるデータ構造に変換するように構成することができる。一特定実施形態では、このような変換は、異なるデータ構造における少なくとも１つのビットをタグ専用にするように、タギング・コンポーネント５４０を構成させることを含むことができる。
【００２６】
[0037]  一形態では、メモリー管理デバイス５００は、更に、追跡コンポーネント５５０も含む。このような実施形態では、追跡コンポーネント５５０は、スキャニング・コンポーネント５３０によって特定されたルート・オブジェクトを、対応する１組のメモリー位置まで追跡するように構成されている。ルート・オブジェクトの初期追跡の後、関連オブジェクトのその後の追跡が実行されると考えられる。しかしながら、一特定実施形態では、その後の追跡は、タグなしポインター表現に対してのみ実行され、タグ付き整数表現に対しては飛ばされる。
【００２７】
[0038]  更に他の形態では、メモリー管理デバイス５００はリサイクリング・コンポーネント５６０も含む。リサイクリング・コンポーネント５６０は、コール・スタックによって到達不可能な１組のオブジェクトに割り当てられているメモリーを解放するように構成されている。一特定実施形態では、リサイクリング・コンポーネント５６０は、コール・スタックによってコールされたオブジェクトをヒープに載せるように構成することができる。このような実施形態内では、リサイクリング・コンポーネント５６０は、更に、ヒープのサイズがしきい値を超えるか否かに基づいて、ガベージ・コレクション・アルゴリズムを開始するように構成することができる。他の実施形態では、リサイクリング・コンポーネント５６０は、それぞれ、到達可能なオブジェクトをヒープの元の記憶位置に保存するように構成することができる。例えば、リサイクリング・コンポーネント５６０は、ヒープ内における１組の固定境界にしたがって、ヒープ・オブジェクトの分離を維持するように構成することができる。
【００２８】
[0039]  図６は、一実施形態にしたがって無難なガベージ・コレクション・アルゴリズムを実現する非限定的な実施形態例を示す流れ図である。６００において、コール・スタックに含まれるルート・オブジェクトを特定する。コール・スタックは、整数表現およびポインター表現を含む。次に、６１０において、タグ付き整数表現が、タグなしポインター表現から区別できるように、整数表現にタグを付ける。次いで、その後の追跡がポインター表現に対して実行され、整数表現に対しては飛ばされるように、６２０において、対応する１組のメモリー位置までルート・オブジェクトを追跡する。６３０において、コール・スタックによって到達不可能なオブジェクトに割り当てられているメモリーを解放する。
【００２９】
[0040]  次に図７を参照すると、ブロック図は、種々の形態にしたがって整数にタグを付けるように構成されているリソース管理ユニットの一例を示す。図示のように、リソース管理ユニット７００は、プロセッサー・コンポーネント７１０、メモリー・コンポーネント７２０、タギング・コンポーネント７３０、ヒープ・コンポーネント７４０、追跡コンポーネント７５０、解放コンポーネント７６０、監視コンポーネント７７０、およびグラフィング・コンポーネント７８０を含む。
【００３０】
[0041]  メモリー管理ユニット５００におけるプロセッサー・コンポーネント５１０と同様、プロセッサー・コンポーネント７１０は、複数の関数の内任意のものを実行することに関連するコンピューター読み取り可能命令を実行するように構成されている。プロセッサー・コンポーネント７１０は、リソース管理ユニット７００から伝達される情報を分析すること、および／またはメモリー・コンポーネント７２０、タギング・コンポーネント７３０、ヒープ・コンポーネント７４０、追跡コンポーネント７５０、解放コンポーネント７６０、監視コンポーネント７７０、および／またはグラフィング・コンポーネント７８０によって利用することができる情報を生成することを専用とする１つのプロセッサーまたは複数のプロセッサーとすることができる。加えてまたは代わりに、プロセッサー・コンポーネント７１０は、リソース管理ユニット７００の１つ以上のコンポーネントを制御するように構成することができる。
【００３１】
[0042]  他の形態では、メモリー・コンポーネント７２０は、プロセッサー・コンポーネント７１０に結合されており、プロセッサー・コンポーネント７１０によって実行されるコンピューター読み取り可能命令を格納するように構成されている。また、メモリー・コンポーネント７２０は、タギング・コンポーネント７３０、ヒープ・コンポーネント７４０、追跡コンポーネント７５０、解放コンポーネント７６０、監視コンポーネント７７０、および／またはグラフィング・コンポーネント７８０の内任意のものによって生成されるデータを含む、複数の他のタイプのデータの内任意のものを格納するように構成することもできる。ここでは、メモリー・コンポーネント７２０はメモリー管理ユニット５１０におけるメモリー・コンポーネント５２０に似ていることを注記しておく。したがって、以上で述べたメモリー・コンポーネント５２０の機構／構成はいずれも、メモリー・コンポーネント７２０にも適用可能であることが認めることができる。
【００３２】
[0043]  図示のように、リソース管理ユニット７００もタギング・コンポーネント７３０を含むことができる。このような実施形態では、タギング・コンポーネント７３０は、コール・スタックに関連するオブジェクト・グラフにタグを付けるように構成される。ここでは、タグ付きオブジェクト・グラフに含まれるルート・オブジェクトは、タグ付き整数表現、およびタグなしポインター表現を含むことができることは、注記してしかるべきである。実施形態の中には、更に、リソース管理ユニット７００がグラフィング・コンポーネント７８０も含むことができ、グラフィング・コンポーネント７８０は、タギング・コンポーネント７３０によってタグ付きオブジェクト・グラフを生成するように構成されている場合もあることも注記してしかるべきである。
【００３３】
[0044]  一形態では、リソース管理ユニット７００は、ヒープに含まれるオブジェクトを管理するように構成されている。このような管理をし易くするために、リソース管理ユニット７００はヒープ・コンポーネント７４０を含むことができる。ヒープ・コンポーネント７４０は、コール・スタックの実行中にオブジェクトのヒープを生成するように構成されている。この特定実施形態では、このオブジェクトのヒープが、コール・スタックの既実行部分に含まれるオブジェクトを含むことができると考えられる。
【００３４】
[0045]  他の形態では、リソース管理ユニット７００は、更に、追跡コンポーネント７５０も含むことができる。このような実施形態内では、追跡コンポーネント７５０は、コール・スタックの未実行部分に含まれている未実行オブジェクトを、ヒープにおける対応するメモリー位置まで追跡するように構成されている。ここでは、メモリー管理デバイス５００における追跡コンポーネント５５０と同様に、追跡コンポーネント７５０は、コール・スタックのルート・オブジェクトの初期追跡の後、関連オブジェクトのその後の追跡を実行するように構成することができると考えられる。更に、このようなその後の追跡は、タグなしポインター表現に対してのみ実行され、タグ付き整数表現に対しては飛ばされると考えられる。
【００３５】
[0046]  図示のように、リソース管理ユニット７００は、解放コンポーネント７６０も含むことができる。このような実施形態内では、解放コンポーネント７６０は、ヒープにおいて、コール・スタックの未実行部分によって到達不可能であると見なされるオブジェクトに対応するメモリー位置をクリアするように構成されている。一形態では、解放コンポーネント７６０は、更に、コール・スタックの未実行部分によって到達可能なオブジェクトの記憶を、それぞれ、ヒープ内におけるそれらの元のメモリー位置に保存するように構成することもできる。他の形態では、リソース管理ユニット７００は監視コンポーネント７７０も含むことができる。監視コンポーネント７７０は、コール・スタックの実行中にヒープのサイズを監視するように構成されている。この特定実施形態では、解放コンポーネント７６０は、ヒープ・サイズが特定のしきい値を超えたことに基づいて、到達不可能なオブジェクトに割り当てられているメモリーのクリア処理を誘起するように構成することができる。
【００３６】
[0047]  図８は、一実施形態にしたがって整数にタグを付ける非限定的な実施形態例を示す流れ図である。８００において、タグ付きオブジェクト・グラフに含まれるルート・オブジェクトがタグ付き整数表現およびタグなしポインター表現を含むように、コール・スタックに関連するオブジェクト・グラフにタグが付けられる。８１０において、次に、オブジェクトのヒープをコール・スタックの実行中に生成する。このヒープは、コール・スタックの実行部分に含まれるオブジェクトを含む。次に、８２０において、コール・スタックの未実行部分に含まれる未実行オブジェクトを、ヒープにおける対応するメモリー位置まで追跡する。この特定実施形態では、その後の追跡は、ポインター表現に対してのみ実行され、整数表現に対しては実行されない。次いで、８３０において、コール・スタックの未実行部分によって到達不可能なヒープ・オブジェクトに対応するメモリー位置をクリアする。
ネットワークおよび分散環境例
[0048]  本明細書において説明した、無難なガベージ・コレクション・アルゴリズム内において整数にタグ付けする種々の実施形態は、任意のコンピューターあるいは他のクライアントまたはサーバー・デバイスと共に実現でき、コンピューター・ネットワークの一部としてまたは分散型計算環境において配備することができ、任意の種類のデータ・スト
アに接続できることは、当業者には認めることができよう。これに関して、本明細書において説明した種々の実施形態は、任意の数のメモリーまたは記憶ユニット、ならびに任意の数の記憶ユニットに跨がって実行される任意の数のアプリケーションおよびプロセスを有する任意のコンピューター・システムまたは環境において実現することができる。これは、ネットワーク環境または分散型計算環境において配備されたサーバー・コンピューターおよびクライアント・コンピューターが設けられ、リモートまたはローカル・ストレージを有する環境を含むが、これに限定されるのではない。
【００３７】
[0049]  図９は、ネットワークまたは分散型計算環境の一例の非限定的な模式図を示す。この分散型計算環境は、計算オブジェクトまたはデバイス９１０、９１２等、および計算オブジェクトまたはデバイス９２０、９２２、９２４、９２６、９２８等を含み、これらは、アプリケーション９３０、９３２、９３４、９３６、９３８で表されるように、プログラム、方法、データ・ストア、プログラマブル・ロジック等を含むことができる。尚、計算オブジェクトまたはデバイス９１０、９１２等、および計算オブジェクトまたはデバイス９２０、９２２、９２４、９２６、９２８等は、ＰＤＡ、オーディオ／ビデオ・デバイス、移動体電話機、ＭＰ３プレーヤー、ラップトップ等のような、異なるデバイスを含んでもよいことは認めることができよう。
【００３８】
[0050]  各計算オブジェクトまたはデバイス９１０、９１２等、および計算オブジェクトまたはデバイス９２０、９２２、９２４、９２６、９２８等は、直接または間接的に、通信ネットワーク９４０を介して、１つ以上の他の計算オブジェクトまたはデバイス９１０、９１２等、および計算オブジェクトまたはデバイス９２０、９２２、９２４、９２６、９２８等と通信することができる。図９では１つのエレメントとして示されているが、ネットワーク９４０は、図９のシステムにサービスを提供する他の計算オブジェクトおよび計算デバイスも含むことができ、および／または図示されていない複数の相互接続されたネットワークを表すこともできる。各計算オブジェクトまたはデバイス９１０、９２１等、または９２０、９２２、９２４、９２６、９２８等は、アプリケーション９３０、９３２、９３４、９３６、９３８のようなアプリケーションも含むことができる。これらのアプリケーションは、ＡＰＩ、あるいは種々の実施形態にしたがって提供される任意のプラットフォームからのサービスとして情報のためのインフラストラクチャーとの通信またはその実現に適した他のオブジェクト、ソフトウェア、ファームウェア、および／またはハードウェアを利用することもできる。
【００３９】
[0051]  分散型計算環境をサポートする種々のシステム、コンポーネント、およびネットワーク構成がある。例えば、計算システムを互いに有線システムまたはワイヤレス・システムによって、ローカル・ネットワークまたは広域に分散されたネットワークによって接続することができる。現在では、多くのネットワークがインターネットに結合されており、インターネットは、広く分散された計算のためのインフラストラクチャーを提供し、多くの異なるネットワークを内包するが、種々の実施形態において説明した技法に付帯して行われる通信例には、任意のネットワーク・インフラストラクチャーを使用することができる。
【００４０】
[0052]  つまり、クライアント／サーバー、ピア−ツー−ピア、または混成アーキテクチャーのような、ネットワーク・トポロジーおよびネットワーク・インフラストラクチャーのホストを利用することができる。クライアント／サーバー・アーキテクチャー、特にネットワーク・システムでは、クライアントは、通常、他のコンピューター、例えば、サーバーによって提供される共有ネットワーク・リソースにアクセスするコンピューターである。図９の例示では、非限定的な例として、計算オブジェクトまたはデバイス９２０、９２２、９２４、９２６、９２８等はクライアントであると考えることができ、計算オブジェクトまたはデバイス９１０、９１２等は、サーバーとして考えることができ、計算オ
ブジェクトまたはデバイス９１０、９１２等が、計算オブジェクトまたはデバイス９２０、９２２、９２４、９２６、９２８等からのデータの受信、データの格納、データの処理、計算オブジェクトまたはデバイス９２０、９２２、９２４、９２６、９２８等へのデータの送信というようなデータ・サービスを提供するが、状況に依っては、任意のコンピューターがクライアント、サーバー、または双方になると考えることができる。これらの計算デバイスの内任意のものが、データを処理し、１つ以上の実施形態について本明細書において説明したようなメモリー管理および関連技法に係わる可能性があるサービスまたはタスクを要求することができる。
【００４１】
[0053]  サーバーとは、通例、インターネットまたはワイヤレス・ネットワーク・インフラストラクチャーのような、リモートまたはローカル・ネットワークを介してアクセス可能なリモート・コンピューター・システムである。クライアント・プロセスは、第１コンピューター・システムにおいてアクティブになることができ、サーバー・プロセスは第２コンピューター・システムにおいてアクティブになることができ、通信媒体を介して互いに通信し、こうして分散機能を設け、複数のクライアントが、サーバーの情報収集能力を利用することを可能にする。ユーザー・プロファイリング(user profiling)にしたがって利用される任意のソフトウェア・オブジェクトは、単独で提供することができ、あるいは複数の計算デバイスまたはオブジェクトに跨って分散させることもできる。
【００４２】
[0054]  通信ネットワーク／バス９４０がインターネットであるネットワーク環境では、例えば、計算オブジェクトまたはデバイス９１０、９１２等はウェブ・サーバーであることができ、計算オブジェクトまたはデバイス９２０、９２２、９２４、９２６、９２８等は、ＨＴＴＰのような複数の既知のプロトコルの内任意のものによって、これと通信する。前述のように、計算オブジェクトまたはデバイス９１０、９１２等が計算オブジェクトまたはデバイス９２０、９２２、９２４、９２６、９２８等として役割を果たすこと、またはその逆であってもよく、これは分散型計算環境の特徴であると言えよう。
計算デバイス例
[0055]  前述のように、本明細書において説明した種々の実施形態は、無難なガベージ・コレクション・アルゴリズム内において整数にタグを付けるためのインフラストラクチャーを実現することが望ましいと考えられる任意のデバイスに適用される。したがって、ハンドヘルド、ポータブルおよび他の計算デバイス、ならびにあらゆる種類の計算オブジェクトが、本明細書において説明した種々の実施形態と共に使用できると考えられる、即ち、デバイスがタグ付き整数を無難なガベージ・コレクション・アルゴリズムに実現することに関連して何らかの機能を提供することができる場合にはいつでも、本明細書において説明した種々の実施形態と共に使用できると考えられることは理解されよう。したがって、図１０において以下で説明する以下の汎用リモート・コンピューターは、一例に過ぎず、本開示の実施形態は、ネットワーク／バス相互動作可能性および相互作用を有する任意のクライアントによって実現することができる。
【００４３】
[0056]  必須ではないが、実施形態の内任意のものは、デバイスまたはオブジェクトのためのサービスの開発者による使用のために、部分的にオペレーティング・システムを介して実現すること、および／または動作可能なコンポーネント（１つまたは複数）と共に動作するアプリケーション・ソフトウェアに含まれることができる。ソフトウェアは、クライアント・ワークステーション、サーバー、または他のデバイスというような、１つ以上のコンピューターによって実行される、プログラム・モジュールのような、コンピューター実行可能命令という一般的なコンテキストにおいて説明することができる。ネットワーク相互作用は、種々のコンピューター・システム構成およびプロトコルによって実施できることは、当業者には認められよう。
【００４４】
[0057]  つまり、図１０は、実施形態の１つ以上を実現することができる、適した計算
システム環境１０００の一例を示す。しかし、以上で明確にしたように、計算システム環境１０００は適した計算環境の一例に過ぎず、実施形態のいずれについても、その使用範囲や機能に対して限定を示唆することは全く意図していない。計算環境１０００は、動作環境例１０００に示すコンポーネントの内任意の１つまたはその組み合わせに関して、何らかの依存性または要件を有するように解釈してはならない。
【００４５】
[0058]  図１０を参照すると、本明細書における１つ以上の実施形態を実現するリモート・デバイス例は、ハンドヘルド・コンピューター１０１０の形態とした、汎用計算デバイスを含むことができる。ハンドヘルド・コンピューター１０１０のコンポーネントは、処理ユニット１０２０、システム・メモリー１０３０、およびシステム・バス１０２１を含むことができるが、これらに限定されるのではない。システム・バス１０２１は、システム・メモリーを含む種々のシステム・コンポーネントを処理ユニット１０２０に結合する。
【００４６】
[0059]  コンピューター１０１０は、通例、種々のコンピューター読み取り可能媒体を含み、コンピューター１０１０によってアクセスすることができる入手可能な媒体の内任意のものとすることができる。システム・メモリー１０３０は、リード・オンリー・メモリー（ＲＯＭ）および／またはランダム・アクセス・メモリー（ＲＡＭ）のような、揮発性および／または不揮発性メモリーの形態とした、コンピューター記憶媒体を含むことができる。一例として、そして限定ではなく、メモリー１０３０は、オペレーティング・システム、アプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データも含むことができる。ソフトウェアは、デジタル・バーサタイル・ディスク（ＤＶＤ）、コンパクト・ディスク（ＣＤ）、または他のリムーバブル・ストレージにも具体化することができる。
【００４７】
[0060]  ユーザーは、入力デバイス１０４０を介してコマンドおよび情報をコンピューター１０１０に入力することができる。モニターまたは他のタイプのディスプレイ・デバイスも、出力インターフェース１０５０のようなインターフェースを介して、システム・バス１０２１に接続されている。モニターに加えて、コンピューターは、スピーカーおよびプリンターのような、他の周辺出力デバイスも含むことができ、これらの出力デバイスは、出力インターフェース１０５０を介して接続することができる。
【００４８】
[0061]  コンピューター１０１０は、リモート・コンピューター１０７０のような、１つ以上の他のリモート・コンピューターへの論理接続を使用して、ネットワーク環境または分散型環境において動作することもできる。リモート・コンピューター１０７０は、パーソナル・コンピューター、サーバー、ルーター、ネットワークＰＣ、ピア・デバイスまたは他の共通ネットワーク・ノード、あるいは任意の他のリモート媒体消費または送信デバイスとすることができ、コンピューター１０１０に関して以上で説明したエレメントの内任意のものまたは全てを含むことができる。図１０に示す論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）のような、ネットワーク１０７１を含むが、他のネットワーク／バスを含むこともできる。このようなネットワーキング環境は、家庭、事務所、企業規模のコンピューター・ネットワーク、イントラネット、およびインターネットでは極普通である。
【００４９】
[0062]  以上で述べたように、実施形態例について種々の計算デバイス、ネットワーク、および広告アーキテクチャーと関連付けて説明したが、基礎となる概念は、任意のネットワーク・システムおよびメモリーを管理することが望ましい任意の計算デバイスまたはシステムに適用することができる。
【００５０】
[0063]  本明細書において説明した実施形態の内1つ以上を実現する複数の方法があり
、例えば、しかるべきＡＰＩ、ツール・キット、ドライバ・コード、オペレーティング・システム、制御、スタンドアロンまたはダウンロード可能なソフトウェア・オブジェクト等があり、これらはアプリケーションおよびサービスがメモリー管理を使用することを可能にする。実施形態は、ＡＰＩ（または他のソフトウェア・オブジェクト）の観点から、そして説明した実施形態の内１つ以上にしたがってメモリー管理の装備を容易にするソフトウェアまたはハードウェア・オブジェクトの観点からも考えることができる。本明細書において説明した種々の実現例および実施形態は、全体的にハードウェア、部分的にハードウェアであり部分的にソフトウェア、そしてソフトウェアである形態を有することができる。
【００５１】
[0064]  「一例の」という用語は、本明細書において使用する場合、例、実例、または例示として役割を果たすことを意味する。疑問回避のために、本明細書において開示される主題はこのような例によって限定されないこととする。加えて、本明細書において「例示」と記載される任意の態様または設計(design)は、他の態様または設計よりも好ましいまたは有利であるとは、必ずしも解釈されず、当業者には知られている等価の構造および技法例を除外することを意味するのでもない。更に、「含む」(include)、「有する」、
「含む」(contain)という用語、およびその他の同様の単語が詳細な説明または特許請求
の範囲において使用されている限りでは、このような用語は、疑問回避のために、いずれの追加のまたは他のエレメントも除外しない、開いたつなぎ言葉(open transition word)としての「含む」(comprising)という用語と同様に、包含的であることを意図している。
【００５２】
[0065]  前述のように、本明細書において記載した種々の技法は、ハードウェアまたはソフトウェア、あるいはしかるべきときには、双方の組み合わせによって実現することができる。本明細書において使用する場合、「コンポーネント」、「システム」等の用語は、同様に、ハードウェア、ハードウェアおよびソフトウェアの組み合わせ、ソフトウェア、または実行中のソフトウェアのいずれかである、コンピューター関係エンティティに言及することを意図している。例えば、コンポーネントは、プロセッサーにおいて実行するプロセス、プロセッサー、オブジェクト、エクゼキュータブル、実行のスレッド、プログラム、および／またはコンピューターであってもよいが、これらに限定されるのではない。例示として、コンピューターにおいて実行するアプリケーション、およびこのコンピューターがコンポーネントであることができる。１つ以上のコンポーネントが１つのプロセスおよび／または実行のスレッド内に存在することができ、コンポーネントは、１つのコンピューターに局在すること、および／または２つ以上のコンピューター間で分散されることも可能である。
【００５３】
[0066]  前述のシステムは、数個のコンポーネント間における相互作用に関して説明した。尚、このようなシステムおよびコンポーネントは、これらのコンポーネントまたは指定されたサブ・コンポーネント、指定されたコンポーネントまたはサブ・コンポーネントの一部、および／または追加のコンポーネントを、これらの種々の順列(permutation)お
よび組み合わせにしたがって、含むことができることは認めることができよう。また、サブ・コンポーネントは、親コンポーネント内に含まれるのではなく代わりに、他のコンポーネントに通信可能に結合されたコンポーネントとして実現することもできる（階層的）。加えて、１つ以上のコンポーネントを組み合わせて１つのコンポーネントにして、複合機能を提供することもでき、あるいは数個の別個のサブ・コンポーネントに分割することもでき、統合機能を提供するために、管理レイヤーのような、任意の１つ以上の中間レイヤーを設けて、このようなサブ・コンポーネントに通信可能に結合することもできることは、注記してしかるべきである。また、本明細書において記載したいずれのコンポーネントも、本明細書には具体的に記載されなかったが当業者には一般的に知られている１つ以上の他のコンポーネントと相互作用することもできる。
【００５４】
[0067]  以上で説明したシステム例に関して、開示された主題にしたがって実現することができる方法は、種々の図のフローチャートを参照すると一層よく理解できよう。説明の簡素化という目的に限って、方法は一連のブロック図で示されそして説明されているが、特許請求する主題は、これらのブロックの順序に限定されないことは言うまでもないことであり、認められてしかるべきである。何故なら、一部のブロックは、本明細書において図示および説明したのとは異なる順序で現れることもでき、および／または他のブロックと同時に現れることもできるからである。フローチャートによって非連続的、または分岐したフローが示される場合、種々の他の分岐、フロー・パス、ブロックの順序を実現することができ、同じ結果または同様の結果が得られることは認めることができよう。更に、以下で説明する方法を実現するために、図示したブロック全てが必要ではない場合もある。
【００５５】
[0068]  実施形態の中には、クライアント側の観点が示されているが、疑問回避のために、対応するサーバーの観点も存在することは言うまでもないことであり、その逆も当てはまる。同様に、方法が実施される場合、ストレージと、１つ以上のコンポーネントによってその方法を実施するように構成されている少なくとも１つのプロセッサーとを有する対応するデバイスも提供することができる。
【００５６】
[0069]  以上、種々の図の好ましい実施形態に関連付けて種々の実施形態について説明したが、これらから逸脱することなく同じ機能を実行するために、他の同様の実施形態も使用できること、または変更および追加を記載した実施形態に行うことができることは言うまでもない。更にその上、以上で記載した実施形態の１つ以上の態様は、複数の処理チップまたはデバイスにおいて、またはこれらに跨がって実現するのでもよく、同様に複数のデバイスに跨がってストレージにも作用する(affect)のでもよい。したがって、本発明は、いずれの１つの実施形態にも限定されることはなく、むしろ添付した特許請求の範囲にしたがってその広さおよび範囲を解釈されてしかるべきである。
【図１】
2018067331.tif 000003
【図２】
2018067331.tif 000004
【図３】
2018067331.tif 000005
【図４】
2018067331.tif 000006
【図５】
2018067331.tif 000007
【図６】
2018067331.tif 000008
【図７】
2018067331.tif 000009
【図８】
2018067331.tif 000010
【図９】
2018067331.tif 000011
【図１０】
2018067331.tif 000012
【手続補正書】
【提出日】平成29年12月13日(2017.12.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
方法であって、
コール・スタックに関連したオブジェクト・グラフ内の整数表現にタグを付けるステップであって、前記オブジェクト・グラフが、タグ付けされた整数表現に関連した少なくとも１つのオブジェクトと、タグなしポインター表現に関連した少なくとも１つのオブジェクトを含む、タグ付けステップと、
前記コール・スタックの実行中にオブジェクトのヒープを生成するステップであって、前記オブジェクトのヒープが、前記コール・スタックに関連した１つ以上のオブジェクトを含む、ステップと、
前記ヒープの監視されたサイズがしきい値を超えるかどうか判定するステップと、
前記判定に基づいて、前記コール・スタックの未実行部分により到達可能なオブジェクトに対し第１の追跡を実行するステップと、
前記タグ付けされた整数表現に関連した前記オブジェクトから前記タグなしポインター表現に関連した前記オブジェクトを識別した後、前記タグなしポインター表現に関連したオブジェクトに対してのみ第２の追跡を実行するステップと、
前記コール・スタックの前記未実行部分によって到達不可能な１つ以上のオブジェクトに対応するメモリー位置を取り戻すステップと、
を含む、方法。
【請求項２】
請求項１記載の方法において、前記第１の追跡は、前記コール・スタックの未実行部分によって到達可能なルート・オブジェクトに対し実行される、方法。
【請求項３】
請求項１記載の方法において、前記第２の追跡は、前記第１の追跡が実行された１つ以上のオブジェクトに関係したオブジェクトの後続の追跡である、方法。
【請求項４】
請求項１記載の方法において、前記ヒープの前記監視されたサイズは、前記コール・スタックの実行中に判定される、方法。
【請求項５】
請求項１記載の方法において、前記メモリー位置を取り戻すステップは、更に、
前記コール・スタックの前記未実行部分により到達可能なオブジェクトを前記ヒープの元の記憶位置に保存するステップを含む、方法。
【請求項６】
請求項１記載の方法において、前記メモリー位置を取り戻すステップは、更に、
前記コール・スタックの前記未実行部分により到達不可能な１つ以上のオブジェクトに割り当てられたメモリーをクリアするステップを含む、方法。
【請求項７】
請求項３記載の方法において、前記第２の追跡は、更に、
前記タグ付けされた整数表現に関連したオブジェクトに対する前記後続の追跡をスキップするステップを含む、方法。
【請求項８】
デバイスであって、
少なくとも１つのプロセッサーと、メモリーと、
を含み、前記少なくとも１つのプロセッサーが、
コール・スタックに関連したオブジェクト・グラフ内の整数表現にタグを付けし、前記オブジェクト・グラフが、タグ付けされた整数表現に関連した少なくとも１つのオブジェクトと、タグなしポインター表現に関連した少なくとも１つのオブジェクトを含み、
前記コール・スタックの実行中にオブジェクトのヒープを生成し、前記オブジェクトのヒープが、前記コール・スタックに関連した１つ以上のオブジェクトを含み、
前記ヒープの監視されたサイズがしきい値を超えるかどうか判定し、
前記判定に基づいて、前記コール・スタックの未実行部分により到達可能なオブジェクトに対し第１の追跡を実行し、
前記タグ付けされた整数表現に関連した前記オブジェクトから前記タグなしポインター表現に関連した前記オブジェクトを識別した後、前記タグなしポインター表現に関連したオブジェクトに対してのみ第２の追跡を実行し、
前記コール・スタックの前記未実行部分によって到達不可能な１つ以上のオブジェクトに対応するメモリー位置を取り戻す、
ように構成された、デバイス。
【請求項９】
請求項８記載のデバイスにおいて、前記第１の追跡は、前記コール・スタックの未実行部分によって到達可能なルート・オブジェクトに対し実行される、デバイス。
【請求項１０】
請求項８記載のデバイスにおいて、前記第２の追跡は、前記第１の追跡が実行された１つ以上のオブジェクトに関係したオブジェクトの後続の追跡である、デバイス。
【外国語明細書】
2018067331000001.pdf