(57)【要約】【課題】  本発明は、プログラムの起動時や実行中において、ガーベージコレクション処理など、不要なデータを格納する記憶領域の回収処理を効率的に行うこと、同処理の処理時間を短縮することを目的とする。【解決手段】  プログラム実行装置１００において、記憶領域割当部４１が、アプリケーションプログラム１が生成するオブジェクトに第１のデータ領域８２を割り当て、領域解放部５２が、メモリ８を走査し、使用済のデータを格納するデータ領域を解放した後に、領域区分部３１が、第１のデータ領域８２が旧世代８１に含まれるようにメモリ８を旧世代８１と新世代８３に区分する。また、格納期間決定部４３が、オブジェクトを第２のデータ領域８４に格納する期間をオブジェクトのクラスに応じて決定し、データ移動部５１が、当該期間に基づいて新世代８３に格納されたオブジェクトを旧世代８１に移動する。【選択図】        図２
2006171927.tif 000002
【特許請求の範囲】
【請求項１】
データを生成して使用するプログラムを実行する実行部と、
前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部と、
前記実行部が実行したプログラムが生成したデータに、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域（以下、第１のデータ領域という。）を割り当てる記憶領域割当部と、
前記記憶部を走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放部と、
前記領域解放部が少なくとも一度、前記記憶部を走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放した後に、前記記憶部を、前記第１のデータ領域を含む第１の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第１の格納領域に含まれない一部のデータ領域（以下、第２のデータ領域という。）を含む第２の格納領域とを含む複数の格納領域に区分する領域区分部と、
前記実行部が実行したプログラムが生成したデータに、前記領域区分部が区分した第２の格納領域に含まれる第２のデータ領域を割り当てるデータ領域割当部と、
前記データ領域割当部が前記第２のデータ領域を割り当てたデータが前記第２のデータ領域に格納された期間に基づいて、前記領域区分部が区分した第１の格納領域に含まれる第１のデータ領域に前記データ領域割当部が前記第２のデータ領域を割り当てたデータを移動するデータ移動部とを備え、
前記領域解放部は、
前記領域区分部が区分した第２の格納領域を前記領域区分部が区分した第１の格納領域よりも高い頻度で走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放することを特徴とするプログラム実行装置。
【請求項２】
データを生成して使用するプログラムを実行する実行部と、
前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部と、
前記記憶部を、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域（以下、第１のデータ領域という。）を含む第１の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第１の格納領域に含まれない一部のデータ領域（以下、第２のデータ領域という。）を含む第２の格納領域とを含む複数の格納領域に区分する領域区分部と、
前記実行部が実行したプログラムが生成したデータに、前記領域区分部が区分した第２の格納領域に含まれる第２のデータ領域を割り当てるデータ領域割当部と、
前記データ領域割当部が前記第２のデータ領域を割り当てたデータの種類を判別するデータ判別部と、
前記データ判別部が判別した結果に応じて、前記データ領域割当部が前記第２のデータ領域を割り当てたデータが前記第２のデータ領域に格納される格納期間を決定する格納期間決定部と、
前記格納期間決定部が決定した格納期間に基づいて、前記領域区分部が区分した第１の格納領域に含まれる第１のデータ領域に前記データ領域割当部が前記第２のデータ領域を割り当てたデータを移動するデータ移動部と、
前記領域区分部が区分した第２の格納領域を前記領域区分部が区分した第１の格納領域よりも高い頻度で走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放部とを備えることを特徴とするプログラム実行装置。
【請求項３】
前記プログラム実行装置は、さらに、
前記データ領域割当部が前記第２のデータ領域を割り当てたデータの種類に応じて、前記データ領域割当部が前記第２のデータ領域を割り当てたデータが前記第２のデータ領域に格納される期間を予め設定した設定期間情報を保持する設定期間保持部を備え、
前記格納期間決定部は、
前記設定期間保持部が保持する設定期間情報を参照して、前記格納期間を決定することを特徴とする請求項２に記載のプログラム実行装置。
【請求項４】
前記プログラム実行装置は、さらに、
前記実行部が実行したプログラムが生成したデータの種類に応じて、前記実行部が実行したプログラムが生成したデータが格納されるデータ領域が含まれる格納領域を、前記領域区分部が区分した複数の格納領域のうち少なくとも１つに制限する領域制限部を備えることを特徴とする請求項２又は３に記載のプログラム実行装置。
【請求項５】
前記プログラムは、データとして、オブジェクトを生成して使用するオブジェクト指向プログラムであり、
前記実行部が実行したプログラムが生成したデータの種類は、オブジェクトの属するクラスであることを特徴とする請求項２から４までのいずれかに記載のプログラム実行装置。
【請求項６】
前記プログラム実行装置は、さらに、
前記記憶部の片側に前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を詰める領域整理部を備えることを特徴とする請求項１から５までのいずれかに記載のプログラム実行装置。
【請求項７】
前記プログラムは、他のデータとの参照関係のあるデータを生成し、
前記領域解放部は、
前記記憶部が有する複数のデータ領域に格納されたデータ間の参照関係の起点となるルートから、当該参照関係を順番に辿ってデータをマークし、マークされていないデータを格納するデータ領域を解放し、
前記プログラム実行装置は、さらに、
特定のデータを前記ルートとして設定するルート設定部を備えることを特徴とする請求項１から６までのいずれかに記載のプログラム実行装置。
【請求項８】
データを生成して使用するプログラムを実行する実行部と、前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部とを備えるプログラム実行装置を用いるプログラム実行方法において、
前記実行部が前記プログラムを実行する実行ステップと、
前記実行ステップで実行したプログラムが生成したデータに、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域（以下、第１のデータ領域という。）を割り当てる記憶領域割当ステップと、
前記記憶部を走査し、前記実行ステップで実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放ステップと、
前記領域解放ステップで少なくとも一度、前記記憶部を走査し、前記実行ステップで実行したプログラムが使用済のデータを格納するデータ領域を解放した後に、前記記憶部を、前記第１のデータ領域を含む第１の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第１の格納領域に含まれない一部のデータ領域（以下、第２のデータ領域という。）を含む第２の格納領域とを含む複数の格納領域に区分する領域区分ステップと、
前記実行ステップで実行したプログラムが生成したデータに、前記領域区分ステップで区分した第２の格納領域に含まれる第２のデータ領域を割り当てるデータ領域割当ステップと、
前記データ領域割当ステップで前記第２のデータ領域を割り当てたデータが前記第２のデータ領域に格納された期間に基づいて、前記領域区分ステップで区分した第１の格納領域に含まれる第１のデータ領域に前記データ領域割当ステップで前記第２のデータ領域を割り当てたデータを移動するデータ移動ステップとを備え、
前記領域解放ステップは、
前記領域区分ステップで区分した第２の格納領域を前記領域区分ステップで区分した第１の格納領域よりも高い頻度で走査し、前記実行ステップで実行したプログラムが使用済のデータを格納するデータ領域を解放することを特徴とするプログラム実行方法。
【請求項９】
データを生成して使用するプログラムを実行する実行部と、前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部とを備えるプログラム実行装置を用いるプログラム実行方法において、
前記実行部が前記プログラムを実行する実行ステップと、
前記記憶部を、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域（以下、第１のデータ領域という。）を含む第１の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第１の格納領域に含まれない一部のデータ領域（以下、第２のデータ領域という。）を含む第２の格納領域とを含む複数の格納領域に区分する領域区分ステップと、
前記実行ステップで実行したプログラムが生成したデータに、前記領域区分ステップで区分した第２の格納領域に含まれる第２のデータ領域を割り当てるデータ領域割当ステップと、
前記データ領域割当ステップで前記第２のデータ領域を割り当てたデータの種類を判別するデータ判別ステップと、
前記データ判別ステップで判別した結果に応じて、前記データ領域割当ステップで前記第２のデータ領域を割り当てたデータが前記第２のデータ領域に格納される格納期間を決定する格納期間決定ステップと、
前記格納期間決定ステップで決定した格納期間に基づいて、前記領域区分ステップで区分した第１の格納領域に含まれる第１のデータ領域に前記データ領域割当ステップで前記第２のデータ領域を割り当てたデータを移動するデータ移動ステップと、
前記領域区分ステップで区分した第２の格納領域を前記領域区分ステップで区分した第１の格納領域よりも高い頻度で走査し、前記実行ステップで実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放ステップとを備えることを特徴とするプログラム実行方法。
【請求項１０】
データを生成して使用するプログラムを実行する実行部と、前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部とを備えるプログラム実行装置を用いるデータ領域管理プログラムにおいて、
前記実行部が実行したプログラムが生成したデータに、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域（以下、第１のデータ領域という。）を割り当てる記憶領域割当処理と、
前記記憶部を走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放処理と、
前記領域解放処理が少なくとも一度、前記記憶部を走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放した後に、前記記憶部を、前記第１のデータ領域を含む第１の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第１の格納領域に含まれない一部のデータ領域（以下、第２のデータ領域という。）を含む第２の格納領域とを含む複数の格納領域に区分する領域区分処理と、
前記実行部が実行したプログラムが生成したデータに、前記領域区分処理が区分した第２の格納領域に含まれる第２のデータ領域を割り当てるデータ領域割当処理と、
前記データ領域割当処理が前記第２のデータ領域を割り当てたデータが前記第２のデータ領域に格納された期間に基づいて、前記領域区分処理が区分した第１の格納領域に含まれる第１のデータ領域に前記データ領域割当処理が前記第２のデータ領域を割り当てたデータを移動するデータ移動処理とをコンピュータに実行させ、
前記領域解放処理は、
前記領域区分処理が区分した第２の格納領域を前記領域区分処理が区分した第１の格納領域よりも高い頻度で走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放することを特徴とするデータ領域管理プログラム。
【請求項１１】
データを生成して使用するプログラムを実行する実行部と、前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部とを備えるプログラム実行装置を用いるデータ領域管理プログラムにおいて、
前記記憶部を、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域（以下、第１のデータ領域という。）を含む第１の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第１の格納領域に含まれない一部のデータ領域（以下、第２のデータ領域という。）を含む第２の格納領域とを含む複数の格納領域に区分する領域区分処理と、
前記実行部が実行したプログラムが生成したデータに、前記領域区分処理が区分した第２の格納領域に含まれる第２のデータ領域を割り当てるデータ領域割当処理と、
前記データ領域割当処理が前記第２のデータ領域を割り当てたデータの種類を判別するデータ判別処理と、
前記データ判別処理が判別した結果に応じて、前記データ領域割当処理が前記第２のデータ領域を割り当てたデータが前記第２のデータ領域に格納される格納期間を決定する格納期間決定処理と、
前記格納期間決定処理が決定した格納期間に基づいて、前記領域区分処理が区分した第１の格納領域に含まれる第１のデータ領域に前記データ領域割当処理が前記第２のデータ領域を割り当てたデータを移動するデータ移動処理と、
前記領域区分処理が区分した第２の格納領域を前記領域区分処理が区分した第１の格納領域よりも高い頻度で走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放処理とをコンピュータに実行させることを特徴とするデータ領域管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不要なデータを格納する記憶領域の回収処理を行うプログラム実行装置及びプログラム実行方法及びデータ領域管理プログラムに関するものである。特に、ガーベージコレクション（ＧＣ：Ｇａｒｂａｇｅ  Ｃｏｌｌｅｃｔｉｏｎ）に係る旧世代と新世代の区分方法などを用いるプログラム実行装置及びプログラム実行方法及びデータ領域管理プログラムに関するものである。
【背景技術】
【０００２】
非特許文献１では、特集として、主要なほとんどのガーベージコレクションに関する技術が掲載され開示されている。
【０００３】
通常の動的メモリ領域（記憶領域又はデータ領域ともいう。）を利用するプログラム実行環境においては、アプリケーションプログラム（アプリケーション又はアプリケーションソフトウェアともいう。）の実行により必要なメモリ量が動的に処理系に要求され、処理系で適切な大きさのメモリ領域を用意してアプリケーションプログラムに使わせる。複数のメモリ領域又はそのメモリ領域内のデータが複雑にポインタなどでリンクされている場合には、一旦利用したメモリ領域が不要になる場合も多々あり、これをリアルタイムに管理していくのは手間のかかる処理である。動的なメモリ領域が複雑に何箇所も利用されている場合、アプリケーションプログラムが不要であるという指定をしないかぎりは、ポインタが切れる処理が行われるたびにメモリ内を走査して不要なメモリ領域を探し出す必要が生じる。
【０００４】
このような問題を解決する手法として、従来からガーベージコレクションという手法が利用されている。ガーベージコレクション処理は、動的にメモリ領域が必要にもかかわらず、メモリ領域が確保できない場合に実行されることが多い。ガーベージコレクション処理では、まず、システムの決まったルートと呼ばれるところから生きているメモリ領域（例えば、他のメモリ領域とのリンクが切れていないメモリ領域をいう。）を順番に手繰ってマークし、まだ必要なメモリ領域を特定する。マークされなかったメモリ領域はシステムからアクセス不可能だったエリアであり、もう利用されないと判断し、これを回収し要求された処理に対してメモリ領域として提供する。
【０００５】
動的なメモリ領域がヒープ領域内に割り当てられてからの時間に着目した場合、多くのアプリケーションにおいて、以下の点が特性として知られている。
１）割り当てられてからの時間が短いメモリ領域ほどゴミ（動的に確保されたメモリ領域が使用済みとなったもの）になりやすい。
２）参照関係は、割り当てられてからの時間が短いメモリ領域から割り当てられてからの時間が長いメモリ領域を参照するものがほとんどである。
【０００６】
この特性を利用して、非特許文献２において、世代別ガーベージコレクションと呼ばれる処理方式が提案されている。この世代別ガーベージコレクションの特徴は、割り当てられてからの時間が短いメモリ領域を一つの領域（新世代と呼ぶ。）に集めて、その領域だけに対して頻繁にガーベージコレクションを行うというものである。
【０００７】
上記の１）から、新世代に対して頻繁にガーベージコレクションを行うことで、少ない労力で多くのゴミを回収できることが期待できる。新世代のガーベージコレクションに関しては、領域外（新世代に対して旧世代と呼ぶ。）から新世代への参照も考慮する必要があるが、上記の２）から、これは少ないということがいえる。動的に確保したメモリ領域は、その割り当ててからの時間により任意の世代に分割することができる。ガーベージコレクション処理を一定回数行った後、ゴミとならなかった（生き延びた）動的な領域は、新世代から旧世代に移動させる。
【０００８】
動的に確保するメモリ領域の確保からゴミとなるまでの生存時間に着目した世代別ＧＣ方式は、動的なメモリ領域のライフサイクルに基づいた有効な方式であるが、同時に以下のような短所を持っている。
１）生存期間の長いメモリ領域は、新世代から旧世代への複製を伴うことになる。そのため、生存期間が長いメモリ領域が多く生成されるアプリケーションに関しては、処理効率が悪くなる。
２）旧世代に対するガーベージコレクションの処理は、新世代に対するガーベージコレクションの処理に比べて、発生頻度が少なくなる。しかし、旧世代に属する動的なメモリ領域は一般にデータサイズが大きいため、長い処理時間を要する。
【０００９】
上記の問題点を解決するために、特許文献１において、コンパイル装置を導入し、ガーベージコレクション処理を効率化し、処理時間を短縮する方法が開示されている。
【特許文献１】特開２００１−１８４２１９号公報
【非特許文献１】「ごみ集めの基礎と最近の動向」、情報処理学会会誌、Ｖｏｌ．３５、Ｎｏ．１１、１９９４年１１月、ｐ．９９１〜１０３２
【非特許文献２】“Ａ  Ｒｅａｌ−Ｔｉｍｅ  Ｇａｒｂａｇｅ  Ｃｏｌｌｅｃｔｏｒ  Ｂａｓｅｄ  ｏｎ  ｔｈｅ  Ｌｉｆｅｔｉｍｅｓ  ｏｆ  Ｏｂｊｅｃｔｓ”、Ｃｏｍｍ．  ＡＣＭ、Ｖｏｌ．２６、Ｊｕｎｅ  １９８３
【発明の開示】
【発明が解決しようとする課題】
【００１０】
上記のように、コンパイル装置を導入する方法では、実行するプログラムをそのコンパイル時に解析する必要があった。しかし、近年利用されているオブジェクト指向の環境であるＪａｖａ（登録商標）などでは、アプリケーションは動的に取り込むことが可能であり、実行するまでは、アプリケーション全体の挙動を知ることができない。
【００１１】
本発明は、プログラムの起動時や実行中において、ガーベージコレクション処理など、不要なデータを格納する記憶領域の回収処理を効率的に行うことを目的とする。また、同処理の処理時間を短縮することを目的とする。
【課題を解決するための手段】
【００１２】
本発明のプログラム実行装置は、
データを生成して使用するプログラムを実行する実行部と、
前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部と、
前記実行部が実行したプログラムが生成したデータに、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域（以下、第１のデータ領域という。）を割り当てる記憶領域割当部と、
前記記憶部を走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放部と、
前記領域解放部が少なくとも一度、前記記憶部を走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放した後に、前記記憶部を、前記第１のデータ領域を含む第１の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第１の格納領域に含まれない一部のデータ領域（以下、第２のデータ領域という。）を含む第２の格納領域とを含む複数の格納領域に区分する領域区分部と、
前記実行部が実行したプログラムが生成したデータに、前記領域区分部が区分した第２の格納領域に含まれる第２のデータ領域を割り当てるデータ領域割当部と、
前記データ領域割当部が前記第２のデータ領域を割り当てたデータが前記第２のデータ領域に格納された期間に基づいて、前記領域区分部が区分した第１の格納領域に含まれる第１のデータ領域に前記データ領域割当部が前記第２のデータ領域を割り当てたデータを移動するデータ移動部とを備え、
前記領域解放部は、
前記領域区分部が区分した第２の格納領域を前記領域区分部が区分した第１の格納領域よりも高い頻度で走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放することを特徴とする。
【発明の効果】
【００１３】
本発明では、記憶領域割当部が、プログラムが生成するデータに第１のデータ領域を割り当て、領域解放部が、記憶部を走査し、使用済のデータを格納するデータ領域を解放した後に、領域区分部が、第１のデータ領域が第１の格納領域に含まれるように記憶部を第１の格納領域と第２の格納領域に区分することにより、プログラムの起動時や実行中において、不要なデータを格納する記憶領域の回収処理の処理時間を短縮することができる。
【００１４】
また、本発明では、格納期間決定部が、プログラムが生成するデータを第２のデータ領域に格納する期間をデータの種類に応じて決定し、データ移動部が、当該期間に基づいて第２の格納領域に格納されたデータを第１の格納領域に移動することにより、プログラムの起動時や実行中において、不要なデータを格納する記憶領域の回収処理を効率的に行うことができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態について、図を用いて説明する。
【００１６】
図１は、下記実施の形態におけるプログラム実行装置のハードウェア構成の一例を示す図である。
【００１７】
図１において、プログラム実行装置１００は、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９１１を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）表示装置９０１、キーボード（Ｋ／Ｂ）９０２、マウス９０３、ＦＤＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）９０４、磁気ディスク装置９２０、コンパクトディスク装置（ＣＤＤ）９０５、プリンタ装置９０６と接続されている。
【００１８】
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
【００１９】
通信ボード９１５は、ローカルエリアネットワーク（ＬＡＮ）、インターネット、あるいはＩＳＤＮ（Ｉｎｔｅｇｒａｔｅｄ  Ｓｅｒｖｉｃｅｓ  Ｄｉｇｉｔａｌ  Ｎｅｔｗｏｒｋ）などのＷＡＮ（ワイドエリアネットワーク）に接続されている。
【００２０】
例えば、通信ボード９１５、Ｋ／Ｂ９０２、ＦＤＤ９０４などは、入力部の一例である。また、例えば、通信ボード９１５、ＣＲＴ表示装置９０１などは、出力部の一例である。
【００２１】
磁気ディスク装置９２０には、オペレーティングシステム（ＯＳ）９２１、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３は、ＣＰＵ９１１、ＯＳ９２１、ウィンドウシステム９２２により実行される。
【００２２】
上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。ＣＰＵ９１１は、実行部の一例である。
【００２３】
ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明するものが、「〜ファイル」として記憶されている。
【００２４】
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータの入出力を示し、そのデータの入出力のためにデータは、磁気ディスク装置９２０、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）、光ディスク、ＣＤ（コンパクトディスク）、ＭＤ（ミニディスク）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）などのその他の記録媒体に記録される。あるいは、信号線やその他の伝送媒体により伝送される。
【００２５】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。あるいは、ソフトウェアのみ、あるいは、ハードウェアのみ、あるいは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
【００２６】
また、以下に述べる実施の形態を実施するプログラム（データ領域管理プログラム）は、また、磁気ディスク装置９２０、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）、光ディスク、ＣＤ（コンパクトディスク）、ＭＤ（ミニディスク）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）などのその他の記録媒体による記録装置を用いて記憶されても構わない。
【００２７】
また、プログラム実行装置１００は、携帯電話機やゲーム機など、他の種類の電子機器であってもよい。
【００２８】
下記実施の形態は、動的にメモリ領域を確保して実行する処理系において、構造が複雑で一旦使用したメモリ領域が不要になったかどうかを判定するために決まったルートから順番にメモリ領域をたぐりマークをつけていき、マークのなかったメモリ領域が不要であるとして回収し、必要に応じてメモリ領域のコンパクションを行うガーベージコレクション処理に関するものである。
【００２９】
特に、動的に確保するメモリ空間を、動的に確保したメモリ領域がゴミとなるまでの、生存期間に着目して効率的にガーベージコレクションを行う方式に関して、メモリ空間を区分する方法に関するものである。
【００３０】
下記実施の形態は、確保の時期及び動的な領域の用途ごとに、メモリ領域が確保されてからゴミとなるまでの生存時間が異なることに着目し、ガーベージコレクション処理によるプログラム実行装置の負担を軽減することを目的としている。
【００３１】
具体的には、アプリケーション起動直後に、世代別ガーベージコレクションの準備手段を設けて、旧世代となるメモリ領域を設定することで、新世代から旧世代への移動処理やガーベージコレクション時に行われる生存期間の確認処理を削減する。また、動的なメモリ領域を確保する際に、そのメモリ領域の用途を示す情報（オブジェクト指向言語では、例えばクラスである。）を基に、属する世代を限定、又は世代に属する生存期間の長さを設定することで、新世代から旧世代への移動処理やガーベージコレクション時に行われる生存期間の確認処理を削減する。
【００３２】
実施の形態１．
現在のコンピュータの言語処理系においては、ユーザインタフェース（ＵＩ）を持たない言語処理系は存在しない。コンピュータの言語処理系のユーザインタフェースを構成する部品は、コンピュータを動作させるための基本ソフトウェアであるＯＳにライブラリとして取り込まれることにより、各アプリケーションソフトウェアの開発量を削減している。さらに、アプリケーションソフトウェアの配布が容易となっている。
【００３３】
このようなコンピュータの言語処理系の進歩により、言語処理系がユーザインタフェースの部品ごと又はユーザインタフェースの実装単位ごとに、動的に確保されるメモリ領域の用途を把握できることとなった。本実施の形態は、このようなコンピュータの特徴を利用することにより、世代別ガーベージコレクション処理において、動的なメモリ領域の確保の時期及びメモリ領域の用途ごとに、メモリ領域が確保されてからゴミとなるまでの生存時間が異なることに着目し、ガーベージコレクション処理によるプログラム実行装置の負担を軽減する。
【００３４】
図２は本実施の形態に係るプログラム実行装置の構成を示すブロック図である。
【００３５】
プログラム実行装置１００は、メモリ８中の使用されていない記憶領域を回収するガーベージコレクション処理によって、回収した記憶領域をプログラムに動的に割り当てるプログラム実行環境を備えている。
【００３６】
アプリケーションプログラム１は、ユーザインタフェースライブラリ２を用いて、ＵＩ部品を構成し、メモリ領域を確保して処理を実行する場合には処理系７に対してメモリ領域の確保を要求し、使用者（ユーザ）との対話的な処理を行うプログラムである。
【００３７】
ユーザインタフェースライブラリ２は、アプリケーションプログラム１がＵＩ機能を呼び出すために用意されているプログラムのライブラリである。ユーザインタフェースライブラリ２は、処理系７に対してメモリ領域の確保を要求する。
【００３８】
実行部７１は、ＣＰＵなどを含み、アプリケーションプログラム１及びユーザインタフェースライブラリ２の処理を実行する。
【００３９】
動的メモリ確保部４は、記憶領域割当部４１、データ領域割当部４２を含む。記憶領域割当部４１は、処理系７に対して行われたメモリ領域確保の要求に対して、メモリ８中の使用されていない記憶領域を提供する処理を行う。
【００４０】
世代別ガーベージコレクション部５は、データ移動部５１、領域解放部５２、領域整理部５３、格納期間決定部５４を含み、新世代（第２の格納領域）８３の、現在プログラムに利用されている記憶領域（第２のデータ領域８４）をマークして、使用されていない記憶領域（第２のデータ領域８４）を回収するガーベージコレクターを実行する。また、ガーベージコレクターの処理のみでは、十分な大きさの連続したメモリ領域が確保できない場合には、メモリ８のコンパクションを実施する。さらに、新世代８３において、要求されたメモリ領域を確保できない場合には、旧世代（第１の格納領域）８１に対して同様の処理が実施される。
【００４１】
本実施の形態において、「（記憶部を）走査する」とは、メモリ８中の一旦使用したメモリ領域が不要になったかどうか（使用済であるかどうか）を判定するために決まったルートから順番にメモリ領域をたぐりマークをつけていくことをいい、「（データ領域を）解放する」又は「（メモリ領域を）回収する」とは、マークのなかったメモリ領域が不要であるとして当該メモリ領域を確保されていない状態に戻すことをいう。また、「（データ領域を）詰める」又は「（メモリの）コンパクションを行う」とは、メモリ８中に分散した記憶領域であって、確保されている記憶領域を一箇所に集めることをいう（使用されていない記憶領域を一箇所に集めることと同じ）。
【００４２】
メモリ（記憶部）８は、ガーベージコレクション処理の対象となり、アプリケーションプログラム１及びユーザインタフェースライブラリ２の実行に必要な記憶領域を有する。
【００４３】
世代別ＧＣ準備部３は、領域区分部３１、ルート設定部３２を含み、アプリケーションの起動時に、世代別ガーベージコレクション部５にガーベージコレクション処理とメモリコンパクション処理を実施させ、アプリケーションの起動時に確保した領域を、メモリ上で一箇所に集約させる。
【００４４】
処理系７は、動的メモリを管理する必要のあるような言語処理系又はＯＳを含む。本実施の形態では、処理系７は、Ｃ＋＋、Ｊａｖａ（登録商標）などのオブジェクト指向言語の処理系とし、メモリ領域の使用種別（メモリ領域の用途又はデータの種類ともいう。）とは、例えばメモリ領域を確保する際に、その役割が明確にされたクラスである。この場合、具体的には、確保されたメモリ領域の一部に書き込まれるオブジェクト（データの一例）のヘッダ情報などからクラスが判別される。ここで、処理系７がＦＯＲＴＲＡＮやＣなどの言語処理系であれば、メモリ確保関数を用意し、確保された関数を特定することにより、メモリ領域の用途を区別してもよい。
【００４５】
用途判定部６は、データ判別部６１、設定期間保持部６２、領域制限部６３を含み、動的メモリ確保部４が行うメモリ領域確保の処理時に、確保されるメモリ領域の用途、即ちオブジェクトが属するクラスに応じて、そのオブジェクトが世代に属する生存期間を示す情報であるライフカウンタ（格納期間の一例）の値を返す。このように、本実施の形態では、動的なメモリ領域の用途は、オブジェクト指向言語におけるクラス名にて特定する。
【００４６】
また、用途判定部６は、世代別ガーベージコレクション部５が行うガーベージコレクション処理時に、ガーベージコレクション処理の対象となっている動的なメモリ領域の用途に対応させた世代指定の情報を返す。
【００４７】
次に、プログラム実行装置１００の動作について、図３を用いて説明する。
【００４８】
図３は、プログラム実行装置１００が行うアプリケーションプログラム１の起動から終了までの動作を示すフローチャートである。
【００４９】
まず、ステップＳ１０１で、実行部７１において、ユーザインタフェースライブラリ２は、ユーザインタフェースの処理に必要なオブジェクトの作成を行う。ユーザインタフェースの処理に必要なオブジェクトには、プログラム実行装置１００の画面などの出力部への出力を扱うオブジェクト、ユーザからの入力であるキーイベントなど、入力部からの入力を扱うオブジェクト、アプリケーションの終了イベントを扱うイベント管理オブジェクトを含む。また、その他にも、サウンドの再生、終了を扱うサウンド管理オブジェクトなども含む。これらのユーザインタフェースを管理するオブジェクトは、処理系７に対してメモリ領域確保の要求が行われると、処理系７の動的メモリ確保部４において、記憶領域割当部４１により、動的なメモリ領域として確保される。動的メモリ確保部４の処理については、用途判定部６の説明とともに後述する。
【００５０】
次に、ステップＳ１０２で、実行部７１において、ユーザインタフェースライブラリ２は、アプリケーションプログラム１内の開始処理関数の呼出を行う。アプリケーションプログラム１の開始処理関数では、アプリケーションが表示する画像、サウンド、文字列などのアプリケーションを構成するオブジェクトを生成する。これらのアプリケーションが利用するオブジェクトは、処理系７に対してメモリ領域確保の要求が行われると、処理系７の動的メモリ確保部４において、記憶領域割当部４１により、動的なメモリ領域として確保される。
【００５１】
ここで、ステップＳ１０２が終了した直後の処理系７が管理するメモリ８の使用状況を図４に概略的に示して説明する。図４は、メモリ８のメモリ領域を管理する単位であるセルを、確保されている領域（黒っぽい部分）、確保されているが使用されていない領域（水玉模様の部分）、確保も使用もされていない領域（白い部分）に分類して示している。図４は、概念的に示したものであり、実際のメモリ領域は、図に示した数よりも多数のセルによって管理されている。
【００５２】
ステップＳ１０２が終了した直後のメモリ８には、ユーザインタフェースライブラリ２及びアプリケーションプログラム１が生成したオブジェクトが、確保されている領域（黒っぽい部分）として存在している。また、ユーザインタフェースライブラリ２及びアプリケーションプログラム１が生成したオブジェクトを構成するための中間データとして利用されたオブジェクトが、確保されているが使用されていない領域（水玉模様の部分）として残されている。
【００５３】
メモリ８に存在する確保されているが使用されていない領域（水玉模様の部分）に存在する中間データには、例えば、画面に描画できるデータ形式に展開前のデータ、つまりＧＩＦ形式などの画像データが存在する。ＧＩＦ形式を代表とする画像データは、圧縮アルゴリズムを用いて圧縮されており、プログラム実行装置１００の画面に描画するためにはデコード処理を行う必要がある。また、サウンドデータを生成する際にも同様な中間データが存在する。さらに、ユーザと対話的に処理を行うための文字列についても中間データが存在する。例えば、複数の文字列を連結した場合には、連結された文字列は新たなオブジェクトとして生成される。そのため、連結前の２つの文字列は確保されているが使用されていない領域（水玉模様の部分）として、メモリ８に存在することになる。
【００５４】
次に、世代別ＧＣ準備部３において、ステップＳ１０３の世代別ＧＣの準備処理が行われる。世代別ＧＣ準備部３は、世代別ガーベージコレクション部５を用いて、ガーベージコレクション処理及びメモリコンパクション処理を実施する。
【００５５】
ここで、世代別ガーベージコレクション部５のメモリコンパクション処理が終了した直後の処理系７が管理するメモリ８の使用状況を図５に概略的に示して説明する。確保されているが使用されていない領域（水玉模様の部分）は、世代別ガーベージコレクション部５の領域解放部５２が行うマーク処理及び回収処理により解放されている。また、領域整理部５３が行うメモリコンパクション処理により、確保されている領域（黒っぽい部分）が前方に集められている状態となる。
【００５６】
世代別ＧＣ準備部３の領域区分部３１は、世代別ガーベージコレクション部５に依頼して実施したガーベージコレクション処理及びメモリコンパクション処理の後、旧世代と新世代の境界面を設定する。旧世代と新世代の境界面は、現在使用中の領域から一定のメモリ量を加えた位置に設定する。図５には、その境界面を斜線部分で示している。世代別ＧＣ準備部３が設定した境界面は、世代別ガーベージコレクション部５が行うガーベージコレクション処理の世代の境界面として扱われることになる。ここで、現在使用中の領域のみが旧世代となるように境界面を設置してもよい。また、一度境界面を設置した後に、旧世代に含まれる領域を増やしてもよい。本実施の形態では、メモリコンパクション処理を行った後に世代を区分しているため、各世代のメモリ領域は全てが連続しているが、各世代がそれぞれ１箇所ずつにまとめられていなくてもよい。
【００５７】
図５で示した旧世代のメモリ領域に存在するオブジェクトは、アプリケーションプログラム１及びユーザインタフェースライブラリ２が生成したオブジェクトである。これらのオブジェクトは、アプリケーションが終了するまで使用され続ける可能性が非常に高く、旧世代として扱われるオブジェクトである。特に、ゲームなどのユーザインタフェースが多彩なアプリケーションは、起動時にこのようなオブジェクトを大量に生成する。
【００５８】
このように、アプリケーションの起動時に、世代別ＧＣ準備部３を設けて、Ｓ１０３を実施することにより、アプリケーションの起動時に生成されるオブジェクトを新世代から旧世代への複製無しに旧世代として扱うことができるため、アプリケーションが対話的に使用される段階での世代別ガーベージコレクション処理のプログラム実行装置の負担を軽減することが可能となる。
【００５９】
さらに、ステップＳ１０３の世代別ＧＣの準備処理では、世代別ＧＣ準備部３のルート設定部３２が、短命なオブジェクトを管理するオブジェクトをルートとして設定する処理を行う。本処理についての説明は後述する。
【００６０】
ステップＳ０１０４では、ユーザとの対話的な処理を行うためのイベント処理ループが開始される。プログラム実行装置１００のユーザがキーを入力すると、入力したキーは、処理系７において動的メモリ確保部４によりイベントオブジェクトとして生成される。生成されるイベントオブジェクトには、入力されたキーごとの意味を示す情報が含まれている。例えば、右“→”キーが押されたこと、アプリケーションの終了要求キーが押されたことを示す情報が含まれている。そのイベントオブジェクトは、ユーザインタフェースライブラリ２のイベント管理オブジェクトに参照ポインタとしてつながれることで登録される。
【００６１】
ユーザインタフェースライブラリ２は、ステップＳ１０５において、イベント管理オブジェクトに登録されているイベントオブジェクトを参照し、そのイベントがアプリケーションの終了イベントであるかを確認する。終了イベントであれば、ステップＳ１０８に進み、アプリケーションプログラム１が生成した処理オブジェクトの終了処理及び解放処理が行われる。さらに、ステップＳ１０９に進み、ユーザインタフェースライブラリ２が生成した処理オブジェクトの終了処理及び解放処理が行われる。
【００６２】
ユーザインタフェースライブラリ２が、ステップＳ１０５において参照したイベントオブジェクトがアプリケーションの終了イベントでなかった場合、ステップＳ１０６に進む。ユーザインタフェースライブラリ２は、ステップＳ０１０６において、イベントに対応した処理を行う。例えば、右“→”キーを押したことを示すイベントであれば、アプリケーションプログラム１が起動時に登録した右“→”キーの関数を呼び出す。アプリケーションプログラム１が登録した右“→”キーの処理関数では、画像を右に移動させる処理や文字列を表示するなど、プログラム実行装置１００のユーザとの対話的な処理を実行する。
【００６３】
画像を右に移動させる処理では、現在、画像が描画されている画面の領域を背景に描き直す処理や画像を右に移動した位置に描画する処理が行われる。このような描画処理を行う場合、描画処理を行うイベントして、ユーザインタフェースライブラリ２に対して処理の要求が行われる。ユーザインタフェースライブラリ２は、イベント管理オブジェクトに描画処理の要求イベントを登録する関数をアプリケーションプログラム１に対して公開している。アプリケーションプログラム１は、処理系７を用いて新たな描画イベントを生成し、イベント管理オブジェクトに登録する。また、文字列を表示する場合であれば、処理系７を用いて新たな文字列オブジェクトと描画イベントを生成し、イベント管理オブジェクトに登録する。
【００６４】
ステップＳ１０７は、イベント処理ループの終点を示しており、ここからステップＳ１０４に戻ってイベント処理が継続して行われる。以上のステップＳ１０４からステップＳ１０７に示すような処理を実行し、描画イベントのオブジェクトや文字列オブジェクトを生成しながら、ユーザインタフェースライブラリ２は、アプリケーションプログラム１の対話的な処理を実現する。また、ユーザインタフェースライブラリ２は、描画イベントを処理した後、イベント管理オブジェクトから処理した描画イベントの参照ポインタを破棄する。また、文字列の描画時に用いられた文字列オブジェクトの参照ポインタも破棄されることになる。
【００６５】
ユーザインタフェースライブラリ２が行うプログラム実行装置１００のユーザとの対話的な処理では、短命なオブジェクトが大量に生成され、処理された後は使用されないオブジェクトがゴミとしてメモリ８が有するメモリ領域に存在することになる。
【００６６】
ここで、図６を用いて、短命なオブジェクトを管理するオブジェクトが旧世代として扱われる際のライトバリアの処理を説明する。図６は、メモリ８の記憶領域の旧世代、新世代を左右に分割した状態で示している。また、各オブジェクトの参照関係を示している。また、短命なオブジェクトを管理するオブジェクトとして、代表的なイベント管理オブジェクト２０１を例として記載している。
【００６７】
短命なオブジェクトを管理するオブジェクトは、短命なオブジェクトの参照ポインタを保持している。そのため、世代別ガーベージコレクション方式では、旧世代のオブジェクトに対して、新世代のオブジェクトへの参照ポインタを設定する場合に、ライトバリアと呼ばれる処理を行う必要がある。
【００６８】
イベント管理オブジェクト２０１が旧世代に属する場合、イベント管理オブジェクト２０１に登録されるオブジェクトの生成と破棄が繰り返される。そのため、イベント管理オブジェクト２０１のイベント（イベントオブジェクト）２０２の参照ポインタは、旧世代から新世代に対する参照として存在することになる。世代別ガーベージコレクション処理では、新世代に属するオブジェクトの参照関係を精査する。そのため、旧世代に属するオブジェクトに対して、新世代に属するオブジェクトへの参照ポインタが設定される際には、ライトバリアとして設定するオブジェクトが属する世代を確認し、その参照ポインタを特別な扱いとしてルートセット（ルート）として登録しなければならない。
【００６９】
つまり、イベント管理オブジェクト２０１のような新世代に属するイベント２０２への参照ポインタの保持及び廃棄を繰り返すオブジェクトが、旧世代に属した場合には、ライトバリアの確認処理が頻発する上に、ルートセットの登録と解除が繰り返されることになる。
【００７０】
前述したステップＳ１０３の世代別ＧＣの準備処理で行う短命なオブジェクトを管理するオブジェクトをルートとして設定する処理を行う（具体的には、イベント管理オブジェクト２０１をルートとして設定する）ことで、ライトバリアの確認処理及びルートセットの登録と解除の処理を削減することが可能となる。
【００７１】
図７を用いて、イベント管理オブジェクト２０１がルートとして扱われる際のメモリ８の参照関係を説明する。図７は、メモリ８の記憶領域の旧世代、新世代を左右に分割した状態を示している。イベント管理オブジェクト２０１はルートとして扱われるため、新世代に属するイベント２０２を設定する際にもライトバリアの確認処理は不要となる。そのため、ルートセットへの登録と解除処理も不要となることがわかる。
【００７２】
このように、アプリケーションの起動時に、世代別ＧＣ準備部３を設けて、ステップＳ１０３において、短命なオブジェクトを扱う管理オブジェクトをルートとして設定することにより、ライトバリアの確認処理及びそれに伴うルートセットへの登録と解除が不要となるため、世代別ガーベージコレクション処理のプログラム実行装置の負担を軽減することが可能となる。
【００７３】
次に、本実施の形態において、プログラム実行装置１００が、メモリ領域の用途によってデータの生存期間の設定を行う動作について、図８、図９、図１０を用いて説明する。
【００７４】
図８は、プログラム実行装置１００のメモリ領域確保の動作を示すフローチャートである。
【００７５】
最初に、図８を用いて動的メモリ確保部４がオブジェクトにメモリ領域を割り当てる際に、用途判定部６から世代の生存期間であるライフカウンタを取得する処理の流れを示す。
【００７６】
まず、ステップＳ２０１において、動的メモリ確保部４のデータ領域割当部４２は、アプリケーションプログラム１又はユーザインタフェースライブラリ２から要求されたオブジェクトのサイズに基づき、ヒープ領域からメモリ領域を獲得する。
【００７７】
次に、ステップＳ２０２において、動的メモリ確保部４の格納期間決定部４３は、用途判定部６のデータ判別部６１に対して、確保したメモリ領域の用途の判定を依頼する。用途判定部６の設定期間保持部６２は、オブジェクトのクラス名に基づいて、世代内の生存期間の長さを示すライフカウンタの値を動的メモリ確保部４に返す。
【００７８】
図９は、メモリ領域の用途であるクラス名とそれに対応するライフカウンタの設定値を保持するテーブルを示している。
【００７９】
Ｓｔｒｉｎｇクラスは、文字列を保持するオブジェクトのクラスである。対話的なアプリケーションプログラム１においては、プログラム実行装置１００を用いるユーザに対しての指示や状態表示などを行うために、Ｓｔｒｉｎｇクラスのオブジェクトは短命なオブジェクトであるといえる。そのため、短命なオブジェクトが旧世代に移動した場合には改修の労力が必要となり、新世代領域に存在する期間を長く設定することで、少ない労力で解放されるメモリ領域を多くすることができる。本実施の形態では、Ｓｔｒｉｎｇクラスのオブジェクトに設定するライフカウンタを１００としてテーブルに登録している。
【００８０】
ただし、アプリケーション起動時に生成されたＳｔｒｉｎｇクラスのオブジェクトは短命ではない。アプリケーションプログラムが起動時に用意したＳｔｒｉｎｇクラスのオブジェクトは、例えば、操作メニューのリストに用いる文字列など、アプリケーションを利用する際に必要な文字列を含んでいる。このため、世代別ＧＣの準備処理により、アプリケーション起動時に生成されたオブジェクトを旧世代に格納することは、Ｓｔｒｉｎｇクラスについても効果があるといえる。
【００８１】
ＢｙｔｅＡｒｒａｙクラスは、画像やサウンドをロードする１バイト形式のデータの配列を保持するオブジェクトのクラスである。アプリケーションプログラム１においては、ＢｙｔｅＡｒｒａｙクラスのオブジェクトは、短命ではないといえる。アプリケーションの起動後に確保されるＢｙｔｅＡｒｒａｙクラスのオブジェクトには、ネットワークからダウンロードされた画像やサウンドなどの比較的大きなデータがあり、アプリケーションが終了するまで保持される可能性が高い。そのため、旧世代への移動が早い程、新世代に対して行われるガーベージコレクション処理量が低減される。本実施の形態では、ＢｙｔｅＡｒｒａｙクラスのオブジェクトに設定するライフカウンタを２０としてテーブルに登録している。
【００８２】
Ｅｖｅｎｔクラスは、描画やキーなどのイベントを示すオブジェクトのクラスである。対話的なアプリケーションを実現するためのユーザインタフェースライブラリ２が扱う描画やキーなどのイベントは、非常に短命であるといえる。対話的な処理を実現するためには、操作に対する画面表示など、プログラム実行装置１００の反応時間（ターンアラウンドタイム）が短いことが必須であり、イベントは生成された後短時間でゴミとなる。そのため、旧世代への移動自体不要であり、世代に属する生存期間を示すライフカウンタを扱う必要もない。本実施の形態では、Ｅｖｅｎｔクラスのオブジェクトに設定するライフカウンタは−１としてテーブルに登録し、生存期間を扱うことが不要であることを示している。
【００８３】
また、本実施の形態では、用途が不明なオブジェクトに対するライフカウンタにデフォルト値として５を設定している。
【００８４】
動的メモリ確保部４は、ステップＳ２０２において、用途判定部６から返されたライフカウンタの値を参照し、カウンタが指定されたオブジェクトであるか判定する。カウンタの値が指定されていないオブジェクトである場合には、ステップＳ２０３に進み、デフォルトのライフカウンタの値として、図９のテーブルに登録されている５を設定する。カウンタの値が指定されているオブジェクトである場合には、ステップＳ２０４に進み、ライフカウンタの値として、図９のテーブルに登録されているクラスごとのライフカウンタを設定する。つまり、Ｓｔｒｉｎｇクラスのオブジェクトであれば、ライフカウンタとして１００を設定する。ＢｙｔｅＡｒｒａｙクラスのオブジェクトであれば、ライフカウンタとして２０を設定する。Ｅｖｅｎｔクラスのオブジェクトであれば、ライフカウンタとして−１を設定する。
【００８５】
最後に、ステップＳ２０５において、動的メモリ確保部４は、アプリケーションプログラム１又はユーザインタフェースライブラリ２に対して、確保したオブジェクトのメモリ位置を返す。
【００８６】
図１０は、プログラム実行装置１００のガーベージコレクション処理におけるマーク処理の動作を示すフローチャートである。
【００８７】
まず、世代別ガーベージコレクション部５は、ステップＳ３０１から使用中のオブジェクト（マークオブジェクト）のループ処理を開始する。ループ処理の開始時点のマークオブジェクト、即ちルートには、クラスの静的なフィールドやスタック領域に引数として積まれているオブジェクト、世代別ＧＣ準備部３において設定されたイベント管理オブジェクトが含まれる。
【００８８】
次に、ステップＳ３０２において、世代別ガーベージコレクション部５の領域解放部５２は、マークオブジェクトが保持する参照ポインタから参照先のオブジェクトを検索し、検索した参照先オブジェクトにマークを設定する。
【００８９】
ステップＳ３０３において、世代別ガーベージコレクション部５は、用途判定部６の領域制限部６３に対してオブジェクトのクラス名を与えて、世代が指定されたオブジェクトであるか問合せを行う。世代が指定されたオブジェクトとは、新世代から旧世代に移動しないオブジェクトのことであり、本実施の形態ではＥｖｅｎｔクラスのオブジェクトである。ここで、例えば図９に示した図に世代指定の欄を設け、クラスごとに個別の世代を指定してもよい。
【００９０】
上述のステップＳ３０３では、世代別ガーベージコレクション部５は、用途判定部６に対しオブジェクトの世代指定の属性を問合せているが、問合せを行わない実装として、図８のＳ２０４において設定したライフカウンタが−１であることでも、世代が指定されたオブジェクトであることを判断することが可能である。
【００９１】
ステップＳ３０３において、世代が指定されたオブジェクトであれば、Ｓ３０４以降に行われるライフカウンタの減算手続きや旧世代への移動処理は不要である。ステップＳ３０７に進み、マークした参照先のオブジェクトをループ処理の対象であるマークオブジェクトとして追加する。ステップＳ３０８はマークオブジェクトに対するループの終点であり、マークオブジェクトが存在していれば、ステップＳ３０１に戻り、ステップＳ３０２からステップＳ３０７の処理を継続して行う。
【００９２】
ステップＳ３０３において、世代が指定されていないオブジェクトの場合には、ステップＳ３０４に進む。ステップＳ３０４において、世代別ガーベージコレクション部５のデータ移動部５１は、参照先オブジェクトのライフカウンタを１減少させる。ライフカウンタを１減少させることで、新世代においての生存期間が１回のガーベージコレクションを生き延びたことを示す。
【００９３】
次に、ステップＳ３０５において、世代別ガーベージコレクション部５は、参照先オブジェクトのライフカウンタが０であるか判定する。ステップＳ３０５において、ライフカウンタが０ではない場合には、ステップＳ３０７に進み、マークした参照先のオブジェクトをループ処理の対象であるマークオブジェクトとして追加する。ステップＳ３０５において、ライフカウンタが０である場合には、ステップＳ３０６に進み、世代別ガーベージコレクション部５のデータ移動部５１が、参照先オブジェクトを旧世代に複製し、新世代から削除する処理を実施する。
【００９４】
このように、用途判定部６を設けて、動的メモリ確保部４において獲得するオブジェクトごとに登録したライフカウンタを用いることにより、獲得したオブジェクトの用途ごとに新世代から旧世代への移動タイミングを調整することが可能となる。そのため、短命なオブジェクトが旧世代に移動した場合に必要となっていた回収の労力を低減することができ、少ない労力で新世代から回収されるメモリ領域を多くすることができる。
【００９５】
上記の実施の形態で説明したプログラム実行装置（情報記憶制御装置）は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置であって、
プログラムの実行に必要な記憶領域を有するメモリと、
アプリケーションプログラムが起動した後に、ガーベージコレクション処理とメモリコンパクションを実施し、旧世代の領域を設定する世代別ＧＣ準備部を備えることを特徴とする。
【００９６】
前記情報記憶制御装置の世代別ＧＣ準備部は、さらに、
特定のメモリ領域を新世代のガーベージコレクション処理のルートとなるように設定する処理を追加したことを特徴とする。
【００９７】
また、上記の実施の形態で説明したデータ領域管理プログラム（情報記憶制御プログラム）は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御プログラムであって、
プログラムの実行に必要な記憶領域を有するメモリと、
アプリケーションプログラムが起動した後に、ガーベージコレクション処理とメモリコンパクションを実施し、旧世代の領域を設定する世代別ＧＣ準備部を備えることを特徴とする。
【００９８】
前記情報記憶制御装置の世代別ＧＣ準備部は、さらに、
特定のメモリ領域を新世代のガーベージコレクション処理のルートとなるように設定する処理を追加したことを特徴とする。
【００９９】
また、上記の実施の形態で説明したプログラム実行装置（情報記憶制御装置）は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置であって、
プログラムの実行に必要な記憶領域を有するメモリと、
メモリ領域の用途に応じて属する世代の生存期間を与える用途判定部を備えたことを特徴とする。
【０１００】
また、上記の実施の形態で説明したプログラム実行装置（情報記憶制御装置）は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置であって、
プログラムの実行に必要な記憶領域を有するメモリと、
メモリ領域の用途に応じて世代間の移動を制限することを判定する用途判定部を備えたことを特徴とする。
【０１０１】
また、上記の実施の形態で説明したデータ領域管理プログラム（情報記憶制御プログラム）は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御プログラムであって、
プログラムの実行に必要な記憶領域を有するメモリと、
メモリ領域の用途に応じて属する世代の生存期間を与える用途判定部を備えたことを特徴とする。
【０１０２】
また、上記の実施の形態で説明したデータ領域管理プログラム（情報記憶制御プログラム）は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御プログラムであって、
プログラムの実行に必要な記憶領域を有するメモリと、
メモリ領域の用途に応じて世代間の移動を制限することを判定する用途判定部を備えたことを特徴とする。
【図面の簡単な説明】
【０１０３】
【図１】実施の形態１におけるプログラム実行装置のハードウェア構成の一例を示す図。
【図２】実施の形態１に係るプログラム実行装置の構成を示すブロック図。
【図３】実施の形態１に係るプログラム実行装置のアプリケーションの起動から終了までの動作を示すフローチャート。
【図４】実施の形態１に係るプログラム実行装置における世代別ＧＣ準備処理前のメモリの使用状況を示す図。
【図５】実施の形態１に係るプログラム実行装置における世代別ＧＣ準備処理後のメモリの使用状況を示す図。
【図６】従来の世代別ガーベージコレクション方式におけるオブジェクトの参照関係を示す図。
【図７】実施の形態１に係るプログラム実行装置におけるオブジェクトの参照関係を示す図。
【図８】実施の形態１に係るプログラム実行装置のメモリ領域確保の動作を示すフローチャート。
【図９】実施の形態１に係るプログラム実行装置のメモリ領域の用途と対応するライフカウンタの設定値を保持するテーブルの一例。
【図１０】実施の形態１に係るプログラム実行装置のガーベージコレクション処理におけるマーク処理の動作を示すフローチャート。
【符号の説明】
【０１０４】
１  アプリケーションプログラム、２  ユーザインタフェースライブラリ、３  世代別ＧＣ準備部、４  動的メモリ確保部、５  世代別ガーベージコレクション部、６  用途判定部、７  処理系、８  メモリ、３１  領域区分部、３２  ルート設定部、４１  記憶領域割当部、４２  データ領域割当部、４３  格納期間決定部、５１  データ移動部、５２  領域解放部、５３  領域整理部、６１  データ判別部、６２  設定期間保持部、６３  領域制限部、８１  旧世代、８２  第１のデータ領域、８３  新世代、８４  第２のデータ領域、１００  プログラム実行装置、２０１  イベント管理オブジェクト、２０２  イベント、９０１  ＣＲＴ表示装置、９０２  Ｋ／Ｂ、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群。
【図１】
2006171927.tif 000003
【図２】
2006171927.tif 000004
【図３】
2006171927.tif 000005
【図４】
2006171927.tif 000006
【図５】
2006171927.tif 000007
【図６】
2006171927.tif 000008
【図７】
2006171927.tif 000009
【図８】
2006171927.tif 000010
【図９】
2006171927.tif 000011
【図１０】
2006171927.tif 000012