(57)【特許請求の範囲】
【請求項１】
メモリ中の使用されていない記憶領域を回収するガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置であって、
プログラムの実行に必要な記憶領域を有するメモリと、
前記メモリを対象としたガーベージコレクション処理を要求するガーベージコレクション処理要求手段と、
プログラムに割り当てられたメモリ量を示すメモリ消費量を管理するメモリ消費量算出手段であり、ガーベージコレクション処理が実行された場合に管理するメモリ消費量を０に設定し、メモリの割り当てが行われた場合に割り当てられたメモリ量を前記メモリ消費量に累積するメモリ消費量算出手段と、
前記メモリ消費量算出手段が累積した前記メモリ消費量と予め定められた閾値とを比較する比較手段と、
上記比較手段が比較した結果に基づいて、前記メモリ消費量が予め定められた閾値以上である場合にガーベージコレクション処理を実行するように制御し、前記メモリ消費量が予め定められた閾値未満である場合にガーベージコレクション処理を実行しないように制御するガーベージコレクション制御手段と
を備える情報記憶制御装置。
【請求項２】
メモリ中の使用されていない記憶領域を回収するガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置であって、
プログラムの実行に必要な記憶領域を有するメモリと、
前記メモリを対象としたガーベージコレクション処理を要求すると共にガーベージコレクション処理要求回数を一定期間毎に保持するガーベージコレクション処理要求手段と、
ガーベージコレクション処理前のメモリの空き記憶領域の合計量を算出する空きメモリ算出手段と、
前記空きメモリ算出手段が算出したガーベージコレクション処理前のメモリ空き記憶領域の合計量に基づいてガーベージコレクション処理を実行すると判断する一定期間毎要求回数の閾値を決定し、前記ガーベージコレクション処理要求手段が保持する一定期間毎のガーベージコレクション処理要求回数が閾値以上である場合に、ガーベージコレクション処理を実行するガーベージコレクション制御手段を備える情報記憶制御装置。
【請求項３】
メモリ中の使用されていない記憶領域を回収するガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置であって、
プログラムの実行に必要な記憶領域を有するメモリと、
前記メモリを対象としたガーベージコレクション処理を要求すると共にガーベージコレクション処理要求回数を一定期間毎に保持するガーベージコレクション処理要求手段と、
プログラムに割り当てられたメモリ量を示すメモリ消費量を管理するメモリ消費量算出手段であり、ガーベージコレクション処理が実行された場合に管理するメモリ消費量を０に設定し、メモリの割り当てが行われた場合に割り当てられたメモリ量をメモリ消費量に累積するメモリ消費量算出手段と、
前記メモリ消費量算出手段が累積したメモリ消費量に基づいてガーベージコレクション処理を実行すると判断する一定期間毎要求回数の閾値を決定し、前記ガーベージコレクション処理要求手段が保持する一定期間毎のガーベージコレクション処理要求回数が閾値以上である場合に、ガーベージコレクション処理を実行するガーベージコレクション制御手段を備える情報記憶制御装置。
【請求項４】
前記メモリ消費量算出手段は、割り当てられたメモリの使用種別を判断して割り当てられたメモリ量に対して重み付けを行い、重み付けを行ったメモリ量をメモリ消費量に累積し、
前記ガーベージコレクション制御手段は、前記メモリ消費量算出手段が累積した重み付けされたメモリ消費量に基づいて、ガーベージコレクション処理を実行すると判断する一定期間毎要求回数の閾値を決定する請求項３に記載された情報記憶制御装置。
【請求項５】
メモリ中の使用されていない記憶領域を回収するガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置の情報記憶制御方法であって、
前記メモリを対象としたガーベージコレクション処理を要求し、
ガーベージコレクション処理が実行された場合にプログラムに割り当てられたメモリ量を示すメモリ消費量を０に設定し、メモリの割り当てが行われた場合に割り当てられたメモリ量をメモリ消費量に累積し、
累積した前記メモリ消費量と予め定められた閾値とを比較し、
比較した結果に基づいて、前記メモリ消費量が予め定められた閾値以上である場合にガーベージコレクション処理を実行するように制御し、前記メモリ消費量が予め定められた閾値未満である場合にガーベージコレクション処理を実行しないように制御する情報記憶制御方法。
【請求項６】
請求項５記載の情報記憶制御方法をコンピュータに実行させる情報記憶制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的にメモリを確保して実行する処理系において、構造が複雑で一旦使用したメモリが不要になったかどうかを判定するために決まったルートから順番にメモリをたぐりマークをつけていき、マークのなかったメモリが不要であるとして回収し、必要に応じてメモリのコンパクションを行うガーベージコレクション処理に関するものである。
【０００２】
特に、ガーベージコレクション処理をアプリケーションプログラムが実際にメモリが必要になり要求した時点で必要性に応じて実行するのではなく、アプリケーションプログラムから要求されて実行するときのガーベージコレクションの制御に関するものである。
【背景技術】
【０００３】
情報処理学会会誌  Ｖｏｌ．３５，１９９４年には、特集として、主要なほとんどのガーベージコレクションに関する技術が掲載され開示されている。
【０００４】
通常の動的メモリを利用するプログラム実行環境においては、アプリケーションプログラムの実行により必要なメモリ量が動的に処理系に要求され、処理系で適切な大きさのメモリを用意してアプリケーションプログラムに使わせる。複雑にポインタなどでリンクされていく使い方をする場合には、一旦利用したメモリが不要になる場合も多々あり、これをリアルタイムに管理していくのは手間のかかる処理である。実際に動的なメモリが複雑に何箇所も利用されている場合を想定すると、アプリケーションプログラムが陽に不要であるという指定をしないかぎりは、ポインタが切れる処理のたびにメモリ内を走査していく必要が生じる。
【０００５】
このような問題を解決する手法として、従来からガーベージコレクションという手法が利用されている。ガーベージコレクション処理は動的にメモリが必要になったけれど、メモリが確保できない場合に走らせることが多く、システムの決まったルートと呼ばれるところから生きているメモリを順番に手繰ってマークし、まだ必要なメモリを特定する。マークされなかったメモリはシステムからアクセス不可能だったエリアであり、もう利用されなかったと判断し、これを回収し要求された処理に対してメモリとして提供する。
【０００６】
このような処理中はアプリケーションプログラムの動作は一旦停止し、ガーベージコレクションの処理が終了してから再開するという場合が多い。しかし、これはゲームアプリケーションプログラムのようにリアルタイム性を要求するアプリケーションプログラムには致命的である。そこで、従来からリアルタイムガーベージコレクションという方式が提案されている。これはそのメモリの参照数を常時カウントしておき、参照数が０になった時点で即時回収する方式や、アプリケーションプログラムの実行と並行してマーク処理を動作させていく方法などである。
【０００７】
いずれにしろ処理は複雑になり処理全体としての効率は落ちざるを得ない。あるいは特開２００１−１４２１５号公報に開示されているようにガーベージコレクションの実行時間を制限する方法や、特開２００２−２６８９１２号公報にあるようにガーベージコレクションの処理を分割する方法においても同様に処理の効率が落ちてしまう問題があった。
【０００８】
そこで、ゲームなどのアプリケーションプログラムは限られたキーの入力を要求するときのみガーベージコレクションの処理を起こして欲しくないため、ガーベージコレクションを起こして欲しくない処理の直前にアプリケーションプログラムから要求してガーベージコレクションを呼び出すケースがある。この方法はアプリケーションプログラムから見た場合は非常に有効であり多くのアプリケーションプログラムで使われている。
【非特許文献１】「ごみ集めの基礎と最近の動向」、情報処理学会会誌、Ｖｏｌ．３５，１９９４年、ｐ．９９１〜１０３２
【特許文献１】特開２００１−１４２１５号公報
【特許文献２】特開２００２−２６８９１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかし、アプリケーションプログラムからすると、一定の期間、ガーベージコレクション処理を起こして欲しくない場合にガーベージコレクション処理を呼ぶので、アプリケーションプログラムの立ち上げ時など頻繁にガーベージコレクション処理を呼ぶことになる。これは、立ち上げ時間など処理時間の低下を生んでいた。
【００１０】
本発明は、アプリケーションプログラムからガーベージコレクションを要求されたとしても実際にガーベージコレクションを呼ぶべきかどうかを判定し、必要なければ呼ばないという処理を入れることにより処理の効率低下を防ぐことを目的とする。
【００１１】
具体的には、ガーベージコレクション制御手段を設けて、ガーベージコレクション処理を実際に呼ぶか呼ばないかの判断を行い、これにより不要なガーベージコレクションを行わないようにすることを目的とする。
【課題を解決するための手段】
【００１２】
本発明に係る情報記憶制御装置は、
メモリ中の使用されていない記憶領域を回収するガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置であって、
プログラムの実行に必要な記憶領域を有するメモリと、
前記メモリを対象としたガーベージコレクション処理を要求するガーベージコレクション処理要求手段と、
プログラムに割り当てられたメモリ量を示すメモリ消費量を管理するメモリ消費量算出手段であり、ガーベージコレクション処理が実行された場合に管理するメモリ消費量を０に設定し、メモリの割り当てが行われた場合に割り当てられたメモリ量を前記メモリ消費量に累積するメモリ消費量算出手段と、
前記メモリ消費量算出手段が累積した前記メモリ消費量と予め定められた閾値とを比較する比較手段と、
上記比較手段が比較した結果に基づいて、前記メモリ消費量が予め定められた閾値以上である場合にガーベージコレクション処理を実行するように制御し、前記メモリ消費量が予め定められた閾値未満である場合にガーベージコレクション処理を実行しないように制御するガーベージコレクション制御手段と
を備えることを特徴とする。
【発明の効果】
【００１３】
ガーベージコレクション処理を実行せずに済む場合には、実行しないで済むことができるため、情報処理システム全体の処理を高速化することができる。
【発明を実施するための最良の形態】
【００１４】
実施の形態１．
以下、実施の形態１について説明する。
【００１５】
図１は実施の形態１及び実施の形態２に係る情報記憶制御装置１００の構成図である。情報記憶制御装置１００は、メモリ１０中の使用されていない記憶領域を回収するガーベージコレクション処理によって、回収した記憶領域をプログラムに動的に割り当てるプログラム実行環境を備えている。
【００１６】
アプリケーションプログラム１は、一定の期間、ガーベージコレクションを起こして欲しくないような場合にガーベージコレクションを陽に呼ぶプログラムである。
【００１７】
ＡＰＩ（ＡＰＰＬＩＣＡＴＩＯＮ  ＩＮＴＥＲＦＡＣＥ）３は、アプリケーションプログラム１がシステムの機能を呼び出すために通常用意されているアプリケーションインタフェースである。
【００１８】
ガーベージコレクション処理要求手段２は、ＡＰＩ３の中でもガーベージコレクション処理を呼び出すためのインタフェースである。ここで、ガーベージコレクション処理とは、メモリ１０中の、現在使用されていない記憶領域を回収する処理をいう。ガーベージコレクション処理要求手段２は、ガーベージコレクション処理要求の累積又は一定期間の回数を保持することができる。また、ガーベージコレクション処理要求手段２は、一定期間毎に、要求回数を初期値０に設定する処理を有している。さらに、ガーベージコレクション処理要求手段２は、ガーベージコレクション制御手段に対して、ガーベージコレクションの実行を行うか判断を行わないように、ガーベージコレクションの処理を呼び出すことができる。
【００１９】
ここで、メモリ１０中の使用されていない記憶領域を回収するとは、メモリ１０中に分散された記憶領域であって、使用されていない記憶領域を一箇所に集めることをいう。具体的には、動的にメモリ１０を確保して実行する処理系において、構造が複雑で一旦使用したメモリ１０が不要になったかどうかを判定するために、決まったルートから順番にメモリ１０をたぐりマークをつけていき、マークのなかったメモリ１０が不要であるとして回収し、必要に応じてメモリ１０のコンパクションを行う処理をいう。
【００２０】
メモリ１０は、ガーベージコレクション処理の対象となるメモリであり、アプリケーションプログラム１の実行に必要な記憶領域を有する。
【００２１】
ガーベージコレクション制御手段４は、アプリケーションプログラムからガーベージコレクション処理が呼ばれた場合に、実際にガーベージコレクション処理を行うプログラムを呼んで、ガーベージコレクション処理を実行するかどうか判断するガーベージコレクションの呼び出し制御を行うモジュールであり、比較手段５は、ガーベージコレクション処理を実行するか否かを制御するために、予め定められた条件を比較するモジュールである。
【００２２】
比較手段５は、ガーベージコレクション制御手段４が、後記、空きメモリ算出手段７、メモリ消費量算出手段８の算出した値から比較手段５が行う条件を設定する。
処理系６は、動的メモリを管理する必要のあるような言語処理系またはＯＳにあたるもので、空きメモリ算出手段７は最初にあったフリーなメモリ領域からどれだけ記憶領域が各々のプログラムに割り当てられたかを管理しているモジュールであり、メモリ消費量算出手段８は、所定期間にどれだけメモリを消費したかを算出する手段である。  また、メモリ消費量算出手段８は、メモリの使用種別を判断し、重み付けを行ってメモリ消費量の算出を行うことができる。ここで、メモリの使用種別とは、Ｃ＋＋，Ｊａｖａ（登録商標）等のオブジェクト指向言語の情報記憶制御系であれば、メモリを確保する際に、その役割が明確にされたクラスである。また、ＦＯＲＴＲＡＮやＣでも、メモリ確保関数を用意し、確保された関数を特定することである。さらに、確保されたメモリの一部に書き込まれたヘッダ情報である。
【００２３】
メモリ消費量算出手段８に、メモリの使用種別を判断し、重み付けを行ったメモリ使用量を算出する処理を設ける目的は、短命なメモリ消費の積み重ねによるガーベージコレクションの発生を抑制するためである。ここで、短命なメモリ消費とは、メッセージ通知に用いるイベント通知やデータ引渡しに用いるバッファ領域等の利用された後に、すぐにガーベージコレクションの対象となるものである。
【００２４】
ガーベージコレクション処理９は、現在、プログラムに利用しているメモリ１０の記憶領域をマークして、使用していないメモリ１０の記憶領域を回収するガーベージコレクターを実行する。
【００２５】
本実施の形態に係るガーベージコレクション処理の実行制御について、図２を利用して説明する。
【００２６】
図２は、本実施の形態に係るガーベージコレクション処理の実行制御フローである。
【００２７】
まず、ステップ２０１で、アプリケーションプログラム１は、所定の処理の実行に必要なメモリ量を処理実行メモリ量として指定して、ガーベージコレクション処理の呼び出しを要求する。これはアプリケーションプログラム１としては、これから指定した処理実行メモリ量を使用した所定の処理を実行する間は、ガーベージコレクション処理を発生して欲しくない場合に、所定の処理中にガーベージコレクション処理が実行されることを回避するために、前記所定の処理の実行前に要求するものである。通常のＯＳなどにメモリ要求して利用する場合と異なり、ここで指定した処理実行メモリ量をメモリ１０の記憶領域に空けることができなかった場合でも、そのまま所定の処理を動作することができる可能性がある。
【００２８】
アプリケーションプログラム１から、このようなガーベージコレクション処理の呼び出し要求を受けて、ガーベージコレクション処理要求手段２は、メモリ１０を対象としたガーベージコレクション処理をガーベージコレクション制御手段４に要求する。
【００２９】
次に、ステップ２０２で、空きメモリ算出手段７が、現状のメモリ１０を対象として空き状況のチェック処理を行い、メモリ１０の空き記憶領域の合計量を算出する。この処理は後で詳細に説明する図３で示すように、メモリ１０を利用するたびに利用したメモリ量をチェックしておき、残りのメモリ量からメモリ１０の空き記憶領域の合計量を計算することができる。例えば、メモリ１０には、１Ｍバイトのメモリ量があることがわかっており、前回のガーベージコレクション処理時に変わったメモリ量、または、初期状態のメモリ量から実際に利用したメモリ量が８００Ｋバイトであれば、空きメモリ算出手段７は、残りの２００Ｋバイトをメモリ１０の空き記憶領域の合計量として計算することができる。ここで、実際には使用した８００Ｋバイトの中にも未使用状態になってしまったものも存在するが、それはガーベージコレクション処理を実行しない限りはわからないものである。
【００３０】
ステップ２０３で、比較手段５は、ステップ２０２で得たメモリ１０の空き容量（メモリ１０の空き記憶領域の合計量）が要求された処理実行メモリ量に比べて大きいかどうかを比較する。
【００３１】
ガーベージコレクション制御手段４は、空きメモリ算出手段７が算出したメモリ１０の空き記憶領域の合計量に基づいて、ガーベージコレクション処理要求手段２が要求するガーベージコレクション処理を実行するか否かを制御する。
【００３２】
すなわち、ガーベージコレクション制御手段４は、比較手段５が比較した結果、上述したように、メモリ１０の空き記憶領域の合計量が処理実行メモリ量以上である場合には、ガーベージコレクション処理を実行せずに終了し、メモリ１０の空き記憶領域の合計量が処理実行メモリ量未満である場合には、ステップ２０４でガーベージコレクション処理を実行するように制御する。
【００３３】
ここで、アプリケーションプログラム１に対して実際にガーベージコレクション処理を実行したかどうかや、ガーベージコレクション処理を実行した結果、どの程度、メモリ１０に空いた記憶領域があったかなどの値を返しても良いし、返さなくてもよい。
【００３４】
次に、図３を用いて、メモリ１０を利用するたびに、空きメモリ算出手段７が行う、利用したメモリ量のチェックの方法に関して説明する。
【００３５】
図３は、空きメモリ算出手段７が行う、空きメモリのチェック方法を示した図である。
【００３６】
まず、ステップ３０１で、空きメモリ算出手段７は、メモリ１０の初期状態の情報を設定する。例えば、メモリ１０には、全体で８００Ｋバイトの記憶領域が存在するなら、初期値として８００Ｋバイトを設定する。
【００３７】
ステップ３０２では、空きメモリ算出手段７は、メモリ１０を使用する際に発生するイベントを待ちに行く。
【００３８】
メモリ１０を使用する場合に必ずイベントを発生するようにしておき、このイベントがステップ３０３に示すような、新たにメモリ１０の記憶領域を使用するというイベントであれば、ステップ３０４で、空きメモリ算出手段７は、その使用量（メモリ１０の内、新たに使用した記憶領域）を新たに追加設定し、その使用量以外の記憶領域をメモリ１０の空き記憶領域の合計量とする。
【００３９】
ステップ３０５に示すように、ガーベージコレクション処理を実行したというイベントであれば、ステップ３０６で、空きメモリ算出手段７は、ガーベージコレクション実行後、新たにメモリ１０を使用したメモリ量を設定する。
【００４０】
ステップ３０７に示すように、メモリ１０の空きメモリ容量確認イベントの場合は、ステップ３０８で、空きメモリ算出手段７は、設定されているメモリ使用量に関する情報を返す処理、または、メモリ使用量から算出した空き記憶領域に関する情報を返す処理を行う。
【００４１】
以上、アプリケーションプログラム１の言語解釈実行手段またはコンパイルされた機械語を実行する手段を備えた情報処理システムの内、動的にメモリ１０を確保して利用し、構造が複雑であってすでに利用したメモリ１０が不要になったかどうかは限られたスタックなどのエリアから参照されているメモリ１０を順に手繰るなどしてメモリ１０にマークをつけることにより使用中か使用してないかを決めていくガーべコレクション処理を備えている情報記憶制御装置１００において、アプリケーションプログラム１からのガーベージコレクション処理の呼び出しに応じて、ガーベージコレクション処理を要求するガーベージコレクション処理要求手段２と、アプリケーションプログラム１に応じてガーベージコレクション処理要求手段２からのガーベージコレクション呼び出しに対して実際のガーベージコレクション処理を実行するか実行しないかを制御するガーベージコレクション制御手段４とを備えることを特徴とする情報記憶制御装置１００について説明した。
【００４２】
また、前記情報記憶制御装置１００のガーベージコレクション処理要求手段２において、アプリケーションプログラム１が次に処理する所定の処理の間にガーベージコレクション処理を呼び出したくない場合に、所定の処理に必要なメモリ量を処理実行メモリ量として指定して、ガーベージコレクション処理を呼び出すガーベージコレクション処理要求手段２と、必要な空きメモリ領域を確保するガーベージコレクション処理９と、実際にガーベージコレクション処理をするかどうかを制御するガーベージコレクション制御手段４とを備えたことを特徴とする情報記憶制御装置１００について説明した。
【００４３】
また、前記情報記憶制御装置１００のガーベージコレクション制御手段４において、所定の処理に必要な処理実行メモリ量が十分確保済みかどうかを計算する空きメモリ算出手段７を備え、ガーベージコレクション処理実行前に、空きメモリ量の算出結果が処理実行メモリ量より大きいかどうかを比較する比較手段５を備え、比較の結果必要なければガーベージコレクション処理を実行しないという特徴をもつガーベージコレクション制御手段４を備えた情報記憶制御装置１００について説明した。
【００４４】
以上に説明した本実施の形態の情報記憶制御装置１００によれば、起動時などに頻繁に呼ばれることが予想されるガーベージコレクション処理の実際の実行を制御し、アプリケーションプログラム１にとってガーベージコレクション処理を実行して欲しくない状況の場合で、ガーベージコレクション処理を実行せずに済む場合には、確実に実行しないで済むことができるため、結果として情報処理システム全体の処理を高速化することができるという効果がある。すなわち、本実施の形態の情報記憶制御装置１００によれば、そこでアプリケーションプログラム１からガーベージコレクション処理を要求されたとしても、ガーベージコレクション制御手段４が実際にガーベージコレクション処理を呼ぶべきかどうかを判定し、必要なければ呼ばないという処理を入れることにより処理の低下を防ぐことができる。
【００４５】
これにより、本情報記憶制御装置１００によれば、不要なガーベージコレクション処理を行わないようにすることができる。ガーベージコレクション処理９を呼ぶか呼ばないかの判断のためには、その時点でのメモリ１０の使用状況を把握しておく必要があるため、空きメモリ算出手段７により、メモリ１０の空き記憶領域の合計量の算出を行っている。
【００４６】
実施の形態２．
以下、実施の形態２について、図４を用いて説明する。
【００４７】
図４は、本実施の形態に係るガーベージコレクション処理の実行制御フローである。
【００４８】
ステップ４０１で、アプリケーションプログラム１がガーベージコレクションを要求し、これに応答する形でガーベージコレクション処理要求手段２がガーベージコレクション制御手段４にガーベージコレクション処理９を要求することによりスタートする。
【００４９】
ステップ４０２で、メモリ消費量算出手段８は、使用メモリ領域の合計量をチェックする。使用メモリ領域の合計量は、メモリ消費量算出手段８が、前回のガーベージコレクション処理が実行された後にメモリ１０の割り当てが行われた場合、割り当てられたメモリ量を累積することによって、累積したメモリ量をメモリ消費量（使用メモリ領域の合計量）とすることにより算出されるが、詳細は、後述する図５に示すフローに従って説明する。
【００５０】
次に、ステップ４０３で、比較手段５が、使用メモリ領域の大きさを予め定められた閾値と比較する。予め定められた閾値としては、メモリ１０の全メモリ量の半分に設定しても良いし、初期化時の空きメモリ量の半分に設定しても良い。また前回ガーベージコレクションで改修されてからの増加量が前回のガーベージコレクション時の空き容量の半分を超えるかどうかで判定しても良いし、これらの数値の最も大きな数値との比較をしてもかまわない。
【００５１】
上記閾値より使用メモリが少なければ、ガーベージコレクション制御手段４はガーベージコレクション処理９を実行せずに終了し、上記使用メモリが閾値以上であれば、ガーベージコレクション制御手段４は、ステップ４０４でガーベージコレクション処理９を実行して終了する。
【００５２】
図５を用いて、メモリ消費量算出手段８が実行するメモリ消費量（使用メモリ容量）の管理のフローを説明する。
【００５３】
図５は、メモリ１０中の使用メモリのチェック方法を示した図である。
【００５４】
まず、メモリ消費量算出手段８は、使用メモリ量の管理用の使用量に関する変数をステップ５０１で初期化して０とする。
【００５５】
ステップ５０２でメモリ１０使用のイベント待ちに入る。
【００５６】
ステップ５０３でメモリ１０使用イベントが発生すると、ステップ５０４で、メモリ消費量算出手段８は、使用量が増加した分、使用メモリ量の管理用の変数の値を大きくする。
【００５７】
このように、メモリ消費量算出手段８は、前回のガーベージコレクション処理が実行された後にメモリの割り当てが行われた場合、割り当てられたメモリ量を累積することによって、累積したメモリ量をメモリ消費量として算出する。
【００５８】
ステップ５０５で、ガーベージコレクション発生のイベントの場合、メモリ消費量算出手段８は、ステップ５０６で、ガーベージコレクション実行後の使用メモリ容量の管理用の変数の値を０に変更する。
【００５９】
ステップ５０７で使用メモリ量の確認イベントが発生した場合には、ステップ５０８で、メモリ消費量算出手段８は、使用メモリ量の管理用の変数の値を返す。これにより、メモリ消費量算出手段８はメモリ量の管理を行うことができる。
【００６０】
なお、情報記憶制御装置１００において、ガーベージコレクション処理前のメモリ１０の空き記憶領域の合計量の算出を行う空きメモリ算出手段７を備え、ガーベージコレクション処理要求手段２がガーベージコレクション処理を呼んだ際に、比較手段５がフリーのメモリ領域（ガーベージコレクション処理前のメモリ１０の空き記憶領域の合計量）が一定の閾値を超えているかどうかを判定し、判定の結果、ガーベージコレクション制御手段４がガーベージコレクション処理を実行する必要がないと判断した場合には、ガーベージコレクション処理を実行しないという方法を取ることもできる。
【００６１】
実施の形態２の情報記憶制御装置１００によれば、情報記憶制御装置１００が前回ガーベージコレクション処理が起こってから消費されたメモリ量（メモリ消費量）を算出するメモリ消費量算出手段８を備え、前回ガーベージコレクション処理が起こってから消費したメモリ量（メモリ消費量）が閾値を超えているかどうかを判定する比較手段５を備え、必要がなければガーベージコレクションを実行しないという特徴を持つことによって、アプリケーションプログラムが頻繁にガーベージコレクション処理を呼ぶ場合において、一定の回数のガーベージコレクション処理要求を間引くことができ、全体の実行時間を小さくすることができるという効果がある。
【００６２】
なお、ガーベージコレクションを起こして欲しくない期間にガーベージコレクションが起こってしまうケースもありうるが、閾値を変更チューニングすることによりメモリの大きさに応じて効果的に利用することができる。
【００６３】
また、本実施の形態の発明によれば、逆に、いままでの使用メモリ量を知ることにより、閾値を設ければ、それ以上かどうかで判断することができる。
【００６４】
実施の形態３．
以下、実施の形態３について、図６を用いて説明する。
【００６５】
図６は、本実施の形態に係るガーベージコレクション処理の実行制御フローである。
【００６６】
まず、ガーベージ処理要求について説明する。ステップ６０１で、アプリケーションプログラム１は、所定の処理の実行に必要なメモリ量を処理実行メモリ量として指定して、ガーベージコレクション処理の呼び出しを要求する。これはアプリケーションプログラム１としては、これから指定した処理実行メモリ量を使用した所定の処理を実行する間は、ガーベージコレクション処理を発生して欲しくない場合に、所定の処理中にガーベージコレクション処理が実行されることを回避するために、前記所定の処理の実行前に要求するものである。通常のＯＳなどにメモリ要求して利用する場合と異なり、ここで指定した処理実行メモリ量をメモリ１０の記憶領域に空けることができなかった場合でも、そのまま所定の処理を動作することができる可能性がある。
【００６７】
アプリケーションプログラム１から、このようなガーベージコレクション処理の呼び出し要求を受けて、ガーベージコレクション処理要求手段２は、ステップＳ６０２にて、一定期間の要求回数の保持する値を１増加させて、メモリ１０を対象としたガーベージコレクション処理をガーベージコレクション制御手段４に要求する。
【００６８】
次に、メモリ消費量算出と処理要求回数を判断する閾値の設定について説明する。ステップ６０３で、メモリ消費量算出手段８が、現状のメモリ１０を対象として使用メモリ領域の合計量のチェック処理を行い、メモリ１０のメモリ消費量の合計量を算出する。この処理は後で詳細に説明する図９で示すように、メモリ１０を利用する度に利用したメモリ量をチェックしておき、メモリ１０の使用メモリ領域の合計量を計算することができる。例えば、メモリ１０には、１Ｍバイトのメモリ量があることがわかっており、前回のガーベージコレクション処理時に変わったメモリ量、または、初期状態のメモリ量から実際に利用したメモリ量を求めることができる。
【００６９】
閾値との比較とガーベージコレクションの実行制御について説明する。ステップ６０４で、比較手段５は、ステップ６０３で得たメモリ１０の使用メモリ領域の合計量から、一定期間に行われたガーベージコレクション処理要求回数の閾値を設定する。本実施例では、図８に示したグラフの様に、使用メモリ量が少ない場合には、閾値を大きくし、使用メモリ量が多い場合には、閾値を小さくする。また、下限値を設けて、使用メモリ量が一定未満であれば、閾値は無限大である。さらに、上限値を設けて、使用メモリ量が一定以上であれば、閾値は０である。
【００７０】
ステップ６０５で、比較手段５は、ステップ６０２で得た一定期間内のガーベージコレクション処理要求回数と、ステップ６０４で得た閾値に比べて大きいかどうかを比較する。
【００７１】
ガーベージコレクション制御手段４は、メモリ消費量算出手段８が算出したメモリ１０のメモリ消費量の合計量に基づいて閾値を設定し、ガーベージコレクション処理要求回数に応じて、ガーベージコレクション処理要求手段２が要求するガーベージコレクション処理を実行するか否かを制御する。
【００７２】
すなわち、ガーベージコレクション制御手段４は、比較手段５が比較した結果、上述したように、一定期間内のガーベージコレクション処理要求回数が、メモリ１０のメモリ消費量の合計量に基づいて求められた閾値未満である場合には、ガーベージコレクション処理を実行せずに終了し、一定期間内のガーベージコレクション処理要求回数が、メモリ１０のメモリ消費量の合計量に基づいて求められた閾値以上である場合には、ステップ６０６でガーベージコレクション処理を実行するように制御する。
【００７３】
ここで、アプリケーションプログラム１に対して実際にガーベージコレクション処理を実行したかどうかや、ガーベージコレクション処理を実行した結果、どの程度、メモリ１０に空いた記憶領域があったかなどの値を返しても良いし、返さなくてもよい。
【００７４】
メモリ使用用途により重み付けられたメモリ消費量の算出に関して、図９を用いて、メモリ消費量算出手段８が実行するメモリ消費量（使用メモリ容量）の管理のフローを説明する。
【００７５】
図９は、メモリ１０中の使用メモリのチェック方法と重み付け計算を示した図である。まず、メモリ消費量算出手段８は、使用メモリ量の管理用の使用量に関する変数をステップ９０１で初期化して０とする。
【００７６】
ステップ９０２でメモリ１０使用のイベント待ちに入る。
【００７７】
ステップ９０３でメモリ１０使用イベントが発生すると、ステップ９０９で、メモリ消費量算出手段８は、使用量が増加した分に対して、重み付け計算を行う。具体的には、メモリの使用用途を確認し、図１０に示したメモリ消費量の重み付けテーブルから重み付けの設定値を取得し、使用量に対して積を取る。例えば、メモリ確保されるクラスとして、ＫｅｙＥｖｅｎｔ（１００１）を指定されていた場合には、０．１（１００６）を重み付けの設定値として取得する。メモリ確保された１００バイトであれば、重み付けられた１０バイト程度の量として換算する。
【００７８】
ステップＳ９０４にて、使用メモリ量の管理用変数の値を大きくする。
【００７９】
このように、メモリ消費量算出手段８は、前回のガーベージコレクション処理が実行された後にメモリの割り当てが行われた場合、割り当てられたメモリ量を重み付けし、累積することによって、累積したメモリ量をメモリ消費量として算出する。
【００８０】
ステップＳ９０５で、ガーベージコレクション発生のイベントの場合、メモリ消費量算出手段８は、ステップ９０６で、ガーベージコレクション実行後の使用メモリ容量の管理用変数値を０に変更する。
【００８１】
ステップＳ９０７で使用メモリ量の確認イベントが発生した場合には、ステップ９０８で、メモリ消費量算出手段８は、使用メモリ量の管理用変数の値を返す。これにより、メモリ消費量算出手段８はメモリ量の管理を行うことができる。
【００８２】
処理要求回数のクリアとガーベージコレクションの遅延実行について説明する。図１１は、ガーベージコレクション処理要求手段２が保持するガーベージコレクション処理要求回数を定期にクリアする際に、ガーベージコレクション処理を実行するステップを記載した流れ図である。
【００８３】
まず、ステップＳ１１０１にて、一定期間毎に、ガーベージコレクション処理要求回数を０に戻す処理の開始が行われる。一定期間後の処理の呼出は、ＯＳの機能のタイマー処理イベント通知関数を用いても良いし、Ｈ／Ｗのタイマーを用いても良い。
【００８４】
次に、ステップＳ１１０２にて、ガーベージコレクション処理要求手段２は、要求回数が０であるか判定を行う。要求回数が０であれば終了する。
【００８５】
要求回数が０でなければ、ステップＳ１１０３に進み、ガーベージコレクション処理要求手段２は、要求回数を０に設定し、ガーベージコレクション制御手段４に対して、ガーベージコレクションの処理を実行するか否かの判断が不要であることを示すガーベージコレクション処理要求を行う。
【００８６】
ステップＳ１１０５にて、ガーベージコレクション制御手段４は、ガーベージコレクション処理要求手段２からの要求内容を判定し、制御が必要ではないガーベージコレクション処理要求であれば、ステップＳ１１０７に進み、ガーベージコレクション処理を実行する。
【００８７】
ステップＳ１１０５にて、ガーベージコレクション制御手段４は、ガーベージコレクション処理要求手段２から要求内容を判定し、制御が必要である場合には、ステップＳ１１０６にて、上記のガーベージコレクションの判断処理を行う。
【００８８】
実施の形態３の情報記憶制御装置１００によれば、メモリの使用用途に関連付けられた重み付けを用いて、前回ガーベージコレクション処理が起こってから消費されたメモリ量（メモリ消費量）を算出するメモリ消費量算出手段８を備え、前回ガーベージコレクション処理が起こってから消費したメモリ量（メモリ消費量）に応じた、ガーベージコレクション処理要求回数が閾値を超えているかどうかを判定する比較手段５を備え、必要がなければガーベージコレクションを実行しないという特徴を持つことによって、アプリケーションプログラムが頻繁にガーベージコレクション処理の要求を行う場合において、メモリ消費量に応じた回数のガーベージコレクション処理要求を間引くことができ、全体の実行時間を小さくすることができるという効果がある。
【００８９】
また、メモリ消費量の計算において、確保、使用された後に、直ちに開放されるイベント通知用のメモリを少なく重み付けを行うことにより、アプリケーションが行うガーベージコレクション処理要求の必要性をより正確に判断することができる。
【００９０】
さらに、一定時間毎に処理要求回数を０に設定し、その際、ガーベージコレクション処理を実行することで、アプリケーションが要求したガーベージコレクション処理を、完全に無視されることなく、一定時間後には、ガーベージコレクションを実行することを保証することができる。
【００９１】
実施の形態４．
以下、実施の形態４について、図１２を用いて説明する。
【００９２】
図１２は、本実施の形態に係るガーベージコレクション処理の実行制御フローである。
【００９３】
まず、ガーベージコレクション処理要求について説明する。ステップ１２０１で、アプリケーションプログラム１は、所定の処理の実行に必要なメモリ量を処理実行メモリ量として指定して、ガーベージコレクション処理の呼び出しを要求する。これはアプリケーションプログラム１としては、これから指定した処理実行メモリ量を使用した所定の処理を実行する間は、ガーベージコレクション処理を発生して欲しくない場合に、所定の処理中にガーベージコレクション処理が実行されることを回避するために、前記所定の処理の実行前に要求するものである。通常のＯＳなどにメモリ要求して利用する場合と異なり、ここで指定した処理実行メモリ量をメモリ１０の記憶領域に空けることができなかった場合でも、そのまま所定の処理を動作することができる可能性がある。
【００９４】
アプリケーションプログラム１から、このようなガーベージコレクション処理の呼び出し要求を受けて、ガーベージコレクション処理要求手段２は、メモリ１０を対象としたガーベージコレクション処理をガーベージコレクション制御手段４に要求する。
【００９５】
アプリケーションプログラム１から、このようなガーベージコレクション処理の呼び出し要求を受けて、ガーベージコレクション処理要求手段２は、ステップＳ１２０２にて、ガーベージコレクション処理要求回数の増加数を保持する値を１増加させて、メモリ１０を対象としたガーベージコレクション処理をガーベージコレクション制御手段４に要求する。
【００９６】
次に、空き領域算出と処理要求回数を判断する閾値の設定について説明する。ステップ１２０３で、空きメモリ算出手段７が、現状のメモリ１０を対象として空き状況のチェック処理を行い、メモリ１０の空き記憶領域の合計量を算出する。この処理は先に図３を用いて示したように、メモリ１０を利用するたびに利用したメモリ量をチェックしておき、残りのメモリ量からメモリ１０の空き記憶領域の合計量を計算することができる。例えば、メモリ１０には、１Ｍバイトのメモリ量があることがわかっており、前回のガーベージコレクション処理時に変わったメモリ量、または、初期状態のメモリ量から実際に利用したメモリ量が８００Ｋバイトであれば、空きメモリ算出手段７は、残りの２００Ｋバイトをメモリ１０の空き記憶領域の合計量として計算することができる。ここで、実際には使用した８００Ｋバイトの中にも未使用状態になってしまったものも存在するが、それはガーベージコレクション処理を実行しない限りはわからないものである。
【００９７】
ステップ１２０４で、比較手段５は、ステップ１２０３で得たメモリ１０の空き記憶領域の合計量から、一定期間に行われたガーベージコレクション処理要求回数の増加分の閾値を設定する。本実施例では、図７に示したグラフの様に、空き記憶領域が少ない場合には、閾値を小さくし、空き記憶領域が多い場合には、閾値を大きくする。また、下限値を設けて、空き記憶領域の容量が一定未満であれば、閾値は０である。さらに、上限値を設けて、空き記憶領域の容量が一定以上であれば、閾値は無限大である。
【００９８】
閾値との比較とガーベージコレクションの実行制御について説明する。ステップ１２０５で、比較手段５は、ステップ１２０３で得たメモリ１０の空き容量（メモリ１０の空き記憶領域の合計量）が要求された処理実行メモリ量に比べて大きいかどうかを比較する。
【００９９】
ガーベージコレクション制御手段４は、空きメモリ算出手段７が算出したメモリ１０の空き記憶領域の合計量に基づいて、ガーベージコレクション処理要求の増加回数を判断する閾値を設定し、ガーベージコレクション処理要求回数の増加数に応じて、ガーベージコレクション処理要求手段２が要求するガーベージコレクション処理を実行するか否かを制御する。
【０１００】
すなわち、ガーベージコレクション制御手段４は、比較手段５が比較した結果、上述したように、ガーベージコレクション処理要求回数の増加数が、メモリ１０の空き容量の合計量に基づいて求められた閾値未満である場合には、ガーベージコレクション処理を実行せずに終了し、ガーベージコレクション処理要求回数の増加数が、メモリ１０のメモリ消費量の合計量に基づいて求められた閾値以上である場合には、ステップ１２０６でガーベージコレクション処理を実行するように制御する。
【０１０１】
ステップ１２０７にて、再度、ガーベージコレクション処理要求回数をカウントできる様に、ガーベージコレクション処理要求回数の増加数を０に設定して、終了する。
【０１０２】
ここで、アプリケーションプログラム１に対して実際にガーベージコレクション処理を実行したかどうかや、ガーベージコレクション処理を実行した結果、どの程度、メモリ１０に空いた記憶領域があったかなどの値を返しても良いし、返さなくてもよい。
【０１０３】
実施の形態４の情報記憶制御装置１００によれば、メモリ空き容量に応じた、ガーベージコレクション処理要求回数の増加数が閾値を超えているかどうかを判定する比較手段５を備え、必要がなければガーベージコレクションを実行しないという特徴を持つことによって、アプリケーションプログラムが頻繁にガーベージコレクション処理の要求を行う場合において、メモリ空き容量に応じた回数のガーベージコレクション処理要求を間引くことができ、全体の実行時間を小さくすることができるという効果がある。
【０１０４】
実施の形態５．
実施の形態３では、メモリの使用用途に応じて重み付けを行った使用メモリ量の合計量により、要求回数の閾値を設定したが、重み付けを行わない使用メモリ量の合計により、要求回数の閾値を設定してもよい。
【０１０５】
この場合には、Ｓ９０９の処理を省略し、図３と同様に処理する。
【０１０６】
実施の形態６．
実施の形態３におけるメモリの使用用途に応じて重み付けを行った使用メモリ量の合計量を、実施の形態２に適用することも有効である。
【０１０７】
この場合には、図４の使用メモリチェック処理の際に、実施の形態３と同様の使用用途に応じた重み付けの処理を行う。
【０１０８】
本発明は、各実施の形態に記載した以上の要素、方法を組み合わせて利用することが可能であり、組み合わせて利用することによって、より顕著な効果を得ることができる。
【０１０９】
ガーベージコレクション処理要求手段２、ガーベージコレクション制御手段４、空きメモリ算出手段７、メモリ消費量算出手段８、比較手段５が行う動作は、Ｈ／Ｗのみでも実施でき、Ｓ／Ｗのみでも実施でき、Ｈ／ＷとＳ／Ｗを組み合わせても実施することができる。
【０１１０】
すべての実施の形態では、各構成要素の各動作はお互いに関連しており、各構成要素の動作は、上記に示された動作の関連を考慮しながら、一連の動作として置き換えることができる。そして、このように置き換えることにより、方法の発明の実施形態とすることができる。
【０１１１】
また、上記各構成要素の動作を、各構成要素の処理と置き換えることにより、プログラムの実施の形態とすることができる。
【０１１２】
また、プログラムを、プログラムを記録したコンピュータ読み取り可能な記録媒体に記憶させることで、プログラムに記録したコンピュータ読み取り可能な記録媒体の実施の形態とすることができる。
【０１１３】
プログラムの実施の形態及びプログラムに記録したコンピュータ読み取り可能な記録媒体の実施の形態は、すべてコンピュータで動作可能なプログラムにより構成することができる。
【０１１４】
プログラムの実施の形態およびプログラムを記録したコンピュータ読み取り可能な記録媒体の実施の形態における各処理はプログラムで実行されるが、このプログラムは、記録装置に記録されていて、記録装置から中央処理装置（ＣＰＵ）に読み込まれ、中央処理装置によって、各プログラムが実行されることになる。
【０１１５】
また、各実施の形態のソフトウェアやプログラムは、ＲＯＭ（ＲＥＡＤ  ＯＮＬＹ  ＭＥＭＯＲＹ）に記憶されたファームウェアで実現されていても構わない。あるいは、ソフトウェアとファームウェアとハードウェアとの組み合わせで前述したプログラムの各機能を実現しても構わない。
【図面の簡単な説明】
【０１１６】
【図１】情報記憶制御装置１００の構成図である。
【図２】実施の形態１に係るガーベージコレクション処理の実行制御フローである。
【図３】空きメモリのチェック方法を示した図である。
【図４】実施の形態２に係るガーベージコレクション処理の実行制御フローである。
【図５】使用メモリのチェック方法を示した図である。
【図６】一定期間の要求回数によるガーベージコレクション判断処理フローを示す図である。
【図７】一定期間の要求回数によるガーベージコレクション判断の閾値を示す図である。
【図８】一定期間の要求回数によるガーベージコレクション判断の閾値を示す図である。
【図９】メモリ消費量の重み付けの処理フローを示す図である。
【図１０】メモリ消費量の重み付けテーブルを示す図である。
【図１１】一定期間毎満了の判断スキップの処理フローを示す図である。
【図１２】要求回数の増加によるガーベージコレクション判断の処理フローを示す図である。
【符号の説明】
【０１１７】
１  アプリケーションプログラム、２  ガーベージコレクション処理要求手段、３  ＡＰＩ、４  ガーベージコレクション制御手段、５  比較手段、６  処理系、７  空きメモリ算出手段、８  メモリ消費量算出手段、９  ガーベージコレクション処理、１０  メモリ、１００  情報記憶制御装置。
【図１】
0003688286.tif 000002
【図２】
0003688286.tif 000003
【図３】
0003688286.tif 000004
【図４】
0003688286.tif 000005
【図５】
0003688286.tif 000006
【図６】
0003688286.tif 000007
【図７】
0003688286.tif 000008
【図８】
0003688286.tif 000009
【図９】
0003688286.tif 000010
【図１０】
0003688286.tif 000011
【図１１】
0003688286.tif 000012
【図１２】
0003688286.tif 000013