(57)【要約】【課題】【解決手段】仮想マシン環境におけるガーベッジコレクタの効率的な交換を可能にするための方法および装置が開示される。本発明の一態様では、仮想マシンを有するマルチスレッド仮想マシン環境においてメモリを再利用するためのインタフェースは、仮想マシンに関連付けられた第１のモジュールと、第１のモジュールから分離されているが第１のモジュールと調和する第２のモジュールと、を含む。第１のモジュールは、仮想マシン環境においてガーベッジコレクションプロセスを開始するための第１のルーチンと、仮想マシン環境に関連付けられたルートを走査するための第２のルーチンと、仮想マシン環境に関連付けられたオブジェクトへのルートを追跡するための第３のルーチンと、を含む。第２のモジュールは、仮想マシン環境においてヒープを初期化するための第４のルーチンと、仮想マシン環境においてオブジェクトを割り当てるための第５のルーチンと、ガーベッジコレクションプロセスを実施するための第６のルーチンと、を含む。一実施形態では、第２のモジュールは、ガーベッジコレクションプロセスのために読み出しおよび書き込みのバリアを提供するための第７のルーチンも含む。【選択図】図１Ａ
2004503869.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンを含むマルチスレッド仮想マシン環境においてメモリを再利用するためにコンピュータで実現されるインタフェースであって、
前記仮想マシンに関連付けられた第１のモジュールであって、前記仮想マシン環境においてガーベッジコレクションプロセスを開始するための第１のルーチンと、前記仮想マシン環境に関連付けられたルートを走査するための第２のルーチンと、前記仮想マシン環境に関連付けられた複数のオブジェクトへのルートを追跡するための第３のルーチンと、を含む前記第１のモジュールと、
前記第１のモジュールから分離され、前記第１のモジュールと調和するように設けられた第２のモジュールであって、前記仮想マシン環境においてヒープを初期化するための第４のルーチンと、前記仮想マシン環境においてオブジェクトを割り当てるための第５のルーチンと、前記ガーベッジコレクションプロセスを実施するための第６のルーチンと、を含む前記第２のモジュールと、
を備える、コンピュータで実現されるインタフェース。
【請求項２】
請求項１に記載のコンピュータで実現されるインタフェースであって、
前記第２のモジュールは、さらに、
前記ガーベッジコレクションプロセスのために複数のバリアを提供するための少なくとも１つの第７のルーチンを含む、コンピュータで実現されるインタフェース。
【請求項３】
請求項２に記載のコンピュータで実現されるインタフェースであって、
前記バリアは、読み出しバリアと書き込みバリアとを含む、コンピュータで実現されるインタフェース。
【請求項４】
請求項１に記載のコンピュータで実現されるインタフェースであって、
前記第１のモジュールは、前記仮想マシン環境に関連付けられた特定の複数のオブジェクトを処理するための第７のルーチンを含む、コンピュータで実現されるインタフェース。
【請求項５】
仮想マシンを含むマルチスレッド仮想マシン環境においてメモリを再利用するためにコンピュータで実現される方法であって
前記仮想マシンに関連付けられた第１のモジュールにおいて、
前記仮想マシン環境においてガーベッジコレクションプロセスを開始する工程と、
前記仮想マシン環境に関連付けられた複数のオブジェクトへのルートを走査する工程と、
前記仮想マシン環境に関連付けられた複数のオブジェクトへのルートを追跡する工程と、
前記第１のモジュールから分離され、前記第１のモジュールと調和するように設けられた第２のモジュールにおいて、
前記仮想マシン環境においてヒープを初期化する工程と、
前記仮想マシン環境においてオブジェクトを割り当る工程と、
前記ガーベッジコレクションプロセスを実施する工程と、
を備える、コンピュータで実現される方法。
【請求項６】
請求項５に記載のコンピュータで実現される方法であって、さらに、
前記第２のモジュールにおいて、
前記ガーベッジコレクションプロセスのために複数のバリアを提供する工程を備える、コンピュータで実現される方法。
【請求項７】
請求項６に記載のコンピュータで実現される方法であって、
前記バリアは、読み出しバリアと書き込みバリアとを含む、コンピュータで実現される方法。
【請求項８】
請求項５に記載のコンピュータで実現される方法であって、さらに、
前記第１のモジュールにおいて、
前記仮想マシン環境に関連付けられた特定の複数のオブジェクトを処理する工程を備える、コンピュータで実現される方法。
【請求項９】
仮想マシンを含むマルチスレッド仮想マシン環境においてメモリを再利用するための装置であって
前記仮想マシンに関連付けられた第１のモジュール内に、
前記仮想マシン環境においてガーベッジコレクションプロセスを開始するための手段と、
前記仮想マシン環境に関連付けられた複数のオブジェクトへのルートを走査するための手段と、
前記仮想マシン環境に関連付けられた複数のオブジェクトへのルートを追跡するための手段と、
前記第１のモジュールから分離され、前記第１のモジュールと調和するように設けられた第２のモジュール内に、
前記仮想マシン環境においてヒープを初期化するための手段と、
前記仮想マシン環境においてオブジェクトを割り当てるための手段と、
前記ガーベッジコレクションプロセスを実施するための手段と
を備える装置。
【請求項１０】
請求項９に記載の装置であって、さらに、
前記第２のモジュール内に、
前記ガーベッジコレクションプロセスのために複数のバリアを提供するための手段を備える、装置。
【請求項１１】
請求項１０に記載の装置であって、
前記バリアは、読み出しバリアと書き込みバリアとを含む、装置。
【請求項１２】
請求項９に記載の装置であって、さらに、
前記第１のモジュール内に、
前記仮想マシン環境に関連付けられた特定の複数のオブジェクトを処理するための手段を備える、装置。
【発明の詳細な説明】
【０００１】
【発明の背景】
１．発明の分野：
本発明は、一般に、オブジェクトベースシステムにおけるガーベッジコレクションのパフォーマンスに関する。本発明は、特に、各ガーベッジコレクタをサポートできるように仮想マシンを実質的に変更することによって、仮想マシンにおいて複数の異なるガーベッジコレクタを使用可能とすることに関する。
【０００２】
２．関連技術の説明：
オブジェクトベース環境では、サービスの要求を満たすためにスレッドがよく用いられる。スレッドは、ストレージリソースの「スケッチパッド」であると考えられ、本質的には、コンピュータプログラム内の制御の連続的な１つの流れである。一般に、スレッドすなわち「制御スレッド」は、独立して実行可能な中央演算処理装置（ＣＰＵ）命令またはプログラミング言語ステートメントのシーケンスである。マルチスレッド環境内の各スレッドは、自身の実行スタックを有しており、スタックにはメソッドの活性（アクティベーション）が存在する。当業者には明らかなように、あるスレッドに関してメソッドが活性化される場合には、そのスレッドの実行スタック上には、１つの活性が「プッシュ」される。メソッドが戻ると、すなわち不活性化されると、その活性は、実行スタックから「ポップ」される。１つのメソッドの活性は、別のメソッドを活性化することがあるため、実行スタックは、先入れ後出し法で動作する。
【０００３】
複数のスレッドを維持すると共に、コンピュータシステムは、すべてのスレッドまたは１組のスレッドを定められた時間に同期化または制御することを要求するグローバルオペレーションの実施を必要とする。このようなグローバルオペレーションの一例は、ガーベッジコレクションである。当業者には明らかなように、ガーベッジコレクションは、既に活動状態でない複数のオブジェクトに関連付けられたメモリストレージを自動的に再利用することを可能にするメソッドである。
【０００４】
ガーベッジコレクションは、一般に、２段階で生じる。第１の段階は、通常、既に不要な、すなわち既に使用されていない複数のオブジェクトを識別することを含む。第２の段階は、不要な複数のオブジェクトに関連付けられたストレージを再割り当てできるようにする。定められた時間においてプログラムが将来アクセスする可能性があるオブジェクトは、まだ必要とされている、すなわちアライブ状態にある。将来アクセスされないオブジェクトは、不要であり、デッド状態であると判断される。ガーベッジコレクションアルゴリズムすなわち「ガーベッジコレクタ」は、通常、プログラムがオブジェクトに向かうすべてのポインタを解放し、オブジェクトへの将来のアクセスが不可能にされた場合にのみ、そのオブジェクトがデッド状態にあると判断される。
【０００５】
ガーベッジコレクタを使用したシステム（例えば仮想マシンを含むシステム）において、ガーベッジコレクタを変更したり別のガーベッジコレクタに交換したりしたい場合には、変更後または交換後のガーベッジコレクタをサポートできるように仮想マシン自体を変更しなければならない。ときには、システム内の既存のガーベッジコレクタを別のガーベッジコレクタに交換して、ガーベッジコレクションの効率、ひいてはシステムのパフォーマンスを向上させたい場合もある。ガーベッジコレクタを交換または変更するプロセスは、仮想マシンに相当な変更を加え、交換後または新たなガーベッジコレクタに適合させる必要があるため、通常、多大な時間を必要とする。
【０００６】
したがって、仮想マシンに関連付けられたガーベッジコレクタを変更または交換することを可能にする比較的安価な方法および装置が望まれている。具体的には、仮想マシンシステムにおいてガーベッジコレクタを効率的に交換することを可能にする方法および装置が必要とされている。
【０００７】
【発明の概要】
本発明は、仮想マシンを変更せずに、仮想マシンにおいてモジュール式ガーベッジコレクタを効率的に交換することを可能にする方法および装置に関する。本発明の一態様では、仮想マシンを有するマルチスレッド仮想マシン環境においてメモリを再利用するためのインタフェースは、仮想マシンに関連付けられた第１のモジュールと、第１のモジュールから分離されているが第１のモジュールと調和する第２のモジュールと、を含む。第１のモジュールは、仮想マシン環境においてガーベッジコレクションのプロセスを開始するための第１のルーチンと、仮想マシン環境に関連付けられたルートを走査するための第２のルーチンと、仮想マシン環境に関連付けられたオブジェクトへのルートを追跡するための第３のルーチンと、を含む。第２のモジュールは、仮想マシン環境においてヒープを初期化するための第４のルーチンと、仮想マシン環境においてオブジェクトを割り当てるための第５のルーチンと、ガーベッジコレクションプロセスを実施するための第６のルーチンと、を含む。一実施形態では、第２のモジュールは、ガーベッジコレクションプロセスのために読み出しおよび書き込みのバリアを提供するための第７のルーチンを含む。
【０００８】
以下の詳細な説明および各種の図面から、本発明の様々な利点が明らかになる。
【０００９】
添付の図面に関連した以下の説明を参照にすることによって、本発明が最も良く理解される。
【００１０】
［発明の詳細な説明］
以下の説明では、本発明の完全な理解を促すために、多くの項目が具体的に特定されている。しかしながら、当業者には明らかなように、本発明は、これらの項目の一部または全部を具体的に特定しなくても実施可能である。そのほか、本発明が不必要に不明瞭となるのを避けるため、周知の構造または動作の詳細な説明は省略した。
【００１１】
仮想マシンを変更せずに、複数の異なるガーベッジコレクタを開発可能とし、それらを容易にフレームワークにプラグ接続可能とするガーベッジコレクションフレームワークは、複数のガーベッジコレクタを使用するシステムの柔軟性を向上させる。例えば、システムの動作の効率を高め、この結果、システム全体のパフォーマンスを向上させるために、改良されたガーベッジコレクタが既存のシステムで容易に実行される。
【００１２】
一実施形態では、仮想マシン環境は、仮想マシンとは実質的に分離されたメモリシステムを維持しており、走査ルーチンなどの共通のガーベッジコレクションルーチンを、アルゴリズム固有のルーチンから分離させている。仮想マシンに影響を及ぼさずにガーベッジコレクタを仮想マシン環境にプラグ接続できるようにするために、アルゴリズム固有のガーベッジコレクションルーチンは、共通すなわち共用のガーベッジコレクションルーチンから分離した状態で維持されていてもよい。
【００１３】
図１Ａは、仮想マシンを変更せずにガーベッジコレクタを交換することができる環境を、本発明の一実施形態に従って示す図である。環境１０２は、例えば仮想マシン環境であり、仮想マシン１０４と、仮想マシン１０４とは実質的に分離されたメモリシステム１０６と、を含んでいる。仮想マシンの一例は、図６を参照して後述される。メモリシステム１０６を仮想マシン１０４とは実質的に分離された状態で維持することによって、複数の異なるガーベッジコレクタを環境１０２において交換可能に使用することが容易になる。
【００１４】
メモリシステム１０６は、共用ガーベッジコレクタコード１０８を含む。共用ガーベッジコレクタコード１０８は、ガーベッジコレクタ１１２などの実質的にあらゆるガーベッジコレクタがメモリシステム１０６において実行されることを可能にする。共用ガーベッジコレクタコード１０８を使用すれば、仮想マシン１０４を変更せずに、ガーベッジコレクタ１１２，１１４などの特定のガーベッジコレクタを、仮想マシン１０４において実質的に交換可能に使用することができる。図１Ｂに示すように、特定のガーベッジコレクタ１１４は、特定のガーベッジコレクタ１１２に代わって、メモリシステム１０６上でガーベッジコレクションを実施するために使用可能である。
【００１５】
ガーベッジコレクタ１１２，１１４を実質的にプラグ可能とするために、ガーベッジコレクタ１１２，１１４は、共用ガーベッジコレクタコード１０８と調和するように書き込まれる。したがって、ガーベッジコレクタ１１２，１１４は、共用ガーベッジコレクタコード１０８と整合している限りは、仮想マシン１０４を変更せずに、実行可能である。
【００１６】
共用ガーベッジコレクタコード１０８に加えて、メモリシステム１０６に関連付けられたコードすなわちメモリシステムコードは、仮想マシンが使用可能なコードであり、一般に、ヒープを初期化してオブジェクトを割り当てるコードを含む。共用ガーベッジコレクタコード１０８は、実質的にあらゆる適切なガーベッジコレクションの実行の際に使用されることを目的としている。共用ガーベッジコレクタコード１０８は、ガーベッジコレクションの安全ポイントにおいてスレッドの実行を停止させるコードと、絶対ルート（ｅｘａｃｔ ｒｏｏｔｓ）を識別して走査するコードと、オブジェクトまたは配列の中から参照を検出して走査するコードと、特殊なオブジェクトおよびケースを処理するコードと、を含んでいてもよいが、これらに限定されない。特殊なオブジェクトおよびケースは、弱参照と、最終決定（ｆｉｎａｌｉｚａｔｉｏｎ）と、ストリングの拘束（ｓｔｒｉｎｇ ｉｎｔｅｒｎｉｎｇ）と、クラスのアップロード（ｃｌａｓｓ ｕｐｌｏａｄｉｎｇ）と、を含んでいてもよい。
【００１７】
モジュール式すなわちプラグ可能なガーベッジコレクタが使用される仮想マシン環境は、多岐に渡っていて良いが、以下で説明される実施形態の仮想マシン環境は、カリフォルニア州パロアルトに所在のサン・マイクロシステムズによって開発されたＪａｖａ（商標）仮想マシン環境である。Ｊａｖａ（商標）環境では、モジュール式すなわちプラグ可能なガーベッジコレクションの実現形態すなわち開発者によって書き込まれた実現形態によって使用される共用ガーベッジコレクションインタフェースまたはルーチンは、ガーベッジコレクションを有効に開始させる「ＣＶＭｇｃＳｔｏｐＴｈｅＷｏｒｌｄＡｎｄＧＣ（）」ルーチンと、絶対ガーベッジコレクションルートを走査する「ＣＶＭｇｃＳｃａｎＲｏｏｔｓ（）」ルーチンと、オブジェクトをウォークスルーする「ＣＶＭｏｂｊｅｃｔＷａｌｋＲｅｆｓ（ｏｂｊ， ｃａｌｌｂａｃｋ）」ルーチンと、特殊オブジェクトを処理する「ＣＶＭｇｃＳｃａｎＳｐｅｃｉａｌ（）」ルーチンおよび「ＣＶＭｇｃＰｒｏｃｅｓｓＳｐｅｃｉａｌＷｉｔｈＬｉｖｅｎｅｓｓＩｎｆｏ（）」ルーチンと、を含んでいても良いが、これらに限定されない。ガーベッジコレクションの実行がこのようなルーチンを利用している場合には、特定のガーベッジコレクタなどのガーベッジコレクションの実行は、仮想マシン環境に対して効率的にプラグ接続されてもよい。
【００１８】
プラグ可能な特定のガーベッジコレクションの実行は、一般に、アルゴリズム固有のガーベッジコレクションコードを含む。各ガーベッジコレクションの実行は、独自のヒープレイアウトと、独自のヒープ初期化プロセスと、独自のヒープ取り外しプロセスと、を有していてもよい。また、アルゴリズム固有のコードは、特定のオブジェクト割り当てプロセスと、特定のオブジェクト再利用アルゴリズムと、特定の読み出しおよび書き込みバリアと、を有していてもよい。例えば、世代別ガーベッジコレクタに関連付けられた読み出しおよび書き込みバリアは、アルゴリズム固有のコードによって指定されてもよく、関連の仮想マシン環境による影響を実質的に受けない。一実施形態では、アルゴリズム固有のコードによって読み出しおよび書き込みバリアが提供されない場合は、それらのバリアは空であると判断される。
【００１９】
一般に、アルゴリズム固有のガーベッジコレクションコードが、共用ガーベッジコレクションコードと調和すると直ちに共用ガーベッジコレクションコードによって認識されるようにするためには、アルゴリズム固有のコードに関連付けられたルーチンは、共用ガーベッジコレクションコードによって指定された名前を有する。例えば、Ｊａｖａ（商標）環境では、アルゴリズム固有のヒープ初期化ルーチンは、「ＣＶＭｇｃｃｉｍｐＩｎｉｔＨｅａｐ（）」プロセスとして実現される。換言すれば、共用ガーベッジコレクションコードは、ヒープを初期化するために、「ＣＶＭｇｃｃｉｍｐＩｎｉｔＨｅａｐ（）」メソッドを呼び出すように構成可能である。同様に、アルゴリズム固有のオブジェクト割り当てルーチンは、「ＣＶＭｇｃｉｍｐｌＡｌｌｏｃＯｂｊｅｃｔ（ｓｉｚｅ）」メソッドとして実現される。スレッドが停止すると実施されるアルゴリズム固有のガーベッジコレクションは、「ＣＶＭｃｉｍｐｌＧＣ（）」メソッドとして実現される。また、アルゴリズム固有の読み出しバリアは、「ＣＶＭｇｃｉｍｐｌＲｅａｄＢａｒｒｉｅｒＲｅｆ（）」メソッドまたは「ＣＶＭｇｃｉｍｐｌＲｅａｄＢａｒｒｉｅｒ＜Ｔ＞」メソッドのいずれかとして実現される。アルゴリズム固有の書き込みバリアは、「ＣＶＭｇｃｉｍｐＷｒｉｔｅＢａｒｒｉｅｒＲｅｆ（）」メソッドまたは「ＣＶＭｇｃｉｍｐｌＷｒｉｔｅＢａｒｒｉｅｒ＜Ｔ＞」メソッドのいずれかとして実現される。
【００２０】
図２は、仮想マシン全体の動作に関連する工程を、本発明の一実施形態に従って示すフローチャートである。仮想マシンは、ステップ２０４において、メモリの割り当てを行う。仮想マシンは、通常、メモリアロケータを使用して、必要に応じてオブジェクトにメモリを割り当てることができる。オブジェクトに割り当てる十分なメモリがない場合には、メモリアロケータは、通常、ステップ２０８において、メモリスペースを再利用するためにガーベッジコレクションを実施することを決断する。当業者には明らかなように、ガーベッジコレクションを使用したメモリスペースの再利用は、一般に、もうアクセスされないオブジェクトに割り当てられたメモリスペースの再利用を含む。当業者には明らかなように、メモリアロケータがガーベッジコレクションの実施を決断する場合には、ガーベッジコレクションなどの同期化を必要とするグローバルオペレーションの実施に先行して、環境全体において安全ポイントが到達されていなければならない。
【００２１】
ステップ２１２では、ガーベッジコレクションが実施される。本実施形態では、ガーベッジコレクションの実施は、共用ガーベッジコレクションコード（例えば複数の異なるガーベッジコレクタによって共用されるコード）が、特定のガーベッジコレクションコード（例えば特定のガーベッジコレクタに関連付けられたガーベッジコレクションコード）に、相互に作用するのを許容することを含む。ガーベッジコレクションを実施する方法の１つは、図３を参照にしながら後述される。ガーベッジコレクションが実施された後、プロセスは、仮想マシンによるメモリの割り当てを引き続き可能にするステップ２０４に戻る。
【００２２】
次に、仮想マシンに関連付けられたコードやガーベッジコレクタ固有のコードなどの共用コードを含むプラグ可能なすなわちモジュール式のガーベッジコレクタを使用してガーベッジコレクションを実施する方法の１つを、図３を参照にしながら本発明の一実施形態に従って説明する。つまり、図２のステップ２１２が説明される。ガーベッジコレクションは、ステップ３０４からスタートする。ステップ３０４では、ガーベッジコレクタ固有のコードが、スレッドのためのガーベッジコレクションポイント（例えばスレッドに固有な安全ポイント）において、全てのスレッドを停止させるために、共用コードを呼び出す。
【００２３】
ステップ３０８では、全てのスレッドが、適切なガーベッジコレクションポイントにおいて、共用コードによって停止される。ガーベッジコレクションポイントにおいて、システムの各スレッドは、例えば共用コードの中のメソッド呼び出しポイントおよび逆方向ブランチを使用して、ガーベッジコレクションのポーリングを行う。一実施形態では、ガーベッジコレクションポイントにおけるスレッドは、そのガーベッジコレクタの走査可能状態を保存してサスペンド可能である。
【００２４】
全てのスレッドが停止した後、共用コードは、ステップ３１２において、所定数のバイトを解放するために特定のコードを呼び出す。ステップ３２０では、特定のコードは、共用コードに含まれるメソッドを呼び出すことによって、ルートを走査する。ルートの走査は、特殊ルートの処理を目的としており、ガーベッジコレクションが実施されているメモリをウォークスルーすることによって行うことができる。ルートが走査された後、特定のコードは、ステップ３２４において、共用コードを呼び出すことによってメモリ内をスイープする。スイープは、所定数のバイトを解放し、ガーベッジコレクションは完了する。
【００２５】
当業者には明らかなように、図３で説明されたガーベッジコレクションを実施するために使用されるガーベッジコレクタは、マーク＆スイープガーベッジコレクタである。本発明によるプラグ可能なガーベッジコレクタは、実質的に任意の適切なガーベッジコレクタであればよく、マーク＆スイープガーベッジコレクタに限定されない。
【００２６】
一実施形態では、世代別ガーベッジコレクタは、システムにおける交換に適したガーベッジコレクタである。世代別ガーベッジコレクタは、「若い」スペースと「古い」スペースとに区分されるメモリスペースに対して使用される。図４は、本発明の一実施形態に従ってメモリスペースを示す図である。メモリスペース４０２すなわちヒープ内では、「若い」スペース４０６と「古い」スペース４１０とにメモリスペースが区分されている。ルートセット４１８は、メモリスペース４０２内でオブジェクト４１４を参照するルート４２２（例えば絶対ルート）を含む。
【００２７】
メモリスペース４０２において、若いスペース４０６は、新しいオブジェクトの割り当てに使用され、古いスペース４１０は、オブジェクト４１４ｅ〜４０４ｇなどの長期利用（ｔｅｎｕｒｅｄ， ｏｒ ｌｏｎｇ−ｓｔａｎｄｉｎｇ）のオブジェクト４１４に使用される。すなわち、若いスペース４０６は、オブジェクト４１４の比較的若い世代に関連付けられており、古いスペース４１０は、オブジェクト４１４の比較的古い世代に関連付けられている。メモリスペース４０２においてガーベッジコレクションを実施する世代別ガーベッジコレクタは、通常、比較的古いオブジェクト４１４を若いスペース４０６から古いスペース４１０にコピーし、コピーされたオブジェクト４１４を若いスペース４０６から削除する、すなわち、コピーされたオブジェクト４１４に関連付けられていた若いスペース４０６からメモリを再利用する。また、世代別ガーベッジコレクタは、適切な場合には、デッドオブジェクト４１４（例えばオブジェクト４１４ｆ，４１４ｇ）を、若いスペース４０６および古いスペース４１０の両方から削除する。
【００２８】
一実施形態では、若いスペース４０６および古いスペース４１０でガーベッジコレクションを実施するために、複数の異なるガーベッジコレクタを使用可能である。具体的には、仮想マシンコードを変更せずに、システムにおける複数の異なる世代別ガーベッジコレクタの交換が可能であることに加えて、若いスペース４０６および古いスペース４１０のそれぞれは、異なるプラグ可能なガーベッジコレクタを有していてもよい。ガーベッジコレクションフレームワークは、世代ガーベッジコレクションコードを、若いスペース４０６および古いスペース４１０のための個々のガーベッジコレクタによって共用可能にする。共用ガーベッジコレクションコードは、個々のガーベッジコレクタ間のタイミングを、または、独立したガーベッジコレクタのそれぞれに関連付けられ互いに独立に維持される特殊コードを、調整するように構成されてもよい。例えば、共用コードは、個々のすなわち独立のガーベッジコレクタの少なくとも１つが特定のアクションを実施すべき時間を決定する。
【００２９】
実質的にプラグ可能な世代別ガーベッジコレクタのための共用インタフェースは、各スペースすなわち若い世代または古い世代などの各世代のために、必要に応じて有効にガーベッジコレクタを呼び出すことができる。例えば、若いスペースすなわち若い世代が満杯である場合には、共用インタフェースは、若いスペースにおいてガーベッジコレクションを呼び出してもよい。当業者には明らかなように、ほとんどのオブジェクトは短命である。このため、図４の若いスペース４０６は、通常、古いスペース４１０よりも小さい。そして、ガーベッジコレクションは、古いスペース４１０よりも若いスペース４０６において、頻繁に実施される。したがって、ガーベッジコレクションに費やされる時間の長さは、必要に応じて、若いスペース４０６および古いスペース４１０のそれぞれにおいて別々にガーベッジコレクションを実施することによって、短縮可能である。
【００３０】
図５は、本発明の実施に適した代表的な汎用コンピュータシステムを示した図である。コンピュータシステム１０３０は、少なくとも１つのプロセッサ１０３２（中央処理装置すなわちＣＰＵとも呼ばれる）を含む。プロセッサ１０３２は、メモリデバイスに接続されており、メモリデバイスは、複数の一次記憶デバイス１０３６（通例、読み出し専用メモリすなわちＲＯＭ）と、複数の一次記憶デバイス１０３４（通例、ランダムアクセスメモリすなわちＲＡＭ）と、を含む。
【００３１】
コンピュータシステム１０３０、より具体的には、ＣＰＵ１０３２は、当業者には明らかなように、仮想マシンをサポートするように設けられる。以下では、コンピュータシステム１０３０にサポートされる仮想マシンの一例が、図６を参照にしながら説明される。当該分野においては周知のように、ＲＯＭは、ＣＰＵ１０３２にデータおよび命令を単方向で伝送し、ＲＡＭは、通常、データおよび命令を双方向で伝送する。ＣＰＵ１０３２は、一般に、任意の数のプロセッサを含む。一次記憶デバイス１０３４，１０３６は、共に、任意の適切なコンピュータ読み取り可能媒体を含んでいる。二次記憶媒体１０３８は、通常、大容量メモリデバイスであり、ＣＰＵ１０３２に双方向に接続されて、データ記憶容量を補う。大容量メモリデバイス１０３８は、コンピュータ読み取り可能媒体であり、コンピュータコードおよびデータなどを含むプログラムを格納するために使用される。大容量メモリデバイス１０３８は、通常、一次記憶デバイス１０３４，１０３６よりも低速であるハードディスクまたはテープなどの記憶媒体である。大容量メモリストレージデバイス１０３８は、磁気または紙テープ読取装置またはその他の周知のデバイスであってもよい。大容量メモリデバイス１０３８に保持された情報は、適切な場合には、仮想メモリとしてのＲＡＭ１０３６の一部として標準的な方法で組み込まれていてもよい。ＣＤ−ＲＯＭのような特定の一次記憶デバイス１０３４も、データをＣＰＵ１０３２に単方向に伝送することができる。
【００３２】
また、ＣＰＵ１０３２は、１以上の入出力デバイス１０４０に接続されている。入出力デバイス１０４０は、ビデオモニタや、トラックボール、マウス、キーボード、マイクロフォン、タッチセンシティブディスプレイ、トランスデューサカードリーダ、磁気または紙テープリーダ、タブレット、スタイラス、音声または手書き文字認識装置、他のコンピュータなどの周知の入力デバイスを含むが、これらに限定されない。ＣＰＵ１０３２は、１０１２に示すネットワーク接続を用いて、コンピュータまたは通信ネットワーク（例えばインターネットネットワークやイントラネットネットワーク）に、随意的に接続されていてもよい。ネットワーク接続によって、ＣＰＵ１０３２は、上述した方法のステップを実行している間に、ネットワークから情報を受信したりネットワークに情報を送信したりすることができる。このような情報は、ＣＰＵ１０３２を用いて実行される命令のシーケンスであることが多く、例えば搬送波で運ばれるコンピュータデータ信号の形式で、ネットワークから受信したりネットワークに送信したりされる。上述したデバイスおよび構成要素は、コンピュータハードウェアおよびソフトウェアの当業者には周知である。
【００３３】
前述したように、仮想マシンは、コンピュータシステム１０３０上で動作可能である。図６は、図５のコンピュータシステム１０３０によってサポートされ、かつ、本発明の実施に適した仮想マシンを示す図である。Ｊａｖａ（商標）プログラミング言語などで記述されたコンピュータプログラムが実行されると、コンパイル時間環境１１０５において、ソースコード１１１０がコンパイラ１１２０に提供される。コンパイラ１１２０は、ソースコード１１１０をバイトコード１１３０に変換する。一般に、ソースコード１１１０は、ソフトディベロッパによって作成された時点で、バイトコード１１３０に変換される。
【００３４】
バイトコード１１３０は、一般に、複製されたり、ダウンロードされたり、ネットワーク（例えば図５のネットワーク１０１２）を介して分散されたり、記憶デバイス（例えば図５の一次記憶デバイス１０３４）に格納されたりしてもよい。本実施形態では、バイトコード１１３０は、プラットフォームに依存しない。すなわち、バイトコード１１３０は、適切な仮想マシン１１４０で動作する実質的にあらゆるコンピュータシステムで実行可能である。
【００３５】
バイトコード１１３０は、仮想マシン１１４０を含むランタイム環境１１３５に供給される。ランタイム環境１１３５は、一般に、図５のＣＰＵ１０３２などの１つまたは複数のプロセッサを使用して実行される。仮想マシン１１４０は、コンパイラ１１４２と、インタープリタ１１４４と、ランタイムシステム１１４６と、を含む。バイトコード１１３０は、通常、コンパイラ１１４２またはインタープリタ１１４４に提供される。
【００３６】
コンパイラ１１４２にバイトコード１１３０が提供される場合には、バイトコード１１３０に含まれるメソッドは、機械語命令にコンパイルされる。一実施形態では、コンパイラ１１４２は、バイトコード１１３０に含まれるメソッドのコンパイルをそのメソッドが実行される寸前まで遅らせるＪＩＴ（ｊｕｓｔ−ｉｎ−ｔｉｍｅ）コンパイラである。インタープリタ１１４４にバイトコード１１３０が提供される場合には、バイトコード１１３０は、一度に１バイトコードずつインタープリタ１１４４に読み込まれる。そして、インタープリタ１１４４は、各バイトコードが読み込まれる毎に、各バイトコードによって規定された動作を実施する。つまり、当業者には明らかなように、インタープリタ１１４４は、バイトコード１１３０を「解釈」する。一般に、インタープリタ１１４４は、バイトコード１１３０の処理と、バイトコード１１３０に関連付けられた動作の実施と、を実質的に連続して行う。
【００３７】
１つのメソッドが別のメソッドによって呼び出される場合、または、１つのメソッドがランタイム環境１１３５から呼び出される場合には、そのメソッドがインタープリット済みであれば、ランタイムシステム１１４６は、そのメソッドをバイトコード１１３０のシーケンスの形でランタイム環境１１３５から取得でき、そのメソッドは、インタープリタ１１４４によって直接実行されてもよい。逆に、呼び出されたメソッドが、コンパイルされていなかったコンパイル済みメソッドである場合は、ランタイムシステム１１４６は、そのメソッドを、バイトコード１１３０のシーケンスの形でランタイム環境１１３５から取得し、次いで、コンパイラ１１４２を作動させることができる。そして、コンパイラ１１４２は、バイトコード１１３０から機械語命令を生成し、ＣＰＵ１０３２は、生成された機械語命令を直接実行することができる。機械語命令は、一般に、仮想マシン１１４０が終了した時点で廃棄される。Ｊａｖａ（商標）仮想マシンに代表される仮想マシンの動作に関しては、引用によって本明細書に組み込まれるＴｉｍ ＬｉｎｄｈｏｌｍおよびＦｒａｎｋ Ｙｅｌｌｉｎによる「Ｔｈｅ ＪａｖａＴＭ Ｖｉｒｔｕａｌ Ｍａｃｈｉｎｅ Ｓｐｅｃｉｆｉｃａｔｉｏｎ（Ｊａｖａ［商標］仮想マシン仕様）」（ＩＳＢＮ ０−２０１−６３４５２−Ｘ）に詳述されている。
【００３８】
以上では、本発明のいくつかの実施形態のみが取り上げられているが、本発明は、発明の趣旨もしくは範囲から逸脱することなしに、多くの他の具体的な形で実施されて良い。例えば、Ｊａｖａ（商標）環境での使用に適したものとして、プラグ可能なガーベッジコレクタの使用が取り上げられているが、このプラグ可能なガーベッジコレクタは、実質的にあらゆる適切な環境で使用可能である。適切な環境としては、Ｓｍａｌｌｔａｌｋ仮想マシンをサポートする環境が挙げられるが、これに限定されない。
【００３９】
共用ガーベッジコレクションコードとアルゴリズム固有のガーベッジコレクションコードとの間のインタフェースは、多数のルーチンまたはメソッドを含むものとして規定され、なかには、共用ガーベッジコレクションコードの一部であるものと、アルゴリズム固有のガーベッジコレクションコードの一部であるものと、が含まれる。インタフェースに関連付けられたルーチンの名前および数は、通常、種々の変更が可能である。例えば、メモリの複数の異なる世代のための複数の異なるガーベッジコレクタをサポートするための特別のルーチンなどを、追加のルーチンとしてインタフェースに追加しても良い。
【００４０】
本発明による各種のプロセスおよび方法に関連する工程は、通常、種々の変更が可能である。例えば、本発明による方法に関連する工程は、変更を加えたり順序を変えたりしてもよい。また、これらの工程は、本発明の趣旨もしくは範囲を逸脱することなく、入れ換えたり、削除したり、追加したりしてもよい。したがって、上述した実施例は、例示的なものであって限定的なものではないと考えられ、本発明は、ここで挙げた詳細に限定されず、添付した特許請求の範囲内で変更されて良い。
【図面の簡単な説明】
【図１Ａ】
プラグ可能なガーベッジコレクタをサポートする環境を、本発明の一実施形態に従って示す図である。
【図１Ｂ】
プラグ可能なガーベッジコレクタをサポートする環境を、本発明の一実施形態に従って示す図である。
【図２】
仮想マシン全体の動作に関連する工程を、本発明の一実施形態に従って示すフローチャートである。
【図３】
例えば図２のステップ２１２などのガーベッジコレクションの実施に関連する工程を、本発明の一実施形態に従って示すフローチャートである。
【図４】
本発明の一実施形態に従ってメモリスペースを示す図である。
【図５】
本発明を実施するのに適した汎用コンピュータシステムを示す図である。
【図６】
本発明を実施するのに適した仮想マシンを示す図である。
【符号の説明】
１０２…仮想マシン環境
１０４…仮想マシン
１０６…メモリシステム
１０８…共用ガーベッジコレクタコード
１１２…ガーベッジコレクタ
１１４…ガーベッジコレクタ
４０２…メモしスペース
４０６…若いスペース
４１０…古いスペース
４１４…オブジェクト
４１８…ルートセット
４２２…ルート
１０１２…ネットワーク接続
１０３０…コンピュータシステム
１０３２…プロセッサ
１０３４，１０３６…一次記憶デバイス
１０３８…二次記憶媒体
１０４０…入出力デバイス
１１０５…コンパイル時間環境
１１１０…ソースコード
１１２０…コンパイラ
１１３０…バイトコード
１１３５…ランタイム環境
１１４０…仮想マシン
１１４２…コンパイラ
１１４４…インタープリタ
１１４６…ランタイムシステム
【図１Ａ】
2004503869.tif 000003
【図１Ｂ】
2004503869.tif 000004
【図２】
2004503869.tif 000005
【図３】
2004503869.tif 000006
【図４】
2004503869.tif 000007
【図５】
2004503869.tif 000008
【図６】
2004503869.tif 000009
【国際公開パンフレット】
2004503869.tif 000010
2004503869.tif 000011
2004503869.tif 000012
2004503869.tif 000013
2004503869.tif 000014
2004503869.tif 000015
2004503869.tif 000016
2004503869.tif 000017
2004503869.tif 000018
2004503869.tif 000019
2004503869.tif 000020
2004503869.tif 000021
2004503869.tif 000022
2004503869.tif 000023
2004503869.tif 000024
2004503869.tif 000025
2004503869.tif 000026
2004503869.tif 000027
2004503869.tif 000028
2004503869.tif 000029
2004503869.tif 000030
2004503869.tif 000031
2004503869.tif 000032
2004503869.tif 000033
2004503869.tif 000034
2004503869.tif 000035
【国際公開パンフレット（コレクトバージョン）】
2004503869.tif 000036
2004503869.tif 000037
【国際調査報告】
2004503869.tif 000038
2004503869.tif 000039
2004503869.tif 000040