(57)【特許請求の範囲】
【請求項１】
任意の特定の時点に使用されているメモリ位置が、第１オブジェクト・グラフ内の一組のメモリ・オブジェクトとして表現される、コンピュータ・システム内でメモリを管理する方法であって、前記第１オブジェクト・グラフは、参照によって前記メモリ・オブジェクトそれぞれに関連付けられたシステム・ルート・オブジェクトを含み、前記方法は、
前記メモリの第２オブジェクト・グラフを形成するために、前記メモリの第２ルート・オブジェクトを作成するステップと、
参照解除された１つ以上のオブジェクトを前記第２オブジェクト・グラフが含むよう、前記第１オブジェクト・グラフから第１オブジェクトの前記参照解除に応答して、前記参照解除された第１オブジェクトと、前記第２オブジェクト・グラフとを関連付けるステップと、
を含む方法。
【請求項２】
前記第１オブジェクトの前記参照解除の直前に前記第１オブジェクトを参照していた、前記第１オブジェクト・グラフ内の第２オブジェクトを特定するステップと、
前記第２オブジェクト・グラフ内の前記第１オブジェクトと、前記第１オブジェクト・グラフ内の前記第２オブジェクトとを関連付けるために、前記第２オブジェクト・グラフから前記第２オブジェクトへの参照を作成するステップと、
を含む、請求項１に記載の方法。
【請求項３】
前記第２オブジェクト・グラフ内に第１メタデータ・オブジェクトを作成するステップであって、前記第１メタデータ・オブジェクトは、前記第２オブジェクト・グラフから前記第１オブジェクト・グラフ内の前記第２オブジェクトへの前記参照を提供し且つ前記第２オブジェクト・グラフ内の前記第１オブジェクトを参照するよう構成される、前記ステップ
を含む、請求項２に記載の方法。
【請求項４】
前記参照解除の直前の、前記第１オブジェクト・グラフにおける前記第１オブジェクトの位置を特定する、前記第１オブジェクトの所定のメタデータを特定するステップと、
前記メタデータを、前記第１オブジェクトに関連して前記第２オブジェクト・グラフ内に記憶するステップと、
を含む、請求項２に記載の方法。
【請求項５】
前記メタデータは、前記第２オブジェクト・グラフ内の前記第１オブジェクトに関連する第２メタデータ・オブジェクト内に記憶される、請求項４に記載の方法。
【請求項６】
前記メタデータは、前記第２オブジェクトから前記第１オブジェクトの前記参照解除の直前に、前記第１オブジェクトを参照するために使用されていた、前記第２オブジェクト内のフィールドを特定するデータを含む、請求項４に記載の方法。
【請求項７】
前記第１オブジェクト・グラフ内に存在するすべてのオブジェクトを含む第１組のオブジェクトが特定される、ガベージ・コレクションの第１段階に応答して、前記第２オブジェクト・グラフ内に存在し前記第１オブジェクト・グラフ内に存在しないオブジェクトを含む第２組のオブジェクトを特定するステップと、
前記第２組のオブジェクトが前記メモリから削除される、ガベージ・コレクションの任意のさらなる段階より前に、前記第２組のオブジェクトのうちの前記オブジェクトそれぞれに関連する所定のデータを保存するステップと、
を含む、請求項２に記載の方法。
【請求項８】
前記所定のデータは、前記第１オブジェクトを特定するデータを含む、請求項７に記載の方法。
【請求項９】
前記所定のデータは、前記第１オブジェクトの前記参照解除の直前に前記第１オブジェクトを参照していた前記第２オブジェクトを特定するデータを含む、請求項７に記載の方法。
【請求項１０】
前記所定のデータは、前記参照解除の直前に前記第１オブジェクト・グラフ内で前記第１オブジェクトを参照していた、前記第２オブジェクト内のフィールドを特定するデータを含む、請求項７に記載の方法。
【請求項１１】
任意の特定の時点に使用されているメモリ位置が、第１オブジェクト・グラフ内の一組のメモリ・オブジェクトとして表現される、コンピュータ・システム内でメモリを管理する装置であって、前記第１オブジェクト・グラフは、参照によって前記メモリ・オブジェクトそれぞれに関連付けられたシステム・ルート・オブジェクトを含み、前記装置は、
前記メモリの第２オブジェクト・グラフを形成するために、前記メモリの第２ルート・オブジェクトを作成し、
参照解除された１つ以上のオブジェクトを前記第２オブジェクト・グラフが含むよう、前記第１オブジェクト・グラフから第１オブジェクトの前記参照解除に応答して、前記参照解除された第１オブジェクトと、前記第２オブジェクト・グラフとを関連付けるように動作可能である、装置。
【請求項１２】
前記第１オブジェクトの前記参照解除の直前に前記第１オブジェクトを参照していた、前記第１オブジェクト・グラフ内の第２オブジェクトを特定し、
前記第２オブジェクト・グラフ内の前記第１オブジェクトと、前記第１オブジェクト・グラフ内の前記第２オブジェクトとを関連付けるために、前記第２オブジェクト・グラフから前記第２オブジェクトへの参照を作成するように動作可能な、請求項１１に記載の装置。
【請求項１３】
前記装置は、前記第２オブジェクト・グラフ内に第１メタデータ・オブジェクトを作成するように動作可能であり、前記第１メタデータ・オブジェクトは、前記第２オブジェクト・グラフから前記第１オブジェクト・グラフ内の前記第２オブジェクトへの前記参照を提供し且つ前記第２オブジェクト・グラフ内の前記第１オブジェクトを参照するよう構成される、請求項１２に記載の装置。
【請求項１４】
前記参照解除の直前の、前記第１オブジェクト・グラフにおける前記第１オブジェクトの位置を特定する、前記第１オブジェクトの所定のメタデータを特定し、
前記メタデータを、前記第１オブジェクトに関連して前記第２オブジェクト・グラフ内に記憶するように動作可能な、請求項１２に記載の装置。
【請求項１５】
前記メタデータは、前記第２オブジェクト・グラフ内の前記第１オブジェクトに関連する第２メタデータ・オブジェクト内に記憶される、請求項１４に記載の装置。
【請求項１６】
前記メタデータは、前記第２オブジェクトから前記第１オブジェクトの前記参照解除の直前に、前記第１オブジェクトを参照するために使用されていた、前記第２オブジェクト内のフィールドを特定するデータを含む、請求項１４に記載の装置。
【請求項１７】
前記第１オブジェクト・グラフ内に存在するすべてのオブジェクトを含む第１組のオブジェクトが特定される、ガベージ・コレクションの第１段階に応答して、前記第２オブジェクト・グラフ内に存在し前記第１オブジェクト・グラフ内に存在しないオブジェクトを含む第２組のオブジェクトを特定し、
前記第２組のオブジェクトが前記メモリから削除される、ガベージ・コレクションの任意のさらなる段階より前に、前記第２組のオブジェクトのうちの前記オブジェクトそれぞれに関連する所定のデータを保存するように動作可能な、請求項１２に記載の装置。
【請求項１８】
前記所定のデータは、前記第１オブジェクトを特定するデータを含む、請求項１７に記載の装置。
【請求項１９】
前記所定のデータは、前記第１オブジェクトの前記参照解除の直前に前記第１オブジェクトを参照していた前記第２オブジェクトを特定するデータを含む、請求項１７に記載の装置。
【請求項２０】
請求項１〜１０の何れか１項に記載の方法の各ステップをコンピュータに実行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・システムにおいてメモリを管理することに関する。
【背景技術】
【０００２】
コンピュータ・システムは、一般的に、仮想メモリ管理システムを使用する。仮想メモリ管理システムは、割り当ておよびメモリ割り当ての回収を、それぞれ動的メモリ割り当てプロセスおよびガベージ・コレクション（ｇａｒｂａｇｅ  ｃｏｌｌｅｃｔｉｏｎ）プロセスを使用して行う。ガベージ・コレクション・プロセスは、割り当てられているが使用できないメモリ割り当てを特定し、それらが記憶している関連するメモリ・オブジェクト（ｍｅｍｏｒｙ  ｏｂｊｅｃｔ）をクリアして、その特定されたメモリ割り当てを、再割り当てによる再利用のために戻すよう構成される。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ガベージ・コレクション・プロセスは、かなりの処理能力を必要とし、コンピュータによるほかの処理を遅らせることもある。アプリケーション・プログラムのメモリ効率を改善することで、ガベージ・コレクション・プロセスがクリアするべき破棄されるメモリ・オブジェクトの発生を少なくすることができる。しかし、特定のコンピュータ上で複数のシステムまたはアプリケーション・プログラムが実行されている状態では、破棄されたメモリ・オブジェクトのソースを特定することは難しく、時間がかかる。
【課題を解決するための手段】
【０００４】
本発明の実施形態は、任意の特定の時点に使用されているメモリ位置が、第１オブジェクト・グラフ（ｏｂｊｅｃｔ  ｇｒａｐｈ）内の一組のメモリ・オブジェクトとして表現される、コンピュータ・システム内でメモリを管理する方法を提供し、第１オブジェクト・グラフは、参照によってメモリ・オブジェクトそれぞれに関連付けられたシステム・ルート・オブジェクト（ｓｙｓｔｅｍ  ｒｏｏｔ  ｏｂｊｅｃｔ）を含み、本方法は、メモリの第２オブジェクト・グラフを形成するために、メモリの第２ルート・オブジェクトを作成するステップと、参照解除された１つ以上のオブジェクトを第２オブジェクト・グラフが含むよう、第１オブジェクト・グラフから第１オブジェクトの参照解除（ｄｅｒｅｆｅｒｅｎｃｉｎｇ）に応答して、参照解除された第１オブジェクトと、第２オブジェクト・グラフとを関連付けるステップとを含む。
【０００５】
本方法は、第１オブジェクトの参照解除の直前に第１オブジェクトを参照していた、第１オブジェクト・グラフ内の第２オブジェクトを特定するステップと、第２オブジェクト・グラフ内の第１オブジェクトと、第１オブジェクト・グラフ内の第２オブジェクトとを関連付けるために、第２オブジェクト・グラフから第２オブジェクトへの参照を作成するステップとを含むとよい。本方法は、第２オブジェクト・グラフ内に第１メタデータ・オブジェクトを作成するステップであって、第１メタデータ・オブジェクトは、第２オブジェクト・グラフから第１オブジェクト・グラフ内の第２オブジェクトへの参照を提供し且つ第２オブジェクト・グラフ内の第１オブジェクトを参照するよう構成される、ステップを含むとよい。本方法は、参照解除の直前の、第１オブジェクト・グラフにおける第１オブジェクトの位置を特定する、第１オブジェクトの所定のメタデータを特定するステップと、メタデータを、第１オブジェクトに関連して第２オブジェクト・グラフ内に記憶するステップとを含むとよい。
【０００６】
メタデータは、第２オブジェクト・グラフ内の第１オブジェクトに関連する第２メタデータ・オブジェクト内に記憶されるとよい。メタデータは、第２オブジェクトから第１オブジェクトの参照解除の直前に第１オブジェクトを参照するために使用されていた、第２オブジェクト内のフィールドを特定するデータを含むとよい。
【０００７】
本方法は、第１オブジェクト・グラフ内に存在するすべてのオブジェクトを含む第１組のオブジェクトが特定される、ガベージ・コレクションの第１段階に応答して、第２オブジェクト・グラフ内に存在し第１オブジェクト・グラフ内に存在しないオブジェクトを含む第２組のオブジェクトを特定するステップと、第２組のオブジェクトがメモリから削除される、ガベージ・コレクションの任意のさらなる段階より前に、第２組のオブジェクトのうちのオブジェクトそれぞれに関連する所定のデータを保存するステップとを含むとよい。
【０００８】
所定のデータは、第１オブジェクトを特定するデータを含むとよい。所定のデータは、第１オブジェクトの参照解除の直前に第１オブジェクトを参照していた第２オブジェクトを特定するデータを含むとよい。所定のデータは、参照解除の直前に第１オブジェクト・グラフ内で第１オブジェクトを参照していた、第２オブジェクト内のフィールドを特定するデータを含むとよい。
【０００９】
別の実施形態は、任意の特定の時点に使用されているメモリ位置が、第１オブジェクト・グラフ内の一組のメモリ・オブジェクトとして表現される、コンピュータ・システム内でメモリを管理する装置を提供し、第１オブジェクト・グラフは、参照によってメモリ・オブジェクトそれぞれに関連付けられたシステム・ルート・オブジェクトを含み、装置は、メモリの第２オブジェクト・グラフを形成するために、メモリの第２ルート・オブジェクトを作成し、参照解除された１つ以上のオブジェクトを第２オブジェクト・グラフが含むよう、第１オブジェクト・グラフから第１オブジェクトの参照解除に応答して、参照解除された第１オブジェクトと、第２オブジェクト・グラフとを関連付けるように動作可能である。
【００１０】
さらなる実施形態は、任意の特定の時点に使用されているメモリ位置が、第１オブジェクト・グラフ内の一組のメモリ・オブジェクトとして表現される、コンピュータ・システム内でメモリを管理するコンピュータ・プログラムを提供し、第１オブジェクト・グラフは、参照によってメモリ・オブジェクトそれぞれに関連付けられたシステム・ルート・オブジェクトを含み、コンピュータ・プログラムは、コンピュータ可読記憶媒体により具現化されたコンピュータ可読プログラム・コードを有する、コンピュータ可読記憶媒体を含み、コンピュータ可読プログラム・コードは、メモリの第２オブジェクト・グラフを形成するために、メモリの第２ルート・オブジェクトを作成し、参照解除された１つ以上のオブジェクトを第２オブジェクト・グラフが含むよう、第１オブジェクト・グラフから第１オブジェクトの参照解除に応答して、参照解除された第１オブジェクトと、第２オブジェクト・グラフとを関連付けるように構成されている。
【００１１】
本発明の実施形態は、システム・オブジェクト・グラフから除去されたメモリ・オブジェクトに関するデータを、当該の除去されたオブジェクトのソースの特定に使用するために、保持するよう構成されている。
【図面の簡単な説明】
【００１２】
【図１】仮想マシンを含むコンピュータ・システムの概略図である。
【図２】図２ａは、図１の仮想マシンのメモリ内のオブジェクト・グラフの概略図であり、図２ｂは、図１の仮想マシンのメモリ内のオブジェクト・グラフの概略図である。
【図３】図２ｂのオブジェクト・グラフのうちの１つから抽出されたデータを示すテーブルである。
【図４】図２ａのオブジェクト・グラフ内のオブジェクトの参照解除に応答してコンピュータ・システムにおいて実行される処理を示すフローチャートである。
【図５】図３のデータをもたらす、図２ｂのオブジェクト・グラフに対して実行されるガベージ・コレクション・プロセスに応答して実行される処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を参照しながら、単なる例として本発明の好適な実施形態について記載する。
【００１４】
図１を参照する。コンピュータ１０１は、１つ以上のアプリケーション・プログラムの処理プラットフォームを提供するオペレーティング・システム１０２を搭載している。本実施形態では、コンピュータは、ユーザがコンピュータ１０１上で１つ以上のＪａｖａ（ＴＭ）仮想マシン（ＪＶＭ：Ｊａｖａ  ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅｓ）１０４を実行できるようにするよう構成された、Ｊａｖａ（ＴＭ）実行環境（ＪＲＥ：Ｊａｖａ  ｒｕｎｔｉｍｅ  ｅｎｖｉｒｏｎｍｅｎｔ）アプリケーション・プログラムの形態の、仮想マシン環境アプリケーション・プログラム１０３を搭載している。各ＪＶＭ１０４は、仮想メモリ１０５と、ガベージ・コレクション・モジュールを含むメモリ・マネージャ１０６とを含む。各ＪＶＭ１０４は、ＪＶＭ１０４上で実行される１つ以上のプログラム１０８を記憶し、入力または出力プログラム・データ１０９を記憶するよう構成されている記憶域１０７をさらに含む。
【００１５】
メモリ・マネージャ１０６は、プログラム１０８のうちの１つがＪＶＭ１０４により処理される間、仮想メモリ１０５の各部分を要求に応じプログラム１０８に対して割り当てまたは割り当て解除することによって、仮想メモリ１０５の使用を管理するよう構成されている。メモリ・マネージャ１０６は、ガベージ・コレクション・プロセスを定期的に実行して、仮想メモリ１０５をスキャンし、プログラム１０８によって使用されていない仮想メモリ１０５の部分を特定し、メモリの当該部分からデータをクリアし、メモリのその部分を、メモリ・マネージャ１０６によるプログラム１０８へのさらなる割り当てに利用可能としてマークする。
【００１６】
ＪＶＭ１０４のメモリ・モデルでは、最初、仮想メモリ１０５は空きであり、ヒープと呼ばれるメモリ管理データ構造に割り当てられ、プログラム１０８から、変数、関数またはデータ構造の形態でメモリ・オブジェクトを記憶するリクエストがあると、ヒープから仮想メモリ１０５の各位置が割り当てられる。図２ａを参照する。プログラム１０８によって任意の特定の時点に使用されているオブジェクト２０１が、システム・オブジェクト・グラフの形態の第１オブジェクト・グラフ（システム・ルート・オブジェクト・グラフ２０３）を形成するように、１つのオブジェクト２０１から別のオブジェクト２０１への参照２０２によって関連付けられている。システム・ルート・オブジェクト・グラフ２０３は、システム・ルート２０４と呼ばれるルート・オブジェクトを含む。言い換えれば、プログラム１０８の現在のデータ・オブジェクト、すなわちライブ・データ・オブジェクトはすべて、直接的に、またはほかの１つ以上のオブジェクト２０１を介して間接的に、参照２０２によってシステム・ルート２０４に関連付けられている。任意の特定のオブジェクト２０１は、ほかの任意数のオブジェクト２０１により参照され得る。言い換えれば、特定のオブジェクト２０１は、ほかの任意数のオブジェクト２０１に、それらほかのオブジェクト２０１それぞれからの参照によって、リンクまたは関連付けされ得る。
【００１７】
特定のオブジェクト２０１への参照２０２が、プログラム１０８により必要とされなくなると、関連した参照２０２がシステム・ルート・オブジェクト・グラフ２０３から除去される。言い換えれば、オブジェクト２０１は参照解除される。しかし、オブジェクト２０１は、ほかの任意数のオブジェクト２０１により参照され得るため、１つの参照の除去は、そのオブジェクトが破棄されたことを必ずしも示さない。特定のオブジェクトに対する参照２０２がすべて除去されて初めて、オブジェクト２０１は破棄されたものとして扱うことができる。このように、破棄されたオブジェクト２０１に対する参照２０２はすべて除去されているため、破棄されたオブジェクトは、システム・ルート２０４にリンクまたは関連付けされていない状態となる。メモリ・マネージャ１０６のガベージ・コレクション・プロセスは、仮想メモリ１０５のオブジェクト・グラフをトラバースして、システム・ルート２０４に直接的または間接的にリンクされているすべてのオブジェクト２０１を特定するよう構成されている。そのようなオブジェクトは、ライブ・オブジェクトと呼ばれる。すなわち、関連したプログラム１０８により現在使用されているオブジェクトである。ほかのオブジェクト２０１はすべて、破棄されたオブジェクトまたはデッド・オブジェクトとして扱われ、したがって、仮想メモリ１０５から除去することができ、それらに割り当てられているメモリは、再利用のためにヒープに戻すことができる。
【００１８】
本実施形態では、メモリ・マネージャ１０６は、オブジェクト２０１の参照解除に応答して、そのデータを収集するよう構成される。ガベージ・コレクション・プロセスの間、メモリ・マネージャ１０６は、デッドであり破棄されるべきである、参照解除された任意のオブジェクトに関して、デッド・オブジェクトに関する所定の一組のデータを、図１に示されているデッド・オブジェクト・データ１１０の形態で保存するようさらに構成される。本実施形態では、デッド・オブジェクト・データは、以下を含む：
１．デッド・オブジェクトの識別情報
２．デッド・オブジェクトが参照解除された参照元のライブ・オブジェクトへの参照
３．デッド・オブジェクトに対する除去された参照を含んでいたライブ・オブジェクト内のフィールドを特定するフィールド・メタデータ。
【００１９】
図２ｂを参照する。メモリ・マネージャ１０６は、デッド・オブジェクト・データ１１０を収集するために、参照解除されたオブジェクトを含む仮想メモリ１０５の第２オブジェクト・グラフである参照解除オブジェクト・グラフ２０５を維持するよう構成されている。本実施形態では、参照解除オブジェクト・グラフ２０５は、本願明細書でデッド・ルートと呼ばれるデッド・ルート・オブジェクト２０６を含む。メモリ・マネージャ１０６は、第１オブジェクト・グラフ、すなわちシステム・ルート・オブジェクト・グラフ２０３からのオブジェクトの参照解除に応答して、参照解除されたオブジェクトを参照解除オブジェクト・グラフ２０５に追加するよう構成されている。本実施形態では、これは、デッド・オブジェクト情報オブジェクト２０７の形態で、新たなオブジェクトを参照解除オブジェクト・グラフ２０５に追加することによって実行される。本実施形態では、新たなデッド・オブジェクト情報オブジェクトはすべて、デッド・ルート・オブジェクト２０６から直接参照される。デッド・オブジェクト情報オブジェクト２０７は、新たに参照解除されたオブジェクト２０９への参照２０８を含む。本実施形態では、デッド・オブジェクト情報オブジェクト２０７は、参照解除されたオブジェクト２０９が参照解除された参照元のライブ・オブジェクト２０１への参照２１０をさらに含む。さらに、フィールド定義オブジェクト２１１が、参照解除オブジェクト・グラフ２０５に追加され、デッド・オブジェクト情報オブジェクト２０７から参照される。フィールド定義オブジェクト２１１は、新たに参照解除されたオブジェクト２０９への除去された参照を含んでいた、ライブ・オブジェクト２０１内のフィールドを特定するデータを含む。
【００２０】
メモリ・マネージャ１０６によって実行されるガベージ・コレクション・プロセスは、一般的にマーク・フェーズと呼ばれる第１フェーズで、システム・ルート・オブジェクト・グラフ２０３を探索して、存在する接続されたオブジェクトすべてを「ライブ」としてマークするよう構成されている。言い換えれば、システム・ルート・オブジェクト・グラフ２０３において、システム・ルート２０４から直接的に、またはほかの１つ以上のオブジェクト２０１を介してシステム・ルート２０４から間接的に参照されているオブジェクトはすべて、ロードされたプログラム１０８により現在使用されているものとして特定される。参照解除オブジェクト・グラフ２０５は、「ライブ」オブジェクトの特定には使用されない。とは言っても、システム・ルート・オブジェクト・グラフ２０３を介して特定されたオブジェクトの一部は、参照解除オブジェクト・グラフ２０５にも存在し得る。これは、参照解除されたオブジェクトが、２つ以上のライブ・オブジェクトによって参照されていて、当該の参照が１つ以上、ガベージ・コレクション・プロセスの実行時に残る場合に生じる。
【００２１】
ガベージ・コレクション・プロセスの第２フェーズでは、メモリ・マネージャ１０６は、参照解除オブジェクト・グラフ２０５を探索して、第１フェーズで「ライブ」として特定されなかった、したがって仮想メモリ１０５からの除去またはスイープの候補である、接続された任意のオブジェクト２０９を特定するよう構成されている。ガベージ・コレクションは、あらゆるメタデータ・オブジェクト、すなわち本実施形態ではデッド・オブジェクト情報オブジェクト２０７およびフィールド定義オブジェクト２１１を、この探索から除外するよう構成されている。これにより、本実施形態において決して「ライブ」オブジェクトにより参照されることのないメタデータ・オブジェクトが、ガベージ・コレクション・プロセスにより不必要に処理されることが回避される。そうした候補オブジェクトそれぞれに関して、オブジェクトの参照解除に応じて作成されたデッド・オブジェクト情報オブジェクト２０７およびフィールド定義オブジェクト２１１の形態の関連するオブジェクトが特定されて、図３に示されているように、所定のデッド・オブジェクト・データ１１０が抽出および記憶される。よって、デッド・オブジェクト・データ１１０は、関連のオブジェクトそれぞれに関して、第１に、デッド・オブジェクト２０９を特定するオブジェクト識別子３０１を含む。第２に、デッド・オブジェクト・データ１１０は、デッド・オブジェクト２０９のもとの親であるオブジェクト２０１、すなわち、もともとデッド・オブジェクト２０９を参照していたオブジェクト２０１の識別情報３０２を含む。識別情報３０２は、デッド・オブジェクト情報オブジェクト２０７からもとの参照元のオブジェクト２０１への参照２１０から得られる。第３に、デッド・オブジェクト・データ１１０は、もともとデッド・オブジェクト２０９を参照するのに使用されていたオブジェクト２０１内のフィールドを特定する、参照元フィールド・データ３０３を含む。参照元フィールド・データ３０３は、デッド・オブジェクト情報オブジェクト２０７から参照されるフィールド定義オブジェクト２１１から抽出される。
【００２２】
システム・ルート・オブジェクト・グラフ２０３内の１つ以上のライブ・オブジェクトから参照されたままであり、したがって「ライブ」のままであるいくつかのオブジェクトが、参照解除オブジェクト・グラフ２０５内に存在することもある。しかし、ガベージ・コレクション・プロセスの第１フェーズでは、そのような、参照解除されたがそれでも「ライブ」であるオブジェクトに関連するメタデータ・オブジェクトは、それらがシステム・ルート２０４からアクセス可能ではないため「ライブ」としてマークされず、そのため除去候補となる。したがって、そのような、参照解除されたがそれでも「ライブ」であるオブジェクトのメタデータ・オブジェクトを保持するために、メモリ・マネージャ１０６は、「ライブ」としてマークされている、参照解除オブジェクト・グラフ２０５内の参照解除されたオブジェクトをすべて特定して、それらに関連するメタデータ・オブジェクトがその後除去されるのを回避するために、メタデータ・オブジェクトを同様に「ライブ」としてマークするようさらに構成されている。
【００２３】
デッド・オブジェクト・データ１１０が、参照解除オブジェクト・グラフ２０５の関連したノードから抽出されると、一般的にスイープ・フェーズと呼ばれる、ガベージ・コレクション・プロセスの第３フェーズが開始される。この第３フェーズでは、仮想メモリ１０５内のすべてのオブジェクトがスキャンされ、「ライブ」としてマークされていないすべてのオブジェクトが除去されて、そのメモリ割り当てが、再利用のためにヒープに戻される。オブジェクトが仮想メモリ１０５から除去された場合、参照解除オブジェクト・グラフ２０５が訂正され、その時点では冗長となったメタデータ・オブジェクト、すなわち、本実施形態では、関連したデッド・オブジェクト情報オブジェクト２０７およびフィールド定義オブジェクト２１１が、除去される。一部のオブジェクトは、システム・ルート・オブジェクト・グラフ２０３内の１つ以上のライブ・オブジェクトからまだ参照されているという理由で、参照解除オブジェクト・グラフ２０５に残り得る。
【００２４】
メモリ・マネージャ１０６によってオブジェクトの参照解除に応答して実行される処理について、以下、図４のフローチャートを参照しながら記載する。処理は、ステップ４０１において、参照解除するオブジェクトの選択に応答して開始され、続いて処理はステップ４０２に進む。ステップ４０２にて、選択されたオブジェクトが、システム・ルート・オブジェクト・グラフ２０３から参照解除され、処理はステップ４０３に進む。ステップ４０３にて、デッド・ルート・オブジェクトが現在仮想メモリ１０５に存在しなければ、処理はステップ４０４に進む。ステップ４０４にて、デッド・ルート・オブジェクト２０６が作成され、処理はステップ４０５に進む。ステップ４０３にて、デッド・ルート・オブジェクト２０６が仮想メモリ１０５内で特定されれば、処理は直接ステップ４０５に進む。ステップ４０５にて、新たなデッド・オブジェクト情報オブジェクト２０７が作成され、デッド・ルート・オブジェクト２０６から新たなデッド・オブジェクト情報オブジェクト２０７への参照が追加され、処理はステップ４０６に進む。ステップ４０６にて、新たなデッド・オブジェクト情報オブジェクト２０７から、新たに参照解除されたオブジェクト２０９をその参照解除の直前に参照していたライブ・オブジェクト２０１への参照が追加され、処理はステップ４０７に進む。ステップ４０７にて、新たなデッド・オブジェクト情報オブジェクト２０７から、新たに参照解除されたオブジェクト２０９への参照が追加され、処理はステップ４０８に進む。ステップ４０８にて、新たに参照解除されたオブジェクト２０９への参照を提供していた、以前の参照元のオブジェクト２０１内のフィールドを特定するデータを含む、新たなフィールド定義オブジェクト２１１が作成され、処理はステップ４０９に進む。ステップ４０９にて、新たなフィールド定義オブジェクト２１１への参照が、デッド・オブジェクト情報オブジェクト２０７に追加される。処理は続いて、ステップ４１０に進み、終了する。
【００２５】
ガベージ・コレクション・プロセスにおいてメモリ・マネージャ１０６によって実行される処理について、以下、図５のフローチャートを参照しながら記載する。処理は、ステップ５０１にて、メモリ・マネージャ１０６のガベージ・コレクション・スケジューリングに従って開始され、続いて処理はステップ５０２に進む。ステップ５０２にて、システム・ルート・オブジェクト・グラフ２０３がトラバースされ、アクセス可能なオブジェクトすべてがライブとしてマークされ、処理はステップ５０３に進む。ステップ５０３にて、参照解除オブジェクト・グラフ２０５がトラバースされ、「ライブ」としてマークされた、参照解除された任意のオブジェクトが特定され、その関連するメタデータ・オブジェクトが特定され、それらのオブジェクトが「ライブ」としてマークされ、処理はステップ５０４に進む。ステップ５０４にて、参照解除オブジェクト・グラフ２０５がトラバースされて、ステップ５０２で「ライブ」として特定されなかった、したがって仮想メモリ１０５からの除去の候補オブジェクトである、接続されている任意のオブジェクト２０９が特定され、処理はステップ５０５に進む。ステップ５０５にて、特定された除去候補それぞれについて、デッド・オブジェクト・データ１１０が、参照解除オブジェクト・グラフ２０５内の関連したオブジェクトから抽出され、記憶されて、処理はステップ５０６に進む。ステップ５０６にて、ステップ５０２で特定された除去の候補オブジェクトすべてがメモリから除去され、それらのメモリ割り当てがヒープに戻され、処理はステップ５０７に進む。ステップ５０７にて、除去されたオブジェクトを考慮に入れるよう、参照解除オブジェクト・グラフ２０５が必要に応じて訂正される。処理は続いて、ステップ５０８に進み、終了する。
【００２６】
別の実施形態では、デッド・オブジェクト・データは、特定のデッド・オブジェクトを、直接的に、またはほかの１つ以上のデッド・オブジェクトを介して間接的に参照する、最も近いライブ・オブジェクトの識別情報を含む。
【００２７】
さらなる実施形態では、メモリ・マネージャは、２つのヒープからのメモリ割り当てを提供する。第１ヒープは、すべてのオブジェクトの記憶を提供し、第２ヒープは、デッド・ルート・オブジェクト、ならびにデッド・オブジェクト情報オブジェクトおよびフィールド定義オブジェクトなどのメタデータ・オブジェクトの記憶を提供する。第１ヒープ内のオブジェクトが参照解除されるのに応答して、第１ヒープ内の参照解除されたオブジェクトへのヒープ間参照を含む、対応する一組のメタデータ・オブジェクトが、第２ヒープ内に作成される。ガベージ・コレクション・プロセスが第１ヒープに適用されると、ライブ・オブジェクトからの参照がそれ以上ない、参照解除された任意のオブジェクトが、除去候補として特定される。第２ヒープ内のメタデータ・オブジェクトからのヒープ間参照は認識されないため、ガベージ・コレクション・プロセスによる参照解除されたオブジェクトの特定を混乱させることはない。除去候補として特定された各オブジェクトに関して、第２ヒープがスキャンされ、関連するオブジェクト・メタデータが特定および出力される。次に、メタデータから第１ヒープ内の関連するオブジェクトへのヒープ間参照が除去される。続いて、第２ガベージ・コレクション・プロセスが、第２ヒープに対してデッド・ルートから実行されるが、これは、ライブ・オブジェクトに接続されていない、すなわちライブ・オブジェクトへのヒープ間参照がない任意のメタデータ・オブジェクトを特定および除去するよう構成されている。
【００２８】
当業者には当然のことながら、本発明の実施形態は、Ｊａｖａ（ＴＭ）またはＪＲＥ（ＴＭ）に限定はされず、任意の仮想マシン・システムまたは環境に応用され得る。適切な仮想マシン・システムまたは環境は、コンピュータ・システム上で直接実行されるよう、またはオペレーティング・システム上で実行されるよう構成されているとよい。言い換えれば、仮想マシン・システムまたは環境は、ネイティブで実行されても、ホストされてもよい。仮想マシンは、ソフトウェア・エミュレーションまたはハードウェア仮想化により提供され得る。
【００２９】
当業者には当然のことながら、本発明の実施形態は、物理マシン環境、すなわち物理コンピュータ上で直接実行され、１つ以上のアプリケーション・プログラムを実行するためのプラットフォームを提供する、オペレーティング・システムに応用されてもよい。
【００３０】
当業者には当然のことながら、特定の応用に、任意の適切なレベルのデッド・オブジェクト・データが提供されるとよい。一部の応用では、デッド・オブジェクトの識別子、またはデッド・オブジェクトの参照解除の直前にデッド・オブジェクトを参照していたオブジェクトの識別情報、または特定のデッド・オブジェクトを直接的に、もしくはほかの１つ以上のデッド・オブジェクトを介して間接的に参照する最も近いライブ・オブジェクトの識別情報など、各デッド・オブジェクトに関して単一のデータ項目を提供する、最低限のデッド・オブジェクト・データが提供されてもよい。
【００３１】
本発明の実施形態は、参照解除されたオブジェクトに関連するメタデータ・オブジェクトをデッド・ルートから参照し、参照解除されたオブジェクト自体はメタデータから参照される。これにより、オブジェクトそれぞれのメタデータを参照する、オブジェクト内の追加のフィールドの必要性が回避される。そのような追加のフィールドは、一部の実装では、隠される必要があることもある。
【００３２】
本発明の実施形態は、コンピュータ上でのプログラムの処理中に作成され、後にガベージ・コレクション・プロセスまたはほかの適切なメモリ管理プロセスの結果としてメモリから除去されたメモリ・オブジェクトに関するデータを、保持するよう構成されている。データは、除去されたオブジェクトの識別情報、または除去されたオブジェクトに関連していた、もしくは除去されたオブジェクトを参照していたオブジェクトの詳細を含むとよい。データは、除去されたオブジェクトが参照されていた、参照元オブジェクトのフィールドの識別情報を含むとよい。デッド・オブジェクト・データは、それぞれのオブジェクトを作成したプログラム、プログラムの部分、またはその他プロセスを特定するために使用可能である。そのような特定は、関連したプログラム、プログラム部分またはその他プロセスのメモリ使用を監視、測定、変更または改善するのに有益である。データは、関連する処理における選択された時点でのシステム・オブジェクト・グラフを再構築するために使用され得る。
【００３３】
当業者には当然のことながら、本発明の一部または全部を具現化する装置は、本発明の実施形態の一部または全部を提供するよう構成されたソフトウェアを有する汎用デバイスであってもよい。デバイスは、単一のデバイスまたはデバイスのグループとすることができ、ソフトウェアは、単一のプログラムまたは一組のプログラムとすることができるであろう。さらに、本発明の実装に使用されるソフトウェアのいずれかまたはすべては、ソフトウェアが１つ以上のデバイスにロードされ得るよう、任意の適切な伝送または記憶手段を介して伝達可能である。
【００３４】
本発明は、その実施形態の記載によって例示され、実施形態はかなり詳細に記載されたが、添付の特許請求の範囲に記載の範囲を、そのような詳細事項に制限することも、多少なりとも限定することも、出願人の意図ではない。さらなる利点および変更が、当業者には容易に分かるであろう。したがって、本発明は、そのより広い側面において、示され記載された代表的な装置および方法、ならびに説明のための例の、特定の詳細事項に限定されない。したがって、出願人の全般的な発明の概念の範囲から逸脱することなく、かかる詳細事項からの逸脱がなされ得る。
【符号の説明】
【００３５】
２０１  オブジェクト１、オブジェクト３
２０３  オブジェクト・グラフ
２０４  システム・ルート
２０５  参照解除オブジェクト・グラフ
２０６  デッド・ルート
２０７  デッド・オブジェクト情報
２０８、２１０  参照
２０９  オブジェクト２
２１１  フィールド定義
【図１】
0005896952.tif 000002
【図２】
0005896952.tif 000003
【図３】
0005896952.tif 000004
【図４】
0005896952.tif 000005
【図５】
0005896952.tif 000006