(57)【要約】【課題】  ガーベジコレクション（ＧＣ）機能を有する画像形成装置において、ジョブ実行中に出来る限りＧＣを発生させないようにした装置を提供する。【解決手段】  本発明の装置は、メモリ領域に割り当てられたプログラムの実行によりジョブを実行し、予め指定されたタイミングでＧＣ要求を出力する実行手段と、ＧＣ要求の受信に応答して、ＧＣを発生させるＧＣ発生手段とを備える。このタイミングとしては、ユーザがプログラムを選択した後のＵＩデバイスによるそのプログラムに関する画像表示への切り替え処理の実行時、プログラム実行終了時、プログラムが動作していないアイドル状態で、ハードウェアデバイスによる処理の実行時、ＵＩデバイスの省電力モードへの移行時のいずれかとされる。【選択図】図２
2009054016.tif 000002
【特許請求の範囲】
【請求項１】
プログラムが割り当てられたメモリ領域のうち、不要となったメモリ領域を回収して再利用可能にするガーベジコレクション（ＧＣ）機能を有する画像形成装置であって、
前記プログラムの実行によりジョブを実行するとともに、予め指定されたタイミングでＧＣ要求を出力するジョブ実行手段と、
前記ＧＣ要求の受信に応答して、ＧＣを発生させるＧＣ発生手段とを備える、画像形成装置。
【請求項２】
前記タイミングは、前記画像形成装置が備える表示デバイスによる画像表示の切り替え時、前記ジョブの終了時、前記ジョブ実行手段が動作していないアイドル状態で、かつ前記画像形成装置が備えるハードウェアデバイスによる処理実行時、前記表示デバイスの省電力モードへの移行時のいずれかである、請求項１に記載の画像形成装置。
【請求項３】
前記ＧＣ発生手段は、残メモリ量を調査し、前記残メモリ量が閾値以下である場合に前記ＧＣを発生させる、請求項１または２に記載の画像形成装置。
【請求項４】
前記ＧＣ発生手段は、前回のＧＣ終了時刻を保持し、前記ＧＣ終了時刻から前記ＧＣ要求受信時までの時間が閾値以上である場合に前記ＧＣを発生させる、請求項１または２に記載の画像形成装置。
【請求項５】
前記ＧＣ発生手段は、前回のＧＣ終了時から前記ＧＣ要求の受信ごとに実行ジョブ数をカウントし、前記実行ジョブ数が閾値以上になった場合に前記ＧＣを発生させる、請求項１または２に記載の画像形成装置。
【請求項６】
プログラムが割り当てられたメモリ領域のうち、不要となったメモリ領域を回収して再利用可能にするガーベジコレクション（ＧＣ）機能を有する画像形成装置において、ＧＣの発生によるパフォーマンス低下を抑制するための方法であって、
前記プログラムの実行によりジョブを実行する実行手段が予め指定されたタイミングでＧＣ要求を出力するステップと、
前記ＧＣ要求の受信に応答して、ＧＣ発生手段がＧＣを発生させるステップとを含む、方法。
【請求項７】
前記タイミングは、前記画像形成装置が備える表示デバイスによる画像表示の切り替え時、前記ジョブの終了時、前記ジョブ実行手段が動作していないアイドル状態で、かつ前記画像形成装置が備えるハードウェアデバイスによる処理実行時、前記表示デバイスの省電力モードへの移行時のいずれかである、請求項６に記載の方法。
【請求項８】
前記ＧＣを発生させるステップでは、残メモリ量を調査し、前記残メモリ量が閾値以下である場合に前記ＧＣを発生させる、請求項６または７に記載の方法。
【請求項９】
前記ＧＣを発生させるステップでは、前回のＧＣ終了時刻から前記ＧＣ要求受信時までの時間が閾値以上である場合に前記ＧＣを発生させる、請求項６または７に記載の方法。
【請求項１０】
前記ＧＣを発生させるステップでは、前回のＧＣ終了時から前記ＧＣ要求の受信ごとに実行ジョブ数をカウントし、前記実行ジョブ数が閾値以上になった場合に前記ＧＣを発生させる、請求項６または７に記載の方法。
【請求項１１】
請求項６〜１０のいずれか１項に記載の方法を実現するための画像形成装置で読み込み可能なＧＣ発生プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ガーベジコレクション（ＧＣ）の発生によるパフォーマンス低下を抑制する画像形成装置、ＧＣの発生によるパフォーマンス低下を抑制するための方法およびその方法を実現するためのプログラムに関する。
【背景技術】
【０００２】
キーボード入力や画面出力といった入出力機能やメモリの管理等、様々なアプリケーションソフトウェアから共通して利用される基本的な機能を提供し、システム全体を管理するソフトウェアとして、オペレーティングシステム（ＯＳ）が利用されている。このＯＳのメモリ管理機能の１つとして、プログラムが使用しなくなったメモリ領域やプログラム間に介在するメモリ領域を回収し、連続した利用可能なメモリ領域を増加させるガーベジコレクション（ＧＣ）機能が知られている。
【０００３】
Ｊａｖａ（登録商標）言語の実行環境、すなわちＪａｖａ（登録商標）仮想マシン（ＪＶＭ）では、ＪＶＭ自身がＧＣ機能を備えているため、プログラマが不要となったオブジェクトの消去を意識しなくても、このＧＣ機能によりオブジェクトが不要になった時点で自動的に回収し、そのメモリ領域を解放して再利用可能にする。このため、メモリ領域の誤解放やメモリリーク（解放漏れ）等の発生を有効に防止することができる。
【０００４】
一方、ＧＣ機能を有するパーソナルコンピュータ（ＰＣ）やサーバ装置では、任意のタイミングで一括してオブジェクトを消去し、メモリ領域を回収するため、そのＧＣ機能が動作している期間は、ＣＰＵが占有され、実行中のジョブ処理が中断してしまうといった問題があった。
【０００５】
そこで、ＧＣ機能によるメモリリーク等の発生を有効に防止しつつ、装置全体の中断時間を短縮する技術が提案されている（特許文献１〜５参照）。
【０００６】
特許文献１に記載の技術では、データを記憶する記憶ブロックを新規に確保する際に、そのデータが、ライフタイムが比較的短いデータか、比較的長いデータかを判定し、それによって格納するメモリ領域を分け、ライフタイムが比較的短いデータを格納したメモリ領域に対するＧＣの実行頻度を高くし、ライフタイムが比較的長いデータを格納したメモリ領域に対するＧＣの実行頻度を低くし、ＧＣに要する処理時間を総体的に短縮している。
【０００７】
特許文献２に記載の技術では、ＧＣの処理を、実行中のスレッドに設定された実時間度に応じてそのスレッドの処理を中断する間に、そのスレッド内で実行し、スレッドの実時間性を担保しつつ、最低限必要なＧＣを実行してヒープ領域の枯渇を防止している。
【０００８】
特許文献３に記載の技術では、メモリ使用状況データおよびヒープパラメータに基づいてメモリ使用状況シミュレーションを実行し、メモリ使用状況を最適化している。
【０００９】
特許文献４に記載の技術では、メモリを新世代と旧世代に区分し、オブジェクトを新世代に割り当て、新世代に格納する期間をオブジェクトのクラスに応じて決定し、その期間に基づいて新世代から旧世代に移動し、プログラムの起動時や実行中において不要なデータを格納する記憶領域の回収処理の処理時間を短縮し、効率的に行っている。
【００１０】
特許文献５に記載の技術では、リクエスト毎に一時的、反復的に生成される一時オブジェクトを再使用し、通信パターンを制限して、ＧＣの発生を抑制している。
【特許文献１】特開２００２−２７８８２８号公報
【特許文献２】特開２００４−２３４５４６号公報
【特許文献３】特開２００４−５４８６号公報
【特許文献４】特開２００６−１７１９２７号公報
【特許文献５】特開２００７−８６８３８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
上記のＧＣ機能は、ＰＣやサーバ装置に限らず、コピー機能、スキャナ機能、プリンタ機能といった複数の機能を搭載した複合機にも採用されている。複合機では、ファーストコピータイムや連続複写速度等がカタログ仕様として必要とされている。ここで、ファーストコピータイムとは、１枚の原稿を１枚だけコピーするときにかかる時間であり、連続複写速度とは、１枚の原稿を１分間にコピーすることができるコピー枚数である。
【００１２】
複合機等の画像形成装置は、図１に示すように、ＣＰＵに処理を実行させるためのソフトウェア１０と、ユーザからの入力を受け付けてソフトウェア１０へ送り、ソフトウェア１０からの更新を受けて画像描画を行うＵＩデバイス１１と、ソフトウェア１０からのリクエストを受けて処理を実行するプリンタやスキャナ等のエンジンデバイス１２と、ソフトウェア１０からパラメータの設定を受け付けて、Ａ／Ｄ変換処理、変倍処理、ディザ処理等の画像処理を実行するＩＰＵデバイス１３とを備える。
【００１３】
図１では、ＵＩデバイス１１が受け付けた入力を、ソフトウェア１０がイベント（keyInput）として受け取ることによりジョブを開始する。ソフトウェア１０は、エンジンデバイス１２へリクエストを送り、エンジンデバイス１２は、処理を実行する（ｔ１）。ソフトウェア１０は、設定されたパラメータに基づき画像処理を実行させるために、ＩＰＵデバイス１３にパラメータを送る（ｔ２）。ソフトウェア１０は、表示更新の指示をＵＩデバイス１１へ送り、ＵＩデバイス１１は、その指示に基づき画像を描画する（ｔ３）。ソフトウェア１０は、エンジンデバイス１２へリクエストを送り、エンジンデバイス１２は、処理を実行する（ｔ４）が、ＧＣが発生し、ジョブは中断される（ｔ５）。ＧＣが終了した後、ソフトウェア１０は、エンジンデバイス１２へリクエストを再度送り、エンジンデバイス１２は、処理を再度実行する（ｔ６）。ソフトウェア１０は、表示更新の指示をＵＩデバイス１１へ送り、ＵＩデバイス１１は、画像を描画して（ｔ６）、ジョブは終了する。
【００１４】
一般に、カタログ仕様では、ＧＣによる実行ジョブの中断時間ｔ５は考慮せず、ｔ１〜ｔ４とｔ６を加算した値が、処理時間として記載される。このため、ＧＣの発生により実行中のジョブが中断してしまうと、カタログ仕様を満たすことができなくなってしまう。ＧＣ機能を有する装置では、ＧＣがどのような状況でも発生し得るため、ジョブの中断を１００％回避することはできない。したがって、カタログ仕様を満たすためには、ジョブ実行中に出来る限りＧＣが発生しないようにしなければならない。
【００１５】
そこで、ＧＣ機能を有する画像形成装置において、ジョブ実行中に出来る限りＧＣを発生させないようにして、パフォーマンス低下を抑制することができる装置や方法の提供が望まれている。
【課題を解決するための手段】
【００１６】
本発明は、上記課題を解決するために、Ｊａｖａ（登録商標）ＶＭを含め、ＧＣ機能を備えるプラットフォームを搭載している画像形成装置において、ＧＣが発生した後、次のＧＣの発生までに時間的に相当の間隔があることを前提とし、予め指定されたタイミングでＧＣ要求を出力し、ＧＣ要求の受信に応答して強制的にＧＣを発生させる機能を備える。ＧＣ終了後のしばらくの間はＧＣが発生しないため、この間にジョブを実行することで、ジョブ実行時のパフォーマンス低下を抑制することができる。
【００１７】
すなわち、本発明では、プログラムが割り当てられたメモリ領域のうち、不要となったメモリ領域を回収して再利用可能にするガーベジコレクション（ＧＣ）機能を有する画像形成装置であって、プログラムの実行によりジョブを実行するとともに、予め指定されたタイミングでＧＣ要求を出力するジョブ実行手段と、ＧＣ要求の受信に応答して、ＧＣを発生させるＧＣ発生手段とを備える装置を提供することができる。
【００１８】
上記のタイミングとしては、ジョブ実行時のパフォーマンス低下を抑制するために、画像形成装置が備える表示デバイスによる画像表示の切り替え時、ジョブの終了時、ジョブ実行手段が動作していないアイドル状態で、かつ画像形成装置が備えるハードウェアデバイスによる処理実行時、表示デバイスの省電力モードへの移行時のいずれかとすることができる。表示デバイスは、図１でいうＵＩデバイス１１に相当するものであり、ハードウェアデバイスは、エンジンデバイス１２、ＩＰＵデバイス１３に相当するものである。なお、ジョブ実行手段が、プログラムの実行によりジョブを実行するとともに、予め指定されたタイミングでＧＣ要求を出力する機能を備えることで、ジョブ終了時やアイドル状態等のときに、ＧＣ要求を出力し、ＧＣを発生させることが可能となる。
【００１９】
上記のＧＣ発生手段は、残メモリ量（メモリサイズ）を調査し、残メモリ量が予め設定された閾値以下である場合にＧＣを発生させることができる。十分に残メモリ量がある場合、ＧＣが発生する可能性は低いが、残メモリ量が少なくなると、ＧＣが発生する可能性は高くなる。このＧＣは、一度発生すると、その後のしばらくの間はＧＣが発生しない。このため、残メモリ量が閾値以下である場合に強制的にＧＣを発生させることで、ＧＣが発生しない間にジョブを実行し、これにより、パフォーマンス低下を抑制することができる。
【００２０】
また、ＧＣ発生手段は、前回のＧＣ終了時刻を保持し、そのＧＣ終了時刻からＧＣ要求受信時までの時間が閾値以上である場合にＧＣを発生させることができる。上述したようにＧＣは、どのような状況でも発生し得る。また、前回のＧＣ終了時刻からの経過時間が長くなるほど、ＧＣが発生する可能性が高くなる。このため、その経過時間が閾値以上である場合に強制的にＧＣを発生させ、その後のＧＣが発生しない間にジョブを実行することができる。
【００２１】
上記では、前回のＧＣ終了時からＧＣ要求受信時までの時間としたが、実行ジョブ数をカウントし、その実行ジョブ数が閾値以上になった場合にＧＣを発生させることもできる。
【００２２】
本発明では、画像形成装置に加え、ＧＣの発生によるパフォーマンス低下を抑制するための方法も提供することができる。この方法は、予め指定されたタイミングでＧＣ要求を出力するステップと、ＧＣ要求の受信に応答して、ＧＣを発生させるステップとを含む。
【００２３】
また、本発明では、上記方法を実現するための画像形成装置可読なＧＣ発生プログラムを提供することもできる。
【発明を実施するための最良の形態】
【００２４】
本発明は、ＧＣが発生した後、次のＧＣの発生までに時間的に相当の間隔があること、すなわち、一度ＧＣが発生すると、しばらくの間はＧＣが発生しないことを前提とするものである。本発明の画像形成装置の１つの実施形態では、画像形成装置は、図１に示すソフトウェア１０、ＵＩデバイス１１、エンジンデバイス１２、ＩＰＵデバイス１３に加えて、ＧＣを強制的に発生させるＧＣジェネレータを備える。また、本実施形態では、画像形成装置は、Ｊａｖａ（登録商標）ＶＭを含め、ＧＣ機能を備えるプラットフォームを搭載している。
【００２５】
ソフトウェア１０は、ユーザからの入力を受けてエンジンデバイス１２へリクエストを送り、エンジンデバイス１２に処理を実行させる。また、ソフトウェア１０は、ＩＰＵデバイス１３へパラメータを送り、ＩＰＵデバイス１３に設定させ、設定されたパラメータを使用して画像処理を実行させる。さらに、ソフトウェア１０は、ＵＩデバイス１１から入力を受け付け、また、ＵＩデバイス１１へ表示画像を更新させるための指示を与える。例えば、アプリケーションを選択し、選択したアプリケーションにより処理を行う場合、ＵＩデバイス１１では画像表示を更新するために画像描画を行い、ＩＰＵデバイス１３では画像変換処理等を実行し、エンジンデバイス１２では印刷処理等を実行する。これらの処理は、一連の処理、すなわち１つのジョブであり、ソフトウェア１０は、このような一連の処理であるジョブを実行する。
【００２６】
なお、ソフトウェア１０は、画像形成装置全体を制御するＣＰＵにより実行されて上記処理を行うものである。したがって、ソフトウェア１０自体が実際に処理を実行するものではないが、説明を容易にするため、以下、ソフトウェア１０が処理を行うものとして説明する。
【００２７】
ＵＩデバイス１１は、操作部であり、ユーザからの入力を受け付け、画像描画を行うために、ＣＰＵおよびメモリを含む。エンジンデバイス１２は、スキャナ、プリンタ、ファックス、コピー機といったハードウェアを含む。ＩＰＵデバイス１３は、画像処理を実行するために、ＣＰＵ、ＡＳＩＣ、ＲＯＭ、ＲＡＭ等を備える。
【００２８】
図２を参照して、本実施形態の画像形成装置に用いられるソフトウェア１０およびＧＣジェネレータ１４について説明する。ソフトウェア１０は、上述した処理に加え、予め指定されたタイミングでＧＣ要求をＧＣジェネレータ１４へ出力するように構成される。ＧＣジェネレータ１４は、ソフトウェア１０からのＧＣ要求を受けて、ＧＣを発生させるように構成される。
【００２９】
図２では、ソフトウェア１０が、ソフトウェア１０内でイベント（ev）を発生し、このイベントによってＧＣ要求であるgcReq()を呼び出し、gcReq()をＧＣジェネレータ１４へ出力する。ＧＣジェネレータ１４は、gcReq()を受け取り、gcReq（）によりgc()を呼び出し、gc()によりＧＣを発生させる。gcReq()、gc()は、オブジェクト指向プログラミングにおいて、各オブジェクトがもっている自身に対する操作、すなわちメソッドである。
【００３０】
ＧＣを発生させたい時点でＧＣを発生させるために、ソフトウェア１０は、予め指定されたタイミングでＧＣ要求をＧＣジェネレータ１４へ出力する。また、ＧＣジェネレータ１４は、ＧＣ要求を受けて、強制的にＧＣを発生させる。これにより、例えば、ＧＣが終了した直後にジョブを実行することで、そのジョブ実行中におけるＧＣ発生を回避することができ、ジョブ実行時のパフォーマンス低下を抑制することができる。ここで、上記タイミングとしては、以下のタイミングとすることができる。
【００３１】
１つは、ユーザがアプリケーション（コピー／プリンタ／ファックス／スキャナ／ドキュメント・ボックス）を選択した時のＵＩデバイス１１によるそのアプリケーションに関する画像表示への切り替え処理の実行時である。アプリケーションの選択は、ユーザがアプリケーション切り替えキーを押すことにより行われ、画像表示の切り替えは、ＵＩデバイス１１がそのキーの押下に応答して、ユーザにより選択されたアプリケーションに関する画像表示へと切り替えることにより行われる。
【００３２】
この場合の処理を、図３を参照して詳細に説明すると、ＵＩデバイス１１がユーザから受け付けた入力を、ソフトウェア１０がイベント（keyInput）として受け取ることによりジョブを開始する。ソフトウェア１０は、表示更新の指示であるupdate()をＵＩデバイス１１へ送るジョブを実行する。ＵＩデバイス１１は、update()を受け取り、ユーザにより選択されたアプリケーションに関する画像描画を行うことにより新たな画像を表示する。
【００３３】
この画像描画は、ＵＩデバイス１１が備えるＣＰＵによる処理であり、ＧＣを実行するＣＰＵとは異なるため、ＧＣが発生したところでその影響を受けることはない。また、画像表示の切り替え処理の開始からユーザによる次の入力まで、人間の動作スピードからして時間的な間隔は十分にある。このため、この切り替え処理の実行時にＧＣを強制的に発生させることで、切り替え後からしばらくの間はＧＣの発生を抑制することができる。ＧＣの実行と、ＵＩデバイス１１による処理が並行して行われるが、図３に示すように、ＧＣの実行期間が長い場合、ＵＩデバイス１１への入力不可期間Ｔが発生する。しかしながら、その期間Ｔはわずかな期間であり、その間入力ができないにしても、十分に許容できる範囲内のものである。
【００３４】
２つ目は、アプリケーションプログラム上で実行されたジョブの終了時である。同一のアプリケーション上で連続してジョブを行う、例えば、あるユーザがコピーをとった後に、別のユーザがコピーをとるような場合、上記のようなアプリケーションの切り替えは発生しない。このため、上記のＵＩデバイスによる画像描画の間にＧＣを発生させるという方法は採用することができない。
【００３５】
図４を参照して詳細に説明すると、ソフトウェア１０は、ＩＰＵデバイス１３へexec()を送り、処理を実行させ、エンジンデバイス１２へもexec()を送り、処理を実行させる。エンジンデバイス１２は、ソフトウェア１０へ応答（event）を返し、ソフトウェア１０は、ＵＩデバイス１１へ、表示を更新させるためのupdate()を送る。また、エンジンデバイス１２は、処理が終了した旨の応答（event）を返し、ソフトウェア１０は、ＵＩデバイス１１へupdate()を送る。このupdate()の送信により、ソフトウェア１０はジョブを終了する。ジョブ実行中にはＧＣを実行させるのに十分な時間は存在しないが、このupdate()の送信からユーザによる次の入力までは、図４に示すように十分な時間が存在する。そこで、ジョブ終了時に、ソフトウェア１０がＧＣ要求を出力し、ＧＣジェネレータ１４がＧＣを強制的に発生させることで、ジョブ終了後のしばらくの間、ＧＣの発生を抑制することができる。
【００３６】
ＧＣの実行中、ＵＩデバイス１１による処理が並行して行われるが、図４に示すように、ＧＣの実行期間が長い場合、ＵＩデバイス１１への入力不可期間Ｔが発生する。しかしながら、その期間Ｔはわずかな期間であり、その間入力ができないにしても、十分に許容できる範囲内のものである。
【００３７】
３つ目は、画像形成装置が備えるハードウェアデバイス、すなわちＵＩデバイス１１、エンジンデバイス１２、ＩＰＵデバイス１３が実行中で、アプリケーションプログラムが動作していないアイドル状態にある時である。図５を参照して詳細に説明すると、ソフトウェア１０は、エンジンデバイス１２およびＩＰＵデバイス１３へexec()を送り、処理を実行させる。エンジンデバイス１２は、処理が終了した後、ソフトウェア１０へ応答（event）を返す。ソフトウェア１０は、その応答を受けて、update()をＵＩデバイス１１へ送る。図５に示すシーケンスでは、エンジンデバイス１２による処理が時間を要し、その処理の実行開始からソフトウェア１０へ応答を返すまでに十分な時間がある。また、この間、ソフトウェア１０は動作しておらず、アイドル状態とされている。
【００３８】
このため、ＧＣの影響が許容できるポイントあるいはハードウェア処理中で影響がでないポイント、すなわち、エンジンデバイス１２が処理を実行している間に、強制的にＧＣを発生させ、次のＧＣの発生までの間隔を開けることで、ジョブ実行中にＧＣが発生しないようにして、ファーストコピータイムや連続複写速度等のカタログ仕様の達成を図ることができる。
【００３９】
４つ目は、ＵＩデバイス１１の省電力モードへの移行時である。省電力モードには様々なものがあるが、ここではＵＩデバイス１１のみをＯＦＦにするモードで、省電力状態とはＵＩデバイス１１のみがＯＦＦとなる状態である。この省電力状態は、事実上、ユーザ入力がない状態であるため、ここでＧＣを強制的に発生させることによる影響は少ないものである。
【００４０】
図６を参照して詳細に説明すると、ソフトウェア１０は、省電力モードへ移行するため、changeMode()というイベントを発生し、off()を呼び出し、ＵＩデバイス１１へ送る。ＵＩデバイス１１は、off()を受け取り、ＵＩデバイス１１の電源をＯＦＦにする。ＵＩデバイス１１の電源をＯＦＦにすると、ユーザからの入力はない状態であるため、ＧＣを機能させるための十分な時間がある。このため、省電力モードへの移行時にＧＣを発生させることができる。これにより、以降のジョブ実行中におけるＧＣの発生をしばらくの間抑制することができる。なお、ＵＩデバイス１１がＯＦＦでもネットワーク経由で処理を実行している場合には、ソフトウェア１０によるジョブが実行中であるため、このタイミングではＧＣを発生させず、例えば、ジョブ終了時にＧＣを発生させる必要がある。
【００４１】
次に、ＧＣジェネレータ１４の実施形態を、図面を参照して説明する。ＧＣジェネレータ１４の第１実施形態としては、図２に示すような、ＧＣ要求に応答して、ＧＣを発生させるものが挙げられる。このＧＣジェネレータ１４は、ＧＣ要求に応答して、ＧＣを発生させる機能を有するのみとされている。
【００４２】
ＧＣジェネレータ１４の第２実施形態としては、ＧＣ要求を受けた時点でのヒープ領域内の残メモリ量を調査し、残メモリ量が閾値以下であるか否かを確認し、閾値以下である場合にのみ、ＧＣを発生させるものが挙げられる。ヒープ領域は、用途に関係なく自由に確保することができるメモリ領域である。閾値は、画像形成装置の初期値として与えられる固定値であってもよいし、画像形成装置の稼働中にユーザが変更可能なものであってもよい。ただし、稼働中に変更した場合、ソフトウェア１０は、その直後に、ＧＣジェネレータ１４に対してＧＣ要求を行う。これは、残メモリ量が変更された閾値以下であるか否かを確認し、閾値以下である場合にはＧＣを発生させなければならないからである。
【００４３】
図７を参照して詳細に説明する。まず、ソフトウェア１０は、イベント（ev）を発生させ、そのイベントによりgcReq()を呼び出す。ソフトウェア１０は、ＧＣを発生させたいポイントで、イベントを発生するが、このイベントに閾値の変更を含むことができる。ソフトウェア１０は、gcReq()をＧＣジェネレータ１４へ出力する。ＧＣジェネレータ１４は、gcReq()を受け取り、gcReq()によりcheckFreeSpace()というメソッドを呼び出し、残メモリ量（size）を調べる。それが終了すると、その残メモリ量が閾値（criterion）以下であるかを確認する処理を選択する。その処理において残メモリ量が閾値以下である場合に、gc()メソッドを呼び出し、gc()メソッドによりＧＣを発生させる。
【００４４】
ソフトウェア１０がイベントを発生させ、ＧＣ要求を出力するタイミングは、上述した、ユーザがアプリケーションプログラムを選択した後のＵＩデバイス１１がそのアプリケーションプログラムに関する画像表示への切り替え処理を実行している時、実行ジョブの終了時、ソフトウェア１０が動作していないアイドル状態で、かつエンジンデバイス１２、ＩＰＵデバイス１３が処理を実行している時、ＵＩデバイス１１が省電力モードへ移行した時のいずれかとすることができる。
【００４５】
ＧＣジェネレータ１４の第３実施形態としては、前回（直前）のＧＣ終了時刻を保持し、そのＧＣ終了時刻からＧＣ要求を受けた時点までの時間が、閾値以上であるかを確認し、閾値以上である場合にのみＧＣを発生させるものが挙げられる。このＧＣジェネレータ１４では、装置起動時に、その起動時刻をＧＣ終了時刻として初期設定し、実際のＧＣ終了時にＧＣ終了時刻を更新する。
【００４６】
図８を参照して詳細に説明する。ソフトウェア１０は、ＧＣを発生させたい時点で、ソフトウェア１０内でイベント(ev)を発生させる。ソフトウェア１０は、イベント発生によりgcReq()を呼び出し、gcReq()をＧＣ要求としてＧＣジェネレータ１４へ出力する。ＧＣジェネレータ１４は、保持している前回のＧＣ終了時刻（GCTime）を取り出し、そのＧＣ終了時刻からgcReq()を受信した時刻（currentTime）までの時間を計算し、その時間が閾値（criterion）以上であるかを確認する処理を選択する。その処理において閾値以上である場合に、ＧＣジェネレータ１４は、gc()メソッドを呼び出し、gc()メソッドによりＧＣを発生させる。
【００４７】
この場合も、ソフトウェア１０がイベントを発生させ、ＧＣ要求を出力するタイミングは、ユーザがアプリケーションプログラムを選択した後のＵＩデバイス１１がそのアプリケーションプログラムに関する画像表示への切り替え処理を実行している時、実行ジョブの終了時、ソフトウェア１０が動作していないアイドル状態で、かつエンジンデバイス１２、ＩＰＵデバイス１３が処理を実行している時、ＵＩデバイス１１が省電力モードへ移行した時のいずれかとすることができる。
【００４８】
ＧＣジェネレータ１４の第４実施形態としては、前回のＧＣ終了時からＧＣ要求の受信ごとに実行ジョブ数をカウントし、実行ジョブ数が閾値以上になった場合にＧＣを発生させるものが挙げられる。このＧＣジェネレータ１４は、カウントされた実行ジョブ数を保持し、ＧＣ終了時にその実行ジョブ数を０にクリアする。
【００４９】
図９を参照して詳細に説明すると、ソフトウェア１０は、ＧＣを発生させたい時点で、イベント（ev）を発生させ、そのイベントの発生によりgcReq()を呼び出し、ＧＣジェネレータ１４へ出力する。ＧＣジェネレータ１４は、gcReq()を受信するたびにjobCount()を呼び出し、実行ジョブ数をカウントする。また、ＧＣジェネレータ１４は、カウントした実行ジョブ数（jobcount）が閾値（criterion）以上であるかを確認する処理を選択する。ＧＣジェネレータ１４は、その処理において実行ジョブ数が閾値以上になった場合に、gc()メソッドを呼び出し、gc()メソッドによりＧＣを発生させる。ＧＣ終了後、ＧＣジェネレータ１４は、clearJobCount()を呼び出し、保持している実行ジョブ数を０にクリアし、処理を終了する。
【００５０】
この場合も、ユーザがアプリケーションプログラムを選択した後のＵＩデバイス１１がそのアプリケーションプログラムに関する画像表示への切り替え処理を実行している時、実行ジョブの終了時、ソフトウェア１０が動作していないアイドル状態で、かつエンジンデバイス１２、ＩＰＵデバイス１３が処理を実行している時、ＵＩデバイス１１が省電力モードへ移行した時のいずれかとすることができる。
【００５１】
本発明では、ＧＣの発生によるパフォーマンス低下を抑制するための方法およびこの方法を実現するためのＧＣ発生プログラムを提供することができる。このプログラムは、画像形成装置で読み込み可能な記録媒体に格納して提供することができる。記録媒体としては、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、ＭＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＷ、ＤＶＤ−ＲＡＭ、フラッシュメモリ等を挙げることができる。
【００５２】
なお、上記方法は、ユーザがアプリケーションプログラムを選択した後のＵＩデバイス１１がそのアプリケーションプログラムに関する画像表示への切り替え処理を実行している時、実行ジョブの終了時、ソフトウェア１０が動作していないアイドル状態で、かつエンジンデバイス１２、ＩＰＵデバイス１３が処理を実行している時、ＵＩデバイス１１が省電力モードへ移行した時といった予め指定されたタイミングで、ＧＣ要求を出力するステップと、ＧＣ要求の受信に応答して、ＧＣを発生させるステップとを含む。
【００５３】
これまで本発明を上述した実施形態をもって説明してきたが、本発明は上述した実施形態に限定されるものではなく、他の実施形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。したがって、ＧＣを発生させるタイミングとして、４つのタイミングを例示したが、本発明の作用・効果を奏する限り、これら４つのタイミングに限定されるものではないものである。
【図面の簡単な説明】
【００５４】
【図１】従来の画像形成装置の構成例を示した図。
【図２】本実施形態の画像形成装置の構成および処理の流れを示した第１シーケンス図。
【図３】本実施形態の画像形成装置におけるＧＣ発生の第１タイミング図。
【図４】本実施形態の画像形成装置におけるＧＣ発生の第２タイミング図。
【図５】本実施形態の画像形成装置におけるＧＣ発生の第３タイミング図。
【図６】本実施形態の画像形成装置におけるＧＣ発生の第４タイミング図。
【図７】本実施形態の画像形成装置の構成および処理の流れを示した第２シーケンス図。
【図８】本実施形態の画像形成装置の構成および処理の流れを示した第３シーケンス図。
【図９】本実施形態の画像形成装置の構成および処理の流れを示した第４シーケンス図。
【符号の説明】
【００５５】
１０…ソフトウェア、１１…ＵＩデバイス、１２…エンジンデバイス、１３…ＩＰＵデバイス、１４…ＧＣジェネレータ
【図１】
2009054016.tif 000003
【図２】
2009054016.tif 000004
【図３】
2009054016.tif 000005
【図４】
2009054016.tif 000006
【図５】
2009054016.tif 000007
【図６】
2009054016.tif 000008
【図７】
2009054016.tif 000009
【図８】
2009054016.tif 000010
【図９】
2009054016.tif 000011