(57)【特許請求の範囲】
【請求項１】
最新に割り当てられたオブジェクトを格納するように構成された第１の領域と、それよりも旧いオブジェクトを格納するように構成された第２の領域と、を含んだ管理メモリ領域において、メモリスペースを再利用するためのコンピュータにより実行される方法であって、
前記第１の領域のうち新しいオブジェクトの割り当てをサポートするように構成された第１の区域が実質的に満杯になったか否かを決定する工程と、
前記第１の区域が実質的に満杯になったと決定された場合に、前記第１の領域の第２の区域でガーベッジコレクションを実施する工程と、
新しいオブジェクトの割り当てをサポートする構成を有するように前記第２の区域を設定する工程と、
新しいオブジェクトの割り当てをサポートする構成をもはや有しないように前記第１の区域を設定する工程と
を備える方法。
【請求項２】
請求項１に記載のコンピュータにより実行される方法であって、
前記第１の領域の前記第２の区域で前記ガーベッジコレクションを実施する工程は、前記第１の領域の前記第２の区域から前記第２の領域へとライブオブジェクトをコピーする工程を含む、方法。
【請求項３】
請求項１または２に記載のコンピュータにより実行される方法であって、
前記第１の区域および前記第２の区域は境界によって区分されており、
前記コンピュータにより実行される方法は、さらに、前記境界を調整して前記第１の区域および前記第２の区域の相対的なサイズを変更する工程を含む、方法。
【請求項４】
請求項１ないし３のいずれかに記載のコンピュータにより実行される方法であって、さらに、
新しいオブジェクトの割り当てをサポートするように前記第２の区域を設定した後に、前記第２の区域に新しいオブジェクトを割り当てようと試みる工程と、
前記第２の区域が実質的に満杯になったか否かを決定する工程と、
前記第２の区域が実質的に満杯になっていないと決定された場合に、前記新しいオブジェクトを前記第２の区域に割り当てる工程と、
前記第２の区域が実質的に満杯になったと決定された場合に、前記第１の区域でガーベッジコレクションを実施する工程と
を備える方法。
【請求項５】
請求項４に記載のコンピュータにより実行される方法であって、前記第２の区域が実質的に満杯になったと決定された場合に、前記コンピュータにより実行される方法は、さらに、
新しいオブジェクトの割り当てをサポートする構成を有しないように前記第２の区域を設定する工程と、
新しいオブジェクトの割り当てをサポートする構成を有するように前記第１の区域を設定する工程と、
前記新しいオブジェクトを前記第１の区域に割り当てる工程と
を備える方法。
【請求項６】
請求項１ないし５のいずれかに記載のコンピュータにより実行される方法であって、
前記第１の区域が実質的に満杯になったか否かを決定する工程は、前記第１の区域が新しいオブジェクトの割り当てに十分なメモリスペースを有するか否かを決定する工程を含む、方法。
【請求項７】
第１の領域と第２の領域とを含んだコンピュータシステムの管理メモリ領域において、メモリスペースを再利用するためのコンピュータプログラムを記録するコンピュータ読み取り可能媒体であって、
請求項１ないし６のいずれかに記載の動作のそれぞれを実行するためのコンピュータコードを備えるコンピュータプログラムを記録するコンピュータ読み取り可能媒体。
【請求項８】
請求項７に記載のコンピュータ読み取り可能媒体であって、
前記コンピュータ読み取り可能媒体は、ＣＤ−ＲＯＭ、フロッピィディスク、光ディスク、テープ、及び、ハードドライブよりなる群から選択される、コンピュータ読み取り可能媒体。
【請求項９】
最新に割り当てられたオブジェクトを格納するように構成された第１の領域と、それよりも旧いオブジェクトを格納するように構成された第２の領域と、を含んだ管理メモリ領域において、メモリスペースを再利用するためのコンピュータシステムであって、
プロセッサと、
前記第１の領域のうち新しいオブジェクトの割り当てをサポートするように構成された第１の区域が実質的に満杯になった時点を決定するための決定部と、
前記第１の区域が実質的に満杯になったと決定された場合に、前記第１の領域の第２の区域を掃除するように構成されたガーベッジコレクタと、
新しいオブジェクトの割り当てをサポートする構成を有するように前記第２の区域を設定し、さらに、新しいオブジェクトの割り当てをサポートする構成を有しないように前記第１の区域を設定するように構成されたトラッキングメカニズムと、
を備えるコンピュータシステム。
【請求項１０】
請求項９に記載のコンピュータシステムであって、
前記ガーベッジコレクタは、さらに、前記第２の区域から前記第２の領域へとライブオブジェクトをコピーするように構成されている、コンピュータシステム。
【請求項１１】
請求項１０に記載のコンピュータシステムであって、
前記第１の区域および前記第２の区域は境界によって分離されており、
前記コンピュータシステムは、さらに、
前記境界を移動させて、前記第１の区域および前記第２の区域の相対的なサイズを変更させるための調整部を備える、コンピュータシステム。
【請求項１２】
請求項１０または１１に記載のコンピュータシステムであって、さらに、
新しいオブジェクトの割り当てをサポートするように前記第２の区域を設定した後に、前記第２の区域に新しいオブジェクトを割り当てようと試みるためのオブジェクト割り当て部と、
前記第２の区域が実質的に満杯になったか否かを決定するための決定部と
を備え、
前記オブジェクト割り当て部は、前記第２の区域が実質的に満杯でないと決定された場合に前記第２の区域に前記新しいオブジェクトを割り当て、
前記ガーベッジコレクタは、前記第２の区域が実質的に満杯になったと決定された場合に前記第１の区域を掃除する、コンピュータシステム。
【請求項１３】
請求項１２に記載のコンピュータシステムであって、
前記トラッキングメカニズムは、さらに、新しいオブジェクトの割り当てをサポートする構成を有しないように前記第２の区域を設定し、新しいオブジェクトの割り当てをサポートする構成を有するように前記第１の区域を設定するように構成され、前記オブジェクト割り当て部は、前記新しいオブジェクトを前記第１の区域に割り当てる、コンピュータシステム。
【請求項１４】
オブジェクトを格納するように構成されたコンピュータシステムのメモリであって、
第１の領域と第２の領域とを備え、
前記第１の領域は、第１の区域と第２の区域とに区分されており、前記第１の区域は最新に割り当てられたオブジェクトを格納するように構成され、前記第２の区域は前記最新に割り当てられたオブジェクトよりも前に割り当てられた第１のオブジェクトを格納するとともに、前記第１の区域が実質的に満杯になった場合にガーベッジコレクションを受けるように構成されており、
前記第２の領域は、前記第１のオブジェクトより前に割り当てられた第２のオブジェクトを格納するように構成されており、
前記第２の区域は、ガーベッジコレクションを受ける際に、前記最新に割り当てられたオブジェクトよりもさらに最新に割り当てられる第３のオブジェクトを格納するように設定される、メモリ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般に、ソフトウェアアプリケーションのパフォーマンスを向上させるための方法および装置に関する。本発明は、特に、メモリの割り当てに関連して生じるオーバーヘッドを減少させるための方法および装置に関する。
【０００２】
【従来の技術】
オブジェクトをベースとしたようなコンピュータシステムでは、一般に、使用可能なメモリの量に限りがある。このため、通例として、メモリを保存して再利用しなければならない。ソフトウェアディベロッパは、多くのコンピュータプログラミング言語によって、コンピュータシステムにおいて動的にメモリを割り当てることができる。プログラミング言語の種類によっては、事前に割り当てられたメモリを手動で明示的に再割り当てする必要があるが、これは複雑であり、ミスを生じやすい。手動による系統的なメモリ管理を必要とするプログラミング言語として、ＣおよびＣ＋＋が挙げられる。他のプログラミング言語の場合は、不要になったメモリを自動ストレージレクラメーションを使用して再利用することによって、レクラメーションシステムで再利用されたメモリの割り当てを行うコンピュータプログラムを正常に動作させる。このような自動ストレージレクラメーションシステムは、メモリを再利用する際に、そのメモリを事前に利用していたコンピュータプログラムからの明示的な命令または呼び出しを使用しない。
【０００３】
当業者ならば理解できるように、オブジェクト指向すなわちオブジェクトベースのシステムにおいては、一般に、メモリ割り当ての通常の単位をオブジェクトまたはメモリオブジェクトと呼ぶ。使用されるオブジェクトは、一般に「ライブ」オブジェクトと呼ばれており、コンピュータプログラムを正しく実行させるのに不要になったオブジェクトは、通常は「ガーベッジ」オブジェクトまたは「デッド」オブジェクトと呼ばれる。ガーベッジオブジェクトを再利用する動作は、一般にガーベッジコレクションと呼ばれており、自動のストレージ再利用システムは、多くの場合にガーベッジコレクタと呼ばれる。自動のストレージ再利用システムを使用したコンピュータプログラムは、実行中にライブメモリオブジェクトを変更することができるという事実から、ミューテータとして知られている。Ｊａｖａ（登録商標）プログラミング言語（カリフォルニア州パロアルト所在のサンマイクロシステムズによって開発された言語）やスモールトークプログラミング言語などの言語で記述されたコンピュータプログラムは、ガーベッジコレクションを使用して自動的にメモリを管理する。
【０００４】
一般に、ガーベッジコレクションに関連した計算上の負担を軽減するために、管理メモリ領域を小区域に分割し、一度に１領域ずつ局所的にガーベッジコレクションを実施できるようにする。メモリ区分化スキームの１つとして、世代ガーベッジコレクションが挙げられる。世代ガーベッジコレクションでは、作成された時点から測定したライフタイムに基づいてオブジェクトを区分する。世代ガーベッジコレクションに関しては、Richard JonesおよびRafael Linsによる「Garbage Collection: Algorithms for Automatic Dynamic Memory Management（ガーベッジコレクション：動的な自動メモリ管理）」（John Wiley & Sons Ltd., 1996）に記載されており、本書全体を引用して本明細書に組み込むものとする。「若い」オブジェクトは、「旧い」オブジェクトよりも、ガーベッジになりやすい傾向があることが知られている。したがって、メモリ再利用の効率を全体的に高める目的で、世代ガーベッジコレクションが使用される。
【０００５】
図１は、オブジェクトを含み且つ世代ガーベッジコレクションに適したコンピュータメモリの１領域を示した概略図である。メモリ１０２の管理領域は、通例はコンピュータシステムに関連付けられたヒープ（動的データ域）であって、新世代１０４と旧世代１０６とに分割される。新世代１０４は、例えばオブジェクト１１０ａ〜１１０ｅのような最新に作成されたオブジェクト１１０を含み、旧世代１０６は、例えばオブジェクト１１０ｆおよび１１０ｇのようなそれほど最新に作成されたのではないオブジェクト１１０を含む。メモリ１０２の中で新しく作成されるオブジェクト１１０は、新世代１０４の中に作成される。新世代１０４が満杯になり、新しいオブジェクト１１０をこれ以上割り当てられない場合は、新世代１０４を掃除するガーベッジコレクションを実施して、メモリスペースを解放する。
【０００６】
オブジェクト１１０は、一般に、他のオブジェクト１１０によって参照することが可能である。例えば、オブジェクト１１０ｂは、オブジェクト１１０ａに向かうポインタ１１４ａを有する。当業者ならば理解できるように、オブジェクト１１０ｂは、ルートがオブジェクト１１０ｂへの移行を示している場合にライブであると考えられる。すなわち、オブジェクト１１０ｂは、ポインタリストによって指し示されており、これによってルートにより識別される場合にライブであるとみなされる。
【０００７】
新世代のオブジェクト１１０ｄがライブであり、旧世代のオブジェクト１１０ｆを指している場合は、オブジェクト１１０ｆがライブオブジェクトによって参照されているので、オブジェクト１１０ｆは、旧世代１０６で実施されるガーベッジコレクションによって「回収」されない。しかしながら、新世代のオブジェクト１１０ｄがデッド状態にあり、旧世代のオブジェクト１１０ｆが他のオブジェクトによって指されていない場合は、新世代１０４で実施されるガーベッジコレクションが旧世代のオブジェクト１１０ｆに到達することはできない。このように、旧世代のオブジェクト１１０ｆが到達不能である場合は、旧世代のオブジェクト１１０ｆは、旧世代１０６で実施されるガーベッジコレクションによって回収される。ポインタ１１４ｂが、新世代のオブジェクト１１０ｄから旧世代のオブジェクト１１０ｆを指している場合は、新世代のガーベッジコレクションすなわち新世代１０４で実施されるガーベッジコレクションによって旧世代のオブジェクト１１０ｆを収集することができないので、この旧世代のオブジェクト１１０ｆは、終身的ガーベッジだとみなされる。
【０００８】
図２を参照にして以下で述べるように、満杯になった新世代１０４で掃除用のガーベッジコレクションを実施する際には、新世代１０４の中のライブオブジェクト１１０が新世代１０４から旧世代１０６へとコピーされる。新世代１０４に新しく割り当てられたオブジェクト１１０はライブである場合が多いので、これらは、掃除用のガーベッジコレクションの最中に新世代１０４から旧世代１０６へとコピーしなければならない。コピーの動作は、一般に低速で且つ高価である。このため、ガーベッジコレクションはその工程全体が高価である。
【０００９】
世代ガーベッジコレクタの種類によっては、新世代からのライブオブジェクトを、終身的に旧世代にする前に中間領域にコピーする場合がある。図１ｂは、新世代と、中間領域と、旧世代とに分割されたメモリスペースを示した概略図である。メモリスペース２０２は、新世代２０４と、「ｆｒｏｍスペース」および「ｔｏスペース」２０５と、旧世代２０６とを含む。新しく割り当てられるオブジェクト２１０は、新世代２０４に割り当てられる。新世代２０４が満杯になると、ライブオブジェクト２１０は、新世代２０４からｆｒｏｍスペースおよびｔｏスペース２０５へとコピーされる。オブジェクト２１０は、例えば所定の期間、あるいは、ｆｒｏｍスペースおよびｔｏスペース２０５が満杯になるまでなど、いくらかの期間だけｆｒｏｍスペースおよびｔｏスペース２０５の中に留まることにより、ｆｒｏｍスペースおよびｔｏスペースの中でデッド状態になるまで待機することが可能になる。ｆｒｏｍスペースおよびｔｏスペース２０５が満杯になったら、ｆｒｏｍスペースおよびｔｏスペース２０５で、例えば定期的にガーベッジコレクションが実施される。ｆｒｏｍスペースおよびｔｏスペース２０５でガーベッジコレクションを実施する際には、ｆｒｏｍスペースおよびｔｏスペース２０５の中のライブオブジェクトが、旧世代２０６へとコピーされる、すなわち、終身的に旧世代２０６になる。
【００１０】
例えば図１の管理領域１０２のように、新世代と旧世代とに分割されたメモリの管理領域において、掃除用のガーベッジコレクションを実施する従来の方法の１つを、図２を参照にしながら説明する。具体的には、新世代で掃除用のガーベッジコレクションを実施するプロセスを説明する。ガーベッジコレクションを実施するプロセス２５２は、新世代の中のライブオブジェクトのリストを取得するステップ２５６から開始する。ライブオブジェクトのリストは、様々な方法を使用して取得して良い。ライブオブジェクトのリストの取得に使用して良い方法の１つとしては、例えば、新世代および旧世代のいずれか若しくは両方の中のオブジェクトを参照するグローバルオブジェクトすなわちルートを調査し、現行で使用されているオブジェクトを識別することを含む。
【００１１】
ライブオブジェクトのリストが取得されたら、リストの中から識別されたライブオブジェクトを、ステップ２５８において新世代から取得する。一般に、掃除用のガーベッジコレクションの際には、新世代のメモリスペースを解放する目的で、新世代の中のライブオブジェクトが旧世代へとコピーされる。このため、ステップ２６０では、ライブオブジェクトが旧世代へとコピーされる。当業者ならば理解できるように、ライブオブジェクトを旧世代にコピーするステップは、ライブオブジェクトを識別するあらゆるポインタを変更してそのオブジェクトのコピーを代わりに識別させることに加えて、ライブオブジェクトによって参照されるオブジェクトをコピーすることを含む。さらに、ライブオブジェクトを新世代から旧世代へとコピーするステップは、新世代のメモリスペースのうちライブオブジェクトに関連付けられたスペースを有効に解放し、他の用途に使用できるようにする。
【００１２】
ステップ２６０で、ライブオブジェクトが旧世代へとコピーされると、ステップ２６２で、新世代の中にまだライブオブジェクトが残っているか否かの決定がなされる。つまり、ライブオブジェクトのリストの中からまだ他のライブオブジェクトを識別できるか否かが決定される。ライブオブジェクトのリストの中にまだライブオブジェクトがあると決定された場合は、プロセスはステップ２５８に戻り、リストの中から識別される次のライブオブジェクトを取得する。あるいは、新世代の中にもうライブオブジェクトが残っていない場合は、その旨が示され、新世代で掃除用のガーベッジコレクションを実施するプロセスが完了する。
【００１３】
掃除用のガーベッジコレクションは、高価なプロセスである場合が多い。具体的には、上述したように、掃除用のガーベッジコレクションの最中にライブオブジェクトをコピーする動作が低速で且つ高価である。このため、掃除用のガーベッジコレクションの最中に多数のライブオブジェクトをコピーする場合や、掃除用のガーベッジコレクションの最中にいくつかの大きいオブジェクトをコピーする場合などは、ガーベッジコレクションのプロセス自体が低速且つコスト高になる。
【００１４】
したがって、掃除用の世代ガーベッジコレクションに関連したコストを削減する方法が望まれる。つまり、掃除用の世代ガーベッジコレクションの最中に旧世代にコピーされるライブオブジェクトの数を減らす方法および装置が必要とされる。
【００１５】
【発明の概要】
本発明は、効果的な掃除用の世代ガーベッジコレクションの実施を可能とするメモリスペースに関する。本発明の１態様にしたがうと、メモリスペースを再利用する方法は、第１の領域と第２の領域とを含んだ管理メモリ領域を使用する。第１の領域は、使用可能なメモリスペースを有する場合は最新に割り当てられたオブジェクトを格納するように構成され、第２の領域は、それよりも旧いオブジェクトを格納するように構成される。この方法は、新しいオブジェクトを割り当てられる第１の領域の第１の区域が実質的に満杯になった時点を決定することを含む。第１の区域が実質的に満杯になったことが決定されたら、第１の領域の第２の区域でガーベッジコレクションが実施される。ガーベッジコレクションの実施後は、新しいオブジェクトが第２の区域に割り当てられるように、新しいオブジェクトの割り当てをサポートするように第２の区域を設定し、新しいオブジェクトの割り当てをサポートする構成をもはや有しないように第１の区域を再設定する。１実施形態において、第２の区域でガーベッジコレクションを実施する工程は、ライブオブジェクトを第２の区域から第２の領域へとコピーすることを含む。
【００１６】
上記方法の別の１実施形態は、さらに、第２の区域が新しいオブジェクトの割り当てをサポートするように設定された後に、第２の区域に新しいオブジェクトを割り当てようと試みる工程と、第２の区域が実質的に満杯になった時点を決定する工程とを含む。第２の区域が実質的に満杯でないと決定された場合は、第２の区域に新しいオブジェクトが割り当てられる。あるいは、第２の区域が実質的に満杯になったと決定された場合は、第１の区域でガーベッジコレクションが実施される。このような１実施形態において、第２の区域が実質的に満杯になったと決定された場合は、上記方法は、さらに、新しいオブジェクトの割り当てをサポートする構成をもはや有しないように第２の区域を再設定する工程と、再び新しいオブジェクトの割り当てをサポートする構成を有するように第１の区域を再設定する工程と、新しいオブジェクトを第１の区域に割り当てる工程とを含む。
【００１７】
本発明の別の１態様にしたがうと、第１の領域と第２の領域とを含んだ管理メモリ領域において、メモリスペースを再利用するためのコンピュータシステムは、プロセッサと、新しいオブジェクトの割り当てをサポートする第１の領域の第１の区域が実質的に満杯になった時点を決定するための決定部とを含む。このシステムは、さらに、第１の区域が実質的に満杯になったと決定された場合に第１の領域の第２の区域を掃除するガーベッジコレクタと、さらに、新しいオブジェクトの割り当てをサポートする構成を有するように第２の区域を設定し、新しいオブジェクトの割り当てをサポートする構成をもはや有しないように第１の区域を設定するように構成されたトラッキングメカニズムとを含む。１実施形態において、第１の区域と第２の区域とは境界によって分離されており、上記システムは、さらに、この境界を移動させ、第１の区域および第２の区域の相対的なサイズを変更するための調整部を含む。
【００１８】
本発明のさらに別の１態様にしたがうと、コンピュータシステムの中にオブジェクトを格納するメモリ構造は、第１の領域と第２の領域とを含む。第１の領域は、最新に割り当てられたオブジェクトを格納する第１の区域と、最新に割り当てられたオブジェクトよりも前に割り当てられた第１のオブジェクトを格納する第２の区域と、に有効に区分化される。第２の区域は、第１の区域が満杯である場合に第２の区域がガーベッジコレクションを受けるように構成される。上記メモリ構造の第２の領域は、第１のオブジェクトの割り当てよりも前に割り当てられた第２のオブジェクトを格納する。１実施形態において、第２の領域は、さらに、第２の区域でガーベッジコレクションが実施される場合に第１のオブジェクトのコピーを格納するように構成される。このような１実施形態において、ガーベッジコレクションを経た第２の区域は、最新に割り当てられたオブジェクトの割り当てからいくらか経過した後に割り当てられる第３のオブジェクトを格納するために使用される。
【００１９】
以下の詳細な説明および各種の図面から、本発明の様々な利点を明らかにする。
【００２０】
【発明の実施の形態】
掃除用の世代ガーベッジコレクションは、一般に、新世代が新しいオブジェクトを割り当てられないほど満杯になった場合に、旧世代も含んだ管理メモリ領域の新世代を掃除すること含む。引例として本明細書に組み込まれたRichard JonesおよびRafael Linsによる「Garbage Collection: Algorithms for Automatic Dynamic Memory Management（ガーベッジコレクション：動的な自動メモリ管理）」（John Wiley & Sons Ltd., 1996）に記載されているように、掃除の際には、ライブオブジェクトが新世代から旧世代へとコピーされる。ライブオブジェクトのコピーは高価で且つ低速なので、掃除用のガーベッジコレクションは通例は非効率的である。掃除用のガーベッジコレクションが低速で高価なのは、その最中に実施されるライブオブジェクトのコピーが原因なので、ガーベッジコレクションの最中に新世代から旧世代へとコピーされるライブオブジェクトの数を減らすことによって、ガーベッジコレクションの有効性および効率を高めることができる。
【００２１】
新世代のなかでも、若い側すなわち新しい側にあるオブジェクトは、旧い側にあるオブジェクトよりもライブである傾向が強いことがわかっている。つまり、新世代に最新に割り当てられたオブジェクトは、新世代にそれほど最新に割り当てられたのではないオブジェクトよりも、ライブである傾向が強いことがわかっている。このため、新世代の中のオブジェクトの在住時間が長くなるほど、すなわちそのオブジェクトが新世代の中でも古い方のオブジェクトになるにつれて、そのオブジェクトがデッド状態になる可能性が高くなる。
【００２２】
本発明の１実施形態において、新世代と旧世代とに分割されたメモリスペースの管理領域の新世代は区分化されている。新世代は、具体的には２つの区域に区分化される。新世代に最新に割り当てられたオブジェクトは「若い」区域に維持され、新世代にそれほど最新に割り当てられたのでないオブジェクトは「旧い」区域に維持される。新世代がこれ以上オブジェクトを割り当てられない程度まで満杯になった場合は、新世代の旧い区域だけを掃除する。旧い区域の中のオブジェクトは、若い区域の中のオブジェクトよりも古く、通常はデッド状態にある。したがって、掃除用のガーベッジコレクションに関連して生じるコピーの量は、比較的少ない。さらに、若い区域は掃除されないので、若い区域の中のオブジェクトを、デッド状態になるまでのあいだ長く留めることが可能である。旧い区域の掃除が完了した後は、この旧い区域が有効に現行の若い区域になり、若い区域は若い現行領域が満杯になった場合に掃除される現行の旧い区域になる。
【００２３】
新世代の１区域のみを掃除するので、新世代の１区域のみがオブジェクトの割り当てに使用可能である。したがって、掃除用のガーベッジコレクションを実施する全体の回数が、従来の分割なしの新世代に関連して実施する回数よりも多くなる。しかしながら、区分化された新世代でガーベッジコレクションを実施する場合は、その最中に旧世代にコピーするべきオブジェクトの数が少ないので、ガーベッジコレクションによって消費される時間および計算リソースの量が少なくてすむ。つまり、ガーベッジコレクションを実施する回数は多いものの、それぞれが比較的高速で且つ安価に行われる。
【００２４】
区分化された新世代を有したメモリスペースの管理領域を、図３を参照にしながら、本発明の１実施形態にしたがって以下で説明する。メモリスペース３０２は、コンピュータシステムに関連付けられたヒープ（動的データ域）である場合が多く、新世代３０６と旧世代３１０とに分割される。新世代３０６は、メモリに最新に割り当てられたオブジェクト３１４を含むように構成され、旧世代３０６は、それほど最新に割り当てられたのではないオブジェクト３１４を含むように構成される。
【００２５】
ここで説明する１実施形態において、「ナーサリ」または「エデン」とも称される新世代３０６は、２つの区域３１８に区分化される。区域３１８ａは、新世代３０６のうち若い区域であり、区域３１８ｂは、新世代３０６のうち旧い区域である。区域３１８ａは、新世代３０６の中でも若いオブジェクト３１４を含み、区域３１８ｂは、新世代３０６の中でも旧いオブジェクト３１４を含む。したがって、新世代３０６にオブジェクト３１４を割り当てる場合は、区域３１８ａにオブジェクト３１４を割り当てる。
【００２６】
説明を容易にするため、区域３１８ａおよび区域３１８ｂは、事実上は２つの別々のナーサリだと考えて良い。つまり、各区域３１８を別々の新世代として扱って良い。区域３１８を別々のナーサリだと考える場合は、オブジェクトを割り当てられる区域、例えば３１８ａが満杯になったら、別の区域、例えば区域３１８ｂを掃除し、オブジェクトを割り当てられる新しいナーサリにする。同様に、区域３１８ｂがオブジェクトを割り当てられるナーサリである場合は、区域３１８ｂが満杯になったら、区域３１８ａでガーベッジコレクションを実施し、区域３１８ａをオブジェクトを割り当てられるナーサリにする。
【００２７】
区域３１８ａが新しいオブジェクトを割り当てるのに十分なメモリスペースを有しない場合は、区域３１８ａにオブジェクトを割り当てる試みは失敗する。したがって、ガーベッジコレクションを実施するのは、メモリスペースを再利用して新しいオブジェクトを割り当てられるようにするためである。区域３１８ａが新しいオブジェクトの割り当てをサポートするだけの十分なメモリスペースを含まないときは、区域３１８ｂも事実上満杯である。１実施形態において、区域３１８ａが満杯であるときは、区域３１８ｂで掃除用の世代ガーベッジコレクションが実施される。例えばオブジェクト３１４ｅなど、区域３１８ｂの中のオブジェクト３１４はガーベッジオブジェクトである可能性が高いので、ガーベッジコレクションの最中に旧世代３１０にコピーされるオブジェクト３１４の数は、一般に比較的少なくてすむ。図に示すように、オブジェクト３１４ｇはセクション３１８ｂの中のライブオブジェクトであり、ガーベッジコレクションの最中に旧世代３１０へとコピーされる。区域３１８ｂから旧世代３１０へとコピーされるライブオブジェクト３１４の数が少なくてすむので、ガーベッジコレクションに関連して生じるオーバーヘッドも比較的少ない。したがって、ガーベッジコレクションは一般に効率的に行われる。区域３１８ｂでガーベッジコレクションが実施されると、図４および図５を参照にしながら以下で述べるように、再利用されたメモリスペースをオブジェクトの割り当てに使用することが可能になる。
【００２８】
新世代３０６を複数の区域３１８に分割する境界３２２は、柔軟性を有した可動性の境界である。つまり、境界３２２を有効に移動させ、区域３１８の相対的なサイズを変更して良い。例えば１実施形態では、区域３１８ａと区域３１８ｂとが実質的に同じ量のメモリスペースを含むように、境界３２２を位置決めして良い。
【００２９】
境界３２２の位置決めは、動的なプロセスとなしうることを理解すべきである。具体的には、コンピュータシステムのパフォーマンスを効果的に最適化できるように、プロセスの最中に必要に応じて境界３２２の位置を変更しても良い。例えば、ガーベッジコレクションの最中に、かなりの数のライブオブジェクト３１４が区域３１４ｂから旧世代３１０へとコピーされることがわかった場合は、区域３１８ａのサイズが区域３１８ｂのサイズよりも相対的に大きくなるように境界３２２を位置決めし、それらのライブオブジェクト３１４がデッド状態になるまでのあいだ長く区域３１８ｂに留まれるようにしても良い。あるいは、ガーベッジコレクションの最中に旧世代３１０へとコピーされるライブオブジェクト３１４の数が非常に少ない場合は、区域３１８ｂの相対的なサイズが大きくなるように境界３２２を位置決めしなおして、掃除の頻度を減らしても良い。境界３２２を位置決めしなおすかどうかは、非常に様々な方法を使用して決定して良いが、適切な方法の１つとして、ガーベッジコレクションに関連して生じるオーバーヘッドの量に基づく方法が挙げられ、例えば、関連して生じる計算上のオーバーヘッドの量が所望の範囲内に収まるように、境界３２２の位置を調整しても良い。
【００３０】
当業者ならば理解できるように、メモリスペース３０２の中のオブジェクトは、一般に、メモリスペース３０２の外にある固定ルート（未図示）によって参照されており、この固定ルートはメモリスペース３０２の中のオブジェクト３１４のどれかを指したポインタを含んでいる。固定ルートからの参照をたどって到達可能なあらゆるオブジェクト３１４はライブオブジェクトだとみなされる。区域３１８ｂのような個別のメモリ領域を操作するためには、ガーベッジコレクタは、区域３１８ｂへの全ての参照に関する知識を必要とする。特定の領域への参照は、その領域に対するルートと呼ばれる。ルートは、例えば固定ルートなどの外部参照と、コンピュータメモリの他の領域からの参照との両方を、当然ながら含んでいる。したがって、ガーベッジコレクタは、一般にルートすなわち参照を検出およびトラッキングするメカニズムを提供する。
【００３１】
新世代３０６のオブジェクト３１４であっても、ライブであると想定され且つ別のオブジェクト３１４へのポインタを含む場合は、ルートであるとみなされる。例えば、オブジェクト３１４ｇはルートであるとみなされる。オブジェクト３１４ｇがライブであって、旧世代３１０の中のオブジェクト３１４ｉを指している場合は、オブジェクト３１４ｉは、旧世代３１０で実施されるガーベッジコレクションによって「回収」されない。しかしながら、オブジェクト３１４ｇがデッド状態にある場合は、区域３１８ｂでガーベッジコレクションを実施した結果として、どのオブジェクト３１４からもオブジェクト３１４ｉを指すことができなくなり、オブジェクト３１４ｉは到達不能になる。オブジェクト３１４ｉが到達不能である場合は、旧世代３１０で実施されるガーベッジコレクションによって、オブジェクト３１４ｉが回収される。
【００３２】
図４は、区分化された新世代を有したメモリスペースすなわち図３のメモリスペース３０２で掃除用のガーベッジコレクションを実施するプロセスを、本発明の１実施形態にしたがって示したフローチャートである。新世代の一部分でガーベッジコレクションを実施するプロセス４０２は、メモリスペースの中からライブオブジェクトのリストを取得するステップ４０６から開始する。例えば、ライブオブジェクトのリストの取得に使用される方法の１つは、新世代および旧世代のいずれか若しくは両方の中のオブジェクトを参照するルートすなわちグローバルオブジェクトを追跡し、まだ使用されているオブジェクトを決定することを含む。ルートは、例えばスタックの上すなわち新世代の中に設けて良い。
【００３３】
ステップ４０８において、新世代からライブオブジェクトを取得する。１実施形態において、ライブオブジェクトの取得は、ライブオブジェクトのリストの中から識別される第１のライブオブジェクトを取得することを含む。新世代からライブオブジェクトが取得されたら、そのライブオブジェクトが新世代の旧い区域の中にあるのか否かを、ステップ４１０において決定する。ライブオブジェクトが旧い区域にあるという決定が下されたら、ステップ４１２において、旧い区域から旧世代へとライブオブジェクトをコピーする。一般に、旧い区域から旧世代へとオブジェクトをコピーするステップは、そのオブジェクトに関連付けられたビットをコピーするとともに、そのオブジェクトへのあらゆるポインタを再設定し、それらのポインタがコピー後のオブジェクトを識別できるようにすることを含む。オブジェクトをコピーするステップは、さらに、そのオブジェクトに端を発するあらゆるポインタを、コピー後のオブジェクトに端を発するように変更することを含む。
【００３４】
ステップ４１２において、旧い区域から旧世代へとライブオブジェクトがコピーされたら、ステップ４１４において、新世代の中にまだライブオブジェクトがあるか否かを決定する。つまり、ライブオブジェクトのリストの中にまだ取得するべきライブオブジェクトが残っているか否かに関して決定を下す。取得するべきライブオブジェクトがまだ残っていると決定された場合は、プロセスは、新世代から別のライブオブジェクトを取得するステップ４０８に戻る。
【００３５】
あるいは、ステップ４１４において、新世代の中にもうライブオブジェクトが残っていないこと、例えば、新世代の旧い区域の中のライブオブジェクトが全て旧世代にコピーされたことが決定された場合は、アロケータ（割り当て部）のブックキーピング情報を更新し、旧い区域を現行の若い区域に有効に設定し、若い区域を現行の旧い区域に有効に設定することによって、割り当てが現行の若い区域で生じるようにする。つまり、旧い区域が新しく若い区域に定められ、若い区域が新しく旧い区域に定められる。当業者ならば理解できるように、掃除が完了した区域にはライブオブジェクトは含まれない。掃除中の区域からは、ライブオブジェクトがコピーされて排出されるからである。
【００３６】
旧い区域と若い区域とを有効に交換するにあたっては、図５を参照にしながら以下で述べるように、新世代のトラッキングに関連したあらゆるポインタおよび変数を再設定し、新世代に割り当てられるあらゆる新しいオブジェクトを、空いている現行の若い区域に割り当てられるようにする。１実施形態において、現行の若い区域すなわち新しく定められた若い区域に残っている非ライブオブジェクトは、現行の若い区域のメモリスペースを解放するために、廃棄されあるいはゼロに設定される。有効に空にされた現行の若い区域および満杯になった現行の旧い区域の基本的な設定がなされると、ガーベッジコレクションのプロセスは完了する。
【００３７】
ステップ４１０すなわち新世代から取得されたライブオブジェクトが旧い区域にあるか否かの決定に戻り、ライブオブジェクトが旧い区域にはないと決定された場合は、このライブオブジェクトが若い区域にあることを意味する。したがって、このライブオブジェクトは、旧世代にコピーされる代わりに若い区域に留まることを許される。したがって、プロセスは、新世代から取得するべきライブオブジェクトがまだあるか否かに関して決定を下すステップ４１４に進む。
【００３８】
ガーベッジコレクションは、アプリケーションの処理中ならば実質的に任意の適切な時点において行われても良いが、オブジェクトを割り当てる試みがなされる時点または処理の休止時において行われるのが一般的である。ガーベッジコレクションが処理の休止時に生じるのは、休止時には計算リソースが使用可能となるためである。例えば、ガーベッジコレクションは安全点（safepoint）の最中に生じて良い。当業者ならば理解できるように、安全点は、システムの実質的に全てのスレッドが安全領域にあるかあるいは動作を一時停止しており、これらのスレッドがガーベッジコレクションなどのグローバル動作のパフォーマンスに対して事実上何ら問題を生じない場合に生じる。
【００３９】
図５を参照にしながら、メモリスペースの解放が必要な場合に、図４のガーベッジコレクションのプロセス４０２を使用して実施される、オブジェクトの割り当てに関連したいくつかのステップを、本発明の１実施形態にしたがって説明する。前述したように、ガーベッジコレクションは、使用可能なメモリスペースがオブジェクトを割り当てるのに十分でない場合にメモリスペースを解放する目的で生じる場合が多い。
【００４０】
メモリスペースの新世代にオブジェクトを割り当てる試みに応答するプロセス５０２は、新世代の若い区域、例えば若いナーサリ領域が満杯であるか否かを決定するステップ５０４から開始する。つまり、新世代の若い区域が、オブジェクトを割り当てられるのに十分なフリースペースを有するか否かを決定する。若い区域が満杯でないと決定された場合は、その若い区域がオブジェクトの割り当てをサポートするのに十分なスペースを有することを意味する。したがって、プロセスはステップ５０４からステップ５１０に進み、若い区域にオブジェクトを割り当てる。若い区域にオブジェクトが割り当てられたら、オブジェクトを割り当てる試みに応答するプロセスは完了する。
【００４１】
あるいは、ステップ５０４において、若い区域がオブジェクトを割り当てられるのに十分なスペースを提供できないと決定された場合は、ステップ５０６において、新世代の旧い区域で掃除用のガーベッジコレクションが実施される。使用可能な掃除用ガーベッジコレクションのプロセスの１つに関しては、図４を参照にしながら前述した。
【００４２】
ステップ５０６において、掃除用のガーベッジコレクションを実施すると、旧い区域が有効に空にされる、すなわち旧い区域のメモリスペースが解放される。図４を参照にしながら上述したように、旧い区域が空になると、旧い区域と若い区域とが有効に交換される。つまり、有効に空にされた旧い区域が現行の若い区域として扱われ、満杯になった若い区域が現行の旧い区域として扱われる。前者の旧い区域を現行の若い区域として扱う方法は任意であって良いが、一般には、各種の変数およびフラグを設定し、任意の新しいオブジェクトの割り当てをこの現行の若い区域で生じさせることを含む。
【００４３】
掃除用のガーベッジコレクションが完了したら、ステップ５０８において、現行の若い区域にオブジェクトを割り当てる。つまり、掃除用のガーベッジコレクションの最中に空にされたメモリ領域にオブジェクトを割り当てる。ステップ５０８においてオブジェクトが割り当てられたら、オブジェクトを割り当てる試みに応答するプロセスは完了する。
【００４４】
図６は、本発明の実装に適した代表的な汎用コンピュータシステムを示した図である。コンピュータシステム１０３０は、一次記憶デバイス１０３４（典型的にはランダムアクセスメモリすなわちＲＡＭ）と一次記憶デバイス１０３６（典型的には読み出し専用メモリすなわちＲＯＭ）とを含むメモリデバイスに接続された任意の数のプロセッサ１０３２（中央処理装置すなわちＣＰＵとも称される）を備えている。
【００４５】
コンピュータシステム１０３０、またはさらに特定してＣＰＵ１０３２は、当業者ならば理解できるように、仮想マシンをサポートするように構成して良い。図７を参照にしながら、コンピュータシステム１０３０にサポートされる仮想マシンの一例を以下で説明する。当業者に周知のように、ＲＯＭは、ＣＰＵ１０３２にデータおよび命令を一方向的に転送するよう機能し、ＲＡＭは通例、データおよび命令を二方向的に転送するのに用いられる。ＣＰＵ１０３２は、一般に任意の数のプロセッサを含むことができる。両方の一次記憶デバイス１０３４，１０３６は、任意の適切なコンピュータ読み取り可能媒体を含むことができる。二次記憶媒体１０３８は、通例はマスメモリデバイスであり、二方向的にＣＰＵ１０３２に接続され、データ記憶容量を補っている。マスメモリデバイス１０３８は、コンピュータコード、データなどを含むプログラムを格納するのに用いることが可能なコンピュータ読み取り可能な媒体である。通例、マスメモリデバイス１０３８は、一般に一次記憶デバイス１０３４，１０３６よりも低速なハードディスクもしくはテープなどの記憶媒体である。マスメモリ記憶デバイス１０３８は、磁気もしくは紙テープ読取装置やその他のよく知られたデバイスであってもよい。しかるべき場合には、マスメモリデバイス１０３８に保持された情報を、仮想メモリとしてのＲＡＭ１０３６の一部として標準的な方法で組み込んでもよいことがわかる。ＣＤ−ＲＯＭのような一次記憶デバイス１０３４でも、データを一方向的にＣＰＵ１０３２に送ることができる。
【００４６】
また、ＣＰＵ１０３２は、ビデオモニタ、トラックボール、マウス、キーボード、マイクロフォン、タッチセンシティブディスプレイ、トランスデューサカードリーダ、磁気もしくは紙テープリーダ、タブレット、スタイラス、音声もしくは手書き文字認識装置、もしくは、もちろん他のコンピュータのようなその他のよく知られた入力デバイス、を含むがそれらに限定されない１つ以上の入出力デバイス１０４０に接続されている。最後に、ＣＰＵ１０３２は、１０１２に大まかに示されているネットワーク接続を用いて、コンピュータや、例えばインターネットネットワークもしくはイントラネットネットワークなどのローカルエリアネットワークに随意的に接続されても良い。このようなネットワーク接続により、ＣＰＵ１０３２は、上述した方法のステップを実行している間に、ネットワークから情報を受信したりネットワークに情報を出力したりすることができると考えられる。そのような情報は、ＣＰＵ１０３２を用いて実行される命令のシーケンスであることが多く、例えば搬送波で運ばれるコンピュータデータ信号の形で、ネットワークから受信したりネットワークに出力したりすることができる。上述のデバイスと構成要素は、コンピュータハードウェアおよびソフトウェアの当業者には周知であろう。
【００４７】
前述したように、仮想マシンはコンピュータシステム１０３０の上で実行して良い。図７は、図６のコンピュータシステム１０３０によってサポートされ且つ本発明の実装に適した仮想マシンを示した概略図である。例えばカリフォルニア州パロアルト所在のサンマイクロシステムズによって開発されたＪａｖａ（登録商標）プログラミング言語などで記述されたコンピュータプログラムが実行されると、コンパイルタイム環境１１０５において、ソースコード１１１０がコンパイラ１１２０に供給される。コンパイラ１１２０は、ソースコード１１１０をバイトコード１１３０に変換する。ソースコード１１１０は、通例は、ソフトウェアディベロッパによって作成された時点でバイトコード１１３０に変換される。
【００４８】
バイトコード１１３０は、一般に、複製したり、ダウンロードしたり、例えば図６のネットワーク１０１２などのネットワークを通して配送したり、あるいは図６の一次記憶デバイス１０３４などの記憶デバイスに格納したりして良い。説明した実施形態において、バイトコード１１３０はプラットフォーム独立である。つまり、バイトコード１１３０は、適切な仮想マシン１１４０を稼動させる実質的にあらゆるコンピュータシステム上で実行して良い。例えばＪａｖａ（登録商標）環境では、Ｊａｖａ（登録商標）仮想マシンを稼動させるコンピュータシステム上でバイトコード１１３０を実行して良い。
【００４９】
バイトコード１１３０は、仮想マシン１１４０を含んだランタイム環境１１３５に供給される。ランタイム環境１１３５は、一般に、図６のＣＰＵ１０３２などのプロセッサを使用して実行して良い。仮想マシン１１４０は、コンパイラ１１４２と、インタープリタ１１４４と、ランタイムシステム１１４６とを含む。バイトコード１１３０は、一般に、コンパイラ１１４２またはインタープリタ１１４４のいずれか一方に供給して良い。
【００５０】
バイトコード１１３０がコンパイラ１１４２に供給された場合は、上述したように、バイトコード１１３０に含まれたメソッドが機械語命令にコンパイルされる。反対に、バイトコード１１３０がインタープリタ１１４４に供給された場合は、バイトコード１１３０が一度に１バイトコードずつインタープリタ１１４４に読み込まれる。インタープリタ１１４４は、各バイトコードを読み込むたびに、各バイトコードによって規定された動作を実施する。一般に、インタープリタ１１４４は、バイトコード１１３０の処理とバイトコード１１３０に関連付けられた動作の実施とを、実質的に連続して行う。
【００５１】
オペレーティングシステム１１６０からメソッドを呼び出す際に、インタープリット済みのメソッドとしてメソッドを呼び出すことが決定された場合は、ランタイムシステム１１４６は、インタープリタ１１４４からメソッドを取得して良い。反対に、コンパイル済みメソッドとしてメソッドを呼び出すことが決定された場合は、ランタイムシステム１１４６は、コンパイラ１１４２を活動化させる。すると、コンパイラ１１４２は、バイトコード１１３０から機械語命令を生成し、それらの機械語命令を実行する機械語命令は、一般に、仮想マシン１１４０が終了した時点で廃棄される。仮想マシンの動作、特にＪａｖａ（登録商標）仮想マシンの動作に関しては、Tim LindholmおよびFrank Yellinによる「The JavaTM Virtual Machine Specification（Ｊａｖａ［登録商標］仮想マシン仕様）」（ISBN 0-201-63452-X）に詳述されており、本書全体を引用して本明細書に組み込むものとする。
【００５２】
いくつかの実施形態のみを取り上げて説明したが、本発明の趣旨もしくは範囲から逸脱することなしに、その他多くの形で本発明を実施可能であることを理解すべきである。例えば、新世代の旧い区域で掃除用の世代ガーベッジコレクションを実施することに関連したステップを、変更したり、追加したり、あるいは削除したりして良い。例として、掃除用の世代ガーベッジコレクションに、現行の若い区域すなわち以前の旧い区域に関連したメモリのビットの値をゼロに設定するステップを含ませて良い。
【００５３】
新世代の若い区域と旧い区域とを分離する境界は、柔軟性を有したものとして説明したが、実施形態によっては、この境界を固定することも可能であることを理解すべきである。つまり、若い区域および旧い区域の相対的なサイズが一定となるように、境界を固定しても良い。例えば、若い区域と旧い区域とが実質的に同じサイズになるように、境界を固定しても良い。境界が固定されると、若い新世代と旧い新世代とを交互に担う２つの新世代が別々に有効に存在する。
【００５４】
一般には、新世代を複数の区域に分割し、そのうちの１区域に新しいオブジェクトを割り当てて満たしながら、少なくともいくつかの残りの区域を掃除しても良い。複数区域の新世代を使用する場合は、掃除される区域の数を調整することによって、掃除と掃除の間隔と１回の掃除の長さとをバランスさせることができる。このような１実施形態では、新世代の若い区域と他の旧い区域との境界に柔軟性をもたせて移動を可能にし、区域どうしの相対的なサイズを調整できるようにしても良い。例えば、ガーベッジコレクションを実施する以前において、若い区域が特定の旧い１区域よりも大きく、ガーベッジコレクションを実施するにあたってその若い区域と旧い区域とを「交換」する場合は、新しい旧い区域のスペースは、以前の若い区域のオブジェクトを全て含むだけ大きさを有さないかもしれない。つまり、新しい旧い区域は、満杯であったりひいては新しい若い区域にオーバーフローしたりすることがある。このような場合は、新しい旧い区域のオブジェクトのいくつかが、新しい若い区域に追放されるようにしてもよい。
【００５５】
あるいは、境界が柔軟性を有していて区域のサイズが実質的に等しくない場合は、新しい旧い区域が常に以前の若い区域と同じサイズを有するように、この境界を移動させても良い。具体的には、ガーベッジコレクションが生じるたびに新しい旧い区域がオーバーフローする事態を回避するために、新しい旧い区域が以前の若い区域と同じサイズを有するように境界を移動させても良い。
【００５６】
前述したように、新世代の各区域のサイズ変更は、動的なプロセスであっても良い。例えば、所望の回数よりも頻繁にガーベッジコレクションが生じていることが観測された場合は、若い区域のサイズを大きくし、ガーベッジコレクションが始まるまでに、より多くの旧い区域のオブジェクトがデッド状態になるようにしても良い。また、旧い区域でのガーベッジコレクションの最中に、かなりの数のライブオブジェクトが旧い世代にコピーされていると決定された場合も、若い区域のサイズを大きくして良い。反対に、旧い区域でのガーベッジコレクションが稀にしか生じず、コピーされるライブオブジェクトの数も多くない場合は、若い区域のサイズを小さくして良い。
【００５７】
新世代と旧世代とに分割された管理メモリ領域に適したものとして、分割された新世代、すなわち若い区域と旧い区域とに有効に分割された新世代の説明を行ってきた。しかしながら、このような分割された新世代は、他の管理メモリ領域に同様に実装することも当然ながら可能である。例えば、新世代および旧世代に加えてｆｒｏｍスペースまたはｔｏスペースを含んだ管理メモリ領域に対しても、本発明の趣旨または範囲から逸脱することなくこの分割された新世代を実装することが可能である。したがって、上述した実施例は例示的であって限定的ではないと考えられ、本発明は、ここで挙げた詳細に限定されず、添付した特許請求の範囲内で変更することが可能である。
【図面の簡単な説明】
【図１ａ】  従来の１メモリスペースを示した概略図である。
【図１ｂ】  従来の別のメモリスペースを示した概略図である。
【図２】  従来のメモリスペースすなわち図１ａのメモリスペース１０２でガーベッジコレクションを実施するプロセスを示したフローチャートである。
【図３】  区分化された新世代を有したメモリスペースを、本発明の１実施形態にしたがって示した概略図である。
【図４】  区分化された新世代を有したメモリスペースすなわち図３のメモリスペース３０２でガーベッジコレクションを実施するプロセスを、本発明の１実施形態にしたがって示したフローチャートである。
【図５】  オブジェクトをメモリスペースに割り当てるプロセスを、本発明の１実施形態にしたがって示したフローチャートである。
【図６】  本発明の実装に適した汎用コンピュータシステムを示した概略図である。
【図７】  図６のコンピュータシステムによってサポートされ且つ本発明の実装に適した仮想マシンを示した概略図である。
【符号の説明】
１０２…メモリスペース
１０４…新世代
１０６…旧世代
１１０…オブジェクト
１１４…ポインタ
２０２…メモリスペース
２０４…新世代
２０５…ｆｒｏｍスペースおよびｔｏスペース
２０６…旧世代
２１０…オブジェクト
３０２…メモリスペース
３０６…新世代
３１０…旧世代
３１４…オブジェクト
３１８ａ…若い区域
３１８ｂ…旧い区域
３２２…境界
１０１２…ネットワーク接続
１０３０…コンピュータシステム
１０３２…プロセッサ
１０３４…一次記憶デバイス
１０３６…一次記憶デバイス
１０３８…二次記憶媒体
１０４０…入出力デバイス
１１０５…コンパイルタイム環境
１１１０…ソースコード
１１２０…コンパイラ
１１３０…バイトコード
１１３５…ランタイム環境
１１４０…仮想マシン
１１４２…コンパイラ
１１４４…インタープリタ
１１４６…ランタイムシステム
１１６０…オペレーティングシステム
【図１ａ】
0004756231.tif 000002
【図１ｂ】
0004756231.tif 000003
【図２】
0004756231.tif 000004
【図３】
0004756231.tif 000005
【図４】
0004756231.tif 000006
【図５】
0004756231.tif 000007
【図６】
0004756231.tif 000008
【図７】
0004756231.tif 000009