(57)【要約】【課題】メモリの使用効率を高め、ヒープ領域全体のＧＣ処理の回数を低減すること。【解決手段】ヒープ領域を旧世代領域と新世代領域とに分けて当該ヒープ領域内に存在するオブジェクトの管理を行う世代別ガベージコレクション方法であって、新世代領域内にオブジェクトを生成するオブジェクト生成ステップと、新世代領域内に生成されたオブジェクトの量が所定の量に達したときに、新世代領域に対するガベージコレクション処理を行う新世代ガベージコレクションステップと、旧世代領域の少なくとも一部を抽出する旧世代部分領域抽出ステップと、抽出された前記少なくとも一部の領域に対するガベージコレクション処理を行う旧世代部分ガベージコレクションステップとを具備する。【選択図】        図１
2006039877.tif 000002
【特許請求の範囲】
【請求項１】
ヒープ領域を旧世代領域と新世代領域とに分けて当該ヒープ領域内に存在するオブジェクトの管理を行う世代別ガベージコレクション方法であって、
前記新世代領域内にオブジェクトを生成するオブジェクト生成ステップと、
前記新世代領域内に生成されたオブジェクトの量が所定の量に達したときに、前記新世代領域に対するガベージコレクション処理を行う新世代ガベージコレクションステップと、
前記旧世代領域の少なくとも一部を抽出する旧世代部分領域抽出ステップと、
前記旧世代部分領域抽出ステップにおいて抽出された前記少なくとも一部の領域に対するガベージコレクション処理を行う旧世代部分ガベージコレクションステップと、
を具備することを特徴とする世代別ガベージコレクション方法。
【請求項２】
前記旧世代部分ガベージコレクションステップにおけるガベージコレクション処理は、前記新世代ガベージコレクションステップにおけるガベージコレクション処理に関連して行われることを特徴とする請求項１記載の世代別ガベージコレクション方法。
【請求項３】
前記旧世代部分ガベージコレクションステップにおけるガベージコレクション処理は、ランダムにあるいは一定の規則に従って行われることを特徴とする請求項１記載の世代別ガベージコレクション方法。
【請求項４】
前記一定の規則に従ったガベージコレクション処理は、前記新世代領域に存在したが、ガベージコレクション処理により新たに旧世代領域内に格納されたオブジェクトに対するガベージコレクション処理あるいは、前記旧世代領域を所定数に分割し、分割された各領域に対して順番に行われるガベージコレクション処理を含むことを特徴とする請求項３記載の世代別ガベージコレクション方法。
【請求項５】
前記旧世代領域の少なくとも一部の領域は、当該旧世代領域の他の領域と比較して生存期間が短いオブジェクトが存在する領域であることを特徴とする請求項１記載の世代別ガベージコレクション方法。
【請求項６】
前記新世代ガベージコレクションステップにおけるガベージコレクション処理及び前記旧世代部分ガベージコレクションステップにおけるガベージコレクション処理後に生き残ったオブジェクトを前記旧世代領域に統合して前記新世代領域を空にする旧世代更新ステップをさらに有することを特徴とする請求項１記載の世代別ガベージコレクション方法。
【請求項７】
ヒープ領域を旧世代領域と新世代領域とに分けて当該ヒープ領域内に存在するオブジェクトの管理を行う世代別ガベージコレクションプログラムであって、
処理手段に、
（ａ）前記新世代領域内にオブジェクトを生成するオブジェクト生成処理と、
（ｂ）前記新世代領域内に生成されたオブジェクトの量が所定の量に達したときに、前記新世代領域に対するガベージコレクション処理を行う新世代ガベージコレクション処理と、
（ｃ）前記旧世代領域の少なくとも一部を抽出する旧世代部分領域抽出処理と、
（ｄ）前記旧世代部分領域抽出ステップにおいて抽出された前記少なくとも一部の領域に対するガベージコレクション処理を行う旧世代部分ガベージコレクション処理と、
を実行させることを特徴とする世代別ガベージコレクションプログラム。
【請求項８】
前記旧世代部分ガベージコレクション処理は、前記新世代ガベージコレクション処理に関連して行われることを特徴とする請求項７記載の世代別ガベージコレクションプログラム。
【請求項９】
前記旧世代部分ガベージコレクション処理は、ランダムにあるいは一定の規則に従って行われることを特徴とする請求項７記載の世代別ガベージコレクションプログラム。
【請求項１０】
前記一定の規則に従ったガベージコレクション処理は、前記新世代領域に存在したが、ガベージコレクション処理により新たに旧世代領域内に格納されたオブジェクトに対するガベージコレクション処理あるいは、前記旧世代領域を所定数に分割し、分割された各領域に対して順番に行われるガベージコレクション処理を含むことを特徴とする請求項９記載の世代別ガベージコレクション方法。
【請求項１１】
前記旧世代領域の少なくとも一部の領域は、当該旧世代領域の他の領域と比較して生存期間が短いオブジェクトが存在する領域であることを特徴とする請求項７記載の世代別ガベージコレクションプログラム。
【請求項１２】
前記新世代ガベージコレクション処理及び前記旧世代部分ガベージコレクション処理後に生き残ったオブジェクトを前記旧世代領域に統合して前記新世代領域を空にする旧世代更新処理をさらに有する請求項７記載の世代別ガベージコレクションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ヒープ領域を旧世代領域と新世代領域とに分けて当該ヒープ領域内に存在するオブジェクトの管理を行う世代別ガベージコレクション方法および世代別ガベージコレクションプログラムに関する。
【背景技術】
【０００２】
Ｊａｖａ（Ｒ）実行環境では、メモリ上のヒープ領域に存在するオブジェクト（データ）のうち、不要なオブジェクトをシステムが暗黙のうちにヒープ領域から破棄して、ヒープ領域を広くする処理であるガベージコレクション（以下、単にＧＣと呼ぶ）処理が用いられている。さらに、ＧＣの改善例として、ヒープ領域を旧世代領域と新世代領域とに分け、新世代領域内に新しいオブジェクトを生成するようにした世代別ＧＣが知られている。「Garbage Collection」（Richard Jones他著、John Wiley & Sons Inc出版）には、世代別ＧＣの一例が開示されている。
【０００３】
世代別ＧＣ（２世代の場合）処理の手順であるが、まず、ヒープ領域を旧世代領域と新世代領域とに分け、新世代領域の中に新しいオブジェクトを生成する。新世代領域の中に生成されたオブジェクトの量が一定量を超えた場合には、新世代領域の中だけでＧＣ処理を行ってヒープ領域を広くする。次に、新世代領域に対するＧＣ処理の実行後に生存しているオブジェクトを旧世代領域に移動させて新世代領域を空にする。新世代領域のオブジェクトはＧＣ処理が１回も行われないオブジェクトであり、旧世代領域のオブジェクトは１回以上ＧＣ処理が行われたオブジェクトであるということができる。
【０００４】
以上の処理を繰り返して、空き領域が一定量以下になった場合にはヒープ領域全体に対するＧＣ処理を行っている。
【０００５】
以下に上記したＧＣ処理について図を参照して具体的に説明する。ここでは１つのヒープ領域を３つの領域に分け、それぞれを旧世代領域、新世代領域、空き領域とする。図５（Ａ）に示すように、最初はヒープ領域全体１０が空き領域１０−１である。新しいオブジェクトを空き領域１０−１の左端部から順に確保していき、それを新世代領域１０−２に属するオブジェクトとする（図５（Ｂ））。新世代領域１０−２がある大きさになったときには新世代領域１０−２に対するＧＣ処理を実行し、生き残ったものをまとめて旧世代領域１０−３に属するオブジェクトとする（図６（Ａ））。
【０００６】
その後も新しいオブジェクトを空き領域１０−１の左端部から順に確保していき、新しく確保されたオブジェクトの領域を新世代領域１０−２とする（図６（Ｂ））。この新世代領域１０−２がある大きさになったときに新世代領域１０−２だけでＧＣ処理を行い、生き残ったものを旧世代領域１０−３に統合する（（図６（Ｃ）））。
【０００７】
以上の処理を繰り返すことにより旧世代領域１０−３が大きくなって空き領域１０−１が一定量以下になった場合にはヒープ領域１０全体に対するＧＣ処理を行うようにする。このようにすることで、ヒープ領域１０のフラグメンテーションを減らすことができ、こまめにＧＣ処理を行うことでヒープ領域１０全体に対してＧＣ処理を行う回数（ＧＣ処理の稼働時間）を減らすことができる。
【非特許文献１】「Garbage Collection」（Richard Jones他著、John Wiley & Sons Inc出版）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記した従来の技術では、旧世代領域に対するＧＣ処理が行われるのはヒープ領域１０全体に対するＧＣ処理を行うときに限定されるので、一度、旧世代領域に取り込まれたオブジェクトは、たとえそれが不要なオブジェクトであってもヒープ領域に長期間残存してしまう可能性がある。
【０００９】
本発明は、このような課題に着目してなされたものであり、その目的とするところは、旧世代領域内のオブジェクトに対するＧＣ処理を適宜実施することによって、メモリの使用効率を高めるとともに、ヒープ領域全体に対するＧＣ処理の回数を低減したガベージコレクション方法及びガベージコレクションプログラムを提供することにある。
【課題を解決するための手段】
【００１０】
上記の目的を達成するために、第１の発明は、ヒープ領域を旧世代領域と新世代領域とに分けて当該ヒープ領域内に存在するオブジェクトの管理を行う世代別ガベージコレクション方法であって、前記新世代領域内にオブジェクトを生成するオブジェクト生成ステップと、前記新世代領域内に生成されたオブジェクトの量が所定の量に達したときに、前記新世代領域に対するガベージコレクション処理を行う新世代ガベージコレクションステップと、前記旧世代領域の少なくとも一部を抽出する旧世代部分領域抽出ステップと、前記旧世代部分領域抽出ステップにおいて抽出された前記少なくとも一部の領域に対するガベージコレクション処理を行う旧世代部分ガベージコレクションステップと、を具備する。
【００１１】
また、第２の発明は、第１の発明に係るガベージコレクション方法において、前記旧世代部分ガベージコレクションステップにおけるガベージコレクション処理は、前記新世代ガベージコレクションステップにおけるガベージコレクション処理に関連して行われる。
【００１２】
また、第３の発明は、第１の発明に係るガベージコレクション方法において、前記旧世代部分ガベージコレクションステップにおけるガベージコレクション処理は、ランダムにあるいは一定の規則に従って行われる。
【００１３】
また、第４の発明は、第３の発明に係るガベージコレクション方法において、前記一定の規則に従ったガベージコレクション処理は、前記新世代領域に存在したが、ガベージコレクション処理により新たに旧世代領域内に格納されたオブジェクトに対するガベージコレクション処理あるいは、前記旧世代領域を所定数に分割し、分割された各領域に対して順番に行われるガベージコレクション処理を含む。
【００１４】
また、第５の発明は、第１の発明に係るガベージコレクション方法において、前記旧世代領域の少なくとも一部の領域は、当該旧世代領域の他の領域と比較して生存期間が短いオブジェクトが存在する領域である。
【００１５】
また、第６の発明は、第１の発明に係るガベージコレクション方法において、前記新世代ガベージコレクションステップにおけるガベージコレクション処理及び前記旧世代部分ガベージコレクションステップにおけるガベージコレクション処理後に生き残ったオブジェクトを前記旧世代領域に統合して前記新世代領域を空にする旧世代更新ステップをさらに有する。
【００１６】
また、第７の発明は、ヒープ領域を旧世代領域と新世代領域とに分けて当該ヒープ領域内に存在するオブジェクトの管理を行う世代別ガベージコレクションプログラムであって、処理手段に、（ａ）前記新世代領域内にオブジェクトを生成するオブジェクト生成処理と、（ｂ）前記新世代領域内に生成されたオブジェクトの量が所定の量に達したときに、前記新世代領域に対するガベージコレクション処理を行う新世代ガベージコレクション処理と、（ｃ）前記旧世代領域の少なくとも一部を抽出する旧世代部分領域抽出処理と、（ｄ）前記旧世代部分領域抽出ステップにおいて抽出された前記少なくとも一部の領域に対するガベージコレクション処理を行う旧世代部分ガベージコレクション処理と、を実行させる。
【００１７】
また、第８の発明は、第７の発明に係るガベージコレクションプログラムにおいて、前記旧世代部分ガベージコレクション処理は、前記新世代ガベージコレクション処理に関連して行われる。
【００１８】
また、第９の発明は、第７の発明に係るガベージコレクションプログラムにおいて、前記旧世代部分ガベージコレクション処理は、ランダムにあるいは一定の規則に従って行われる。
【００１９】
また、第１０の発明は、第９の発明に係るガベージコレクションプログラムにおいて、前記一定の規則に従ったガベージコレクション処理は、前記新世代領域に存在したが、ガベージコレクション処理により新たに旧世代領域内に格納されたオブジェクトに対するガベージコレクション処理あるいは、前記旧世代領域を所定数に分割し、分割された各領域に対して順番に行われるガベージコレクション処理を含む。
【００２０】
また、第１１の発明は、第７の発明に係るガベージコレクションプログラムにおいて、前記旧世代領域の少なくとも一部の領域は、当該旧世代領域の他の領域と比較して生存期間が短いオブジェクトが存在する領域である。
【００２１】
また、第１２の発明は、第７の発明に係るガベージコレクションプログラムにおいて、前記新世代ガベージコレクション処理及び前記旧世代部分ガベージコレクション処理後に生き残ったオブジェクトを前記旧世代領域に統合して前記新世代領域を空にする旧世代更新処理をさらに有する。
【発明の効果】
【００２２】
本発明によれば、旧世代領域内のオブジェクトに対するＧＣを適宜実施するようにしたので、メモリの使用効率が高まるとともに、ヒープ領域全体に対するＧＣ処理の回数を低減することができる。
【発明を実施するための最良の形態】
【００２３】
まず、本実施形態の概略を説明する。本実施形態では、上記した世代別ガベージコレクション（以下、ＧＣと呼ぶ）処理の手順において、新世代領域に対するＧＣ処理を行う際に、旧世代部分領域抽出手段によって旧世代領域の一部の領域の抽出を行う。そして、新世代領域に対するＧＣ処理に関連して（ここではＧＣ処理と同時に）、旧世代部分領域抽出手段によってすでに抽出された旧世代領域の一部の領域に対するＧＣ処理を旧世代部分ＧＣ手段によって実行する。新世代領域に対するＧＣ処理と、旧世代領域の一部の領域に対するＧＣ処理の結果生存したオブジェクトは旧世代領域内に統合される。
【００２４】
以下に、図面を参照して本発明の実施形態を具体的に説明する。図１は、本発明の一実施形態に係るＧＣ装置の構成を示すブロック図である。ＧＣ装置は、ＧＣを行う対象となるオブジェクトが存在するヒープ領域１０と、ＧＣ動作の制御を行う制御手段２０とから構成される。
【００２５】
制御手段２０は、ヒープ領域１０にオブジェクトを生成するオブジェクト生成手段２１と、新世代領域のオブジェクトに対するＧＣ処理を行う新世代ＧＣ手段２２と、ヒープ領域全体に対するＧＣ処理を行う全体ＧＣ手段２３と、旧世代領域の更新を行う旧世代更新手段２４と、参照の有無やオブジェクト自体の生死の状態に基いて不要なオブジェクトを指定する不要オブジェクト指定手段２５と、旧世代領域から特定の一部の領域を抽出する旧世代部分領域抽出手段２６と、抽出した旧世代部分領域のオブジェクトに対するＧＣ処理を行う旧世代部分ＧＣ手段２７とから構成される。このように、本発明では、従来の世代別ＧＣ手段に加えて、旧世代部分領域抽出手段２６と、旧世代部分ＧＣ手段２７とを備えていることを特徴とする。
【００２６】
ここで、背景技術において説明した世代別ＧＣ処理の手順を再び取り上げる。新世代領域に対するＧＣ処理を行った際に生き残ったオブジェクトについては旧世代領域の左端部に寄せて格納しているため、旧世代領域の左側に存在するオブジェクトほど生存期間が長い、ということが言える。このことに関連して、「生存期間の長いオブジェクトほど、その後の生存期間も長い」ということを前提にすると、旧世代領域に含まれるオブジェクトの中で右側に存在するオブジェクトほど生存期間が短い、ということが言える。
【００２７】
そこで、本実施形態では、図２に示すようなヒープ領域１０において、新世代領域１０−２に対するＧＣ処理を行う（新世代領域１０−２に対するＧＣ処理は、新世代領域１０−２内のオブジェクトがある一定量になったときに行われる）際に、旧世代部分領域抽出手段２６によって、旧世代領域１０−３の右側に位置する、生存期間が短いと考えられる領域（旧世代部分領域）１０−４を抽出する。そして、この旧世代部分領域１０−４に対するＧＣ処理を新世代領域１０−２に対するＧＣ処理を行うときに実行するようにする。すなわち、図２においてＡで示される領域に対するＧＣ処理が同時に行われる。この際、新世代領域１０−２に対するＧＣ処理は新世代ＧＣ手段２２によって行われ、旧世代領域１０−４に対するＧＣ処理は旧世代部分ＧＣ手段２７によって行われるが、新世代ＧＣ手段２２と旧世代部分ＧＣ手段２７とを１つの手段としても良い。また、旧世代部分領域１０−４は、旧世代領域１０−３の一定比率の部分領域か、あるいは一定メモリサイズの大きさの部分領域として実現される。
【００２８】
なお、旧世代領域においてオブジェクトの生存期間が不明であるならば、ランダムあるいは一定の規則で旧世代領域の一部の領域に対するＧＣ処理を行うようにしてもよい。これによって、旧世代領域内のオブジェクトに対するＧＣ処理のタイミングを早い時期に設定することができる。一定の規則に従ったガベージコレクション処理としては、前回、新世代領域１０−２に存在したが、ガベージコレクション処理により新たに旧世代領域１０−３内に格納されたオブジェクトに対するガベージコレクション処理あるいは、旧世代領域１０−３を所定数に分割し、分割された各領域に対して順番に行われるガベージコレクション処理が考えられる。
【００２９】
図３（Ａ），（Ｂ）は、本実施形態の方法によりＧＣ処理を行った場合の効果を説明するための図である。旧世代領域１０−３のうちの旧世代部分領域１０−４に対するＧＣ処理を新世代領域１０−２に対するＧＣ処理と同時に行うことにより、従来方式による、新世代領域１０−２に対するＧＣ処理のみを行った場合（図３（Ａ））に比べて、回収されるオブジェクトの数が増えるために、ＧＣ処理を行った後の空き領域１０−１が増大する（図３（Ｂ））。言い換えると、旧世代領域１０−３に対するＧＣ処理を行うことにより、旧世代領域１０−３が増大する度合いが小さくなるか、あるいは、条件によっては、旧世代領域１０−３の大きさがＧＣ処理の実行前よりも小さくなることが考えられる。
【００３０】
以下に、図１および図４を参照して、本実施形態に係るＧＣ処理の手順を説明する。ヒープ操作を開始すると、まず、制御手段２０は、新世代領域内にオブジェクトを生成するかあるいはオブジェクトを破棄するかを判断する（ステップＳ１）。ここでの判断結果が「破棄」の場合には破棄処理（ステップＳ９）を実行して、ヒープ処理を終了する。ここでは、不要オブジェクト指定手段２５により不要なオブジェクトが指定された場合に、当該オブジェクトは「破棄」すべきであると判断される。
【００３１】
一方、ステップＳ１の判断結果が「生成」であった場合、制御手段２０は、新世代領域の空きが十分か否かを判断し（ステップＳ２）、「十分」の場合には、オブジェクト生成手段２１により新世代領域内にオブジェクトを生成して（ステップＳ１０）、ヒープ操作を終了する。
【００３２】
一方、ステップＳ２の判断結果が「不足」であった場合、制御手段２０は、ヒープ領域全体の空きが十分か否かを判断する（ステップＳ３）。ここでの判断結果が「不足」であった場合には、全体ＧＣ手段２３によりヒープ領域全体に対するＧＣ処理を行って（ステップＳ１１）、後述するステップＳ６に移行する。
【００３３】
一方、ステップＳ３の判断結果が「十分」であった場合には、旧世代部分領域抽出手段２６により、旧世代領域の中からＧＣ処理の対象とすべき一部の領域を抽出する（ステップＳ４）。次に、新世代ＧＣ手段２２により新世代領域に対するＧＣ処理を行うときに、旧世代部分ＧＣ手段２７により旧世代領域の一部に対するＧＣ処理を行う（ステップＳ５）。
【００３４】
次に、旧世代更新手段２４は、上記のＧＣ処理により生き残ったオブジェクトを旧世代領域内に統合して新世代領域を空にする（ステップＳ６）。次に、制御手段２０は、オブジェクト生成のための空きが十分かどうかを判断する（ステップＳ７）。ここでの判断結果が「不足」であった場合、制御手段２０は、オブジェクト生成失敗の通知を行って（ステップＳ１２）、ヒープ操作を終了する。一方、ステップＳ７の判断結果が「十分」であった場合には、オブジェクト生成手段２１により新世代領域内に新たなオブジェクトを生成して（ステップＳ８）、ヒープ操作を終了する。
【００３５】
上記した実施形態によれば、旧世代領域の中で生存期間が短いと考えられる回収されやすい領域に存在するオブジェクトを早い機会に回収することができるので、メモリ効率を高めるとともに、ヒープ領域全体に対するＧＣ処理の回数を低減することができる。
【図面の簡単な説明】
【００３６】
【図１】本発明の一実施形態に係るガベージコレクション装置の構成を示すブロック図である。
【図２】本実施形態に係るＧＣ処理手順を説明するための図である。
【図３】本実施形態の方法によりＧＣ処理を行った場合の効果を比較して示す図である。
【図４】本実施形態に係るＧＣ処理の手順を説明するためのフローチャートである。
【図５】世代別ＧＣ処理の手順を説明するための図（その１）である。
【図６】世代別ＧＣ処理の手順を説明するための図（その２）である。
【符号の説明】
【００３７】
１０…ヒープ領域、１０−１…空き領域、１０−２…新世代領域、１０−３…旧世代領域、１０−４…旧世代部分領域、２０…制御手段、２１…オブジェクト生成手段、２２…新世代ＧＣ手段、２３…全体ＧＣ手段、２４…旧世代更新手段、２５…不要オブジェクト指定手段、２６…旧世代部分領域抽出手段、２７…旧世代部分ＧＣ手段。
【図１】
2006039877.tif 000003
【図２】
2006039877.tif 000004
【図３】
2006039877.tif 000005
【図４】
2006039877.tif 000006
【図５】
2006039877.tif 000007
【図６】
2006039877.tif 000008