(57)【要約】【課題】ガベージコレクション（ＧＣ）を用いるコンピュータにおいて、性能低下を起こすことなく、省電力モードを実行する。【解決手段】本発明に係るメモリ電力制御方法は、省電力モードを備えるメモリを有するコンピュータを用いて、不要となったオブジェクトをまとめて回収するガベージコレクションを動作させ、メモリのアドレス空間を所定の固定サイズで分割したメモリブロックにオブジェクトを割り当てる。更に、メモリ上のヒープ領域１４を複数のサブヒープ領域に分割して管理し、ガベージコレクションの所用時間と予め規定された目標値との大小関係に基づいてサブヒープ領域の数を動的に変更する。【選択図】図２
2010123059.tif 000002
【特許請求の範囲】
【請求項１】
省電力モードを備えるメモリを備え、不要となったオブジェクトをまとめて回収するガベージコレクションが動作するコンピュータで用いられ、前記メモリのアドレス空間を所定の固定サイズで分割したメモリブロックに前記オブジェクトが割り当てられ、前記メモリの電力制御を行うためのメモリ電力制御方法であって、
前記コンピュータが、
前記メモリ上のヒープ領域を複数のサブヒープ領域に分割して管理する第１のステップと、
前記ガベージコレクションの所用時間と予め規定された目標値との大小関係に基づいて前記サブヒープ領域の数を動的に変更する第２のステップと、を実行する、
メモリ電力制御方法。
【請求項２】
前記第１のステップは、前記メモリブロックのうちで前記電力制御のタイミングが同一であるメモリブロック毎にサブヒープ領域を生成して管理する、請求項１に記載のメモリ電力制御方法。
【請求項３】
前記第２のステップは、更に前記ガベージコレクションの発生頻度に基づく、請求項１に記載のメモリ電力制御方法。
【請求項４】
更に、前記コンピュータは、予め規定された期間を越えて生存してアクセスされるオブジェクトを生存オブジェクトとし、当該生存オブジェクト及びそのクラスをオブジェクト・アクセスの状況を示すアクセスプロファイルで識別する第３のステップと、
前記ガベージコレクションを実行する際に、前記生存オブジェクトを予め定められたサブヒープ領域に集める第４のステップと、を実行する、
請求項１に記載のメモリ電力制御方法。
【請求項５】
前記ガベージコレクションが世代別ガベージコレクションであり、前記ヒープ領域がヤングヒープ領域及びオールドヒープ領域に分割され、前記オブジェクトが前記ヤングヒープ領域から割り当てられており、
前記ガベージコレクションは前記ヤングヒープ領域に使い尽くされた場合には、前記ヤングヒープ領域のみの前記ガベージコレクションを行うマイナーガベージコレクションを実行する、請求項４に記載のメモリ電力制御方法。
【請求項６】
前記コンピュータは、予め定められた回数以上前記マイナーガベージコレクションを行った際にも生存するオブジェクトを前記オールドヒープ領域に移動する第５のステップを実行する、請求項５に記載のメモリ電力制御方法。
【請求項７】
前記ガベージコレクションは前記オールドヒープ領域を使い果たした場合に前記ヒープ領域の全てについてガベージコレクションを行うフルガベージコレクションを実行する、請求項６に記載のメモリ電力制御方法。
【請求項８】
前記コンピュータは、前記フルガベージコレクションが行われるに当たって、前記オールドヒープ領域にある生存オブジェクトを前記オールドヒープ領域の所定のサブヒープ領域に集める第６のステップを実行する、請求項７に記載のメモリ電力制御方法。
【請求項９】
省電力モードを備えるメモリを備え、不要となったオブジェクトをまとめて回収するガベージコレクションが動作するコンピュータで用いられ、前記メモリのアドレス空間を所定の固定サイズで分割したメモリブロックに前記オブジェクトが割り当てられ、前記メモリの電力制御を行うためのメモリ電力制御方法であって、
前記コンピュータが、
前記メモリ上のヒープ領域を複数のサブヒープ領域に分割して管理する第１のステップと、
前記ガベージコレクションの所用時間と予め規定された目標値との大小関係に基づいて前記サブヒープ領域の数を動的に変更する第２のステップと、
予め規定された期間を越えて生存してアクセスされるオブジェクトを生存オブジェクトとし、当該生存オブジェクト及びそのクラスをオブジェクト・アクセスの状況を示すアクセスプロファイルで識別する第３のステップと、
前記ガベージコレクションを実行する際に、前記生存オブジェクトを予め定められたサブヒープ領域に集める第４のステップと、
前記ガベージコレクションは世代別ガベージコレクションであり、前記ガベージコレクションはマイナーガベージコレクション及びフルガベージコレクションを含み、前記ヒープ領域はヤングヒープ領域及びオールドヒープ領域に分割され、前記オブジェクトは前記ヤングヒープ領域から割り当てられており、前記ガベージコレクションは前記ヤングヒープ領域によって使い尽くされた場合には、前記ヤングヒープ領域のみの前記ガベージコレクションを行う前記マイナーガベージコレクションを実施し、前記ガベージコレクションは前記オールドヒープ領域を使い果たした場合に前記ヒープ領域の全てについて前記フルガベージコレクションを実施し、予め定められた回数以上前記マイナーガベージコレクションを行った際にも生存するオブジェクトを前記オールドヒープ領域に移動する第５のステップと、
前記フルガベージコレクションが行われるに当たって、前記オールドヒープ領域にある生存オブジェクトを前記オールドヒープ領域の所定のサブヒープ領域に集める第６のステップと、を実行する、
メモリ電力制御方法。
【請求項１０】
請求項１から９のいずれか１項に記載の方法の各ステップをコンピュータに実行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリの消費電力を削減するためのメモリ電力制御方法及びメモリ電力制御プログラムに関し、特に、世代別ヒープメモリにおけるメモリ電力制御方法及びメモリ電力制御プログラムに関する。
【背景技術】
【０００２】
一般に、省エネルギー（省電力）の観点からパソコン等のコンピュータにおける消費電力の削減が大きな課題となっている。コンピュータにおいては、メモリによる消費電力がＣＰＵの１．５倍に達し、更に、データセンター全体で考えると、メモリの消費電力はその２７％に達すると言われている（非特許文献１）。このため、省エネルギーの観点から見ると、メモリ消費電力の削減は極めて重要な事項である。
【０００３】
ところで、省電力に対応したメモリモジュールは所謂省電力モードを有しており、物理メモリのアドレス空間を固定サイズで分割した単位（ランクという）で省電力モードを切り替えているものの、ヒープメモリ（ヒープ領域）とガベージコレクション（ｇａｒｂａｇｅ  ｃｏｌｌｅｃｔｉｏｎ：ＧＣ（ゴミ集め））とを活用したプログラムにおいては、省電力モードを利用しづらいということがある。
【０００４】
オブジェクト指向言語とＧＣの普及に応じて、プログラムはより大きなヒープ領域を必要としており、オブジェクト指向言語においては、データを表現するオブジェクトがヒープ領域内に記憶領域（メモリ領域）を割り当てられ、ＧＣは未使用のオブジェクトのメモリ領域を解放しつつ再利用する。そして、ＧＣの実行はプログラムにとってはオーバーヘッド、すなわち当該プログラム処理の所要時間が増加することによる実質的な当該プログラム性能の低下となるため、ＧＣが頻繁に発生しないようにするためにはヒープ領域を大きくする必要がある。
【０００５】
また、サーバ・アプリケーション等の大規模でしかも性能が重視されるプログラムにおいては、ギガバイト（ＧＢ）のオーダーでメモリ領域を使用し短い期間（ナノ秒からマイクロ秒）の期間しか生き残らないオブジェクトが多いということが実験結果によって知られている。
【０００６】
一方、コンピュータにおいて、メモリの消費電力をその使用状況に応じて削減するため、メモリが、その電源が独立に制御される複数のメモリバンクを有し、各メモリバンクが複数の物理ページを備えて、利用頻度が同程度である物理ページを同一のメモリバンクに集め、利用頻度に基づいて電源を制御する対象となるメモリバンクを選択して、選択されたメモリバンクの電源を制御するようにしたものがある（例えば、特許文献１参照）。
【特許文献１】特開２００８−４０６０６号公報
【非特許文献１】Li,X.  et al,  “Performance-directed  energy  management  for  storage  systems”,  IEEE  Micro,  2004
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、上述の点を考慮すると、割り当てによってアクセスを行うオブジェクトは、メモリアドレス空間上に偏在し、その領域はヒープ領域のアドレス空間中で高速に移動することになる。従って、頻繁にアクセスするオブジェクトは、特定のランクに集まっておらず、全ランクがアクセスされ続けることになって、省電力モードとするためには性能の低下が避けられないという課題がある。
【０００８】
また、特許文献１に記載の手法では、オペレーティング・システム（ＯＳ）がページに対するアクセス統計を生成し、このアクセス統計に応じて同程度のアクセス頻度を有するページを物理メモリ上で収集して、結果的にアクセスされないページを特定のランクに置くようにしているが、アクセス統計の生成及びメモリコピー等がＧＣと同様に処理の所要時間を増加させてプログラムの性能を低下する原因となってしまう。また、アクセスされる領域が高速に移動する場合には、統計頻度的にメモリ全体が均等にアクセスされているように観測される結果、ランクを省電力モードにすることが極めて難しいという課題がある。
【０００９】
従って、本発明の目的は、ヒープ領域とＧＣを用いた際においても、従来技術に係るプログラムの性能低下を起こすことなく、省電力モードを実行することのできるメモリ電力制御方法及びメモリ電力制御プログラムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明は、上記課題に鑑み、以下のような解決手段を提供する。
【００１１】
（１）本発明は、省電力モードを備えるメモリを備え、不要となったオブジェクトをまとめて回収するガベージコレクションが動作するコンピュータで用いられ、前記メモリのアドレス空間を所定の固定サイズで分割したメモリブロックに前記オブジェクトが割り当てられ、前記メモリの電力制御を行うためのメモリ電力制御方法であって、前記コンピュータが、前記メモリ上のヒープ領域を複数のサブヒープ領域に分割して管理する第１のステップと、前記ガベージコレクションの所用時間と予め規定された目標値との大小関係に基づいて前記サブヒープ領域の数を動的に変更する第２のステップとを実行するものである。
【００１２】
これにより、本発明に係るメモリ電力制御方法では、サブヒープ領域の数を動的に変更するようにしたので、ガベージコレクションが動作するコンピュータにおいても性能低下を起こすことなく、省電力モードを実行することができる。
【００１３】
（２）本発明は、（１）に記載のメモリ電力制御方法において、前記第１のステップは、前記メモリブロックのうちで前記電力制御のタイミングが同一であるメモリブロック毎にサブヒープ領域を生成するものである。
【００１４】
これにより、本発明に係るメモリ電力制御方法では、メモリブロック毎に電力制御を容易に行うことができる。
【００１５】
（３）本発明は、（１）に記載のメモリ電力制御方法において、前記第２のステップは、更に前記ガベージコレクションの発生頻度に基づくものである。
【００１６】
これにより、本発明に係るメモリ電力制御方法では、ガベージコレクションの発生頻度が高くなるに従って適切なサブヒープ数を増し、逆に発生頻度が低くなるに従って適切なサブヒープ数を減らす動作を実行することができる。従って、メモリアクセスに起因する消費電力を低減できる。
【００１７】
（４）本発明は、（１）に記載のメモリ電力制御方法において、前記コンピュータは、予め規定された期間を越えて生存してアクセスされるオブジェクトを生存オブジェクトとし、当該生存オブジェクト及びそのクラスをオブジェクト・アクセスの状況を示すアクセスプロファイルで識別する第３のステップと、前記ガベージコレクションを実行する際に、前記生存オブジェクトを予め定められたサブヒープ領域に集める第４のステップを実行するものである。
【００１８】
これにより、本発明に係るメモリ電力制御方法では、生存オブジェクトを予め定められたサブヒープ領域に集めてガベージコレクションを実行するようにしたので、メモリアクセスに起因する消費電力を低減できる。
【００１９】
（５）本発明は、（４）に記載のメモリ電力制御方法において、前記ガベージコレクションが世代別ガベージコレクションであり、前記ヒープ領域がヤングヒープ領域及びオールドヒープ領域に分割され、前記オブジェクトが前記ヤングヒープ領域から割り当てられており、前記ガベージコレクションは前記ヤングヒープ領域に使い尽くされた場合には、前記ヤングヒープ領域のみの前記ガベージコレクションを行うマイナーガベージコレクションを実行するものである。
【００２０】
これにより、本発明に係るメモリ電力制御方法では、ヤングヒープ領域のみのガベージコレクションを行うことが可能になるので、メモリアクセスに起因する消費電力を低減できる。
【００２１】
（６）本発明は、（５）に記載のメモリ電力制御方法において、前記コンピュータは、予め定められた回数以上前記マイナーガベージコレクションを行った際にも生存するオブジェクトを前記オールドヒープ領域に移動する第５のステップを実行するものである。
【００２２】
これにより、本発明に係るメモリ電力制御方法では、オールドヒープ領域へのオブジェクト移動を用い、変更の頻度の低い内容を保持するメモリに対する消費電力を低減することができる。
【００２３】
（７）本発明は、（６）に記載のメモリ電力制御方法において、前記ガベージコレクションは前記オールドヒープ領域を使い果たした場合に前記ヒープ領域の全てについてガベージコレクションを行うフルガベージコレクションを実行するものである。
【００２４】
これにより、本発明に係るメモリ電力制御方法では、ガベージコレクションを、オールドヒープ領域を使い果たした場合にヒープ領域の全てについて実行するようにしたので、ヒープ領域全てについてガベージコレクションを行う回数を低減でき、その結果、メモリの消費電力を低減することができる。
【００２５】
（８）本発明は、（７）に記載のメモリ電力制御方法において、前記コンピュータは、前記フルガベージコレクションが行われるに当たって、前記オールドヒープ領域にある生存オブジェクトを前記オールドヒープ領域の所定のサブヒープ領域に集める第６のステップを実行するものである。
【００２６】
これにより、本発明に係るメモリ電力制御方法では、フルガベージコレクションの際のメモリアクセスが低減される結果、メモリの消費電力を低減することができる。
【００２７】
（９）本発明は、省電力モードを備えるメモリを備え、不要となったオブジェクトをまとめて回収するガベージコレクションが動作するコンピュータで用いられ、前記メモリのアドレス空間を所定の固定サイズで分割したメモリブロックに前記オブジェクトが割り当てられ、前記メモリの電力制御を行うためのメモリ電力制御方法であって、前記コンピュータが、前記メモリ上のヒープ領域を複数のサブヒープ領域に分割して管理する第１のステップと、前記ガベージコレクションの所用時間と予め規定された目標値との大小関係に基づいて前記サブヒープ領域の数を動的に変更する第２のステップと、予め規定された期間を越えて生存してアクセスされるオブジェクトを生存オブジェクトとし、当該生存オブジェクト及びそのクラスをオブジェクト・アクセスの状況を示すアクセスプロファイルで識別する第３のステップと、前記ガベージコレクションを実行する際に、前記生存オブジェクトを予め定められたサブヒープ領域に集める第４のステップと、前記ガベージコレクションは世代別ガベージコレクションであり、前記ガベージコレクションはマイナーガベージコレクション及びフルガベージコレクションを含み、前記ヒープ領域はヤングヒープ領域及びオールドヒープ領域に分割され、前記オブジェクトは前記ヤングヒープ領域から割り当てられており、前記ガベージコレクションは前記ヤングヒープ領域によって使い尽くされた場合には、前記ヤングヒープ領域のみの前記ガベージコレクションを行う前記マイナーガベージコレクションを実施し、前記ガベージコレクションは前記オールドヒープ領域を使い果たした場合に前記ヒープ領域の全てについて前記フルガベージコレクションを実施し、予め定められた回数以上前記マイナーガベージコレクションを行った際にも生存するオブジェクトを前記オールドヒープ領域に移動する第５のステップと、前記フルガベージコレクションが行われるに当たって、前記オールドヒープ領域にある生存オブジェクトを前記オールドヒープ領域の所定のサブヒープ領域に集める第６のステップと、を実行するものである。
【００２８】
これにより、本発明に係るメモリ電力制御方法では、ガベージコレクションが動作するコンピュータに、上述の第１のステップから第６のステップを実行させると共に、当該ガベージコレクションの動作を世代別ガベージコレクションとして、ヤングヒープ領域に対するマイナーガベージコレクション及びオールドヒープ領域の欠乏に基づくガベージコレクションを組み合わせることができる。これにより、世代別ガベージコレクションの状況に基づいてメモリアクセスに起因する消費電力を低減できる。
【００２９】
（１０）本発明に係るメモリ電力制御方法は、任意のコンピュータ可読媒体を用いて記憶され得るコンピュータ・プログラムとして提供できる。
【発明の効果】
【００３０】
以上のように、本発明によれば、メモリ上のヒープ領域を複数のサブヒープ領域に分割して管理し、ガベージコレクションの所用時間と予め規定された目標値との大小関係に基づいてサブヒープ領域の数を動的に変更するようにしたので、ガベージコレクションが動作するコンピュータにおいても性能低下を起こすことなく、確実に省電力モードを実行して、メモリ消費電力を低減できるという効果がある。
【発明を実施するための最良の形態】
【００３１】
以下、本発明の実施形態について図を参照しながら説明する。図１は、本発明の実施の形態によるメモリ電力制御方法が用いられるコンピュータ・システムの一例を示す図である。
【００３２】
図１において、オペレーティング・システム（ＯＳ）１１は、中央演算装置（ＣＰＵ）上で動作し、仮想マシン（例えば、Ｊａｖａ  Ｖｅｒｔｕａｌ  Ｍａｃｈｉｎｅ：ＶＭ）１２と相互に通信を行う。物理メモリ１３はそのアドレス空間が固定サイズで分割された複数の単位（ランク）１３−１〜１３−Ｍ（Ｍは２以上の整数）を有している。図示の例では、ヒープメモリ（ヒープ領域）１４が複数のサブヒープ領域１４−１〜１４−Ｌ（Ｌは２以上の整数）に分割されてプロセス空間に存在し、このヒープ領域１４は、後述するようにして、ＶＭ１２を介して、エネルギーコントローラ１５によって制御される。
【００３３】
図１に示すコンピュータ・システムでは、ガベージコレクション（ＧＣ）が動作しており、メモリモジュールは省電力対応メモリであり、所謂省電力モードを有している。つまり、図１に示すコンピュータ・システムは、不要となったオブジェクトを後でまとめて回収するＧＣ方式で動作するコンピュータ・システムである。
【００３４】
図２は初期化を説明するためのフロー図であり、ＯＳ１１は物理アドレス空間がどのようにランク１３−１〜１３−Ｍに分割されるかを示す情報として、ハードウェアからランクサイズＲ及びページサイズＰを取得する（Ｓ２０１、以下、フロー図に含まれる各ステップを同様にＳで始まる符号を用いて表す）。
【００３５】
いま、各ランク１３−１〜１３−ＭのサイズをそれぞれＲバイトとすると、例えば、物理アドレスの２９〜３１番目のビット（０番目が最下位ビット）がランクを示すアドレスマッピングであれば、アドレス空間上、５１２ＭＢ毎にランクが切り替わることになる（図３参照）。前述のように、ランクサイズＲは５１２ＭＢであるから、４ＧＢの物理メモリ１３は８つのランク１３−１〜１３−８を有することになる。
【００３６】
ＯＳ１１は、上述のようにして取得したランクサイズＲを用いて、ランク毎に物理メモリ１３を管理する。例えば、ランクサイズＲが５１２ＭＢで、ページサイズＰが２ＭＢであるとき、各ランクには２５６ページが存在し、ＯＳ１１は２５６ページの各々について未使用またはプロセス空間にマップされているか否かを管理する。つまり、図４に示すように、ランク０〜ランク７の８つのランクがある際、ランク０では、ページ０、ページ１等がマップされ、ページ２等がマップされていないことになる。同様にして、ランク１〜７についても同様にして各ページがマップされているか否かが管理される。
【００３７】
更に、ＯＳ１１は、特別なシステムコールＳＣ（Ｓｙｓｃａｌｌ）を提供して、指定するランク番号に属するページを、指定するプロセス空間のページにマップする。つまり、各ランクに対するメモリマッピングテーブルを生成する（Ｓ２０２）。
【００３８】
ところで、ヒープ領域を初期化する際には、ＶＭ１２は電力管理を行いたいプロセス空間のヒープ領域１４を複数のサブヒープ領域１４−１〜１４−Ｌに分割して管理する。サブヒープ領域１４−１〜１４−Ｌの数は、ランクの数に対応しており、８つのランクを有する際には、Ｌ＝８である。そして、ＶＭ１２は、システムコールＳＣを呼び出して、各サブヒープ領域１４−１〜１４−８にそれぞれランク１３−１〜１３−８のページをマップする。すなわち、システムコールによってサブヒープに特定のランクのページをマップする（Ｓ２０３）。従って、図５に示すように、８つのサブヒープ０〜７は、図４と同様に、ページがマップされることになる。
【００３９】
ここで、図１から明らかなように、使用するサブヒープ領域１４−１〜１４−Ｌの数が多い程多数のランクを使用することになるから、電力消費量が多くなる。コンピュータ・システムに対する負荷が最高である（例：ＣＰＵの利用率が１００％）場合に、全てのサブヒープ領域（全ランク）１４−１〜１４−Ｌが使用されているとして、コンピュータ・システムの負荷が低減した場合について説明する。
【００４０】
一般に、負荷が半分になれば、ヒープ領域を消費する速度も半分になる。ＧＣを用いるコンピュータ・システムでは、消費速度が半分になっても全てのヒープ領域を使い続けることになって、メモリの消費電力は最高のまま維持されてしまう結果となる。
【００４１】
ここでは、ＧＣを用いるコンピュータ・システムにおいて、メモリの電力消費を低減するため、単位時間あたりのＧＣによる実質的なプログラム性能の低下（ＧＣオーバーヘッド、すなわちＧＣの所要時間による他のプログラム処理の所要時間の増加）が所定の目標通りになる場合に、サブヒープ領域（ランク）１４−１〜１４−Ｌの数を減らして消費電力を低減する。そして、サブヒープ領域１４−１〜１４−Ｌ数を減らした際のＧＣオーバーヘッドの変化を、予めモデル化しておく。
【００４２】
いま、単位時間あたりにおいてＧＣがＮ回発生し、各ＧＣのＣＰＵ時間（ＣＰＵ処理時間）がｔ時間である場合、上記のＧＣオーバーヘッドはＮ×ｔで与えられる。Ｎ×ｔがＧＣオーバーヘッドの設定目標値Ｔ（例えば、外部からＱｏＳとして与えられる）に近くなるように、ヒープ領域の消費速度に適応して制御する。
【００４３】
このＧＣオーバーヘッドが目標値Ｔ以下（Ｎ×ｔ＜Ｔ）では、サブヒープ領域１４−１〜１４−Ｌに余裕があるとして、総サブヒープ数をＲ、サブヒープ数の変化量をｎ（ｎは負）とする。そして、そのときのＧＣ頻度（すなわちガベージコレクションの発生頻度）の増加割合をＦ（ｎ）とする。また、ＧＣ頻度が増加することが起因となって増加するＧＣ一回あたりのＣＰＵ時間割合をＰ（ｎ）とする。
【００４４】
サブヒープ領域を減らした後のＧＣオーバーヘッドは、次式で与えられる。
【数１】
2010123059.tif 000003
【００４５】
式［Ｉ］がＴ以下となるようなｎが見つかれば、サブヒープ数をｎだけ変化させる。ＧＣオーバーヘッドが目標値Ｔを上回ってサブヒープ数を増やす場合は、上記の操作と逆の操作を行う。すなわち、サブヒープ数は、目標値Ｔと、式［Ｉ］のＮ×ｔで表されるＧＣの所要時間及び／またはＦ（ｎ）で表されるガベージコレクションの発生頻度との大小関係に基づいて変更され得る。
【００４６】
ここで、本発明の実施の形態によるメモリ電力制御方法が用いられるコンピュータ・システムにおけるＧＣについて説明する。一般に、ＧＣを用いたオブジェクト指向言語であるＪａｖａ（登録商標）処理系における効率の良いＧＣとして、所謂世代別ＧＣが用いられている。
【００４７】
世代別ＧＣでは、ヒープ領域をヤング（Ｙｏｕｎｇ）及びオールド（Ｏｌｄ）という世代別に分割しており、オブジェクト（Ｏｂｊｅｃｔ）はヤングヒープから順次割り当てられる。この際、マルチプロセッサシステムにおいて、効率良く動作するように、オブジェクトの割り当て毎にヤングヒープから割り当てる代わりに、各スレッドは、複数のオブジェクトが割り当てられるサイズを有する領域（割当バッファ）を自分専用としてヤングヒープから割り当て、オブジェクトは割当バッファから割り当てる。
【００４８】
世代別ＧＣにおいては、ヤングヒープが使い尽くされると、ヤングヒープだけをＧＣする（マイナーガベージコレクション、（マイナーＧＣ、またはｍｉｎｏｒ  ＧＣ））。マイナーＧＣを数回に亘って生き残ったオブジェクトはオールドヒープに移動し、マイナーＧＣの対象とせず、マイナーＧＣに要するＣＰＵ時間を下げる。オールドヒープを使い果たした際には、ヒープ領域全体をＧＣする（フルガベージコレクション（フルＧＣ、またはＦｕｌｌ  ＧＣ））。
【００４９】
ここで、前述の関数Ｆ（ｎ）は次のように定義される。ヒープの消費速度は、ヒープサイズに影響されないので、ヒープ消費速度が同一であるとすると、ヒープサイズが小さくなれば、その分だけ早くＧＣが発生する。従って、ＧＣ頻度の増加割合は次式のように単純化することができる。
【数２】
2010123059.tif 000004
【００５０】
また、関数Ｐ（ｎ）は次のように定義することができる。ＧＣを一回実行するのに必要なＣＰＵ時間は、通常ヒープサイズに影響されない。従って、ＣＰＵ時間割合は次式のように単純化することができる。
【数３】
2010123059.tif 000005
【００５１】
これらの定義によって、上述の式［Ｉ］として示したサブヒープ変更後のＧＣオーバーヘッドは、次式のように単純化することができる。
【数４】
2010123059.tif 000006
【００５２】
図６は、ヤングヒープに対するサブヒープ数の制御を説明するためのフロー図である。図１に示すように、ＶＭ１２は、ＧＣオーバーヘッドを表すＧＣオーバーヘッド情報をエネルギーコントローラ１５に与えており、エネルギーコントローラ１５は、後述するように、ＶＭ１２にヒープサイズ制御信号を与える。
【００５３】
図６において、まず、エネルギーコントローラ１５は、割当バッファが空であるか否かを調べる（Ｓ６０１）。
【００５４】
割当バッファが空であると、ヤングヒープからサイズＳ１の割当バッファを割り当てる（Ｓ６０２）。そして、割当カウンタにＳ１を加算する（Ｓ６０３）。
【００５５】
続いて、モニタタイミングであるか否かを調べて（Ｓ６０４）、モニタタイミングであると、ＧＣ周期Ｎ＝Ａ／Ｓを求める（Ｓ６０５）。ここで、Ｓは、現在のヒープサイズを示し、Ａは、割当カウンタの現在及び前の値とモニタ間隔とに基づいて求められた割当速度を表す。続いて、現在のモニタ時間と割当カウンタの値を記録する（Ｓ６０６）。
【００５６】
このように、Ｓ６０２〜６０６の各ステップでは、定期的（例えば、１０ｍｓ毎）にカウンタの値をモニタして、割当量（前回のモニタ時の値と今回のモニタ時の値の差）を、前回のモニタ時からの経過時間で除算することによって最近の平均オブジェクト消費速度Ａが求まる。ヒープサイズをＳとすると、ＧＣ頻度ＮはＡ／Ｓである。そして、引き続き前述の判定を行うことになる。
【００５７】
エネルギーコントローラ１５は、上述の式［ＩＶ］で表されるＧＣオーバーヘッドをＴ以下の範囲として次式のように変形し、次式を満たす最小のｎを求める（Ｓ６０７）。
【数５】
2010123059.tif 000007
【００５８】
いま、Ｔが０．０５（実行時間の５％）、Ｒ＝８（８ランク）、ｔ＝０．２（０．２秒）で実行されているとする。Ｎ＝０．２（５秒に１回）が観測されとすると、ＧＣオーバーヘッド関係式は、次のように計算できる。
【数６】
2010123059.tif 000008
すなわち、この例では、２サブヒープ減らすと判断ができる。
【００５９】
逆に、ランク数が少なすぎる例に対しては、式［Ｖ］を次式のように書き換え、最小のｎを求めることができる。
【数７】
2010123059.tif 000009
【００６０】
いま、Ｎ＝０．３が観測されたとして同様に計算すると、上式［ＶＩＩ］は次のようになる。
【数８】
2010123059.tif 000010
すなわち、この例では、２サブヒープ増やすと判断ができる。
【００６１】
上述のように、Ｎの観測及びサブヒープ数変更の判定は、ヒープ消費速度の計算（ＧＣ頻度の予測）のタイミングで行われる。ヒープ消費速度の変化は、割当カウンタを利用してプログラム実行中に自動的に計算される。なお、割当カウンタとは、ヤングヒープから割当バッファを割り当てる度に、割当バッファのサイズを積算するカウンタである。
【００６２】
その後、エネルギーコントローラ１５は、ＶＭ１２によってサブヒープの増減に対応して、ヤングヒープにｎのサブヒープを追加するかまたはヤングヒープからｎのサブヒープを除く処理を行う（Ｓ６０８）。
【００６３】
つまり、サブヒープ変更数カウンタを備えて、このサブヒープ変更数カウンタによって、目標のサブヒープ数を表す。例えば、現在のサブヒープ数が「８」で「２」減らすと判断をしたとき、カウンタに「６」を書き込む。ヒープ消費速度の計算（ＧＣ頻度の予測）のタイミングで、サブヒープ変更の判定をした後、引き続き、現在のサブヒープ数とカウンタの値が異なれば、サブヒープ数がカウンタ値になるように、サブヒープ数を増減することになる。または、ミューテータ（ｍｕｔａｔｏｒ）のオーバーヘッドを減らすために、変更を次のマイナーＧＣまで遅延するようにしてもよい。
【００６４】
具体的には、マイナーＧＣは、ＧＣが終わった後カウンタを読み込み、現在のサブヒープ数とカウンタの値が異なれば、サブヒープ数をカウンタ値になるように、サブヒープ数を増減する。サブヒープ変更数カウンタは、スレッドが割当バッファを取得する度にサブヒープ変更数カウンタを参照して、前述のように、ヤングヒープからの割当バッファの取得はスレッド間で同期して行われる。
【００６５】
図７は、オールドヒープに対するサブヒープ数制御を説明するためのフロー図である。オールドヒープに対する制御は、ヤングヒープの場合とはやや異なり、最初のフルＧＣが発生するまでオールドヒープは連続的に消費される。従って、必要に応じてサブヒープをオールドヒープに追加する。フルＧＣが発生した後、生きているオブジェクトを、ある場所に集めるコンパクションを行わなければ、生きているオブジェクトはオールドヒープ中の複数のサブヒープに分散している。
【００６６】
一般的に、コンパクションには時間がかかるため、ＶＭ１２の構成の場合、可能な限り行わないようにすることが望ましい。ここでは、実際に、アクセスするオブジェクトを選択的にコンパクションして、可能な限り少ない数のサブヒープ内にそれらのオブジェクトが置かれるようにする。
【００６７】
図７において、メモリアクセスイベントが発生したか否かを検知して（Ｓ７０１）、メモリアクセスイベントが発生すると、サンプリング・プロファイルが必要であるか否かを判定する（Ｓ７０２）。サンプリング・プロファイルが必要であると判定されると、オブジェクト・フィールドへのアクセスをサンプリング・プロファイルする。
【００６８】
例えば、フィールドアクセスを記録する計装コード（ｉｎｓｔｒｕｍｅｎｔｅｄ  ｃｏｄｅ）を定期的に有効にしてフィールドアクセスを記録する方法、または、メモリアクセス用のＣＰＵパフォーマンス・カウンタを用いて定期的にメモリアクセスを記録する方法等がある。つまり、メモリアドレスを取得し（Ｓ７０３）、そのメモリアドレスはオールドヒープ内であるか否かを判定して（Ｓ７０４）、そうであれば、アクティブクラスにオブジェクトのクラスを記録する（Ｓ７０５）。
【００６９】
ところで、フルＧＣの際に、生き残るオブジェクトのうちアクティブクラスのオブジェクトを事前に与えた特定のサブヒープ（アクティブ・サブヒープ）に移動する。図８は、フルＧＣにおけるアクティブクラスのオブジェクトのアクティブ・サブヒープへの移動を説明するためのフロー図であり、まず、オールドヒープにオブジェクトに対する空スペースが存在するか否かを判定する（Ｓ８０１）。空スペースが存在すると、未処理生存オブジェクトがあるか否かを判定する（Ｓ８０２）。未処理生存オブジェクトがあると、当該生存オブジェクトのクラスがアクティブクラスであるか否かを判定する（Ｓ８０３）。そして、生存オブジェクトのクラスがアクティブクラスであると、当該オブジェクトをアクティブ・サブヒープに移動する（Ｓ８０４）。
【００７０】
上述の説明から明らかなように、ここでは、オールドヒープがいっぱいになると、フルＧＣを行い、生存（生き残る）オブジェクトの各々についてアクティブクラスのオブジェクトであれば、アクティブ・サブヒープに移動することになる。そして、移動する量が多ければ、複数のフルＧＣに分けて実行する。
【００７１】
また、このコンパクションに関する情報をマイナーＧＣで用いることができる。図９は、ヤングヒープからオールドヒープのアクティブ・サブヒープへオブジェクトを移動する際の処理を説明するフロー図であり、まず、ヤングヒープにバッファに対する空スペースがあるか否かを判定する（Ｓ９０１）。
【００７２】
空スペースがなければ、ＧＣがオールドヒープに移動するオブジェクトが存在するか否かを判定する（Ｓ９０２）。そのようなオブジェクトが存在すると、オブジェクトのクラスがマークされているか否かを判定し（Ｓ９０３）、マークされていれば、当該オブジェクトをアクティブ・サブヒープに移動する（Ｓ９０４）。一方、マークされていなければ、当該オブジェクトを非アクティブ・サブヒープに移動する（Ｓ９０５）。
【００７３】
このように、マイナーＧＣがオブジェクトをオールドヒープに移動するに当たって、コンパクション対象のオブジェクト・クラスであれば、アクティブ・サブヒープに移動することになる。
【００７４】
また、一定時間（所定の時間）、サンプリング・プロファイルに入らなかったコンパクション対象のオブジェクト・クラスは、プログラム挙動の変化でアクセスしなくなったとみなして、コンパクション対象から削除する。そして、コンパクションの際にアクティブ・サブヒープから他のサブヒープに移動する。
【００７５】
アクセスされるオブジェクトがないサブヒープ（ヤングヒープから削除したサブヒープやオールドヒープの非アクティブなサブヒープ）に対して、それらサブヒープに割り当てられているメモリが属するランクを省電力モードにする。これらは、能動的に行うか受動的に行われる。例えば、前者の場合、サブヒープを削除する際（図６のＳ６０８）、削除されるサブヒープにＯＳ１１により対応させたランク（図２のＳ２０３）に対して、ＯＳ１１経由で省電力モードにすることを指示する。
【００７６】
一方、追加の場合には、追加されるサブヒープのランクに対して通常モードにすることを指示する。メモリコントローラは外部から省電力モード切り替えコマンドを受け付ける機能を有し、ＯＳ１１は、例えば、Ｉ／Ｏポートを介してコマンドを発行する機能を有する。
【００７７】
この方式は、後者に比べて、ＯＳやハードウェアに機能を必要とする一方、メモリへのアクセスがないので判断がすばやくでき、省電力期間をより長くできる。また、メモリへのアクセスが近い将来起きるという判断が早めにできる結果、先行して通常モードにでき、その結果、プログラム実行速度への影響を減らすことができる。
【００７８】
一方、後者においては、メモリコントローラがメモリアクセスの履歴を観察して、例えば、一定時間アクセスがない場合に、省電力モードに切り替え、その後の最初のアクセス時に通常モードに切り替えることになる。
【００７９】
メモリコントローラに実装が容易となるように、例えば、１００，０００サイクルの間、メモリ参照がなければ省電力モードに切り替え、最初のアクセスで通常モードに切り替えるようにする。実装には、ランク毎にカウンタを準備し、カウンタをサイクル毎に減少して、ゼロになったら省電力モードに切り替えるようにする。カウンタの初期値は参照がない期間の間、閾値を示し、アクセス毎にセットされることになる。
【００８０】
図１０は、本発明の実施の形態による、電力制御プログラムを実行する装置のハードウェア構成を示す図である。図１０においては、電力制御プログラムを実行する装置を情報処理装置１０００とし、そのハードウェア構成を例示する。以下は、コンピュータを典型とする情報処理装置として全般的な構成を説明するが、その環境に応じて必要最小限な構成を選択できることはいうまでもない。
【００８１】
情報処理装置１０００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１０、バスライン１００５、通信Ｉ／Ｆ１０４０、メインメモリ１０５０、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）１０６０、パラレルポート１０８０、ＵＳＢポート１０９０、グラフィック・コントローラ１０２０、ＶＲＡＭ１０２４、音声プロセッサ１０３０、Ｉ／Ｏコントローラ１０７０、ならびにキーボード及びマウス・アダプタ１１００等の入力手段を備える。Ｉ／Ｏコントローラ１０７０には、フレキシブル・ディスク（ＦＤ）ドライブ１０７２、ハードディスク１０７４、光ディスク・ドライブ１０７６、半導体メモリ１０７８等の記憶手段を接続することができる。
【００８２】
音声プロセッサ１０３０には、マイクロホン１０３６、増幅回路１０３２、及びスピーカ１０３４が接続される。また、グラフィック・コントローラ１０２０には、表示装置１０２２が接続されている。
【００８３】
ＢＩＯＳ１０６０は、情報処理装置１０００の起動時にＣＰＵ１０１０が実行するブートプログラムや、情報処理装置１０００のハードウェアに依存するプログラム等を格納する。ＦＤ（フレキシブル・ディスク）ドライブ１０７２は、フレキシブル・ディスク１０７１からプログラムまたはデータを読み取り、Ｉ／Ｏコントローラ１０７０を介してメインメモリ１０５０またはハードディスク１０７４に提供する。図１０には、情報処理装置１０００の内部にハードディスク１０７４が含まれる例を示したが、バスライン１００５またはＩ／Ｏコントローラ１０７０に外部機器接続用インタフェース（図示せず）を接続し、情報処理装置１０００の外部にハードディスクを接続または増設してもよい。
【００８４】
光ディスク・ドライブ１０７６としては、例えば、ＤＶＤ−ＲＯＭドライブ、ＣＤ−ＲＯＭドライブ、ＤＶＤ−ＲＡＭドライブ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｋ）−ＲＯＭドライブ等を使用することができる。この際は各ドライブに対応した光ディスク１０７７を使用する必要がある。光ディスク・ドライブ１０７６は光ディスク１０７７からプログラムまたはデータを読み取り、Ｉ／Ｏコントローラ１０７０を介してメインメモリ１０５０またはハードディスク１０７４に提供することもできる。
【００８５】
情報処理装置１０００に提供されるコンピュータ・プログラムは、フレキシブル・ディスク１０７１、光ディスク１０７７、またはメモリカード等の記録媒体に格納されて利用者によって提供される。このコンピュータ・プログラムは、Ｉ／Ｏコントローラ１０７０を介して、記録媒体から読み出され、または通信Ｉ／Ｆ１０４０を介してダウンロードされることによって、情報処理装置１０００にインストールされ実行される。コンピュータ・プログラムが情報処理装置に働きかけて行わせる動作は、既に説明した装置における動作と同一であるので省略する。
【００８６】
前述のコンピュータ・プログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としてはフレキシブル・ディスク１０７１、光ディスク１０７７、またはメモリカードの他に、ＭＤ等の光磁気記録媒体、テープ媒体を用いることができる。また、専用通信回線やインターネットに接続されたサーバシステムに設けたハードディスクまたは光ディスク・ライブラリ等の記憶装置を記録媒体として使用し、通信回線を介してコンピュータ・プログラムを情報処理装置１０００に提供してもよい。
【００８７】
以上の例は、情報処理装置１０００について主に説明したが、コンピュータに、情報処理装置で説明した機能を有するプログラムをインストールして、そのコンピュータを情報処理装置として動作させることにより上記で説明した情報処理装置と同様な機能を実現することができる。
【００８８】
本装置は、ハードウェア、ソフトウェア、またはハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアの組み合わせによる実施では、所定のプログラムを有するコンピュータ・システムでの実施が典型的な例として挙げられる。係る場合、該所定のプログラムが該コンピュータ・システムにロードされ実行されることにより、該プログラムは、コンピュータ・システムに本発明に係る処理を実行させる。このプログラムは、任意の言語、コード、または表記によって表現可能な命令群から構成される。そのような命令群は、システムが特定の機能を直接実行すること、または（１）他の言語、コード、もしくは表記への変換、（２）他の媒体への複製、のいずれか一方もしくは双方が行われた後に、実行することを可能にするものである。もちろん、本発明は、そのようなプログラム自体のみならず、プログラムを記録した媒体を含むプログラム製品もその範囲に含むものである。本発明の機能を実行するためのプログラムは、フレキシブル・ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＤＶＤ、ハードディスク装置、ＲＯＭ、ＲＡＭ、Ｍ−ＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ＲＡＭ）、フラッシュメモリ等の任意のコンピュータ可読媒体に格納することができる。係るプログラムは、コンピュータ可読媒体への格納のために、通信回線で接続する他のコンピュータ・システムからダウンロードしたり、他の媒体から複製したりすることができる。また、係るプログラムは、圧縮し、または複数に分割して、単一または複数の記録媒体に格納することもできる。
【００８９】
本発明は、タイマーを用いてアイドリング状態が一定期間継続した装置の構成要素を適宜スタンバイ動作に遷移させる技術等の、既存の技術と組み合わせることができ、そのように組み合わせた技術もまた、本発明の技術範囲に含まれる。同様に、本発明の技法を含む省電力モードを実行するシステム等も、本発明の技術範囲に含まれる。更に、本発明の技法は、消費電力を制御するための諸段階を、ＦＰＧＡ（現場でプログラム可能なゲートアレイ）、ＡＳＩＣ（特定用途向け集積回路）、これらと同等のハードウェアロジック素子、プログラム可能な集積回路、またはこれらの組み合わせが記憶し得るプログラムの形態、すなわちプログラム製品として提供し得る。具体的には、データ入出力、データバス、メモリバス、システムバス等を備えるカスタムＬＳＩ（大規模集積回路）の形態として、本発明に係る省電力モードを実行するための手段を提供でき、そのように集積回路に記憶されたプログラム製品の形態も、本発明の技術範囲に含まれる。
【００９０】
以上、本発明の実施形態について説明したが、本発明は上述した実施形態に限るものではない。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施例に記載されたものに限定されるものではない。
【図面の簡単な説明】
【００９１】
【図１】本発明の実施の形態による、メモリ電力制御方法が用いられるコンピュータ・システムの一例を示す図である。
【図２】図１に示すコンピュータ・システムにおける初期化を説明するためのフロー図である。
【図３】アドレス空間のマッピングを示す図である。
【図４】オペレーティング・システムのランクメモリ管理を示す図である。
【図５】言語処理系のサブヒープ管理を示す図である。
【図６】ヤングヒープに対するサブヒープ数の制御を説明するためのフロー図である。
【図７】オールドヒープに対するサブヒープ数制御を説明するためのフロー図である。
【図８】フルＧＣにおけるアクティブクラスのオブジェクトのアクティブ・サブヒープへの移動を説明するためのフロー図である。
【図９】ヤングヒープからオールドヒープのアクティブ・サブヒープへオブジェクトを移動する際の処理を説明するフロー図である。
【図１０】本発明の実施の形態による、電力制御プログラムを実行する装置のハードウェア構成を示す図である。
【符号の説明】
【００９２】
１１  オペレーティング・システム（ＯＳ）
１２  仮想マシン（Ｊａｖａ  Ｖｅｒｔｕａｌ  Ｍａｃｈｉｎｅ：ＶＭ）
１３  物理メモリ
１４  ヒープメモリ（ヒープ領域）
１５  エネルギーコントローラ
【図１】
2010123059.tif 000011
【図２】
2010123059.tif 000012
【図３】
2010123059.tif 000013
【図４】
2010123059.tif 000014
【図５】
2010123059.tif 000015
【図６】
2010123059.tif 000016
【図７】
2010123059.tif 000017
【図８】
2010123059.tif 000018
【図９】
2010123059.tif 000019
【図１０】
2010123059.tif 000020