(57)【要約】【課題】インクリメンタルガベージコレクションを効率的に実行する。【解決手段】ＨＭＩ機器１は、メインメモリ１２（ヒープ領域１２ａ）における不要な領域を解放するためにインクリメンタルガベージコレクション（インクリメンタルＧＣ）およびフルガベージコレクション（フルＧＣ）を実行するガベージコレクション実行部９と、中断されないことを要求される中断不可処理がメインメモリ１２を使用しようとするメモリ使用量がメインメモリ１２の空き容量未満であるか否かを判定する空き容量判定部８３４と、メモリ使用量が空き容量未満であるときにインクリメンタルＧＣを停止する一方、メモリ使用量が空き容量未満でないときにインクリメンタルＧＣまたはフルＧＣを起動するように、また、中断不可処理が実行されないときにインクリメンタルＧＣを起動させるようにガベージコレクション実行部９を制御する起動・停止制御部８３５とを備える。【選択図】図２
2018106310.tif 000002
【特許請求の範囲】
【請求項１】
メモリにおける不要な領域を解放するためにインクリメンタルガベージコレクションおよびフルガベージコレクションを実行するガベージコレクション実行部と、
中断されないことを要求される中断不可処理が前記メモリを使用しようとするメモリ使用量が前記メモリの空き容量未満であるか否かを判定する空き容量判定部と、
前記メモリ使用量が前記空き容量未満であると判定されると、前記中断不可処理が実行される前に、動作している前記インクリメンタルガベージコレクションを停止する一方、前記メモリ使用量が前記空き容量未満でないと判定されると、前記インクリメンタルガベージコレクションまたは前記フルガベージコレクションを起動するように前記ガベージコレクション実行部を制御する起動・停止制御部とを備え、
前記起動・停止制御部は、前記中断不可処理が実行されないときに前記インクリメンタルガベージコレクションを起動させるように前記ガベージコレクション実行部を制御することを特徴とするメモリ制御装置。
【請求項２】
前記インクリメンタルガベージコレクションが停止したときに、前記インクリメンタルガベージコレクションの１回のステップで解放される解放メモリ量を増加させる解放メモリ量変更部をさらに備えていることを特徴とする請求項１に記載のメモリ制御装置。
【請求項３】
前記解放メモリ量変更部は、前記フルガベージコレクションが実行されたときに前記解放メモリ量を最小値に設定することを特徴とする請求項２に記載のメモリ制御装置。
【請求項４】
前記解放メモリ量変更部は、前記中断不可処理が実行されずに前記インクリメンタルガベージコレクションが起動された以後に、前記解放メモリ量を減少させることを特徴とする請求項２または３に記載のメモリ制御装置。
【請求項５】
前記解放メモリ量変更部は、一定期間ごとに前記解放メモリ量を減少させることを特徴とする請求項４に記載のメモリ制御装置。
【請求項６】
過去に使用された使用メモリ量に基づいて前記中断不可処理のメモリ使用量を予測するメモリ使用量予測部をさらに備え、
前記空き容量判定部は、前記メモリ使用量の予測値と前記空き容量とを比較することにより、メモリ使用量が前記メモリの空き容量を超えるか否かを判定し、
前記起動・停止制御部は、前記メモリ使用量の予測値が前記空き容量を超えるときに前記フルガベージコレクションまたは前記インクリメンタルガベージコレクションを起動するように前記ガベージコレクション実行部を制御することを特徴とする請求項１から５のいずれか１項に記載のメモリ制御装置。
【請求項７】
前記メモリ使用量予測部は、前記メモリ使用量の予測値が前記空き容量を超えないときに一定期間ごとに前記メモリ使用量を予測することを特徴とする請求項６に記載のメモリ制御装置。
【請求項８】
前記空き容量判定部は、前記メモリ使用量が前記空き容量未満でないと判定したとき、前記中断不可処理のメモリ使用量と前記空き容量との差が所定値以上であるか否かを判定し、
前記起動・停止制御部は、前記中断不可処理の前記メモリ使用量と前記空き容量との差が前記所定値以上であるときに前記フルガベージコレクションを起動する一方、前記メモリ使用量と前記空き容量との差が前記所定値以上でないときに前記インクリメンタルガベージコレクションを起動するように前記ガベージコレクション実行部を制御することを特徴とする請求項１または６に記載のメモリ制御装置。
【請求項９】
前記起動・停止制御部は、前記インクリメンタルガベージコレクションが一定期間以上停止しているときに前記インクリメンタルガベージコレクションを起動するように前記ガベージコレクション実行部を制御することを特徴とする請求項１から８のいずれか１項に記載のメモリ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ガベージコレクションによってメモリを解放するメモリ制御装置に関する。
【背景技術】
【０００２】
ガベージコレクションは、プログラムが実行される過程で不要になったメモリのデータを集めて破棄することでメモリを解放する処理である。かつてのガベージコレクションは、一度にメモリを解放するために、その解放の処理に時間を要する。このため、解放処理の間に、プログラムの実行処理が停止してしまう。これに対し、改良された、いわゆるインクリメンタルガベージコレクションは、細かく頻繁に解放処理を行なう。ただし、インクリメンタルガベージコレクションは、プログラム実行処理と並行して行なわれるので、プログラム実行処理が断続的に停止するという不都合がある。特に、リアルタイム性が要求されるプログラム実行処理（以降適宜、リアルタイム処理と称する）では、リアルタイム性が損なわれるという不都合が生じる。
【０００３】
特許文献１には、このような不都合を解消するガベージコレクションの制御技術が開示されている。特許文献１に開示された装置では、メモリの空き領域の合計量が処理実行メモリ量以上である場合には、ガベージコレクション処理を実行せず、メモリの空き領域の合計量が処理実行メモリ量未満である場合には、ガベージコレクション処理を実行する。このように、十分にメモリ量が確保されている場合には、ガベージコレクション処理を実行しないので、プログラムの実行処理が停止することを回避できる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−２５７２７号公報（２００５年１月２７日公開）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に開示された装置では、リアルタイム処理が繰り返し行なわれると、短時間のうちに大量のメモリが消費される。このような場合、大容量のメモリを有する汎用のコンピュータでは、直ちに使用可能なメモリ量が不足することはないかもしれないが、メモリ容量が少ない専用機の場合、メモリ量の不足が生じやすい。また、一般に、インクリメンタルガベージコレクションが１回の処理で解放できるメモリ量は少量である。このため、ガベージコレクションとしてインクリメンタルガベージコレクションが行なわれる場合、メモリの消費量がメモリの解放量を上回ると、メモリ量の不足に陥ってしまう。
【０００６】
また、十分にメモリ量が確保されているがリアルタイム処理が実行されていない場合、インクリメンタルガベージコレクションが実行されても不都合はないのに実行されない。このため、ＣＰＵが無駄にアイドル状態となってしまう。
【０００７】
本発明の一態様は、インクリメンタルガベージコレクションを効率的に実行することを目的とする。
【課題を解決するための手段】
【０００８】
上記の課題を解決するために、本発明の一態様に係るメモリ制御装置は、メモリにおける不要な領域を解放するためにインクリメンタルガベージコレクションおよびフルガベージコレクションを実行するガベージコレクション実行部と、中断されないことを要求される中断不可処理が前記メモリを使用しようとするメモリ使用量が前記メモリの空き容量未満であるか否かを判定する空き容量判定部と、前記メモリ使用量が前記空き容量未満であると判定されると、動作している前記インクリメンタルガベージコレクションを停止する一方、前記メモリ使用量が前記空き容量未満でないと判定されると、前記インクリメンタルガベージコレクションまたは前記フルガベージコレクションを起動するように前記ガベージコレクション実行部を制御する起動・停止制御部とを備え、前記起動・停止制御部が、前記中断不可処理が実行されないときに前記インクリメンタルガベージコレクションを起動させるように前記ガベージコレクション実行部を制御する。
【０００９】
上記の構成によれば、インクリメンタルガベージコレクションが動作する期間をできるだけ長く設けることができる。これにより、空き容量が十分ある状態であっても、メモリの解放処理が適宜実施される。それゆえ、中断不可処理が実行されない場合であっても、インクリメンタルガベージコレクションを動作させて、ＣＰＵを効率的に稼働させることができる。
【００１０】
また、メモリ使用量が空き容量未満であるときには、動作しているインクリメンタルガベージコレクションが停止するので、中断不可処理がインクリメンタルガベージコレクションの動作によって中断されることはない。一方、メモリ使用量が空き容量未満でないとき（空き容量以上であるとき）には、インクリメンタルガベージコレクションまたはフルガベージコレクションが起動されるので、中断不可処理に必要な空き容量が確保される。
【００１１】
前記メモリ制御装置は、前記インクリメンタルガベージコレクションが停止したときに、前記インクリメンタルガベージコレクションの１回のステップで解放される解放メモリ量を増加させる解放メモリ量変更部をさらに備えていてもよい。
【００１２】
ガベージコレクションが実行されない状態では、空き容量が少なくなっているので、この状態でインクリメンタルガベージコレクションを実行するときに、少ない解放メモリ量では解放処理の時間が長引く。そこで、解放メモリ量を増加させておけば、次にインクリメンタルガベージコレクションを実行するときに、増加した解放メモリ量によってメモリを早く解放することができる。これにより、インクリメンタルガベージコレクションを効率的に実行することができる。
【００１３】
前記メモリ制御装置において、前記解放メモリ量変更部は、前記フルガベージコレクションが実行されたときに前記解放メモリ量を最小値に設定してもよい。
【００１４】
上記の構成によれば、フルガベージコレクションによって空き容量が確保できた状態で通常処理が行なわれる場合、インクリメンタルガベージコレクションを最小値の解放メモリ量で効率的に実行することができる。
【００１５】
前記メモリ制御装置において、前記解放メモリ量変更部は、前記中断不可処理が実行されずに前記インクリメンタルガベージコレクションが起動された以後に、前記解放メモリ量を減少させてもよい。
【００１６】
上記の構成によれば、インクリメンタルガベージコレクションによる解放メモリ量を減らして、過度に解放処理を行なわないようにすることができる。
【００１７】
前記メモリ制御装置において、前記解放メモリ量変更部は、一定期間ごとに前記解放メモリ量を減少させてもよい。
【００１８】
上記の構成によれば、ステップサイズを徐々に減少することで、インクリメンタルガベージコレクションによるメモリの解放量を減らして、過度に解放処理を行なわれないようにすることができる。これにより、突発的な使用メモリ量の増加があまり生じない通常処理が実行されるときに、ステップサイズが増加したままでインクリメンタルガベージコレクションが実行されることはない。したがって、メモリの解放処理を適度に行なうことで、インクリメンタルガベージコレクションが通常処理の実行に影響を及ぼすことを抑制することができる。
【００１９】
前記メモリ制御装置は、過去に使用された使用メモリ量に基づいて前記中断不可処理のメモリ使用量を予測するメモリ使用量予測部をさらに備え、前記空き容量判定部は、前記メモリ使用量の予測値と前記空き容量とを比較することにより、メモリ使用量が前記メモリの空き容量を超えるか否かを判定し、前記起動・停止制御部は、前記メモリ使用量の予測値が前記空き容量を超えるときに前記フルガベージコレクションまたは前記インクリメンタルガベージコレクションを起動するように前記ガベージコレクション実行部を制御してもよい。
【００２０】
上記の構成によれば、中断不可処理が実行される前に、メモリ使用量の予測値に基づいて十分な空き容量を確保することができる。これにより、中断不可処理がフルガベージコレクションやインクリメンタルガベージコレクションの実行によって待たされることを抑制することができる。
【００２１】
前記メモリ制御装置において、前記メモリ使用量予測部は、前記メモリ使用量の予測値が前記空き容量を超えないときに一定期間ごとに前記メモリ使用量を予測してもよい。
【００２２】
上記の構成によれば、メモリ使用量の予測値が空き容量を超えないときにも、定期的にメモリ使用量を予測することで、メモリ使用量の予測値が空き容量を超えるか否かを判定することができる。
【００２３】
前記メモリ制御装置において、前記空き容量判定部は、前記メモリ使用量が前記空き容量未満でないと判定したとき、前記中断不可処理のメモリ使用量と前記空き容量との差が所定値以上であるか否かを判定し、前記起動・停止制御部は、前記中断不可処理の前記メモリ使用量と前記空き容量との差が前記所定値以上であるときに前記フルガベージコレクションを起動する一方、前記メモリ使用量と前記空き容量との差が前記所定値以上でないときに前記インクリメンタルガベージコレクションを起動するように前記ガベージコレクション実行部を制御してもよい。
【００２４】
メモリ使用量と空き容量との差が小さい場合は、フルガベージコレクションを必要としないことが多い。そこで、メモリ使用量と前記空き容量との差が所定値未満であるときに一般的にメモリ解放処理が速いとされるインクリメンタルガベージコレクションを実行することにより、フルガベージコレクションを実行する場合に生じる無駄な時間を削減することができる。
【００２５】
前記メモリ制御装置において、前記起動・停止制御部は、前記インクリメンタルガベージコレクションが一定期間以上停止しているときにインクリメンタルガベージコレクションを起動するように前記ガベージコレクション実行部を制御してもよい。
【００２６】
上記の構成によれば、中断不可処理が繰り返して行なわれる場合、あるいは中断不可処理が実行される時間が長い場合、インクリメンタルガベージコレクションが一定期間以上停止していればガベージコレクションが起動するので、インクリメンタルガベージコレクションが停止する期間を短くすることができる。したがって、ガベージコレクションが実行されていない間に生じるメモリ容量不足を解消することができる。
【発明の効果】
【００２７】
本発明の一態様によれば、インクリメンタルガベージコレクションを効率的に実行することができるという効果を奏する。
【図面の簡単な説明】
【００２８】
【図１】本発明の各実施形態に係る制御システムの構成を示すブロック図である。
【図２】上記制御システムにおけるＨＭＩ機器の要部の構成を示すブロック図である。
【図３】上記ＨＭＩ機器によるガベージコレクションの制御の手順を示すフローチャートである。
【図４】上記ＨＭＩ機器によるガベージコレクション選択動作の手順を示すフローチャートである。
【図５】上記ＨＭＩ機器によるレベルに対するステップサイズの変化を示すグラフである。
【図６】上記ＨＭＩ機器によるガベージコレクションの他の制御の手順を示すフローチャートである。
【図７】上記ＨＭＩ機器によるガベージコレクションのさらに他の制御の手順を示すフローチャートである。
【図８】上記ＨＭＩ機器によるメモリ使用量の予測方法を示すグラフである。
【発明を実施するための形態】
【００２９】
本発明の一実施形態について図１〜図８に基づいて説明すると、以下の通りである。
【００３０】
図１は、本実施形態に係る制御システムの構成を示すブロック図である。図２は、当該制御システムにおけるＨＭＩ（Human Machine Interface）機器１の要部の構成を示すブロック図である。
【００３１】
ＨＭＩ機器１（メモリ制御装置）は、専用のＯＳ（Operating System）を実装した組み込み機器であり、ＨＭＩ機器１の各種の機能を実現するためのＨＭＩプログラムを実行する機能を備えている専用機である。ＨＭＩ機器１は、プログラマブル表示器のように、工場などの厳しい環境に適合するように、防塵性、防滴性、耐振動性などを高めた専用のコンピュータである。
【００３２】
ＨＭＩプログラムは、ＨＭＩ機器１で行われるような、外部機器との通信、当該外部機器から取得したデータの表示、入力装置を用いた操作者による操作の受け付けなどの各種の機能を実現するアプリケーションプログラムである。
【００３３】
まず、ＨＭＩ機器１のハードウェア構成について説明する。
【００３４】
図１に示すように、ＨＭＩ機器１は、ＣＰＵ（Central Processing Unit）１１と、メインメモリ１２（メモリ）と、ＲＯＭ（Read Only Memory）１３と、ユーザメモリ１４と、タッチパネルを１５と、表示パネル１６と、インターフェース部１７とを備えている。
【００３５】
ＣＰＵ１１は、ＨＭＩプログラムを実行する処理装置である。具体的には、ＣＰＵ１１は、ＨＭＩプログラムの実行に際して、メインメモリ１２、ユーザメモリ１４、タッチパネル１５などからデータを受け取り、当該データに対して演算または加工を施した結果を、メインメモリ１２、ユーザメモリ１４、表示パネル１６などに出力する。
【００３６】
メインメモリ１２は、ＨＭＩ機器１における主記憶装置を構成するメモリであり、ＤＲＡＭ（Dynamic Random Access Memory）によって構成される。また、図２に示すように、メインメモリ１２はヒープ領域１２ａを有している。ヒープ領域１２ａは、ＨＭＩプログラムが動的に確保可能な領域である。
【００３７】
ＲＯＭ１３は、ＨＭＩ機器１の起動時やリセット時に実行されるＢＩＯＳ（Basic Input Output System）などの、ＨＭＩ機器１の動作に不可欠なプログラムを記憶している。
【００３８】
ユーザメモリ１４は、図２に示すように、ユーザが作成したデータ、例えば後述するＨＭＩ画面を表示するための画面データを記憶する大容量の記憶装置であり、ＦＥＰＲＯＭ（Flash Erasable and Programmable ROM）などで構成されている。ＦＥＰＲＯＭは、書き替え可能な読み出し専用のフラッシュメモリであり、一般のパーソナルコンピュータにおけるハードディスクドライブの役割を果たす。フラッシュメモリは、可動部を持たず、かつ衝撃に強いので、劣悪な周囲環境でも安定して動作する。
【００３９】
また、ユーザメモリ１４は、図２に示すように、ＯＳおよびＨＭＩプログラムを記憶している。
【００４０】
タッチパネル１５は、表示パネル１６上に配置されており、表示パネル１６に表示された画面上でのタッチ操作を受け入れて、タッチ操作信号を入力信号として出力する。
【００４１】
表示パネル１６は、ユーザメモリ１４に記憶されている画面データに基づいたＨＭＩ画面を表示する。表示パネル１６としては、液晶表示パネル、ＥＬ（Electro-Luminescence）表示パネルなどの平板型表示パネルが用いられる。
【００４２】
インターフェース部１７は、制御機器２と通信可能に接続するための接続部である。インターフェース部１７は、シリアルインターフェース、ＬＡＮ（Local Area Network）などの各種のインターフェースを装備している。
【００４３】
制御機器２は、ＰＬＣ（Programmable Logic Controller）、温度調節計、インバータなどの機器であり、ＨＭＩ機器１と通信する機能を備えている。制御機器２は、デバイス２０との間でデータの授受を行なう。デバイス２０としては、センサ、スイッチのような入力機器や、アクチュエータ、リレー、電磁弁、表示器のような出力機器が用いられる。
【００４４】
続いて、ＨＭＩ機器１のシステム構成について説明する。
【００４５】
図２に示すように、ＨＭＩ機器１は、制御機能を有する部分としてＨＭＩ制御部８を含み、ガベージコレクション機能を使用することを前提として、ガベージコレクションを実行する実体部分としてガベージコレクション実行部９を含んでいる。
【００４６】
ＨＭＩ制御部８は、ＨＭＩプログラムがＣＰＵ１１によって実行されることで実現される、ＨＭＩ機能を有する部分である。
【００４７】
ここで、ＨＭＩ機能とは、ユーザの入力操作に応じた制御機器２への指示の発生と、制御機器２からの各種データの取得と、取得した当該各種データの表示および上記入力操作の受け付けを行うためのＨＭＩ画面の表示とを含む機能である。ＨＭＩ制御部８は、ＨＭＩ機能として、ユーザの操作入力および制御機器２が保持するデータの変化に基づいて各部を制御する動作制御部８１と、ＨＭＩ画像の表示を制御する表示制御部８２とを有している。また、ＨＭＩ制御部８は、ガベージコレクション機能を使用することを前提として、ガベージコレクション実行部９の動作を制御するガベージコレクション制御部８３を有している。
【００４８】
ＨＭＩ画面は、制御機器２に接続されたデバイス２０の状態を表示したり、タッチパネル１５への操作を受け付けたりするための各種のオブジェクトを含む画面である。ＨＭＩ画面に設けられるオブジェクトとしては、ランプ画像、データ表示器画像、スイッチ画像などの各種の部品画像が用意されている。このようなＨＭＩ画面を表示するための画面データは、パーソナルコンピュータなどにおいて作成されて、ユーザメモリ１４に保存されている。
【００４９】
動作制御部８１は、タッチパネル１５におけるユーザのタッチによる入力操作に応じた操作指示を発生する。この操作指示としては、制御機器２の起動・停止指示、制御機器２に与える制御データの変更、画面の切り替えなどがある。また、動作制御部８１は、制御機器２のデータの変化に応じた制御指示を発生する。この制御指示としては、画面の切り替えなどがある。
【００５０】
表示制御部８２は、画面データに基づいて表示パネル１６にＨＭＩ画面を表示させる制御処理を行う。また、表示制御部８２は、インターフェース部１７を介して取得した制御機器２のデータを、ＨＭＩ画面に反映させる処理を行う。例えば、表示制御部８２は、ＨＭＩ画面において、上述のランプ画像を点灯・消灯させたり、上述のデータ表示器画像にデータを表示させたりする処理を行う。また、表示制御部８２は、上記操作指示に応じてＨＭＩ画面の状態を変化させる処理を行う。例えば、表示制御部８２は、上述のスイッチ画像を操作する上記操作指示を受けて、当該スイッチ画像の表示状態（色、形状など）を変化させる処理を行う。さらに、表示制御部８２は、ユーザの操作に応じてＨＭＩ画面の切り替え処理を行なう。
【００５１】
ガベージコレクション制御部８３は、ガベージコレクション実行部９の動作を制御する部分である。
【００５２】
ガベージコレクション制御部８３は、領域監視部８３１と、処理リスト８３２と、メモリ使用量予測部８３３と、空き容量判定部８３４と、起動・停止制御部８３５と、ステップサイズ変更部８３６（解放メモリ量変更部）と、を有している。
【００５３】
領域監視部８３１は、ヒープ領域１２ａの使用状態を監視しており、ヒープ領域１２ａにおける未使用の空き領域のサイズ（空き容量）をメモリ使用量予測部８３３および空き容量判定部８３４に通知する。また、領域監視部８３１は、処理リスト８３２を参照して、実行される処理が中断されないことを要求される処理（中断不可処理）であるか、または中断が差し支えない通常処理であるかを判定し、判定結果を起動・停止制御部８３５に通知する。中断不可処理は、具体的には、リアルタイム性が要求されるプログラム実行処理（リアルタイム処理）や優先度（あるいは優先順位）の高いプログラム実行処理（高優先処理）のような処理であり、いずれも中断されないことが要求される。
【００５４】
処理リスト８３２は、中断不可処理の一覧を表すデータである。処理リスト８３２は、実際には、ＨＭＩプログラムにハードコーディングされている。なお、処理リスト８３２は、別途、ユーザメモリ１４などに記憶されていてもよい。
【００５５】
メモリ使用量予測部８３３は、現在および過去の複数回の使用メモリ量に基づいて所定の演算を行なうことにより、後のメモリ使用量の増加量を予測する。メモリ使用量は、中断不可処理がメインメモリ１２のヒープ領域１２ａを使用しようとするメモリ量である。
【００５６】
空き容量判定部８３４は、メモリ使用量予測部８３３によって予測されたメモリ使用量を空き容量と比較し、メモリ使用量が空き容量未満であるか否かを判定する。また、空き容量判定部８３４は、中断不可処理のメモリ使用量と空き容量との差が所定値以上であるか否かを判定する。
【００５７】
起動・停止制御部８３５は、空き容量判定部８３４の判定結果に基づいて、メモリ使用量が空き容量未満であるときには実行されているインクリメンタルガベージコレクションを停止させるようにガベージコレクション実行部９を制御する。また、起動・停止制御部８３５は、空き容量判定部８３４の判定結果に基づいて、メモリ使用量が空き容量未満でないときにはガベージコレクションを実行することを決定する。
【００５８】
起動・停止制御部８３５は、メモリ使用量と空き容量との差に応じてフルガベージコレクションまたはインクリメンタルガベージコレクションのいずれかを実行することを決定する。具体的には、起動・停止制御部８３５は、空き容量判定部８３４の判定結果に基づいて、メモリ使用量と空き容量との差が所定値以上であるときには、フルガベージコレクションを起動するようにガベージコレクション実行部９を制御する。また、起動・停止制御部８３５は、空き容量判定部８３４の判定結果に基づいて、メモリ使用量と空き容量との差が所定値未満であるときには、インクリメンタルガベージコレクションを起動するようにガベージコレクション実行部９を制御する。
【００５９】
また、起動・停止制御部８３５は、インクリメンタルガベージコレクションを、停止から一定時間後に再起動させるようにガベージコレクション実行部９を制御する。
【００６０】
ステップサイズ変更部８３６は、状況に応じてインクリメンタルガベージコレクションのステップサイズを変更する。具体的には、ステップサイズ変更部８３６は、中断不可処理が実行されるときに、中断不可処理が終了した後に実行されるインクリメンタルガベージコレクションのステップサイズを増加させる。また、ステップサイズ変更部８３６は、インクリメンタルガベージコレクションの動作が再開した後に、ステップサイズを減少させる。ステップサイズは、インクリメンタルガベージコレクションが行なう１回の解放処理で解放するメモリ量（解放メモリ量）を定めるための設定量である。ステップサイズによって定まる解放メモリ量は、ガベージコレクション実行部９の仕様に応じて異なる。
【００６１】
ガベージコレクション実行部９は、ヒープ領域１２ａにおいてＨＭＩプログラムが動的に確保して不要になった領域を自動的に解放する処理を実行する。ガベージコレクション実行部９は、フルガベージコレクションやインクリメンタルガベージコレクションを実行する部分であり、プログラミング言語処理系に実装されているものや、ライブラリとして提供されているものである。また、ガベージコレクション実行部９は、タスクやスレッドとして実装されるガベージコレクタとして実現される。
【００６２】
ガベージコレクション実行部９は、起動・停止制御部８３５の指示に応じて、中断不可処理が実行されるときに、動作しているインクリメンタルガベージコレクションを停止する。ただし、ガベージコレクション実行部９は、中断不可処理が実行されるときでも、空き容量が中断不可処理のメモリ使用量に足りないときには、起動・停止制御部８３５の指示に応じて、フルガベージコレクションまたはインクリメンタルガベージコレクションを実行する。また、ガベージコレクション実行部９は、インクリメンタルガベージコレクションを停止したとき、起動・停止制御部８３５の指示に応じて、停止から一定時間後にインクリメンタルガベージコレクションを再起動する。また、ガベージコレクション実行部９は、ステップサイズ変更部８３６によって変更されたステップサイズでインクリメンタルガベージコレクションを実行する。
【００６３】
ガベージコレクション実行部９は、起動・停止制御部８３５からフルガベージコレクションの実行が要求されると、フルガベージコレクションを実行してヒープ領域１２ａの解放処理を行い、解放処理が完了すると、そのことをＨＭＩ制御部８に通知する。ＣＰＵ１１は、フルガベージコレクションによる解放処理が実行されている間、その処理に占有されるので、ＨＭＩプログラムを実行することができない。このため、ＨＭＩ制御部８は動作を停止する。
【００６４】
一方、ガベージコレクション実行部９は、起動・停止制御部８３５からインクリメンタルガベージコレクションの実行が要求されると、直ぐに要求を受けたことをＨＭＩ制御部８に返答し、適時に断続的にヒープ領域１２ａの解放処理を行う。ＣＰＵ１１は、インクリメンタルガベージコレクションによる解放処理が実行されている間、その処理に占有されるので、ＨＭＩプログラムを実行することができないのはフルガベージコレクションの実行時と同様である。しかしながら、ＣＰＵ１１は、インクリメンタルガベージコレクションによる解放処理が実行されていない間には、ＨＭＩプログラムを実行することができる。したがって、ＨＭＩ制御部８は、インクリメンタルガベージコレクションの実行の要求を受けたことをガベージコレクション実行部９より返答されてから、インクリメンタルガベージコレクションによる解放処理が実行されていない間にも動作することができる。
【００６５】
以上のように構成されるＨＭＩ機器１によるガベージコレクションの処理について説明する。図３は、ＨＭＩ機器１によるガベージコレクションの制御の手順を示すフローチャートである。図４は、ガベージコレクション選択動作についての処理手順を示すフローチャートである。図５は、ＨＭＩ機器１によるレベルに対するステップサイズの変化を示すグラフである。
【００６６】
まず、ＨＭＩ制御部８が起動すると、図３に示すように、インクリメンタルガベージコレクションが起動する。このとき、ガベージコレクション実行部９は、起動・停止制御部８３５の要求を受けて起動するが、起動と同時にインクリメンタルガベージコレクションによる解放処理を行なうのではなく、ガベージコレクション実行部９に応じたタイミングで解放処理を行なう。
【００６７】
領域監視部８３１は、動作制御部８１から処理が開始することを通知されると、処理リスト８３２を参照して、当該処理が処理リスト８３２に含まれる中断不可処理であるか否かを判定する（ステップＳ１）。例えば、動作制御部８１は、画面切り替えのようなリアルタイム性を要する処理の実行を指示するユーザの操作を受け付けることで、画面切り替え処理が開始することを領域監視部８３１に通知する。領域監視部８３１は、画面切り替え処理が処理リスト８３２に含まれていることを確認すると、画面切り替え処理が中断不可処理であると判定する。
【００６８】
なお、画面切り替えは、周期的または所定時刻に自動的に行なわれることもある。動作制御部８１は、このような自動的に画面切り替えを行なうときにも、画面切り替え処理が開始することを領域監視部８３１に通知する。
【００６９】
領域監視部８３１は、ＨＭＩ制御部８の起動時からヒープ領域１２ａの空き領域を監視しており、使用済みの使用メモリ量を、メモリ使用量予測部８３３による予測のために、所定時間間隔でヒープ領域１２ａから取得する。メモリ使用量予測部８３３は、領域監視部８３１から取得した使用メモリ量に基づいて、中断不可処理のためのメモリ使用量を予測する。
【００７０】
領域監視部８３１が、ステップＳ１において通知された処理が中断不可処理であると判定すると（ＹＥＳ）、空き容量判定部８３４は、当該中断不可処理が使用しようとするメモリ使用量が空き容量未満であるか否かを判定する（ステップＳ２）。領域監視部８３１は、中断不可処理が通知されたと判断したときに、ヒープ領域１２ａから空き容量を取得する。空き容量判定部８３４は、メモリ使用量予測部８３３から取得したメモリ使用量の予測値と、領域監視部８３１から取得した空き容量とを比較して、上記の判定を行なう。
【００７１】
空き容量判定部８３４は、ステップＳ２において、中断不可処理のメモリ使用量が空き容量未満であると判定すると（ＹＥＳ）、空き容量が中断不可処理を実行するために足りると判断する。起動・停止制御部８３５は、空き容量判定部８３４による判断に基づいて、インクリメンタルガベージコレクション処理を停止するようにガベージコレクション実行部９に指示する。ガベージコレクション実行部９は、停止の指示を受けて、インクリメンタルガベージコレクションを停止する（ステップＳ３）。
【００７２】
インクリメンタルガベージコレクションが停止すると、ステップサイズ変更部８３６は、ステップサイズが上限値（最大値）に達したか否かを判定する（ステップＳ４）。ステップサイズ変更部８３６が、ステップＳ４においてステップサイズが上限値に達したと判定すると（ＹＥＳ）、動作制御部８１は中断不可処理を実行する（ステップＳ５）。また、ステップサイズ変更部８３６は、ステップＳ４においてステップサイズが上限値に達していないと判定すると（ＮＯ）、インクリメンタルガベージコレクションのステップサイズを増加させて（ステップＳ６）、ステップＳ６の処理を行なう。ステップＳ６の後は、処理がステップＳ５に移行する。
【００７３】
ステップサイズ変更部８３６は、起動・停止制御部８３５からのインクリメンタルガベージコレクションの停止指示を受けると、例えば図５に示すように、インクリメンタルガベージコレクションが１回停止するごとに１つ上のレベルにステップサイズを増加させていく。図５におけるステップサイズを増加させる値（縦軸の値）は、ガベージコレクションの種類によって異なる。図５に示す例では、初期値（最小値）を２０００とし、レベルが０から１５の範囲で変化している。
【００７４】
ガベージコレクションのステップサイズＳＳは次式で表される。次式において、Ｓｂは、ベースとなるサイズ（ベースサイズ）を表し、Ｌはレベルを表し、１０は係数を表している。次式に示すように、レベルＬを二乗することにより、レベルＬが多いほどステップサイズＳＳの増加量が大きくなるようにしている。また、図５に示す例では、ベースサイズＳｂを２０００としている。ステップサイズ変更部８３６は、次式によってステップサイズＳＳを算出して、ガベージコレクション実行部９に与えている。
【００７５】
ＳＳ＝Ｓｂ＋Ｌ２＊１０
ステップサイズを際限なく大きくしていくと、インクリメンタルガベージコレクションの１ステップの解放処理に要する時間が長引くので、上限値を決めておき、上限値を超えてステップサイズが増加しないようにする。図５に示す例では、上限値を４２５０としている。
【００７６】
起動・停止制御部８３５は、中断不可処理の実行が終了してからさらに中断不可処理が発生したか否かを動作制御部８１からの通知に基づいて判定する（ステップＳ７）。起動・停止制御部８３５は、中断不可処理が発生していないと判定すると（ＮＯ）、インクリメンタルガベージコレクションを再起動させるようにガベージコレクション実行部９に指示する。ガベージコレクション実行部９は、起動の指示を受けて、インクリメンタルガベージコレクションを再起動する（ステップＳ８）。
【００７７】
なお、中断不可処理が実行されている途中で、次の中断不可処理が実行される場合は、ステップＳ５の処理においてステップＳ７の処理を行なうようにしてもよい。
【００７８】
ステップサイズ変更部８３６は、ステップサイズが初期値（または下限値）に達したか否かを判定する（ステップＳ９）。ステップＳ９においてステップサイズが初期値に達したと判定されると（ＹＥＳ）、ＨＭＩ制御部８は、システムの停止要求があるか否かを判定する（ステップＳ１０）。ＨＭＩ制御部８が、システムの停止要求があると判定すると、当該制御が終了する一方、ＨＭＩ制御部８が、システムの停止要求がないと判定すると、ステップＳ１以降の処理が再び行なわれる。
【００７９】
また、ステップサイズ変更部８３６は、ステップＳ９においてステップサイズが初期値（または下限値）に達していないと判定すると（ＮＯ）、ステップサイズを減少し（ステップＳ１１）、インクリメンタルガベージコレクションの再起動から一定時間待機して（ステップＳ１２）、再びステップＳ９の処理を行なう。
【００８０】
なお、中断不可処理が頻繁に生じない場合は、起動・停止制御部８３５がステップＳ７において中断不可処理が発生したか否かを判定する必要はない。しかしながら、中断不可処理が頻繁に生じる場合には、起動・停止制御部８３５は、ステップＳ８，Ｓ９，Ｓ１１，Ｓ１２の間にも、ステップＳ７の処理を行なう必要がある。ステップＳ８，Ｓ９，Ｓ１１，Ｓ１２の間にステップＳ７の処理を行なう場合、中断不可処理が発生したときにはステップＳ２へ移行する。
【００８１】
また、ステップサイズ変更部８３６は、ステップＳ８において、インクリメンタルガベージコレクションが再起動したときに、最初のステップサイズの減少を行なってもよい。
【００８２】
ステップサイズ変更部８３６は、ステップＳ１２において、上述の式のＬを減少させていくことにより、図５に示すように、インクリメンタルガベージコレクションの起動から例えば１０秒ごとに１つ下のレベルにステップサイズを減少させていく。図５におけるステップサイズを減少させる値（縦軸の値）は、ガベージコレクションの種類によって異なる。また、図５に示す例は、上限値４２５０から初期値２０００までステップサイズを減少させていく。ステップサイズ変更部８３６は、所定の演算によってステップサイズを算出して、ガベージコレクション実行部９に与えている。
【００８３】
ステップＳ１において、通知された処理が中断不可処理でないと判定すると、動作制御部８１は通常処理を実行する（ステップＳ１４）。この後、処理がステップＳ１に戻る。
【００８４】
また、ステップＳ７において中断不可処理が発生していると判定されると（ＹＥＳ）、処理がステップＳ２に戻る。
【００８５】
ステップＳ２において、空き容量判定部８３４は、中断不可処理のメモリ使用量が空き容量未満でない（空き容量以上である）と判定すると（ＮＯ）、空き容量が中断不可処理を実行するために足りないと判断する。この場合は、空き容量判定部８３４および起動・停止制御部８３５によるフルガベージコレクションまたはインクリメンタルガベージコレクションを選択的に行なうガベージコレクション選択的動作処理が行なわれる。
【００８６】
続いて、当該ガベージコレクション選択的動作処理について図４を参照して説明する。
【００８７】
図４に示すように、まず、空き容量判定部８３４は、上記の判断に基づいて、中断不可処理のメモリ使用量と空き容量との差が所定値以上であるか否かを判定する（ステップＳ１３１）。ステップＳ２において、メモリ使用量が空き容量以上であると判定されているので、メモリ使用量は、空き容量と等しいか、または空き容量よりも大きい。そこで、メモリ使用量を確保するために少なくとも解放すべきメモリ量である、メモリ使用量と空き容量との差が所定値以上であるか否かに応じて、フルガベージコレクションまたはインクリメンタルガベージコレクションを選択的に動作させる。
【００８８】
ステップＳ１３１において中断不可処理のメモリ使用量と空き容量との差が所定値以上であると判定されると（ＹＥＳ）、起動・停止制御部８３５は、ガベージコレクション実行部９にフルガベージコレクションの起動を指示する。これにより、ガベージコレクション実行部９はフルガベージコレクションを起動する（ステップＳ１３２）。ステップＳ１３２において、インクリメンタルガベージコレクションが動作している場合は、起動・停止制御部８３５は、ガベージコレクション実行部９にインクリメンタルガベージコレクションの停止を指示する。
【００８９】
起動・停止制御部８３５は、起動後のフルガベージコレクションが終了したか否かをフルガベージコレクションが終了するまで（ＮＯ）監視している（ステップＳ１３３）。フルガベージコレクションが終了すると（ＹＥＳ）、ステップサイズ変更部８３６は、ステップサイズを初期値に設定する（ステップＳ１３４）。この後、処理が上述のステップＳ３の処理に戻る。
【００９０】
また、ステップＳ１３１において中断不可処理のメモリ使用量と空き容量との差が所定値以上でない（所定値未満である）と判定されると（ＹＥＳ）、ステップサイズ変更部８３６は、ステップサイズを最大値に設定する（ステップＳ１３５）。ここで、ステップサイズ変更部８３６は、メモリ使用量予測部８３３によって予測されたメモリ使用量と空き容量との差分である、追加して解放が必要なメモリ量に基づいてステップサイズを特定してもよい。この場合は、ステップサイズの設定値が最大値には限定されない。ステップサイズ変更部８３６は、ステップサイズを設定するときに、併せて現在のステップサイズをメインメモリ１２にバックアップしておく。
【００９１】
次いで、起動・停止制御部８３５は、インクリメンタルガベージコレクションが停止しているか否かを判定する（ステップＳ１３６）。起動・停止制御部８３５は、インクリメンタルガベージコレクションが停止しているときには、ガベージコレクション実行部９にインクリメンタルガベージコレクションの起動を指示する。これにより、ガベージコレクション実行部９はインクリメンタルガベージコレクションを起動する（ステップＳ１３７）。
【００９２】
その後、空き容量判定部８３４は、中断不可処理に必要な空き容量が確保されたか否かを判定する（ステップＳ１３８）。ステップＳ１３８において中断不可処理に必要な空き容量が確保されたと判定されると、ステップサイズ変更部８３６は、ステップサイズをバックアップしておいた元の値に戻す（ステップＳ１３９）。この後、処理が上述のステップＳ３の処理に戻る。
【００９３】
ステップＳ１３６においてインクリメンタルガベージコレクションが停止していない（起動している）と判定されると、処理がステップＳ１３８に移行する。空き容量判定部８３４は、ステップＳ１３８において中断不可処理に必要な空き容量が確保されていないと判定すると（ＮＯ）、一定時間待機して（ステップＳ１４０）、再びステップＳ１３８の処理を行なう。
【００９４】
中断不可処理のメモリ使用量が空き容量以上であっても、メモリ使用量が空き容量と同じか、少し超えた程度であれば、メモリ解放量は少なくてよい。このような場合は、フルガベージコレクションによってヒープ領域１２ａを全て解放するよりも、中断不可処理に必要な空き容量が確保されるまで一時的にステップサイズを大きくしてインクリメンタルガベージコレクションを実行することが効率的である。一方、メモリ使用量と空き容量との差が大きければ、メモリ解放量を多くする必要がある。この場合は、インクリメンタルガベージコレクションでは適切なステップサイズの設定が難しく、設定が適正でなければ解放処理が無駄に中断されるおそれがあることから、非効率である。したがって、この場合は、フルガベージコレクションを実行することが好ましい。
【００９５】
そこで、メモリ使用量と空き容量との差が所定値以上であればフルガベージコレクションを起動し、メモリ使用量と空き容量との差が所定値未満であればインクリメンタルガベージコレクションを起動する。上記の所定値は、特に具体的な値を示さないが、フルガベージコレクションまたはインクリメンタルガベージコレクションが効率的に行なわれるように、使用環境に応じて適切な値に設定される。
【００９６】
ガベージコレクション制御部８３は、以上のメインルーチンによってガベージコレクションの制御を行なう。また、ガベージコレクション制御部８３は、上記のメインルーチンのバックグラウンドで、定期的にガベージコレクションを実行する制御、およびメモリ使用量の予測に基づくガベージコレクションの制御を行なう。続いて、これらの制御について説明する。
【００９７】
図６は、ＨＭＩ機器１によるガベージコレクションの他の制御の手順を示すフローチャートである。図７は、ＨＭＩ機器１によるガベージコレクションのさらに他の制御の手順を示すフローチャートである。図８は、ＨＭＩ機器１によるメモリ使用量の予測方法を示すグラフである。
【００９８】
定期的にガベージコレクションを実行する制御について説明する。
【００９９】
図６に示すように、まず、起動・停止制御部８３５は、インクリメンタルガベージコレクションが５秒以上停止しているか否かを判定する（ステップＳ２１）。起動・停止制御部８３５は、インクリメンタルガベージコレクションが５秒以上停止していると判定すると（ＹＥＳ）、ガベージコレクション実行部９を起動させる（ステップＳ２２）。これにより、ガベージコレクション実行部９は、インクリメンタルガベージコレクションを実行する。
【０１００】
そして、ＨＭＩ制御部８は、システムの停止要求があるか否かを判定する（ステップＳ２３）。ＨＭＩ制御部８が、システムの停止要求があると判定すると、当該制御が終了する一方、ＨＭＩ制御部８が、システムの停止要求がないと判定すると、ステップＳ２１以降の処理が繰り返される。
【０１０１】
続いて、メモリ使用量の予測に基づくガベージコレクションの制御について説明する。
【０１０２】
図７に示すように、まず、メモリ使用量予測部８３３は、中断不可処理が実行されることにより発生するメモリ使用量を予測する（ステップＳ３１）。メモリ使用量予測部８３３は、過去に使用された使用メモリ量を領域監視部８３１から取得し、取得した使用メモリ量に基づいて所定の演算を行なうことにより、後のメモリ使用量の増加量を予測する。具体的には、メモリ使用量予測部８３３は、図８に示すように、直近３回の使用メモリ量Ｖ１〜Ｖ３を用いて以下の式（１）または式（２）の演算によりメモリ使用量Ｍを予測する。各式において、Ｖ３は現在の使用メモリ量を表し、Ｖ２は１秒前の使用メモリ量を表し、Ｖ１は２秒前の使用メモリ量を表している。使用メモリ量は、領域監視部８３１によって１秒ごとに算出されてメインメモリ１２に保存されている。メモリ使用量予測部８３３は、これらの使用メモリ量を取得することで次式の演算を行なう。
【０１０３】
０秒時は、使用メモリ量Ｖ１，Ｖ２が現在の使用メモリ量Ｖ３と同じ値となる。また、１秒時は、使用メモリ量Ｖ１が使用メモリ量Ｖ２と同じ値となる。このように使用メモリ量Ｖ１，Ｖ２が等しい場合、メモリ使用量予測部８３３は、式（１）に基づいてメモリ使用量Ｍを算出する。あるいは、この場合、メモリ使用量予測部８３３は、使用メモリ量Ｖ１，Ｖ２の平均をメモリ使用量Ｍとして算出してもよい。一方、２秒時以降は、使用メモリ量Ｖ１，Ｖ２が同じ値となる場合と、使用メモリ量Ｖ１，Ｖ２が異なる値となる場合とがある。メモリ使用量予測部８３３は、前者の場合、式（１）に基づいてメモリ使用量Ｍを算出する一方、後者の場合、式（２）に基づいてメモリ使用量Ｍを算出する。
【０１０４】
Ｍ＝Ｖ３＋（Ｖ３−Ｖ２）                          …（１）
Ｍ＝Ｖ３＋｛（Ｖ３−Ｖ２）２／（Ｖ２−Ｖ１）｝      …（２）
Ｖ３−Ｖ２は、Ｖ２−Ｖ１よりも起こる確率が高いと考えられる。このため、メモリ使用量予測部８３３は、Ｖ３−Ｖ２という項を含む簡単な上式（１）または上式（２）でメモリ使用量を算出する。
【０１０５】
図８に示す例では、Ｖ１＝２５、Ｖ２＝３５、Ｖ３＝４０を用いて上式の演算を行なった結果、メモリ使用量の予測値として４２．５（Ｋ bytes）が得られたことを示している。
【０１０６】
なお、メモリ使用量予測部８３３によるメモリ使用量の予測のアルゴリズムは、上式で表されるアルゴリズムに限らず、他のアルゴリズムを用いてもよい。例えば、後述するような高性能のコンピュータ機器においては、高精度な予測アルゴリズムを利用してもよい。
【０１０７】
その後、空き容量判定部８３４は、領域監視部８３１から現在の空き容量を取得するとともに、メモリ使用量予測部８３３からメモリ使用量の予測値（予測メモリ使用量）を取得する（ステップＳ３２）。空き容量判定部８３４は、取得した予測メモリ使用量が、取得した空き容量を超えるか否かを判定する（ステップＳ３３）。起動・停止制御部８３５は、予測されたメモリ使用量が空き容量を超えると判定すると（ＹＥＳ）、フルガベージコレクションを実行するようにガベージコレクション実行部９を起動する。これにより、ガベージコレクション実行部９がフルガベージコレクションを実行する（ステップＳ３４）。
【０１０８】
なお、ステップＳ３４では、図４に示すように、フルガベージコレクションおよびインクリメンタルガベージコレクションのいずれかを選択的に実行してもよい。
【０１０９】
起動・停止制御部８３５は、ステップＳ３３において、予測されたメモリ使用量が空き容量を超えていないと判定すると（ＮＯ）、一定時間待機し（ステップＳ３６）、メモリ使用量予測部８３３にメモリ使用量の予測を指示する。これにより、再びステップＳ３１以降の処理が行なわれる。
【０１１０】
そして、ＨＭＩ制御部８は、システムの停止要求があるか否かを判定する（ステップＳ３５）。ＨＭＩ制御部８が、システムの停止要求があると判定すると、当該制御が終了する一方、ＨＭＩ制御部８が、システムの停止要求がないと判定すると、ステップＳ３１以降の処理が繰り返される。
【０１１１】
以上のように、本実施形態に係るＨＭＩ機器１は、ガベージコレクション制御部８３を備えている。
【０１１２】
ガベージコレクション制御部８３は、空き容量が中断不可処理を実行するのに足りる場合、インクリメンタルガベージコレクションを停止させる。具体的には、ガベージコレクション制御部８３は、中断不可処理が使用しようとするメモリ使用量が空き容量未満である場合、空き容量が中断不可処理を実行するのに足りると判断する。また、ガベージコレクション制御部８３は、中断不可処理が実行されないときにインクリメンタルガベージコレクションを再起動させる。
【０１１３】
このように、中断不可処理の実行に影響を及ぼすガベージコレクションを実行しないことにより、中断不可処理を中断することなく実行することができる。また、インクリメンタルガベージコレクションは、動作を停止しても、中断不可処理が実行されないときには再起動する。これにより、インクリメンタルガベージコレクションが動作する期間をできるだけ長く設けることができる。それゆえ、空き容量が十分ある状態であっても、ヒープ領域１２ａの解放処理が適宜実施される。それゆえ、中断不可処理が実行されない場合であっても、インクリメンタルガベージコレクションを動作させて、ＣＰＵ１１を効率的に稼働させることができる。
【０１１４】
また、ガベージコレクション制御部８３は、インクリメンタルガベージコレクションを上記のように停止したときには、インクリメンタルガベージコレクションのステップサイズを増加させる。
【０１１５】
また、単にガベージコレクションを停止させるだけでは、中断不可処理が繰り返し行なわれると、直ぐに空き容量が無くなって、フルガベージコレクションを行なわなければならない。したがって、フルガベージコレクションが極力実行されないように、インクリメンタルガベージコレクションのステップサイズを増加させる。これにより、インクリメンタルガベージコレクションの１回のステップで解放されるメモリ量が多くなるので、ヒープ領域１２ａにおいて不要となった領域を早く解放することができる。したがって、中断不可処理が中断する状態をできるだけ回避することができる。
【０１１６】
特に、ＨＭＩ機器１においては、画面切り替えのようなリアルタイム性を要求される処理が繰り返し実行される場合、画面切り替えの動作が遅くなるといった事態を極力発生させないようにすることができる。
【０１１７】
また、ガベージコレクション制御部８３は、ステップサイズに上限値を設け、ステップサイズが上限値を超えないようにしている。これにより、ヒープ領域１２ａにおいて不要となった領域が大きくなったときに、その解放処理に多くの時間が費やされるという不都合を回避することができる。
【０１１８】
また、ガベージコレクション制御部８３は、空き容量が中断不可処理を実行するのに足りない場合、フルガベージコレクションを実行するとともに、インクリメンタルガベージコレクションのステップサイズを初期値に戻す。具体的には、ガベージコレクション制御部８３は、中断不可処理が使用しようとするメモリ使用量が空き容量以上である場合、空き容量が中断不可処理を実行するのに足りないと判断する。
【０１１９】
フルガベージコレクションによって十分な空き容量が確保できた状態で通常処理が行なわれる場合、使用メモリ量が多くないにも関わらず、ステップサイズが増加したままでインクリメンタルガベージコレクションを実行すると、非効率的である。そこで、ステップサイズを初期値に戻すことにより、効率的にガベージコレクションを行なうことができる。
【０１２０】
また、ガベージコレクション制御部８３は、空き容量が中断不可処理を実行するのに足りない場合、空き容量に応じてフルガベージコレクションおよびインクリメンタルガベージコレクションのいずれかを選択的に実行する。具体的には、ガベージコレクション制御部８３は、中断不可処理のメモリ使用量とヒープ領域１２ａにおける空き容量との差が所定値以上である場合は、フルガベージコレクションを実行し、上記の差が所定値未満である場合は、インクリメンタルガベージコレクションを実行する。
【０１２１】
メモリ使用量と空き容量との差が小さい場合には、フルガベージコレクションを実行すると、必要以上に要して（無駄な時間が生じて）、中断不可処理が中断されることになる。したがって、この場合は、インクリメンタルガベージコレクションを実行して、上記の無駄な時間を削減することができる。これにより、無条件でフルガベージコレクションを実行するよりも、必要な空き容量を早く確保することができる。
【０１２２】
また、ガベージコレクション制御部８３は、上記のように、中断不可処理が実行されずにインクリメンタルガベージコレクションを再起動するとき以後に、ステップサイズ減少する。
【０１２３】
通常処理が実行されるときには、突発的な使用メモリ量の増加はあまり生じない。このような場合にステップサイズが増加したままでインクリメンタルガベージコレクションを実行すると、過度にヒープ領域１２ａの解放が行なわれることになり、通常処理の実行に影響を及ぼす。そこで、ステップサイズを一定期間ごとに徐々に減少することにより、インクリメンタルガベージコレクションによるメモリの解放量を減らして、過度に解放処理を行なわれないようにすることができる。
【０１２４】
また、ガベージコレクション制御部８３は、図７に示すように、中断不可処理に対するメモリ使用量を予測して、メモリ使用量の予測値が、ヒープ領域１２ａの空き容量を超える場合に、フルガベージコレクションを起動させる。
【０１２５】
上記のように、空き容量が中断不可処理を実行するのに足りない状態でフルガベージコレクションを実行する場合、中断不可処理の実行時にフルガベージコレクションが起動されることになり、中断不可処理が待たされる。画面切替のような中断不可処理を実行する場合、画面切替が実行されるか否かはオペレータの操作次第であるので、画面切替を頻繁に行なっている場合、その後切替が起こる可能性が高いと予測できる。そこで、中断不可処理が開始するまでの期間を利用して、予め予測しておいたメモリ使用量に基づいてフルガベージコレクションを起動する。これにより、中断不可処理の実行がフルガベージコレクションの終了まで待たされる時間を短縮することができる。
【０１２６】
一般に、中断不可処理を実行していない場合、ユーザは、ソフトウェアを利用している際に、操作をしていないときの処理が遅くなるよりも、操作に対する処理が遅くなる方が、利用しているソフトウェアが遅いソフトウェアであるという印象を持ちやすい。そこで、ユーザに遅いと感じさせないように、中断不可処理を行なう前に、上記のようにしてフルガベージコレクションを行なうことが効果的である。
【０１２７】
なお、無条件にフルガベージコレクションを実行する代わりに、前述のように、フルガベージコレクションおよびインクリメンタルガベージコレクションを選択的に実行してもよい。
【０１２８】
また、ガベージコレクション制御部８３は、インクリメンタルガベージコレクションが一定期間以上停止して動作をしていない場合、図６に示すように、インクリメンタルガベージコレクションを再開させる。これにより、中断不可処理が繰り返して行なわれる場合に、図３に示すメインルーチンにおいてガベージコレクションが実行されていない間に生じるメモリ容量不足を解消することができる。
【０１２９】
なお、本実施形態では、ＨＭＩ機器１を専用機として説明したが、汎用のコンピュータにＨＭＩプログラムを実行させることによりＨＭＩ機器として動作させてもよい。このようなＨＭＩ機器としては、制御対象の監視および制御を行うプログラマブル表示器、ＳＣＡＤＡ（Supervisory Control And Data Acquisition）のような監視・制御システムなどが該当する。
【０１３０】
また、本実施形態では、ＨＭＩ機器１について説明したが、ＨＭＩ機器１に限らず、汎用のＯＳ（Operating System）を実装したコンピュータ機器であってもよい。このようなコンピュータ機器としては、パーソナルコンピュータ、産業用コンピュータ、パネルコンピュータなどが挙げられる。このようなコンピュータ機器は、高性能のＣＰＵおよび大容量のメインメモリを搭載しているので、中断不可処理が頻発してもメモリ量の不足に陥ることは少ないかもしれない。しかしながら、マルチタスクによって複数のアプリケーションプログラムが実行されている状態で中断不可処理が頻発したときなどに本実施形態のガベージコレクション制御を適用すれば、メモリの解放が効率的に行なわれる。これにより、全体的な処理の効率を向上させることができる。
【０１３１】
〔ソフトウェアによる実現例〕
ＨＭＩ機器１の制御ブロック（特にＨＭＩ制御部８）は、ＣＰＵ１１を用いてソフトウェアによって実現されるが、集積回路（ＩＣチップ）等に形成された論理回路（ハードウェア）によって実現してもよい。
【０１３２】
前者の場合、ＨＭＩ機器１は、ＣＰＵ１１が、各機能を実現するソフトウェアであるプログラムの命令を実行し、上記プログラムおよび各種データがＣＰＵ１１で読み取り可能に記録されたユーザメモリ１４に記憶される。そして、ＣＰＵ１１が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体（通信ネットワークや放送波等）を介して上記コンピュータに供給されてもよい。なお、本発明の一態様は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【０１３３】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【０１３４】
１  ＨＭＩ機器（メモリ制御装置）
９  ガベージコレクション実行部
１２  メインメモリ（メモリ）
８３  ガベージコレクション制御部
８３３  メモリ使用量予測部
８３４  空き容量判定部
８３５  起動・停止制御部
８３６  ステップサイズ変更部（解放メモリ量変更部）
【図１】
2018106310.tif 000003
【図２】
2018106310.tif 000004
【図３】
2018106310.tif 000005
【図４】
2018106310.tif 000006
【図５】
2018106310.tif 000007
【図６】
2018106310.tif 000008
【図７】
2018106310.tif 000009
【図８】
2018106310.tif 000010