(57)【要約】  本発明は、循環グラフにおいてオブジェクト寿命を管理する方法、システム及びコンピュータプログラム製品に及ぶ。本発明の実施形態は、割り当て済みのシステムリソースを、例えば（参照カウント法、及びガベージコレクションのような）異なるリソース再生技術を混合するオブジェクトのグラフから回収することを含む。ガベージコレクションを実行すべきと決定したことに応答して、ＧＣオブジェクトと参照カウントオブジェクトとの間の参照を検出する。検出された任意の参照に対する参照タイプ（例えば直接、間接、標準、トラック、弱等）も決定される。ガベージコレクションを実行して、任意の割り当て済みのシステムリソースを回収することができるかどうかを決定する。ガベージコレクションは、オブジェクトを回収すべきかどうかを決定するときに、ＧＣオブジェクトと参照カウントオブジェクトとの間の参照と参照タイプとを考慮する。
2014529142.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムにおいて実行される方法であって、該コンピュータシステムは、１つ又は複数のプロセッサとシステムメモリとを含み、オブジェクトを記憶するために前記システムメモリの一部を割り当てるアプリケーションを実行し、システムメモリは、カウント型オブジェクトグラフとガベージコレクション型オブジェクトグラフとを含み、前記カウント型オブジェクトグラフは、参照カウント法に従って寿命が管理される１つ又は複数の参照カウントオブジェクトを含み、前記ガベージコレクション型オブジェクトグラフは、ガベージコレクションに従って寿命が管理される１つ又は複数のガベージコレクション（ＧＣ）オブジェクトを含み、参照カウントオブジェクトはカウントラッパーを介してＧＣオブジェクトを参照し、ＧＣオブジェクトは参照ラッパーを介して参照カウントオブジェクトを参照し、当該方法は、システムリソースを回収しようとする試みに備えて前記カウント型オブジェクトグラフからの参照情報を前記ガベージコレクション型オブジェクトグラフと同期させる方法であり、
ガベージコレクションを実行すべきであることを決定する動作と、
前記決定に応答して、ガベージコレクションを実行する前に、
前記カウントラッパーが前記参照ラッパーから前記カウント型オブジェクトグラフを通じて到達される可能性があることを決定する動作と、
前記カウントラッパーを介して参照された前記ＧＣオブジェクトの寿命を保護する動作と、
任意の割り当て済みシステムリソースを回収することができるかどうかを決定するのに、ガベージコレクションを実行する動作であって、前記参照ラッパーによって有効に参照された前記ＧＣオブジェクトを考慮するガベージコレクションを実行する動作と
を含む、方法。
【請求項２】
ガベージコレクションの後に前記参照ラッパーと前記ＧＣオブジェクトとの間の参照を削除する動作をさらに含む、請求項１に記載の方法。
【請求項３】
前記カウントラッパーを介して参照された前記ＧＣオブジェクトの前記寿命を保護する動作は、前記参照ラッパーに対する前記ＧＣオブジェクトの依存性を作成する動作を含む、請求項１に記載の方法。
【請求項４】
前記カウントラッパーが前記参照ラッパーから前記カウント型オブジェクトグラフを通じて到達される可能性があることを決定する動作は、前記カウントラッパーが前記参照ラッパーから前記カウント型オブジェクトグラフを通じて到達される可能性があることを解析モジュールが決定する動作を含む、請求項１に記載の方法。
【請求項５】
前記カウントラッパーが前記ＧＣオブジェクトを間接的に参照することを決定する動作をさらに含む、請求項１に記載の方法。
【請求項６】
前記カウントラッパーが前記ＧＣオブジェクトを直接参照することを決定する動作をさらに含む、請求項１に記載の方法。
【請求項７】
任意の割り当て済みのシステムリソースを回収することができるかどうかを決定するのに、ガベージコレクションを実行する動作は、１つ又は複数のオブジェクトを削除してシステムメモリを回収する動作を含む、請求項１に記載の方法。
【請求項８】
コンピュータシステムにおいて実行される方法であって、該コンピュータシステムは、１つ又は複数のプロセッサとシステムメモリとを含み、オブジェクトを記憶するため前記システムメモリの一部を割り当てるアプリケーションを実行し、システムメモリは、カウント型オブジェクトグラフとガベージコレクション型オブジェクトグラフとを含み、前記カウント型オブジェクトグラフは、参照カウント法に従って寿命が管理される１つ又は複数の参照カウントオブジェクトを含み、前記ガベージコレクション型オブジェクトグラフは、ガベージコレクションに従って寿命が管理される１つ又は複数のＧＣオブジェクトを含み、参照カウントオブジェクトは、カウントラッパーを介してＧＣオブジェクトを参照し、ＧＣオブジェクトは、参照ラッパーを介して参照カウントオブジェクトを参照し、当該方法は、システムリソースを回収しようとする試みに備えて参照カウントオブジェクトがどのような方法で参照されるかを決定する方法であり、
ガベージコレクションを実行すべきであることを決定する動作と、
前記決定に応答して、ガベージコレクションが実行される前に、
指定されたタイプの参照による参照カウントオブジェクトの到達可能性を決定する動作と、
前記指定されたタイプの参照に基づいてガベージコレクションに関連する情報にアクセスする動作と、
任意の割り当て済みのシステムリソースを回収することができるかどうかを決定するのにガベージコレクションを実行する動作であって、前記参照カウントオブジェクトを回収すべきかどうかを決定するときに前記アクセスした情報を考慮するガベージコレクションを実行する動作と
を含む、方法。
【請求項９】
前記指定されたタイプの参照によって参照カウントオブジェクトの到達可能性を決定する動作は、前記参照カウントオブジェクトが標準参照を通じて到達可能であることを決定する動作を含む、請求項８に記載の方法。
【請求項１０】
前記指定されたタイプの参照によって参照カウントオブジェクトの到達可能性を決定することは、前記参照カウントオブジェクトがトラック参照を通じて到達可能であることを決定する動作を含む、請求項８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、循環グラフにおいてオブジェクトの寿命を管理することに関する。
【背景技術】
【０００２】
コンピュータシステム及び関連技術は、社会の多くの側面に影響を与える。実際に、情報を処理するコンピュータシステムの能力は、人々の生き方及び働き方を変化させた。コンピュータシステムは、今日では一般に、コンピュータシステムの出現前は人手で行われていたタスク（例えば文書処理、スケジューリング、会計等）のホストを実行する。より最近では、コンピュータシステムは相互に、及び他の電子機器と結合されて、有線及び無線の双方のコンピュータネットワークを形成し、コンピュータシステム及び他の電子機器は、これらのコンピュータネットワークを介して電子データを伝達することができる。したがって、多くのコンピューティングタスクの実行は、複数の異なるコンピュータシステム、及び／又は複数の異なるコンピューティング環境にわたって分散される。
【０００３】
一部のプログラミング環境（例えばＣ＋＋）は、オブジェクトが参照されなくなり、したがってオブジェクトを記憶するのに使用されたメモリを解放することができるときを決定する仕組みとして、参照カウント法を使用する。オブジェクトの寿命は、オブジェクトを直接参照することができない場合、そのオブジェクトをメモリから削除することにより管理される。あるオブジェクトが別のオブジェクトを参照するとき、参照されるオブジェクトの参照カウントがインクリメントされる。オブジェクトが別のオブジェクトを逆参照（ｄｅｒｅｆｅｒｅｎｃｅ）するとき、そのオブジェクトの参照カウントはデクリメントされる。オブジェクトの参照カウントがゼロに達すると、このオブジェクトは、アクセス不可であり、破壊される可能性がある。
【０００４】
しかしながら、参照カウント法は、比較的単純であり、メモリリークをもたらす可能性がある（すなわち、未使用かつおそらくアクセス不可であるオブジェクトがメモリを消費し続ける）。例えば２つのオブジェクトは、相互に参照するが、いずれの他のオブジェクトによって参照されることなく、循環という結果を招く可能性がある。循環が起こるとき、参照カウント法は、双方のオブジェクトが単に互いを参照するだけであり、それ以外には参照されていない、と決定することができない可能性がある。したがって、２つのオブジェクトのためのメモリは解放されず、メモリリークを引き起こすことになる。
【０００５】
他のプログラミング環境（例えばＣ＃）は、オブジェクトが参照されなくなり、したがってオブジェクトを記憶するのに使用されたメモリを解放することができるときを決定する仕組みとして、ガベージコレクションを使用する。ガベージコレクションは、直接又は間接的に参照することができないオブジェクトを見つけ、これらのオブジェクトを削除することによって、オブジェクトの寿命を管理する。ガベージコレクションは、間接的な参照を考慮に入れることにより、循環に関連する問題に対処する。
【０００６】
一部のプログラミング環境は、参照カウントの対象となるオブジェクト及びガベージコレクションの対象となるオブジェクトを利用する。例えば開発者は、異なるオブジェクト寿命管理技術を使用する異なるプログラミング言語を利用したいと考えることがある。これらの混合プログラミング環境では、参照カウントの対象となるオブジェクトが、ガベージコレクションの対象となるオブジェクトを可能性があり、及び／又はガベージコレクションの対象となるオブジェクトが、参照カウントの対象となるオブジェクトを参照する可能性がある。しかしながら、ガベージコレクションシステムは、参照カウントの対象となるオブジェクトを介した間接的な参照をトラックできないことがある。したがって、混合プログラミング環境においても、やはりメモリリークが起こる可能性がある。
【発明の概要】
【０００７】
本発明は、循環グラフにおいてオブジェクトの寿命を管理する方法、システム及びコンピュータプログラム製品に及ぶ。本発明の諸実施形態は、例えば異なるリソース再生技術を混合するオブジェクトのグラフから、割り当て済みのシステムリソースを再生用に準備することと、回収することとを含む。一部の実施形態では、コンピュータシステムは、ガベージコレクションを実装すべきであると決定する。ガベージコレクションを実装すべきとの決定に応答して、ガベージコレクションに従って管理されるオブジェクトと参照カウント法に従って管理されるオブジェクトとの間の参照を検出する。任意の検出された参照に対する参照タイプ（例えば直接参照、間接参照、標準参照、トラック参照、弱参照（weaken）等）も決定される。ガベージコレクションは、任意の割り当て済みシステムリソースを回収できるかどうかを判断するように実装される。ガベージコレクションは、システムリソース回収の決定の一部として、ガベージコレクションに従って管理されるオブジェクトと参照カウント法に従って管理されるオブジェクトとの間の参照と参照タイプとを考慮する。
【０００８】
概して、オブジェクトは、他のオブジェクトとの間の参照の作成及び／又は削除を要求する可能性がある。例えば、オブジェクトが（例えば、システムリソースを回収するために）収集されるべきとき、収集されるべきオブジェクトから参照される他のオブジェクトに、収集されるべきオブジェクトをグラフから削除する前に通知することができる。この通知に応答して、参照されるオブジェクトは、該参照されるオブジェクトから更なるオブジェクトへの弱参照（weakened  reference）を切り離すことができる。ガベージコレクションはその後、いずれかの更なる割り当て済みのシステムリソースが回収され得るかどうかの決定を継続することができる。継続されるガベージコレクションは、他のオブジェクトから更なるオブジェクトへの弱参照が切り離されると判断する。
【０００９】
この「発明の概要」の記載は、「発明を実施するための形態」の欄においてさらに後述される概念の選択を簡略化された形式で紹介するために設けられている。この「発明の概要」の記載は、特許請求に係る主題の重要な特徴及び本質的な特徴を特定するようには意図されておらず、特許請求に係る主題の範囲を決定する際の一助として用いられるようにも意図されていない。
【００１０】
本発明の更なる特徴及び利点は、以下の説明に記載されており、部分的にその説明から自明であるか、あるいは発明の実施により分かるであろう。本発明の特徴及び利点は、特許請求の範囲において特に指摘された手段及び組み合わせを用いて実現され、得られることがある。本発明のこれらの特徴及び他の特徴は、以下の説明及び特許請求の範囲からより完全に明らかになるか、又は後述されるように発明の実施により分かることがある。
【００１１】
発明の上記並びに他の利点及び特徴が得られる手法を説明するために、簡単に上述した本発明を、添付図面において図示される具体的な実施形態を参照することによってより詳しく説明する。これらの図面は、単に本発明の代表的な実施形態を示すものであり、したがって、発明の範囲を限定するものとみなされるべきではないとの理解の下で、添付図面を用いて更なる特定性と詳細さとをもって本発明を記載し説明する。
【図面の簡単な説明】
【００１２】
【図１Ａ】循環グラフにおいてオブジェクト寿命の管理を容易にする例示的なコンピュータアーキテクチャを示す図である。
【図１Ｂ】例示的な循環グラフを示す図である。
【図１Ｃ】例示的な循環グラフを示す図である。
【図１Ｄ】例示的な循環グラフを示す図である。
【図１Ｅ】例示的な循環グラフを示す図である。
【図１Ｆ】例示的な循環グラフを示す図である。
【図２】システムリソースを回収しようとする試みに備えてカウント型オブジェクトグラフからの参照情報をガベージコレクション型オブジェクトグラフと同期させる例示的な方法のフローチャートを示す図である。
【図３】参照カウントオブジェクトがシステムリソースを回収しようとする試みに備えてどのように参照されるかを決定する例示的な方法のフローチャートを示す図である。
【図４】割り当て済みのシステムリソースを回収する例示的な方法のフローチャートを示す図である。
【発明を実施するための形態】
【００１３】
本発明は、循環グラフにおいてオブジェクト寿命を管理する方法、システム及びコンピュータプログラム製品に及ぶ。本発明の実施形態は、例えば異なるリソース再生技術を混合するオブジェクトのグラフから、割り当て済みのシステムリソースを回収することを含む。一部の実施形態において、コンピュータシステムは、ガベージコレクションを実装すべきであると決定する。ガベージコレクションを実施すべきと決定したことに応答して、ガベージコレクションに従って管理されるオブジェクトと参照カウント法に従って管理されるオブジェクトとの間の参照が検出される。任意の検出された参照についての参照タイプ（例えば直接参照、間接参照、標準参照、トラック参照、弱参照等）も決定される。ガベージコレクションは、任意の割り当て済みのシステムリソースを回収できるかどうかを判断するように実装される。ガベージコレクションは、システムリソース回収の決定の一部として、ガベージコレクションに従って管理されるオブジェクトと参照カウント法に従って管理されるオブジェクトとの間の参照及び参照タイプを考慮する。
【００１４】
概して、オブジェクトは、他のオブジェクトとの間の参照の作成及び／又は削除を要求する可能性がある。例えば、オブジェクトが（例えば、システムリソースを回収するために）収集されるべきとき、収集されるべきオブジェクトから参照される他のオブジェクトに、収集されるべきオブジェクトをグラフから削除する前に通知することができる。通知に応答して、参照されるオブジェクトは、該参照されるオブジェクトから更なるオブジェクトへの弱参照を切り離すことができる。ガベージコレクションはその後、いずれかの更なる割り当て済みのシステムリソースが回収され得るかどうかの決定を継続することができる。継続されるガベージコレクションは、他のオブジェクトから更なるオブジェクトへの弱参照が切断されると判断する。
【００１５】
本発明の実施形態は、以下でより詳しく検討されるように、例えば１つ又は複数のプロセッサやシステムメモリのようなコンピュータハードウェアを含む、専用又は汎用コンピュータを備えるか、用いることがある。本発明の範囲内の諸実施形態は、コンピュータ実行可能命令及び／又はデータ構造を担持又は記憶する物理的な及び他のコンピュータ読取可能媒体も含む。このようなコンピュータ読取可能媒体は、汎用又は専用コンピュータシステムによってアクセスできる任意の利用可能な媒体とすることができる。コンピュータ実行可能命令を記憶するコンピュータ読取可能媒体は、コンピュータ記憶媒体（装置）である。コンピュータ実行可能命令を担持するコンピュータ読取可能媒体は、伝送媒体である。したがって、限定ではなく例として、本発明の実施形態は、少なくとも２つの明らかに異なる種類のコンピュータ読取可能媒体、すなわち、コンピュータ記憶媒体（装置）と伝送媒体を備える可能性がある。
【００１６】
コンピュータ記憶媒体（装置）は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、（例えば、ＲＡＭベースの）半導体ドライブ（「ＳＳＤ」）、フラッシュメモリ、相変化メモリ（「ＰＣＭ」）、他のタイプのメモリ、他の光学ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶装置、又は所望のプログラムコード手段をコンピュータ実行可能命令若しくはデータ構造の形で格納するのに使用可能であり、汎用若しくは専用コンピュータによってアクセスできる任意の他の媒体を含む。
【００１７】
「ネットワーク」は、コンピュータシステム及び／又はモジュール及び／又は電子機器の間での電子データの伝送を可能にする１つ又は複数のデータリンクとして定義される。情報がネットワーク又は別の通信接続（有線、無線又は有線若しくは無線の組み合わせのいずれか）を介してコンピュータに伝達又は提供されるとき、コンピュータは適切にこの接続を伝送媒体とみなす。伝送媒体は、所望のプログラムコード手段をコンピュータ実行可能命令の形式で、又はデータ構造体を担持するのに使用することができ、かつ汎用又は専用コンピュータによりアクセスすることができる、ネットワーク及び／又はデータリンクを含んでもよい。上記の組み合わせも同様にコンピュータ読取可能媒体の範囲に含まれるべきである。
【００１８】
さらに、様々なコンピュータシステムコンポーネントに到達すると、コンピュータ実行可能命令の形式のプログラムコード手段又はデータ構造体を、伝送媒体からコンピュータ記憶媒体（装置）へ（又は逆も同様に）自動的に転送することができる。例えばネットワーク又はデータリンクを介して受信したコンピュータ実行可能命令又はデータ構造体を、ネットワークインターフェースモジュール（例えば、「ＮＩＣ」）内のＲＡＭにバッファイングすることができ、その後、最終的にコンピュータシステムＲＡＭ及び／又はコンピュータシステムにある低揮発性コンピュータ記憶媒体（装置）に転送することができる。したがって、コンピュータ記憶媒体（装置）は、伝送媒体も併せて（又は、それどころか主として）用いるコンピュータシステムコンポーネントに含まれる可能性があることを理解されたい。
【００１９】
コンピュータ実行可能命令は、例えばプロセッサで実行されると、汎用コンピュータ、専用コンピュータ又は専用処理装置に、ある特定の機能又は機能群を実行させる命令及びデータを備える。コンピュータ実行可能命令は、例えばバイナリ、アセンブリ言語のような中間フォーマット命令、又はソースコードでもよい。本主題は、構造的特徴及び／又は方法論的な動作に特有の言語で説明されているが、特許請求の範囲において定義される主題は、説明された特徴又は上記上述の動作に必ずしも限定されないことが理解されよう。むしろ、世知、説明される特徴及び動作は、特許請求の範囲を実施する例示的な形式として開示される。
【００２０】
当業者には、本発明を、多くのタイプのコンピュータシステム構成を有するネットワークコンピューティング環境において実施してもよいことが認識されよう。そのようなコンピュータシステム構成には、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベース又はプログラマブル電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、携帯電話機、ＰＤＡ、タブレット、ページャ、ルータ、スイッチ等が含まれる。本発明は、ネットワークを通じて（有線データリンク、無線データリンク、又は有線データリンクと無線データリンクの組み合わせのいずれかによって）リンクされる、ローカル及びリモートコンピュータシステムが双方ともにタスクを実行する分散システム環境において実施されてもよい。分散システム環境では、プログラムモジュールは、ローカルメモリ記憶装置及びリモートメモリ記憶装置の双方に位置することがある。
【００２１】
明細書及び特許請求の範囲において、「参照ラッパー（「ＲＷ：Reference  Wrapper」）」は、ガベージコレクションに従って回収されるオブジェクト（以下、「ＧＣオブジェクト」と呼ばれることがある）として定義され、別のＧＣオブジェクトから参照カウント法に従って回収される更なるオブジェクト（以下、「参照カウントオブジェクト（Ref.  Counted  object）」と呼ばれることがある）への参照を記憶する。すなわち、ＲＷは、ＧＣオブジェクトから参照カウントオブジェクトへの参照を記憶する。
【００２２】
明細書及び特許請求の範囲において、「カウントラッパー（「ＣＷ：Counted  Wrapper」）」は、別の参照カウントオブジェクトからＧＣオブジェクトへの参照を記憶する参照カウントオブジェクトとして定義される。すなわち、ＣＷは、参照カウントオブジェクトからＧＣオブジェクトへの参照を記憶する。
【００２３】
明細書及び特許請求の範囲において、「標準参照」は、任意の参照カウントされた参照として定義される。例えば、共通オブジェクトモデル（「ＣＯＭ：Common  Object  Model」）参照は、オブジェクト参照カウント法アルゴリズムの一例である。標準参照を、追加参照／解放パターンに従って実装することができる。
【００２４】
明細書及び特許請求の範囲において、「トラック参照（tracked  reference）」は、標準参照に類似するが、ガベージコレクションの間にもオブジェクトと通信する参照として定義される。通信は、参照カウントオブジェクト（例えばＣＷ）がＲＷ経由以外の何らかの（直接又は間接のいずれかの）方法で到達可能であるか否かを指示することができる。参照カウントオブジェクトがＲＷ経由以外で到達可能であるとき、該参照カウントオブジェクトを保護する（又は「固定する（peg）」）ことができる。保護されると、参照カウントオブジェクトを直接参照するＲＷ又は他のＧＣオブジェクトがない場合であっても、ガベージコレクションを切り抜けることができる。参照カウントオブジェクトがＲＷを介してのみ到達可能であるとき、参照カウントオブジェクトは保護されない。
【００２５】
明細書及び特許請求の範囲において、「弱参照（weak  reference）」は、オブジェクトが回収されることを避けることなくオブジェクトを参照するのに使用される参照である。すなわち、弱参照は、弱参照によって直接参照されるオブジェクトの寿命を制御しない。
【００２６】
一部の実施形態において、ガベージコレクションの前に（例えばＧＣシステムが、メモリから削除される可能性があるＧＣオブジェクトを特定しているとき）、ＧＣシステムは、あらゆるＲＷに進み、カウントオブジェクトグラフを介して到達することができるＣＷを決定する。ＲＷターゲットからＣＷへ到達する複数の方法が存在する場合、１つ又は複数が見つかる可能性がある。あらゆる発見に対して、ＧＣ依存性が、ＲＷと（別のＧＣオブジェクトである）ＣＷターゲットとの間で作成される。したがって、ＲＷオブジェクトがＧＣ動作中に収集されない場合、ＣＷのターゲットもまた収集されない。すなわち、ＲＷは、ＣＷターゲットの寿命のプロテクタである。
【００２７】
他の実施形態では、ガベージコレクションの前に、カウントオブジェクトシステムは、固定されるべきＣＷを特定する。ＣＷは、ＲＷ経由以外で（直接又は間接に）ＣＷに到達する何らかの方法が存在する場合、固定されるべきである。すなわち、たとえ、ＣＷを直接参照するＲＷ又は他のＧＣがガベージコレクションプロセスを切り抜けない場合であっても、ＣＷターゲットをガベージコレクションから保護すべき事例である。
【００２８】
これらの収集前の動作は、ロック機構を用いてカウントオブジェクト間の参照を保護するのに使用される可能性がある。
【００２９】
図１Ａは、循環グラフでオブジェクト寿命の管理を容易にする例示的なコンピュータアーキテクチャ１００を図示している。コンピュータアーキテクチャ１００は、寿命管理モジュール１０１と、カウント型オブジェクトグラフ１０６と、ガベージコレクション型オブジェクトグラフ１０７とを含む。カウント型オブジェクトグラフ１０６内の参照カウントオブジェクト１５１は、ガベージコレクション型オブジェクトグラフ１０７内のＧＣオブジェクト１５２を参照する可能性があり、逆もまた同様である。参照カウントオブジェクト１５１とＧＣオブジェクト１５２との間の参照は、循環グラフ１０９を形成する可能性がある。
【００３０】
概して、寿命管理モジュール１０１は、例えば循環グラフ１０９のような循環グラフにおいてオブジェクト寿命を管理するように構成される。図示されるように、寿命管理モジュール１０１は、参照カウントコンポーネント１０２と、解析コンポーネント１０３と、ガベージコレクションコンポーネント１０４とを含む。
【００３１】
参照カウントコンポーネント１０２は、循環グラフ内でオブジェクトに対する参照を計算するように構成される。参照カウントコンポーネント１０２は、任意の参照カウント技術を最も多く利用して、オブジェクト上の参照を計算することができる。参照は、オブジェクト間の外部参照を含むか、又は内部参照を含むことができる。参照カウントコンポーネント１０２は、オブジェクトに対する参照の総数を決定し、それに応じて参照カウントをオブジェクトに割り当てることができる。
【００３２】
解析コンポーネント１０３は、循環グラフ内のオブジェクトに対する参照を解析するように構成される。解析に基づいて、解析コンポーネント１０３は、オブジェクト間の参照を弱めるか、又は強くすることができる。解析コンポーネント１０３は、参照カウントシステムからガベージコレクションシステムへの寿命管理の遷移及びその逆の推移を、解析に基づいて決定することができる。
【００３３】
概して、寿命管理モジュール１０１は、ガベージコレクションコンポーネント１０４を利用することにより、未使用オブジェクトを破壊するか、解放することができる。オブジェクトが到達可能ではなく、そのため、オブジェクトへの直接又は間接参照が存在しないとき、オブジェクトを収集することができる。ガベージコレクションコンポーネント１０４は、オブジェクトが破壊されるべきであることを、そのオブジェクトの到達可能性情報に基づいて決定することができる。到達可能性情報を、参照カウントコンポーネント１０２及び／又は解析コンポーネント１０３により提供することができる。
【００３４】
本発明の諸実施形態は、参照カウント情報をガベージコレクションと同期させることを含む。参照カウント側からＧＣ側への参照情報は、ＧＣプロセスの間、又はＧＣプロセスの一部として提供される。すなわち、ＲＷからＣＷターゲットへの参照は、ＧＣ中に作られ、ＧＣプロセスが完了した後に放棄される可能性がある（次のＧＣに関して必要に応じて再作成される）。代替的に及び／又は組み合わせて、何らかのタイプのキャッシュを性能の最適化のために使用することができる。
【００３５】
図１Ｂは、例示的な循環グラフ１０９を示す。図１Ｂを参照すると、循環グラフ１０９は、参照カウントオブジェクト１１１及び１１２と、ＧＣオブジェクト１１４及び１１６と、カウントラッパー１１３と、参照ラッパー１１７とを含む。ＧＣオブジェクト１１４は、参照ラッパー１１７を通じて参照カウントオブジェクト１１１を参照する（参照１２６）。参照カウントオブジェクト１１２は、カウントラッパー１１３を通じてＧＣオブジェクト１１６を参照する（参照１２３）。参照１２１（外部参照）も、参照カウントオブジェクト１１１を参照する。
【００３６】
図２は、循環グラフにおいてオブジェクト寿命を管理する例示的な方法２００のフローチャートを示す。方法２００を、コンピュータアーキテクチャ１００のコンポーネント及び図１Ｂに表されるような循環グラフ１０９に関連して説明する。
【００３７】
方法２００は、ガベージコレクションを実施すべきことを決定する動作（動作２０１）を含む。例えばガベージコレクションコンポーネント１０４は、循環グラフ１０９のガベージコレクションが実行すべきである可能性がある。
【００３８】
上記決定に応答して、ガベージコレクションを実行する前に、方法２００は、カウントラッパーに、参照ラッパーからカウント型オブジェクトグラフを介して到達することができることを決定する動作（動作２０２）を含む。例えば、解析コンポーネント１０３は、カウントラッパー１１３に、参照ラッパー１１７から到達することができると決定する可能性がある。この決定に応答して、かつ、ガベージコレクションを実行する前に、方法２００は、参照ラッパーからＧＣオブジェクトへの参照を作成することにより、カウントラッパーを介して参照されるＧＣオブジェクトの寿命を保護する動作（動作２０３）も含む。例えば解析モジュール１０３は、参照ラッパー１１７からＧＣオブジェクト１１６への参照１２７を作成することによりＧＣオブジェクト１１６を保護することができる。
【００３９】
方法２００は、ガベージコレクションを実行して、いずれかの割り当て済みシステムリソースを回収することができるかどうかを決定する動作（動作２０４）を含む。ガベージコレクションは、参照ラッパーにより有効に参照されたＧＣオブジェクトを考慮する。例えばガベージコレクションコンポーネント１０４は、循環グラフ１０９に関してガベージコレクションを実行することができる。ガベージコレクションは、循環グラフ１０９のオブジェクトのために割り当てられた任意のリソースを回収することができるかどうかを決定することができる。ガベージコレクションコンポーネント１０４は、ＧＣオブジェクト１１６が参照ラッパー１１７により有効に参照される（参照１２７）と判断することができる。
【００４０】
方法２００は、ガベージコレクションの後に、参照ラッパーとＧＣオブジェクトとの間の参照を削除する動作（動作２０５）を含む。例えば、循環グラフ１０９に対するガベージコレクションに続いて、解析モジュール１０３は参照１２７を削除することができる。
【００４１】
図１Ｃは、例示的な循環グラフ１０９を示す。図１Ｂと同様に、図１Ｃの循環グラフ１０９は、参照カウントオブジェクト１１１及び１１２と、ＧＣオブジェクト１１４及び１１６と、カウントラッパー１１３と、参照ラッパー１１７とを含む。ＧＣオブジェクト１１４は、参照ラッパー１１７を通じて参照カウントオブジェクト１１１を参照する（参照１２６）。参照カウントオブジェクト１１２は、カウントラッパー１１３を通じてＧＣオブジェクト１１６を参照する（参照１２３）。参照１２１（外部参照）も、参照カウントオブジェクト１１１を参照する。
【００４２】
図３は、参照カウントオブジェクトが、システムリソースを回収しようとする試みに備えてどのように参照されるかを決定する例示的な方法３００のフローチャートを示す。方法３００を、コンピュータアーキテクチャ１００のコンポーネント及び図１Ｃに表されるように循環グラフ１０９に関連して説明する。
【００４３】
方法３００は、ガベージコレクションを実行すべきであると決定する動作（動作３０１）を含む。例えばガベージコレクションコンポーネント１０４は、循環グラフ１０９のガベージコレクションを実行すべきであると決定する可能性がある。
【００４４】
上記決定に応答して、ガベージコレクションを実行する前に、方法３００は、指定されたタイプの参照によって参照カウントオブジェクトの到達可能性を決定する動作（動作３０２）を含む。例えば解析モジュール１０３は、標準及び／又はトラック参照によるカウントラッパー１１３の到達可能性を決定することができる。図１Ｃに表されるように、カウントラッパー１１３は、参照１２１（標準参照）及び参照１２６（トラック参照）から到達可能である。
【００４５】
上記決定に応答して、ガベージコレクションを実行する前に、方法３００は、指定されたタイプの参照に基づいてガベージコレクションに関連する情報にアクセスする動作（動作３０３）を含む。例えば参照カウントコンポーネント１０２は、循環グラフ１０９のガベージコレクションに関連する参照１２１及び／又は参照１２６からの情報にアクセスすることができる。参照１２１に関連して、参照カウントコンポーネント１０２は、参照１２１が標準参照であることを示す情報にアクセスする可能性がある。
【００４６】
参照１２６に関連して、参照カウントコンポーネント１０２は、参照１２６がトラック参照であることを指示する情報にアクセスする可能性がある。参照１２６から、参照カウントコンポーネント１０２は、カウントラッパー１１３がＲＷ以外のオブジェクトを通じて到達可能であるか否かという情報にもアクセスすることができる。図１Ｃでは、参照１２６は、カウントラッパー１１３が参照ラッパー１１７のみから到達可能であることを指示するであろう。しかしながら、標準参照１２１を通じた到達可能性に基づいて、参照カウントコンポーネント１０２は、ガベージコレクション中の保護のためカウントラッパー１１３を固定することができる。
【００４７】
方法３００は、ガベージコレクションを実行して、任意の割り当て済みのシステムリソースを回収することができるかどうかを決定する動作（動作３０４）を含む。ガベージコレクションは、参照カウントオブジェクトを回収すべきかどうかを判断するときに、アクセスした情報を考慮する。例えばガベージコレクションコンポーネント１０４は、循環グラフ１０９に対してガベージコレクションを実行することができる。ガベージコレクションは、参照１２１及び１２６からアクセスされた情報を考慮することができる。参照カウントコンポーネント１０２によって固定されているカウントラッパー１１３に基づいて、カウントラッパー１１３は回収されず（循環グラフ１０９内の任意の他のオブジェクトも同様）、メモリ内に残る。
【００４８】
すなわち、参照１２１が存在するので、カウントラッパー１１３が固定される。カウントラッパー１１３を固定することは、ＧＣオブジェクト１１６がガベージコレクションコンポーネント１０４によってグローバルに到達可能であると考えられることを意味する。ガベージコレクション中に、オブジェクトが削除されることはない。ガベージコレクションコンポーネント１０４は、ＧＣオブジェクト１１６を存続させ、参照１２４は、ガベージコレクションにＧＣオブジェクト１１４を存続させ、これによりＲＷ１１７を存続させるようにする。ＲＷ１１７は、参照カウントオブジェクト１１１におけるカウント参照を維持するので、参照カウントオブジェクト１１１及び１１２は参照１２２により存続する。
【００４９】
次に図１Ｄを参照すると、図１Ｄは、例示的な循環グラフ１０９を図示している。図１Ｄの循環グラフ１０９は、参照カウントオブジェクト１１１及び１１２と、ＣＧオブジェクト１１４及び１１６と、カウントラッパー１１３と、参照ラッパー１１７とを含む。ＧＣオブジェクト１１４は、参照ラッパー１１７を通じて参照カウントオブジェクト１１１を参照する（参照１２６）。参照カウントオブジェクト１１２は、カウントラッパー１１３を通じてＧＣオブジェクト１１６を参照する（参照１２３）。参照１２８（外部参照）も、ＧＣオブジェクト１１４を参照する。
【００５０】
図１Ｄの場合、解析モジュール１０３は、カウントラッパー１１３が参照１２６（トラック参照）から到達可能であることを決定することができる。参照カウントコンポーネント１０２は、循環グラフ１０９のガベージコレクションに関連する参照１２６からの情報にアクセスすることができる。参照１２６に関連して、参照カウントコンポーネント１０２は、参照１２６がトラック参照であることを示す情報にアクセスすることができる。参照１２６から、参照カウントコンポーネント１０２は、カウントラッパー１１３がＲＷ以外のオブジェクトを通じて到達可能であるか否かという情報にもアクセスすることができる。
【００５１】
図１Ｄでは、参照１２６は、カウントラッパー１１３が参照１２８を通じて別のオブジェクトから到達可能であることを示すであろう。したがって、参照カウントコンポーネント１０２は、カウントラッパー１１３を固定することができる。カウントラッパー１１３が固定されていることに基づいて、カウントラッパー１１３は、回収されない（循環グラフ１０９内の任意の他のオブジェクトも同様）。すなわち、参照１２８（ＧＣオブジェクト１１４への直接又は間接的なグローバルＧＣ参照）が存在するので、全てのオブジェクトがメモリ内に残る。例えば、参照１２８が直接的にグローバルＧＣ参照ではない可能性がある場合、それ自体がグローバルＧＣ参照によって参照されるオブジェクトからの参照である可能性がある。参照１２８は、ガベージコレクションコンポーネント１０４にＧＣオブジェクト１１４を存続させ、ＧＣオブジェクト１１４は参照ラッパー１１７を存続させる。再び図１Ｂを参照すると、参照１２７と同様の参照が、ＧＣオブジェクト１１６を存続させることができる。
【００５２】
次に図１Ｅを参照すると、図１Ｅは、例示的な循環グラフ１０９を図示している。図１Ｅの循環グラフ１０９は、参照カウントオブジェクト１１１及び１１２と、ＧＣオブジェクト１１４及び１１６と、カウントラッパー１１３と、参照ラッパー１１７とを含む。ＧＣオブジェクト１１４は、参照ラッパー１１７を通じて参照カウントオブジェクト１１１を参照する（参照１２６）。参照カウントオブジェクト１１２は、カウントラッパー１１３を通じてＧＣオブジェクト１１６を参照する（参照１２３）。
【００５３】
図１Ｅの場合、解析モジュール１０３は、カウントラッパー１１３が参照１２６（トラック参照）から到達可能であることを決定することができる。参照カウントコンポーネント１０２は、循環グラフ１０９のガベージコレクションに関連する参照１２６からの情報にアクセスすることができる。参照１２６に関連して、参照カウントコンポーネント１０２は、参照１２６がトラック参照であることを示す情報にアクセスすることができる。参照１２６から、参照カウントコンポーネント１０２は、カウントラッパー１１３がＲＷ以外のオブジェクトを通じて到達可能であるかどうかという情報にもアクセスすることができる。
【００５４】
図１Ｅでは、参照１２６は、カウントラッパー１１３が参照ラッパー１１７のみから到達可能であることを示すであろう。したがって、参照カウントコンポーネント１０２は、カウントラッパー１１３を固定しない。カウントラッパー１１３は固定されないので、カウントラッパー１１３は、ガベージコレクション中に回収される可能性がある（回収されるであろう）。
【００５５】
図１Ｅでは、全てのオブジェクトがガベージコレクションプロセスによって削除される。ＧＣオブジェクト１１４への参照が存在せず、従って同様に参照ラッパー１１７への参照が存在しないので、ガベージコレクションコンポーネント１０４は、ＧＣオブジェクト１１４を削除することができる。参照ラッパー１１７の削除中に、参照１２６（参照カウントオブジェクト１１１に対するカウント）が削除される。カウントの削除は、参照カウントオブジェクト１１２からカウントを削除した後、参照カウントオブジェクト１１１に、メモリからこのオブジェクト自身を削除させることになる。参照カウントオブジェクト１１２は同様に、メモリから自身を削除する前に、その参照カウントオブジェクト１１２のカウントをカウントラッパー１１３から削除する。カウントラッパー１１３は、ＧＣオブジェクト１１６に対する参照１２３を削除し、ガベージコレクションコンポーネント１０４は、これをメモリからＧＣオブジェクト１１６を削除するための信号として認識する。
【００５６】
本発明の更なる実施形態は、収集の通知を含む。ＧＣオブジェクトは、収集されるときに（本明細書において後述する）ファイナライズの前に、参照カウントオブジェクトに通知する。この通知は、ＧＣオブジェクトが終了されるまで、参照カウントオブジェクトが実際には解放されない原因となる可能性がある。これは、参照カウント側への弱参照を切り離すことも可能にする。
【００５７】
図１Ｆは例示的な循環グラフを示す。ここで図１Ｆを参照すると、図１Ｆは、例示的な循環グラフ１０９を図示している。図１Ｆの循環グラフ１０９は、参照カウントオブジェクト１１１及び１１２と、ＣＧオブジェクト１１４及び１１６と、カウントラッパー１１３と、参照ラッパー１１７とを含む。ＧＣオブジェクト１１４は、参照ラッパー１１７を通じて参照カウントオブジェクト１１１を参照する（参照１２６）。参照カウントオブジェクト１１２は、カウントラッパー１１３を通じてＧＣオブジェクト１１６を参照する（参照１２３）。参照１２８（外部参照）もＧＣオブジェクト１１４を参照する。弱参照１２９は、参照カウントオブジェクト１１２から参照カウントオブジェクト１１１を参照する。
【００５８】
図４は、割り当て済みのシステムリソースを回収する例示的な方法４００のフローチャートを示す。方法４００を、コンピュータアーキテクチャ１００のコンポーネント及び図１Ｆに表されるような循環グラフ１０９に関連して説明する。
【００５９】
方法４００は、ＧＣオブジェクトを記憶するのに使用されるシステムリソースの一部が、ガベージコレクション中に回収されるべきあることを決定する動作（動作４０１）を含む。ここでＧＣオブジェクトは、参照カウントオブジェクトを参照する。例えばガベージコレクションコンポーネント１０４は、参照１２８を削除し、従ってＧＣオブジェクト１１４がガベージコレクション中に回収されるべきであることを決定することができる。参照ラッパー１１７を介して、ＧＣオブジェクト１１４は、参照カウントオブジェクト１１１を参照することができる。方法４００は、ＧＣオブジェクトを収集する動作（動作４０２）を含む。例えばガベージコレクションコンポーネント１０４は、ＧＣオブジェクト１１４を収集することができる。
【００６０】
方法４００は、ＧＣオブジェクトの解放を終える前にＧＣオブジェクトが収集されていることを参照カウントオブジェクトに通知する動作（動作４０３）を含む。例えば解析モジュール１０３は、ＧＣオブジェクト１１４の解放を終える前に参照カウントオブジェクト１１１に通知１３１を送信することができる。一部の実施形態では、通知１３１は、参照を非同期的に削除する前にも参照カウントオブジェクトに送信される。方法４００は、上記通知に応答して、別の参照カウントオブジェクトから上記参照カウントオブジェクトへの弱参照を切り離す動作（動作４０４）を含む。例えば弱参照１２９を、通知１３１に応答して切り離すことができる。
【００６１】
方法４００は、ガベージコレクションを継続して、システムリソースの任意の更なる部分を回収することができるかどうかを決定する動作（動作４０５）を含む。例えばガベージコレクションコンポーネント１０４は、循環グラフ１０９のガベージコレクションを継続することができる。
【００６２】
他の追加的な実施形態は、別の参照カウントオブジェクトへのＧＣ参照を要求する参照カウントオブジェクトを含む。すなわち、参照カウントオブジェクトは、別の参照カウントオブジェクトへのＲＷを参照するＣＷが作成されることを要求することができる。ＣＧ参照を要求することは、リークを引き起こすことなく、意図的に循環を作成するのに役立つ可能性がある。
【００６３】
更なる追加的な実施形態は、ＧＣオブジェクトが参照カウントオブジェクトへのＧＣオブジェクトの参照を削除することを要求する参照カウントオブジェクトを含む。すなわち、ＧＣオブジェクトは、ファイナライズの間に参照カウントオブジェクトへのＧＣオブジェクトの参照を解放するように構成される可能性があるが、この要求の場合、解放は即座に起こり得る。
【００６４】
本発明は、本発明の趣旨又は本質的な特性から逸脱することなく他の具体的な形態で具現化されてもよい。説明した実施形態は、全ての観点において単なる例示として解釈されるべきであり、限定的なものとして解釈されるべきではない。したがって、本発明の範囲は、上記説明ではなく特許請求の範囲によって示される。特許請求の範囲と均等な意味及び範囲に含まれる全ての変更が、本発明の範囲に包含されることになる。
【図１Ａ】
2014529142.tif 000003
【図１Ｂ】
2014529142.tif 000004
【図１Ｃ】
2014529142.tif 000005
【図１Ｄ】
2014529142.tif 000006
【図１Ｅ】
2014529142.tif 000007
【図１Ｆ】
2014529142.tif 000008
【図２】
2014529142.tif 000009
【図３】
2014529142.tif 000010
【図４】
2014529142.tif 000011
【国際調査報告】
2014529142.tif 000012
2014529142.tif 000013